Android项目Gradle插件从4.1.1升级至4.2.1构建失败如何解决?
Android Gradle插件4.1.1升级到4.2.1构建失败排查方案
1. 优先排查strip符号相关问题
AGP 4.2.0开始修改了原生库strip的默认行为,会自动对所有引入的so执行strip操作,如果so本身已经被strip过、或者是预编译的无调试符号的第三方so,就会触发相关警告,严重时会直接导致构建中断。
处理方案:
- 在app模块的build.gradle的android闭包下添加配置,跳过指定so的strip,或者关闭strip校验:
android { // 其他原有配置 packagingOptions { // 跳过指定so的strip操作 doNotStrip "**/libbarhopper_v2.so" // 存在其他第三方so需要跳过的,可继续追加doNotStrip规则 } // 上述配置仍报错时,可强制关闭strip任务 gradle.taskGraph.whenReady { graph -> graph.allTasks.findAll { it.name.contains('stripDebugSymbols') }*.enabled = false } }
2. 排查kapt任务执行失败问题
AGP 4.2.x对Kotlin版本、注解处理器的兼容性有明确要求,可按以下步骤校验:
- 确认当前项目的Kotlin插件版本 ≥ 1.5.0,AGP 4.2.x最低兼容Kotlin 1.5.0版本,低于该版本会触发kapt兼容异常
- 清理kapt缓存:执行命令
./gradlew clean kaptClean后重新构建 - 检查所有注解处理器依赖(如Room、Dagger、ARouter等)是否升级到兼容AGP 4.2.x的版本,老旧版本注解处理器不支持高版本AGP的编译链路
3. 排查子模块bundleLibRuntimeToDir任务失败问题
该任务负责将子模块的运行时依赖打包到指定目录,AGP 4.2.x修改了子模块资源、依赖的打包规则,可按以下步骤处理:
- 确认子模块
biomobileplus_sdk_android的build.gradle中没有使用已废弃的compile依赖声明,全部替换为implementation/api - 检查子模块是否存在重复的so、资源文件引入,确认和app模块的资源、so无冲突
- 增量构建失败时,先执行全量清理构建:
./gradlew clean assembleProductionDebug
4. 通用兼容性校验
- AGP 4.2.1的官方推荐配套Gradle版本为7.0.2,当前使用的6.7.1属于最低兼容版本,可尝试升级Gradle版本到7.0.2,修改gradle/wrapper/gradle-wrapper.properties中的distributionUrl配置:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
- 清理Android Studio缓存:点击File -> Invalidate Caches / Restart,勾选清除文件系统缓存和本地历史后重启,再重新构建
内容的提问来源于stack exchange,提问作者Maradiya Krupa
相关产品推荐
相关产品推荐

