Skip to content

Support for Android Gradle Plugin 3.0 #557

@galenlin

Description

@galenlin

Android Gradle Plugin (下称 AGP) 3.0 相对于 2.3.0 有了大幅的 API 改动。
导致我们的 gradle-small 编译插件在以下重要环节出现了问题:

  1. 解析 aar 依赖
  2. 分离 class
  3. 分离 arsc
  4. 分离 JNI
  5. 分离 manifest
  6. 分离 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, javac task 的 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions