AGP 的日常 #3 - 再谈 AAR 与混淆

之前写了篇文章讲到了由于 buildTypes 默认设置的原因导致 library module 无法 debug 的情况。事实上,当时只解决了打 Debug 包的情况,而忽略了打 Release 包时还埋了一个隐藏的问题。

问题还原:我们在做全局的 rebuild 或者 assembleRelease 时,会出现有些类找不到的情况,而 assembleDebug 不会。仔细观察会发现,这些报错的类都是被外部 module 引用的部分,例如 module A 有类 Clazz,被 module B 引用,则 Clazz 报错。

既然推断是互相引用时才会出问题,那基本可以判断 proguard 出问题了。把 module release 时的 proguard 关掉试试,果然不报错了!回想一下 Android 的打包顺序,应该是这样的:

  1. 分别打包各个的 library module(module 混淆)
  2. 整合解压所有的依赖,包括本地的依赖和远程的依赖,和 application module 一起打整包(整体混淆)

那么,面对不同的情况,应该要有不同的混淆策略:

· AGP 日常, AGP Daily, Android Gradle Plugin, 安卓打包插件, 安卓, Android, 中文