Android studio 混淆配置详解
混淆
studio 使用proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。
功能:shrinking(压缩)、optimization(优化)、obfuscattion(混淆)、preverification(预校验)四个操作。
优点:
1.删除项目无用的资源,有效减小apk大小;
2.删除无用的类、类成员、方法和属性,还可以删除无用的注释,最大限度的优化字节码文件;
3.使用简短无意义的名称重命名已存在的类、方法、属性等,增加逆向工程的难度。
配置
- proguard-android.txt:其中proguard-android.txt 是系统默认的混淆文件,具体在../sdk/tools/proguard/ 目录下,其中包含了 android 最基本的混淆,一般不需要改动;
- proguard-rules.pro:是我们需要配置的规则;如果要配置多个module的混淆文件,只需要后面添加逗号跟混淆文件路径;
- 基本混淆配置
不能使用混淆
1、反射中使用的元素,需要保证类名、方法名、属性名不变,否则反射会有问题。
2、最好不让一些bean 类混淆
3、四大组件不能混淆,四大组件必须在 manifest 中注册声明,而混淆后类名会发生更改,这样不符合四大组件的注册机制。
4、注解不能混淆,很多场景下注解被用于在进行时反射一些元素。
5、不能混淆枚举中的value和valueof方法,因为这两个方法是静态添加到代码中进行,也会被反射使用,所以无法混淆这两种方法。应用使用枚举将添加很多方法,增加了包中的方法数,将增加 dex 的大小。
6、jni 调用 java 方法,需要通过类名和方法名构成的地址形成。
7、java 使用 native 方法,native 是c/c++编写的,方法是无法一同混淆的。
8、js 调用java 方法
9、webview 中 javascript 的调用方法不能混淆
注意:webview 引用的是哪个包名下的。
10、第三方可建议使用其自身混淆规则
11、parcelable 的子类和 creator 的静态成员变量不混淆,否则会出现 android.os.badparcelableexeception 异常。
serializable 接口类反序列化:
12、gson 的序列号和反序列化,其实质上是使用反射获取类解析的
到此这篇关于android studio 混淆配置详解的文章就介绍到这了,更多相关android studio 混淆内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!