混淆打包

来源:互联网 发布:淘宝联盟怎么赚取佣金 编辑:程序博客网 时间:2024/06/04 23:32

ProGuard的四个功能:

1.压缩;

2.优化;

3.混淆;

4.预检;

详细注释的模本提供如下:

# 一、基本指令 start------------------------------------------------------------## 1.代码混淆压缩比,在0-7之间,默认为5,一般不需要改-optimizationpasses 5# 2.混淆时候不使用大小写混合,混淆后的类名为小写-dontusemixedcaseclassnames# 3.指定不去忽略非公共的类-dontskipnonpubliclibraryclasses# 4.指定不去忽略非公共的库的类的成员-dontskipnonpubliclibraryclassmembers# 5.不做预校验,preverify 是 proguard的4个步骤之一# Android 不需要 preverify, 去掉这一步可加快混淆速度-dontpreverify# 6.有了 verbose 这句话,混淆后就会生成映射文件# 包含有类名 -> 混淆后类名的映射关系# 然后使用printmapping 指定映射文件的名称-verbose-printmapping proguardMapping.txt# 7.指定混淆时采用的算法,后面的参数是一个过滤器# 这个过滤器是谷歌推荐的算法,一般不改变-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# 8.保护代码中的Annotation不被混淆# 在这JSON实体映射时非常重要,比如 fastJson-keepattributes *Annotation*  # 9.避免混淆泛型,# 这在JSON实体映射时非常重要,比如 fastJson-keepattributes Signature  # 10.抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable  # 一、基本指令 end--------------------------------------------------------------## 二、 要保留的东西 start--------------------------------------------------------## 11.保留所有的本地 native 方法不被混淆-keepclasseswithmembernames class * {native <methods>;}# 12.保留了继承自 Activity、Application这些类的子类# 因为这些子类都有可能被外部调用# 比如说,第一行就保证了所有Activity的子类不要被混淆-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-keep public class com.android.vending.licensing.ILicensingService# 13 如果有引用 android-support-v4.jar包,可以添加下面这行-keep public class com.tuniu.app.ui.fragment.** {*;}# 14.保留在 Activity中的方法的参数是view的方法# 从而我们在 layout 里面编写 onClick就不会被影响-keepclassmembers class * extends android.app.Activity{public void *(android.view.View);}# 枚举类不能被混淆-keepclassmembers enum * {      public static **[] values();      public static ** valueOf(java.lang.String);  }# 保留自定义控件(继承自View)不被混淆-keep public class * extends android.view.View{*** get*();void set*(***);public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);  }# 17.保留 Parcelable 序列化的类不被混淆-keep class * implements android.os.Parcelable {    public static final android.os.Parcelable$Creator *;  }# 18.保留 Serializable 序列化的类不被混淆-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();}# 19.对于R(资源)下的所有类及其方法,都不能被混淆-keep class **.R$ {*;}# 20.对于带有回调函数 onXXEvent 的,不能被混淆-keepclassmembers class * {void *(**On*Event);}# 二、 要保留的东西 end----------------------------------------------------------#




1 0
原创粉丝点击