Android混淆工具
Android 混淆工具
代码混淆工具
Proguard/R8
见 [[Proguard]]
资源混淆工具
APK 混淆:AndResGuard
AndResGuard 是微信推出资源优化工具。它的基本思想类似于 ProGuard 中的混淆,体积优化是它的附加收益,同时还提供了压缩、加密等选项。
见:[[资源混淆#apk 混淆 AndResGuard]]
AAB 混淆
见:[[资源混淆#aab 包混淆 - 字节]]
String 混淆
https://github.com/MichaelRocks/paranoid
View 和 Activity 混淆
Mess
- 饿了么
Gradle 插件
AGP
Android Gradle Plugin(AGP) 包含了多个体积优化任务,提供了许多优化配置项,大部分任务已经作为 APK 打包的标配。
一般来讲,我们的优化任务会依赖于这些任务的执行。如果定制的优化无法兼容现存任务,则需要关闭或 hook 这些任务。接下来将按照编译顺序简单介绍几个优化任务与配置:
OptimizeResources AGP4.2+ 新增的资源优化任务,目前只实现了资源文件路径的缩短,默认开启,可通过 android.enableResourceOptimizations 关闭。
StripSymbols NDK 会利用 llvm-strip 移除掉 native libraries 中的 unneeded symbols,这部分优化工作也可以放在 so 编译期间完成。
MinifyWithR8/ProGuard 利用 R8 或 ProGuard 实现代码优化,此处就不再赘述了。
ShrinkResources 由 ShrinkResources 开关控制,启用前提是必须开启 minifyEnable。其作用是将未被引用的资源文件替换为一个体积很小的格式文件 (仍存在占位体积,同时保留了该资源条目,所以 resources.arsc 体积并不会减少),可通过 res/raw/keep.xml 文件配置 shrinkMode 和白名单。
PackageOptions 打包时选项,包括过滤 exclude、相同文件仅打包 pickFirst、全部打包 merge、so 优化豁免 doNotStrip。
Splits 分包/过滤策略,配置项包括 ABI、资源配置 (语言、分辨率等)。
ByteX
ByteX 是字节开源的一套 Java 字节码插桩工具,目前主要包括优化与检查工作,其中一些子项最终会带来体积收益。包括 R 类内联、移除 debug 信息、access 方法内联等。
Booster
Booster 是滴滴开源的一套质量优化框架,其中包括体积优化专项,例如资源文件压缩、资源产物.ap_ 压缩、去冗余资源、R 类内联、DataBinding BR 内联等。