美文网首页APP开发实战app开发
APP开发实战111-ProGuard指令介绍

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

作者: xjbclz | 来源:发表于2016-08-28 20:11 被阅读33次

    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 ;

    }

    #保留在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 (android.content.Context);

    public(android.content.Context, android.util.AttributeSet);

    public(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);

    }

    相关文章

      网友评论

        本文标题:APP开发实战111-ProGuard指令介绍

        本文链接:https://www.haomeiwen.com/subject/qnfxettx.html