混淆
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 混淆内容请搜索萬仟网以前的文章或继续浏览