Proguard

启用Proguard(使用Gradle编译)

build.gradle文件中使用minifyEnabled属性来启用或禁用Proguard.如:

  android {

   ...

 

    buildTypes {

        release {

           minifyEnabled true

           proguardFiles getDefaultProguardFile('proguard-android.txt'),

           'proguard-rules.pro'

        }

    }

  }

其中的 getDefaultProguardFile('proguard-android.txt')这个函数用来获取Android SDK中tools/proguard/文件夹下的ProGuard的默认配置。另外Android Studio在模块的根目录下添加了 proguard-rules.pro文件,以便开发者为当前模块添加自定义的ProGuard规则。

配置ProGuard

有些特殊的情况不能被混淆,如:

AndroidManifest.xml文件中引用的类

JNI中调用到的方法

动态引用的方法和变量

否则会在运行时找不到这些类或方法。

可以通过在ProGuard配置文件中添加 -keep来避免被混淆,如:

-keep public class <MyClass>

 更多的命令和选项请参考ProGuard Manual .


解密混淆后的堆栈

ProGuard运行时会生成mapping.txt文件,显示混淆前后的类的比对。

可以使用 <sdk_root>/tools/proguard/ 文件夹下的 retrace.bat(Linux or Mac OS X 中是 retrace.sh )来将混淆后的堆栈转换为可读的信息。使用方法如下:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt


对已发布的应用程序的调试考虑

为防止mapping.txt文件被覆盖,需要为发布的每一个版本保存该文档以便debug时定位。如通过添加版本号来修改文件的名字。




你可能感兴趣的:(Proguard)