我们知道 assets 文件处理的任务是 merge[变体名称]ReleaseAssets
,例如:
- mergeCommonReleaseAssets
- mergeReleaseAssets
- mergeDebugAssets
在 AGP 升级过程中,不同的 Android Gradle Plugin 版本打包过程中处理 assets 文件的临时目录
可能存在不一致的情况!
在 AGP4+
assets 文件合并的临时目录是在
build/intermediates/merged_assets/commonRelease/out
在 AGP7.2.0
assets 文件合并的临时目录是在
build/intermediates/assets/release/mergeReleaseAssets
在 AGP7.4.1
assets 文件合并的临时目录是在
build/intermediates/assets/commonRelease
路径适配
AGP 升级路径适配是一个要点,当前还没升级测试 AGP8+,可能在路径上也有所变化,实测才能知道。
// AGP4+
// build/intermediates/merged_assets/commonRelease/out
String folderPath = PluginFileUtils.adjustPath(mProject.projectDir.path,
FileConstant.FILE_DIR_BUILD,
FileConstant.FILE_DIR_INTERMEDIATES,
FileConstant.FILE_DIR_MERGED_ASSETS,
CommUtils.getFirstCharLowercaseStr(CommonManager.getmVariantName()),
FileConstant.FILE_DIR_OUT)
// AGP7.2.0
// build/intermediates/assets/release/mergeReleaseAssets
String subDirname = "merge" + CommonManager.getmBuildType().capitalize() + "Assets"
String folderPath2 = PluginFileUtils.adjustPath(mProject.projectDir.path,
FileConstant.FILE_DIR_BUILD,
FileConstant.FILE_DIR_INTERMEDIATES,
FileConstant.FILE_DIR_MERGED_ASSETS,
CommonManager.getmBuildType().toLowerCase(),
subDirname)
// AGP7.4.1
// build/intermediates/assets/commonRelease
String folderPath = PluginFileUtils.adjustPath(mProject.projectDir.path,
FileConstant.FILE_DIR_BUILD,
FileConstant.FILE_DIR_INTERMEDIATES,
FileConstant.FILE_DIR_MERGED_ASSETS,
CommUtils.getFirstCharLowercaseStr(CommonManager.getmVariantName()))
通常我们在某个 Task 前后插入处理任务以满足需求。
mProject.afterEvaluate {
Iterator<Task> eIterator = mProject.tasks.findAll().iterator()
switch (CommUtils.judgeTaskType(theTask.name)) {
case TaskType.TASK_MERGE_RELEASE_ASSETS:
theTask.doLast {
processMergeReleaseAssets()
}
break
}
}