一、AGP各版本核心特性
1. AGP 4.x 到 7.x 系列
- AGP 4.2.x:支持Gradle 6.x,开始逐步废弃compile等旧依赖配置,推荐使用implementation等新配置。
- AGP 7.0: 移除compile、provided等旧配置,改用api、implementation等。 要求Gradle7.x版本。 默认使用Java 8语言特性。 支持APK v3/v4签名格式。
- AGP 7.4.x:与Gradle 7.5兼容,支持JDK 11,但升级到AGP 8.x需注意JDK版本升级。
2. AGP 8.x 系列
- AGP 8.0: 强制要求JDK 17及以上版本。 默认启用namespace字段,需显式声明模块命名空间。 废弃Transform
API,需迁移至新接口(如AsmClassVisitorFactory)。 - AGP 8.1.0: 支持Compile SDK 35。
优化R8混淆规则,需更新ProGuard配置以避免运行时问题。 - AGP 8.2.2: 默认开启nonFinalResIds(允许资源ID非final化)。
引入nonTransitiveRClass特性,减少R类冗余引用,但需适配模块间资源依赖。
3. AGP 8.7.x 及更高
- AGP 8.7.0: 从alpha08版本开始,若存在LintError,构建任务会直接抛出异常(防止缓存错误结果)。
修复NDK配置兼容性问题。
二、升级注意事项
1. 环境兼容性
Gradle版本匹配:每个AGP版本对应最低Gradle版本(如AGP 8.x需Gradle 8.x)。例如:
AGP 7.0 → Gradle 7.x
AGP 8.0 → Gradle 8.x
JDK版本:AGP 8.x需JDK 17,AGP 7.x支持JDK 11。
Android Studio版本:例如AGP 8.x需Android Studio Flamingo及以上。
2. 配置迁移
废弃API替换:
android.dataBinding.enabled → android.buildFeatures.dataBinding。
variant.getXXX() → variant.getXXXProvider()(惰性API)。
依赖配置更新:避免使用已废弃的compile、apk等,改用implementation、runtimeOnly。
构建脚本语法:AGP 8.x要求Gradle DSL语法适配,如避免在buildSrc中定义常量。
3. 功能适配
Transform API废弃:需迁移至新接口(如ASM插桩)或使用替代方案(如增量任务)。
资源ID非final化:开启nonFinalResIds后,需检查动态获取资源ID的代码兼容性。
R8混淆规则:AGP 8.x可能更新R8行为,需验证ProGuard规则有效性。
4. 工具辅助
AGP升级助手:
自动处理语法变更(如Gradle DSL升级)。
提供版本兼容性检查及建议步骤。
分阶段升级:大版本跨越(如4.2→8.x)建议分步升级(如4.2→7.x→8.x)。
5. 验证与优化
构建缓存清理:升级后建议清理build目录及Gradle缓存。
性能监控:AGP 8.x可能引入构建速度变化,需监控并优化模块化配置。
全面测试:重点验证Lint检查、NDK编译、资源混淆等环节。
三、常见问题与解决
- NoMatchingGraphVariantsException:构建变体不匹配时,需对齐应用与SDK的构建配置。
- R8混淆导致运行时崩溃:更新ProGuard规则,显式保留网络层(Retrofit/Gson)相关类。
- Lint检查失败:AGP8.7.x会严格阻塞LintError,需修复代码或临时禁用检查。