Android应用程序混淆
target=android-8
proguard.config=proguard.cfg
Eclipse会通过此配置在工程目录生成proguard.cfg文件
2.在Eclipse中添加proguard.cfg文件,其内容如下:
---------------------------------------------------------------------------------------------------------------------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-dontwarn android.support.**
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
混淆文件详解:
1)-optimizationpasses 5 ->设置混淆压缩比率0~7
2)-dontusemixedcaseclassnames -> Aa aA
3) -dontskipnonpubliclibraryclasses ->如果应用程序引入的有jar包,并且想混淆jar包里面的class
4) -dontwarn android.support.** ->删除一些警告信息
5) -verbose ->混淆后生产映射文件 map 类名->转化后类名的映射
6) -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 混淆中所采用的算法
7)-keep public class * extends android.app.Activity表示所有的Actiivty子类不要去混淆
8)-keepclasseswithmembernames class * {
native <methods>; //所有的native方法不用去混淆
}
9)-keepclasseswithmembernames class * {
//某些构造方法不用去混淆
public <init>(android.content.Context, android.util.AttributeSet);
}
10)-keepclassmembers enum * {
public static **[] values(); //枚举类不用去混淆
public static ** valueOf(java.lang.String);
}
11)-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *; //aidl文件不能去混淆
}
--------------------------------------------------------------------------------------------------------------
在实际的一个工程项目中,可能Google自动生成的配置不能胜任我们的混淆工作。所以,我们往往需要自己编写一些ProGuard配置。这方面的资料在官网的Manual -> Usage里有详细说明,大家可以研究一下。http://proguard.sourceforge.net/