编写Android Proguard File
21 Nov 2014
ProGuard的常用语法
proguard更多语法
注意下列类不能进行混淆:
(1)、反射用到的类
(2)、在AndroidManifest中配置的类(Activity、Service等的子类及Framework类默认不会进行混淆)
(3)、Jni中调用的类
常用编写
# Obfuscation parameters:
#-dontobfuscate
-useuniqueclassmembernames
-keepattributes SourceFile,LineNumberTable
-allowaccessmodification
#用到反射及注解需要加上下面三个规则
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
#不混淆Parcelable的子类,防止android.os.BadParcelableException
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
#不混淆Serializable的子类
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
一般填上上面的即可混淆了,不过大部分代码都会被混淆掉,在编译的时候可能会报错,由于现在大部分都会用到
比较多的开源库,一般开源库会给出混淆的选项,只要添加给出的混淆选项即可。只需要注意两点即可,一就是用到
GSON之类的库的时候需要保证自己的数据实体结构类不被混淆,不然会无法自动解析。二就是如果有用到WEBView的JS调用也需要保证写的接口方法不会混淆,下面给出一些常用库文件的混淆代码规则编写实例。
GSON Proguard Example
然后就是gradle的设置了
一般用以上的配置就可以了,如果编译的时候还报错误就根据上面的规则一个一个解决就可以。