android对app进行代码混淆
自2.3版本后,新生成的项目中,没有proguard。cfg文件,只有proguard-
project.text,功能一样。
如果要求不是太高我们可以启用系统定义的混淆器。
在项目根目录下的project.properties文件中把
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
前面的#去掉,在project.properties文件中#表示注释。这个混淆器在我们的sdk中的相应目录
下。
如果系统的混淆器不足以满足自己需求,可以自定义自己的混淆器。你可以把混淆器文件
放到任意的位置,并指定它的绝对路径。proguard.config=/path/to/proguard.cfg。
混淆器大致api作用
-libraryjars libs/gdx.jar 第三方jar包
-optimizationpasses 5 优化代码的次数,可以设置大于5的数,因为当到了代码不能优化的时候会自动停止。
-dontusemixedcaseclassnames//混淆时不会产生形形色色的类名 Aa aA
-dontskipnonpubliclibraryclasses//如果应用程序引入的有jar包,并且想混淆jar包里面的class
-dontpreverify//不预校验
-verbose //混淆后生产映射文件 map 类名->转化后类名的映射
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*//混淆采用的算法.
-dontoptimize// 不使用优化方案
-keepattributes Signature-dontskipnonpubliclibraryclassmembers-dontskipnonpubliclibraryclasses //保留签名,解决泛型问题
-dontwarn android.support.v4.**// 这里不对v4的jar包的提出WARN
-keepattributes *Annotation* //会保留Activity的被@Override注释的方法onCreate、onDestroy方法
//不进行混淆保持原样
-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 com.android.vending.licensing.ILicensingService
//不混淆第三方包
-keep class com.badlogic.** {
*;
}
//保护指定的类和类的成员的名称,如果所有指定的类成员出席
-keepclasseswithmembernames class * {
native <methods>;
}
// 所有方法不进行混淆
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>;
}
//保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
//对该方法不进行混淆
-keep public class com.asqw.android{
public void Start(java.lang.String);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
//保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
// 枚举类不能去混淆.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
//保护指定的类文件和类成员
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}