-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Description
Android Gradle Plugin (下称 AGP) 3.0 相对于 2.3.0 有了大幅的 API 改动。
导致我们的 gradle-small 编译插件在以下重要环节出现了问题:
- 解析 aar 依赖
- 分离 class
- 分离 arsc
- 分离 JNI
- 分离 manifest
- 分离 assets
为解决该适配问题,Small 决定重新设计编译流程,前置分离过程,减少不必要的后期 transform hook。同时彻底弃用原有对 AGP 私有 API 的引用,为以后兼容性打下基础。
拟采取以下方案(打钩项目已完成):
- 1. 预处理:解析 aar 依赖,对等构造一批仅包含
res目录的 aar 文件,提前完成Jar,JNI,Manifest,Assets等文件分离 - 2. 重定向:通过动态构造 flatDir repo,引用上述裁剪版的 aar 依赖
- 3. 分离三方库:根据 (1) 中依赖,动态
compileOnly当前插件模块所需的jar - 4. 分离
R.class:通过对aapt,javactask 的 hook,构造一个仅含当前模块所需的R.class - [x ] 5. 分离
ap_:解压ap_文件,分离非模块自身的res资源,并重新构造一个经过剪裁的arsc文件 - 6. 混淆适配
方案改造后,将完美适配 AGP 3.0。
同时新方案将大量的 I/O 操作前置到预处理过程,并良好地利用 Gradle Task Up-To-Date 设计,预期将大幅提高编译效率。
最新进展
目前已完成初步适配,代码分支 support-android-gradle-3.0
barryzzz, navyifanr, real-geekfan, WayJ, Khang-NT and 2 more