APP开发实战111-ProGuard指令介绍

来源:互联网 发布:org.apache.http.util 编辑:程序博客网 时间:2024/05/22 00:43

28.2ProGuard指令介绍

(参考:http://www.cnblogs.com/cr330326/p/5534915.html

http://blog.csdn.net/ljd2038/article/details/51308768)

1基本指令:

#代码混淆压缩比,在0~7之间,默认为5,一般不做修改

-optimizationpasses5

 

#混合时不使用大小写混合,混合后的类名为小写

-dontusemixedcaseclassnames

 

#指定不去忽略非公共库的类

-dontskipnonpubliclibraryclasses

 

#这句话能够使我们的项目混淆后产生映射文件

#包含有类名->混淆后类名的映射关系

-verbose

 

#指定不去忽略非公共库的类

-dontskipnonpubliclibraryclassmembers

 

#不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

-dontpreverify

 

#保留Annotation不混淆

-keepattributes*Annotation*,InnerClasses

 

#避免混淆泛型

-keepattributesSignature

 

#抛出异常时保留代码行号

-keepattributesSourceFile,LineNumberTable

 

#指定混淆是采用的算法,后面的参数是一个过滤器

#这个过滤器是谷歌推荐的算法,一般不做更改

-optimizations!code/simplification/cast,!field/*,!class/merging/*

 

2APP中不能混淆的一些内容:

#保留使用的四大组件,自定义的Application等等这些类不被混淆

#因为这些子类都有可能被外部调用

-keeppublic class * extends android.app.Activity

-keeppublic class * extends android.app.Appliction

-keeppublic class * extends android.app.Service

-keeppublic class * extends android.content.BroadcastReceiver

-keeppublic class * extends android.content.ContentProvider

-keeppublic class * extends android.app.backup.BackupAgentHelper

-keeppublic class * extends android.preference.Preference

-keeppublic class * extends android.view.View

-keeppublic class com.android.vending.licensing.ILicensingService

 

#保留support下的所有类及其内部类

-keepclass android.support.** {*;}

 

#保留R下面的资源

-keepclass **.R$* {*;}

 

#保留本地native方法不被混淆

-keepclasseswithmembernamesclass * {

    native <methods>;

}

 

#保留在Activity中的方法参数是view的方法,

#这样以来我们在layout中写的onClick就不会被影响

-keepclassmembersclass * extends android.app.Activity{

    public void *(android.view.View);

}

 

#保留枚举类不被混淆

-keepclassmembersenum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

 

#保留我们自定义控件(继承自View)不被混淆

-keeppublic 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);

}

 

#保留Parcelable序列化类不被混淆

-keepclass * implements android.os.Parcelable {

  public static finalandroid.os.Parcelable$Creator *;

}

 

#保留Serializable序列化的类不被混淆

-keepclassmembersclass * implements java.io.Serializable {

    static final long serialVersionUID;

    private static finaljava.io.ObjectStreamField[] serialPersistentFields;

    private voidwriteObject(java.io.ObjectOutputStream);

    private voidreadObject(java.io.ObjectInputStream);

    java.lang.Object writeReplace();

    java.lang.Object readResolve();

}

 

#对于带有回调函数的onXXEvent的,不能被混淆

-keepclassmembersclass * {

    void *(**On*Event);

}

0 0
原创粉丝点击