proguar在Android混淆中的用法
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段。
proguard基本语法
//保留native方法的方法的方法名和包含native方法的类的类名不变 -keepclasseswithmembernamesclass{ native; } //保留继承与View的类中的set*和get*方法 -keepclassmemberspublicclass*extendsandroid.view.View{ voidset*(***); ***get*(); } //保留继承与Activity的类中以View为参数的方法 -keepclassmembersclass*extendsandroid.app.Activity{ publicvoid*(android.view.View); } //保留实现了Parcelable接口的类的类名以及实现了Parcelanle$Creator的内部类 -keepclass*implemenetsandroid.os.Parcelable{ publicstaticfinalandroid.os.Parcelanle$Creator*; } //保留R$*类中静态字段的字段名 -keepclass**.R$*{ publicstatic ; }
也就是
类名不混淆用keep
方法名不混淆用keepclassmembers或者keepclasseswithmembernames(后者用于native不混淆)
不混淆的情况:
1jni调用java方法
2四大组件
3R文件
4某些通过反射调用的类或方法
5第三jar包(一般情况下不要混淆)
混淆去掉log
-assumenosideeffectsclassandroid.util.Log{ publicstaticbooleanisLoggable(java.lang.String,int); publicstaticintv(...); publicstaticinti(...); publicstaticintw(...); publicstaticintd(...); publicstaticinte(...); }
assumenosideeffects,proguard配置文件里的参数。assumenosideeffects;假定无效;该属性也就是标识无效代码。我们就是通过这个参数来让proguard删除日志代码。