参考:
http://www.cnblogs.com/sunzn/archive/2013/03/06/2946952.html
http://www.apkbus.com/android-240707-1-1.html
1、在项目根目录找到project.properties文件,将下图中圈出来的代码注释去除,即申明我们的混淆文件为proguard-project.txt:
2、在项目根目录找到proguard-project.txt文件,按需求添加修改以下代码:
# 指定代码的压缩级别 -optimizationpasses 5 # 不使用大小写混合 -dontusemixedcaseclassnames # 不混淆第三方jar -dontskipnonpubliclibraryclasses # 混淆时不做预校验 -dontpreverify # 混淆时记录日志 -verbose # 混淆时所采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 申明外部jar包不被混淆 -libraryjars libs/alipay.jar # 不需要混淆的部分,如系统组件和API的类: -keep public class * extends android.app.Fragment -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class * extends android.support.v4.** # 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类 # 没有正确引用。如果不配置的话,系统就会报错 -dontwarn android.support.** -dontwarn com.alibaba.fastjson.** -dontwarn org.eclipse.persistence.** -dontwarn com.amap.api.** -dontwarn javax.persistence.** # 指定的类成员被保留 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); }
3、上面注释说的挺详细的,但重要的是以下几点:
(1) 这里申明的jar包只能是本项目中引用的,项目引用的其他工程中的jar包,无需在此混淆文件中申明:
# 申明外部jar包不被混淆 -libraryjars libs/alipay.jar
(2)以下申明需要根据自己项目中引用的jar包去添加,例如我就是先不添加,直接导出apk文件,这时在Console中我们可以看到报错信息,再逐一添加报错的类路径,例如com.amap.api.**就是申明com.amap.api.xxx都不会被混淆:
# 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类 # 没有正确引用。如果不配置的话,系统就会报错 -dontwarn android.support.** -dontwarn com.alibaba.fastjson.** -dontwarn org.eclipse.persistence.** -dontwarn com.amap.api.** -dontwarn javax.persistence.**
4、最后,是混淆后反编译看到的结果,其中的类名、方法名、变量名,都自动混淆成别人看不明白的名称:
时间: 2024-10-07 19:24:25