• Android 混淆proguard的实现(图文)


    1、  Eclipse中的project编译执行后,在文件夹bin以下有生成一些文件,当中classes.dex是未经过混淆生成的。而我们要混淆的话,就要又一次生成一个混淆过的classes.dex。本文主要讲如何手动生成混淆proguard

    2、  生成一个混淆过的classes.dex:要先对文件夹bin以下的classes文件夹(在Eclipse中看不到,系统文件管理中可查看)的class文件打包成jar, 再对jar进行proguard混淆,混淆后再用android dx 命令生成混淆的classes.dex

    3、  class文件打包成jar:控制台CMD进入classes文件夹,调用jar cvfM classes.jar android cn com,当中classes.jar是你要生成的jar包名称,android cn com 是指classes以下的文件夹

    4、  jar进行proguard混淆,首先确定你的project已经有混淆文件proguard.cfg。在android sdk文件夹下找到:C:android-sdk-windows oolsproguardinproguardgui.bat

    Android命令行打包,多渠道打包,加上混淆proguard的实现 - liangroger - liangroger的个人主页
     

    InputOutput选项中,选择你的Add input…文件,上面打好的classes.jarAdd output命名你的输出混淆jar(classes_out.jar),在Library jars,wars,ears,zips and directories一栏中Add进你选择编译的android sdk版本号源包(C:android-sdk-windowsplatformsandroid-7android.jar),再加入你的project中libs引用的第三方jar

     

    点击“process”,再点击“save configuration”,在弹出的对话框中,输入要保存的配置文件名(这里我的是test.pro),最后点击保存

    Android命令行打包,多渠道打包,加上混淆proguard的实现 - liangroger - liangroger的个人主页
     

    用编辑器编辑刚才保存下来的“test.pro”,用记事本什么都能够。要里面有关的proguard信息替换成你project中定好的proguard.cfg内容,保存。

    又一次打开progrard,运行 bin文件夹下的proguardgui.bat

       点击第一个选项“Proguard”,再点击“Load configuration”,选择我们刚才保存的“test.pro”进行载入。

      

    Android命令行打包,多渠道打包,加上混淆proguard的实现 - liangroger - liangroger的个人主页
     

    開始混代码,点击右边“process”,再点击“process!”

    在等待处理完毕后,输出的“classes_out.jar”,就是混过的jar包。

    以上有关使用proguardgui.bat的參照自:http://java-server.iteye.com/blog/1166114

     

    5、  对已经混淆的classes_out.jar包,放进project的bin文件夹下,生成classes.dex

    //android sdk文件夹下的platform-toolsdx.bat

    事实上也能够直接用我之前公布的打包工具中的createUnsignedApk这种方法。

    參看:http://blog.csdn.net/hytfly/article/details/24458133

    这样生成classes.dex然后在签名打包的,就是混淆以后的代码了。

    6.为了方便,事实上能够自己也写到那个打包工具中去打包。自己生成classes.jar和out.jar,然后再自己主动打包。分享两个方法:

    /**
         * 在bin下生成纯净的classes.jar文件
         */
        public static void createJar(){
        	try{
                System.out.println("create jar start");
                Process process = null;
                String cmd;
                //相当于先cd到 -C的文件夹下,然后执行没有C的这部分语句,注意.代表当前文件夹
                cmd = "cmd.exe /C jar cvf "+PROJECT_PATH+"bin\classes.jar "
                		+"-C "+PROJECT_PATH+"bin\classes .";
                System.out.println(cmd);
                process = Runtime
                        .getRuntime()
                        .exec(cmd); // 生成jar文件
                new MyThread(process.getErrorStream()).start();
    
                new MyThread(process.getInputStream()).start();
                process.waitFor();
                process.destroy();
                System.out.println("create jar over"); // 一条渠道的打包完毕。文件会输出到指定文件夹
            }catch(Exception e){
                e.printStackTrace();
                System.exit(0);
            }
        }
        
        /**
         * 在bin下生成混淆后的classes_out.jar文件(在PROGUARD_PATH配置文件里写)
         * 执行proguard程序假设报错,请在cmd查看错误,可能是路径问题,自己改动proguard.bat文件
         */
        public static void createProguardJar(){
        	try{
                System.out.println("create ProguardJar start");
                File file=new File(PROGUARD_PATH);
                if(!file.exists()) System.out.println("not found "+PROGUARD_PATH);
                file=new File(PROJECT_PATH+"bin\classes_out.jar ");
                if(file.exists()) file.delete();
                Process process = null;
                String jarsigner;
                jarsigner = androidSDK_PATH+"tools\proguard\bin\proguard.bat " +
                		"-include "+PROGUARD_PATH;
                System.out.println(jarsigner);
                process = Runtime
                        .getRuntime()
                        .exec(jarsigner); // 生成混淆后的jar文件
                new MyThread(process.getErrorStream()).start();
    
                new MyThread(process.getInputStream()).start();
                process.waitFor();
                process.destroy();
                System.out.println("create ProguardJar over"); 
            }catch(Exception e){
                e.printStackTrace();
                System.exit(0);
            }
        }

    再分享一下proguard.pro配置文件的一些方法:http://blog.csdn.net/yunyu5120/article/details/13024359 这个老兄写的ok了。

  • 相关阅读:
    CodeForces 500C New Year Book Reading
    CodeForces 460B Little Dima and Equation 枚举
    CodeForces 451B Sort the Array
    【jquery】jQuery实现轮播图
    【IDEA】IDEA技巧记录
    【eclipse】日常使用eclipse记录
    【SSM】spring配置文件中读取配置文件的三种方式
    【Git】IDEA克隆和提交项目于码云
    semantic UI—表单验证
    【spring Data Jpa】JPA生成数据库表
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3997169.html
Copyright © 2020-2023  润新知