Android Gradle任务:解压Maven仓库文件并关联preBuild
解决方案:让解压Maven仓库Zip并关联preBuild任务生效
修复方案1(android代码块内配置)
原方案的问题出在配置阶段提前访问依赖文件,导致Gradle解析冲突。修改后代码如下:
android { configurations { zipArchive } task unzip(type: Copy) { // 用闭包延迟到执行阶段获取Zip文件,避免配置阶段解析错误 from { zipTree(configurations.zipArchive.singleFile) } // 只复制需要的.a库文件和头文件 include '**/*.a', '**/*.h' // 指定输出目录为app/libs into "$project.rootDir/app/libs" } // 让preBuild任务依赖unzip,确保解压在编译前执行 preBuild.dependsOn unzip } dependencies { zipArchive group: 'com.example.lib', name: 'testlib', version: '1.0', ext: 'zip' }
核心修改点:
- 将
from的参数改为闭包形式,延迟依赖解析时机 - 添加
include过滤目标文件,符合提取.a和头文件的需求
修复方案2(任务放在android代码块外)
原方案无法关联preBuild是因为没有正确引用Android模块的preBuild任务,修改后代码如下:
configurations { zipArchive } task unzip(type: Copy) { from zipTree(configurations.zipArchive.singleFile) include '**/*.a', '**/*.h' into "$project.rootDir/app/libs" } // 明确关联Android模块的preBuild任务 project.tasks.preBuild.dependsOn unzip dependencies { zipArchive group: 'com.example.lib', name: 'testlib', version: '1.0', ext: 'zip' }
可选优化:避免重复解压
可以给unzip任务添加判断条件,只有当目标文件不存在时才执行,节省构建时间:
task unzip(type: Copy) { // 示例:检查是否已存在目标库文件,不存在才执行解压 onlyIf { !file("$project.rootDir/app/libs/testlib.a").exists() } // 其他配置... }
内容的提问来源于stack exchange,提问作者Siju
相关产品推荐
相关产品推荐

