计划的作用
proguard还具有压缩、优化和预检代码的作用,以避免混淆代码并对其进行反编译。
在app.gradle文件的buildTypes中写了关于app模糊化的语句,请先看一下
最小化真
proguardfilesgetdefaultproguardfile ' proguard-Android-optimize.txt ',' proguard-rules.pro '
混淆真用于设置是否需要混淆
proguardFiles后跟两个包含模糊化规则的文件。 第一个是默认值,第二个是用户自己添加。 缺省情况下,除了proguard-android-optimize.txt之外,还包括proguard-android.txt,它位于sdktoolsproguard文件夹中。 这两者的区别在于首先进行了优化。 当然,添加优化后会有一定的区别
optimizations 3360 if you don ' twanttooptimize,use the proguard-Android.txtconfigurationfileinsteadofthisone, whichturnsofftheoptimizationflags.addingoptimizationintroducescertainrisks、 sinceforexamplenotalloptimizationsperformedbyproguardworksonallversionsofdalvik.thefollowingflagsturnofvariousoptimizations butthelistmaynotbecompleteoruptodate.(the ' arithmetic ' optimizationcanbeusedifyouareonlytargetingandroid 2.0 orla ter.) )
用户自己添加的模糊化规则文件的位置是project nameappproguard-rules.pro,默认的模糊化规则对于大项目是不够的,必须添加许多自定义的模糊化规则
没有必要混淆
不混淆(类、方法等),即不能更改名称。 否则会出错
在反射中使用不会混淆的类,例如需要避免更改类名方法的注释框架。 不那样做的话就不能自省。
不混淆Parcelable及其子类和Creator成员变量
r类及其所有内部静态类中的所有静态变量字段不混淆
请不要混淆JSON对象类。 否则,无法将JSON解析为相应的对象。
如果要使用第三方开放源代码库,或者要引用其他第三方SDK包,则必须为模糊文件添加模糊化规则
需要确保即使有使用WebView的Js调用,所写的接口方法也不会混淆
JNI方法不会混淆
.
ProGuard一般语法
- library jars class _ path APP应用程序的依赖程序包,如Android-support-v4
-keep [,modifier, ] class_specification不混淆某些类
-keepclassmembers [,modifier, ] class_specification不会混淆类的成员
-keepclasseswithmembers [,modifier, ] class_specification不混淆类及其成员
-keepnames class_specification不会混淆类及其成员名称
-keepattributes {attribute_name, }不混淆指定的可选属性
-不要混淆keepclassmembernamesclass _ specification类的成员名称
- keepclasseswithmembernamesclass _ specification不混淆类及其成员名称
- assumenosideeffectsclass _ specification假设在proguard代码优化时放弃remove调用。 例如Log等
-dontwarn [class_filter]不提示warnning
更多
常用代码
为了不混淆类的生成方式,必须指定构造函数的参数类型,如JSONObject
- keepclassmembersclasscn.trinea.Android.com mon.service.impl.image cache {
公共(int;
}
不混淆某个包中的所有类或某个类class、某个接口interface,在不混淆指定类的情况下将**转换为类名
-keep class com.facebook.**
- keepclasscn.trinea.Android.com mon.* * { *; }
不混乱是指某个方法。 *可以替换为指定的方法或类名
- keepclassmembersclasscn.trinea.Android.com mon.service.impl.image cache {
publicbooleanget (Java.lang.string,android.view.View );
}
不混淆Parcelable的子类,防止Android.OS.badparcelableexception
- keep class * implements Android.OS.parcelable {
publicstaticfinalandroid.OS.parcelable $ creator *;
}
添加安卓- support-v4.jar依赖包
- libraryjarslibs/Android-support-v4.jar
-dontwarn android.support.v4.**
- keepclassandroid.support.v4.* * { *; }
- keepinterfaceandroid.support.v4.app.* * { *; }
proguard结合Log level解决了调试模式的log问题,Log.d和Log.v代码无副作用,表示proguard时从源代码中remove,release模式(正式发行)
- assumenosideeffectsclassandroid.util.log {
公共静态* * * d (…;
公共静态* * * v (…;
}
映射
mapping.txt显示了原始类、方法、字段名和模糊代码之间的映射。 这个文件很重要。 当jddhm从release版本接收到错误报告时,它可以用来翻译混淆的代码。
映射文件为 appbuildoutputsmappingrelease
特别推荐以下参考资料。