您的位置:首页 > 移动开发 > Android开发

Android日志:代码混淆,使用说明

2014-11-21 11:27 453 查看
主要先简单的介绍三个主要文件,在sdk下的proguard里面:  我的SDK路径为H:\Android\android-sdk-windows\tools\proguard

    proguard-android.txt//系统配置好一些默认选项,考虑的比较详细,最好不要修改

    proguard-android-optimize.txt//系统配置好一些默认选项,考虑的比较详细,最好不要修改

    proguard-project.txt//加入一些保持,或者说不希望被混淆的包、类或者方法等

如何使用:

    每一个Eclipse项目生成都会生成两个文件,如果要混淆必须配置这两个:

        proguard-project.txt

        project.properties

        里面的英文介绍就不多少了,直接操作

        步骤一:打开project.properties

            #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-                project.txt

            去掉这一句前面的#,就相当于一个开关,告诉编译器,我要混淆.如果没有用到以下内容,就可以直接打包.系统会自动帮你混淆.但是大部分程序都用到了第三方包,所以我们的自己配置 proguard-project.txt这个文件.请看步骤二.

    注意: 只有在生成release版本的apk时,混淆配置才会起作用,debug版本的apk不会进行混淆。

           需要自己配置的包括:

只在 AndroidManifest.xml 引用的类

从JNI调用的方法

动态引用的字段和方法

第三方包

            默认的
proguard.cfg
文件试图掩盖一般情况下,但你可能会遇到的异常,如
ClassNotFoundException的
,这发生在ProGuard的除掉整个类,你的应用程序调用。

        步骤二:配置proguard-project.txt,加入需要保持的.jar包和以上需要配置的内容

            # Add any project specific keep options here:

            在这一句话下面,添加配置内容

            # If your project uses WebView with JS, uncomment the following

            如果用到WebView with JS,打开一下五个#

            # and specify the fully qualified class name to the JavaScript interface

            # class:

            #-keepclassmembers class fqcn.of.javascript.interface.for.webview {

            #   public *;

            #}

        步骤三:在步骤二中添加配置内容的地方,手动天骄配置,一般以"keep"开头.

            添加第三方依赖包

                例如:添加android-support-v4.jar依赖包

            
    -keep 
interface
 
android.support.v4.**{*;}


            


        不混淆某个类的子类,某个接口的实现

            例如:不混淆com.example.Test类的子类

        
        -keep 
public
 
class
 
extends
 
com.example.Test


                例如:不混淆com.example.TestInterface的实现     

            不混淆某个类的特定的函数

                
-keepclassmembers 
class


            不混淆某个包所有的类或指定的类

                例如,不混淆package com.example下的所有类/接口

               
-keep 
class
 
com.example.**
{ * ; }


    
            例如,不混淆com.example.Test类:


    
            -keep 
class
 
com.example.Test
{ * ; }
[/code]

    
            如果希望不混淆某个接口,则把上述命令中的class替换为interface即可。
[/code]

            不混淆某个类的构造函数
[/code]

              例如:不混淆Test类的构造函数:

            

自己在混淆时遇到的问题解决方法(有点困了,就不多写了):

        1.尽量不要去混淆实体Modle

        2.用到反射的类和方法不要混淆

        3.可以运用反编译检查混淆结果,也可以发现问题





欢迎大家访问我的个人网站 萌萌的IT人
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android代码混淆