自AGP3.0起,默认的资源打包工具从AAPT v1版本升级为v2。APPT2的可执行文件存放在Android SDK的build-tools/$version路径下。在AAPT1中通过package命令把原始的资源文件编译成各式的二进制文件,并且压缩到一个ZIP归档中,升级到AAPT2后,编译的过程交由compile命令处理,合并归档的操作交给了link命令处理。AGP7.x+的代码中,AAPT1的内容相关的代码都已被删除。本次分析的AGP源码版本7.2.
MergeResourcesAGP执行编译任务的实现类,因为Merg‘eResources继承至NewIncrementalTask,支持增量构建(Incremental Build)。
Task最终会执行doTaskAction:
1 | public void doTaskAction( InputChanges changedInputs) { |