文章

Android混淆工具

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 内联等。

本文由作者按照 CC BY 4.0 进行授权