一、混淆基本知识
Android 开发使用 Java,为了很好的保护 Java 源代码,我们需要对编译好后的 class 文件进行混淆。
ProGuard 是一个混淆代码的开源项目,它的主要作用是混淆代码,包括以下 4 个功能。
压缩 ( Shrink ):检测并移除代码中无用的类、字段、方法和特性 ( Attribute )。
优化 ( Optimize ):对字节码进行优化,移除无用的指令。
混淆 ( Obfuscate ):使用 a, b, c,d 这样简短而无意义的名称,对类、字段和方法进行重命名。
预检 ( Preveirfy ):在 Java 平台上对处理后的代码进行预检,确保加载的 class 文件是可执行的。
二、 Android 混淆步骤
三步走:
- 基本混淆
- 针对 APP 的量身定制
- 针对第三方 jar 包的解决方案
1、基本混淆:
开启混淆:
|
|
基本混淆模板
|
|
|
|
|
|
|
|
|
|
2、针对 APP 的量身定制
这部分主要是对实体类及其成员、内部类、WebView、JavaScript、反射的一些处理,针对APP做具体的代码混淆。
3、针对第三方 jar 包的解决方案
一般来说,第三方都会给出自己的混淆配置,拿过来就行
|
|
遇到的坑:
在做一个项目的时候,发现代码混淆之后,打开 APP,直接ANR崩溃,反复查看逻辑,最后发现是SharePerference 的坑,SharePerference 所依赖的 Activity 没有 keep,导致 App 运行时找不到,有两种方案,一种是 keep SP 所在的 Activity,或者 SP 使用生命周期更长的Application.
还有就是小伙伴使用 360 加固,导致使用 Activity.SharePerference 直接崩。加固有风险,使用需谨慎,有时候,还是手动混淆比较方便一点,混淆关键代码就行了。