1.使用混淆build.gradle
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
2.配置规则proguard-rules.pro
-keep class com.alibaba.fastjson.**{*; } #不混淆类
-dontwarn com.alibaba.fastjson.** #编译时不警告
-ignorewarnings #忽略所有警告
3.外部第三方jar,不配置规则默认是混淆
a)配置规则
-libraryjars src/main/lib/xxx.jar #已去除,和build.gradle里引入包的规则重复。保留会报以下错误
The same input jar [/xx/xxx.jar] is specified twice.
和以下引入冲突build.gradle
dependencies {
compile files('src/main/lib/xxx.jar')}
b)去掉混淆的类,可以点击xxx.jar查看里面的包,然后添加类似以下规则
-dontwarn org.apache.log4j.**
-keep class org.apache.log4j.** { *; }
编译:gradle assemblerelease
4.查看使用混淆编译出错的堆栈
混淆编译后会生成mapping.txt文件,使用<sdk_root>/tools/proguard/的retrace脚本(window下时retrace.bat,linux和mac是retrace.sh):
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
实际使用体验,对必现问题还是编译debug非混淆的查看