代码混淆时遇到有许多坑,记录下以备以后查看。
首先需要在project.properties里加上
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt。
${sdk.dir}对应的是本地sdk路径。
然后在proguard-project.txt里添加混淆规则。proguard-project.txt实际上是在${sdk.dir}基础上继续添加的。
开头就有这个提示:
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
具体添加的规则如下:
#四大组件不能混淆
-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.view.View {*;}
#adapter也不能混淆
-keep public class * extends android.widget.BaseAdapter {*;}
# v4 包的混淆
#-libraryjars ./libs/android-support-v4.jar
#-dontwarn android.support.**
-dontwarn android.support.v4.**
-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
# universal-image-loader 混淆
-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }
#xutils相关 注意实际的名字
-libraryjars libs/xUtils-2.6.8.jar #xutils的jar包不要混淆
-keep class com.lidroid.** { *; } #xutils包下所有类不要混淆,包括类里面的方法
-keep class * extends java.lang.annotation.Annotation { *; }#注解包下的所有内容不要混淆,ViewUitls有用到
# 高德地图sdk混淆 注意实际的名字
-libraryjars libs/Android_Location_V1.3.1.jar
-libraryjars libs/Android_3DMap_V2.4.0.jar
-libraryjars libs/Android_Location_V1.3.1.jar
-dontwarn com.amap.api.**
-dontwarn com.a.a.**
-dontwarn com.autonavi.**
-keep class com.amap.api.** {*;}
-keep class com.autonavi.** {*;}
-keep class com.a.a.** {*;}
#百度播放器
-libraryjars libs/cyberplayer-sdk.jar
-dontwarn com.baidu.**
-keep class com.baidu.** { *;}
# Gson
#--------------------begin--------------------------------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
#keep的是项目真实的model包
-keep class com.xx.xx.model.** { *; }
##---------------End: proguard configuration for Gson ----------
#实现Serializable接口的不混淆
-keepnames class * implements java.io.Serializable