首页 > 编程知识 正文

android混淆规则,android依赖库混淆

时间:2023-05-03 22:16:39 阅读:111665 作者:4498

计划的作用

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

特别推荐以下参考资料。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。