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

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指令介绍)