Android 代码混淆

来源:互联网 发布:新疆七五事件真相 知乎 编辑:程序博客网 时间:2024/06/09 19:44
Android 代码混淆

optimizationpasses 5 是什么意思?
optimizationpasses 表示proguard对你的代码进行迭代优化的次数,首先要明白optimization 会对代码进行各种优化,每次优化后的代码还可以再次优化,所以就产生了 优化次数的问题,这里面的 passes 应该翻译成 ‘次数’ 而不是 ‘通道’。楼上默认写 5 ,应该是做Android的,关于Android里面为什么写 5 ,因为作者本来写 99 ,但是每次迭代时间都很长团队成员天天抱怨,就改成 5 了,迭代会在最后一次无法优化的时候停止,也就是虽然你写着 99 ,但是可能就优化了 几次,一般情况下迭代10次左右的时候代码已经不能再次优化了。

  •    -optimizationpasses 5 //代码混淆压缩比 默认为5 一般不需要改 
  •    -dontusemixedcaseclassnames //混淆后的类名为小写  如public class a     
  •    -dontskipnonpubliclibraryclasses //混淆第三方库  加上此句后 可再后面配置某些库不混淆
  •    -dontpreverify // 混淆前认证,可去掉加快混淆速度
  •    -verbose //混淆的log 帮助排错
  •    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  //代码混淆采用的算法,一般不改变,用谷歌推荐算即可
  •   -keepattributes *Annotation* 假如项目中有用到注解 应用加入
  •   引用外部的jar包 如果不是自己写的 最好不混淆它们,因为外部jar包有可能已经混淆过,根据实际情况来 不混淆某些外部jar保持外部jar包不变的方法
  • -dontwarn android.support.v4.** //执行下面一行代码如果有警告也不用中止,因为此jar不是我们自己写的,有警告也不处理,故dontwarn
  • -keep class android.support.v4.** //项目中用到此jar包,在打包时必须不混淆,否则用ViewPager时必crash,原因很简单,ViewPager是一个自定义view,在布局中用类的全名来定义此布局,混淆后类名和包名改变,xml布局无法再通过类名打到此自定义view。
#两个特定的类不能被混淆和删除
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
#所有包含JNI调用的类以及其内部的成员都不能被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
#扩展自android.view.View类的任何public类的setter和getter方法都不能被混淆和删除
-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}
#扩展自android.app.Activity类的任何类中访问属性是public,返回值是void,参数是android.view.View类型的所有函数都不能被混淆或删除
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}
#任何枚举类中的values和valueOf静态方法都不能被混淆和删除
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#实现了android.os.Parcelable接口类的任何类,以及其内部定义的Creator内部类类型的public final静态成员变量,都不能被混淆和删除
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
#所有自动生成的R类中的public静态成员变量
-keepclassmembers class **.R$* {
    public static <fields>;
}
CSDN上还有一个大牛总结的比较完善:
http://blog.csdn.net/catoop/article/details/47208833

0 0
原创粉丝点击