AndroidAGP9.0升级之路

AndroidAGP9.0升级之路

1.前言:

最近把Android Studio升级到了9.0,但是发现有不少问题,由于之前升级7.0、8.0都有很多经验,踩坑很多,所以这次升级很顺利,如果是7.0以下不建议直接升级,当然经验丰富就无所谓了,直接上代码.

官网参考文档:

developer.android.google.cn/build/relea...

2.简介:

Android Gradle 插件 9.0 是一个主要版本,带来了 API 和行为变更。

如需更新到 Android Gradle 插件 9.0.1,请使用 Android Gradle 插件升级助理。AGP 升级助理有助于在升级项目时尽可能保留现有行为,因此即使您尚未准备好采用 AGP 9.0 中的所有新默认设置,也可以将项目升级为使用 AGP 9.0。

此外,还有两项代理技能可供使用,以简化升级流程。 对于非 KMP 应用,请尝试使用 Android 技能库中的 AGP 9 升级技能。对于 KMP 应用,请尝试 JetBrains 的 AGP 9 升级技能。如需详细了解如何在 Android Studio 中使用技能,请参阅使用技能扩展代理模式.

3.兼容性

Android Gradle 插件 9.0 支持的最高 API 级别为 API 级别 36.1。以下是更多兼容性信息:

最低版本 默认版本 备注
Gradle 9.1.0 9.1.0 如需了解详情,请参阅更新 Gradle
SDK Build Tools 36.0.0 36.0.0 安装配置 SDK Build Tools。
NDK 不适用 28.2.13676358 安装配置其他版本的 NDK。
JDK 17 17 如需了解详情,请参阅设置 JDK 版本

4.升级AGP版本到9.3.1:

我最开始的版本是8.9.3

升级到9.3.1:

ini 复制代码
[versions]
agp = "9.3.1"
org-jetbrains-kotlin-android = "1.8.0"
core-ktx = "1.15.0"
junit = "4.13.2"
androidx-test-ext-junit = "1.1.5"
espresso-core = "3.5.1"
appcompat = "1.6.1"
material = "1.13.0"
constraintlayout = "2.1.4"
glide = "4.13.0"
glide-compiler = "4.13.0"
camerax = "1.1.0-beta03"
camerax-core = "1.1.0-beta03"
camerax-video = "1.1.0-beta03"
camerax-view = "1.1.0-beta03"
camerax-extensions = "1.2.2"
camerax-lifecycle = "1.1.0-beta03"
kotlin-stdlib = "1.8.0"
kotlin-reflect = "1.8.0"
kotlinx-coroutines-core = "1.8.0"
kotlinx-coroutines-android = "1.8.0"
utilcodex = "1.31.1"
activity= "1.12.0"

5.报错gradle插件版本太低:

提示gradle插件要改成9.5.0,当前的是8.11.1

修改后的配置:

ini 复制代码
#Sun Aug 23 15:17:09 CST 2026
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-9.5.0-bin.zip
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

6.kotlin重复引入报错:

php 复制代码
Build file 'D:\workspace\camera-xdemo\app\build.gradle.kts' line: 4
​
An exception occurred applying plugin request [id: 'org.jetbrains.kotlin.android', version: '1.8.0']
> Failed to apply plugin 'org.jetbrains.kotlin.android'.
   > Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
​
* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights from a Build Scan (powered by Develocity).
> Get more help at https://help.gradle.org.
​
* Exception is:
org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'org.jetbrains.kotlin.android', version: '1.8.0']
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:184)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$ApplyAction.apply(DefaultPluginRequestApplicator.java:165)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyPlugins$1(DefaultPluginRequestApplicator.java:135)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:135)
    at org.gradle.kotlin.dsl.provider.PluginRequestsHandler.handle(PluginRequestsHandler.kt:45)
    at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator$InterpreterHost.applyPluginsTo(KotlinScriptEvaluator.kt:246)
    at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.applyPluginsTo(Interpreter.kt:399)
    at Program.execute(Unknown Source)

内置 Kotlin

Android Gradle 插件 9.0 引入了内置 Kotlin 支持,并默认启用该支持。这意味着,您无需再在 build 文件中应用 org.jetbrains.kotlin.android(或 kotlin-android)插件来编译 Kotlin 源文件。这简化了 Kotlin 与 AGP 的集成,避免了使用已弃用的 API,并在某些情况下提高了性能。

因此,当您将项目升级到 AGP 9.0 时,还需要迁移到内置 Kotlin选择停用

您还可以为没有 Kotlin 源的 Gradle 子项目选择性地停用内置 Kotlin 支持

7.修改如下:

分别去掉app目录下的build.gradle和项目的build.gradlekotlin配置

scss 复制代码
import org.jetbrains.kotlin.storage.CacheResetOnProcessCanceled.enabled
​
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
    alias(libs.plugins.com.android.application)
}
kotlin 复制代码
// Top-level build file where you can add configuration options common to all sub-projects/modules.
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
    alias(libs.plugins.com.android.application) apply false
}
true

libs.versions.toml的kotlin-android配置去掉:

ini 复制代码
[plugins]
com-android-application = { id = "com.android.application", version.ref = "agp" }
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "org-jetbrains-kotlin-android" }

8.kotlin中jvm配置修改:

修改前配置:

ini 复制代码
compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
    jvmTarget = "1.8"
}

修改后配置:

ini 复制代码
compileOptions {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
kotlin {
    compilerOptions {
        jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
    }
}

9.修改后运行:

可以看到修改后项目构建成功,运行也正常

10.运行效果截图:

11.完整的Demo地址:

gitee.com/jackning_ad...

12.本次升级完整踩坑清单回顾:

  • AGP9.3.1 → Gradle 版本不够 (8.11.1),升级 Gradle wrapper 到 9.5.0
  • Cannot add extension with name 'kotlin' → AGP 内置 Kotlin,重复加载 kotlin‑android 插件
  • Unresolved reference kotlinOptions → DSL 变更,改用 kotlin{compilerOptions{}}
  • 无效垃圾导入 import org.jetbrains.kotlin.storage.CacheResetOnProcessCanceled.enabled,直接删掉
  • Java 字节码版本升级从 1.8 → 11
相关推荐
阮胜昌1 小时前
MySQL 中的动态数据脱敏:无需更改应用程序即可保护敏感数据
android·mysql·adb
aaajj3 小时前
关于MODIFY_PHONE_STATE权限
android
古法安卓4 小时前
Android-高版本 LMKD 源码解析:基于 PSI 的内存压力监控与查杀全流程
android·java·android studio
古法安卓4 小时前
Android-PSI 详解:libpsi 源码解析——116 行代码架起 lmkd 与内核之间的桥
android·java·android studio
mmsx7 小时前
Android 新闻资讯客户端实战:从零搭建一个完整的新闻 App
android·app·源码
三8449 小时前
PHP 绕过污点追踪构造 Webshell:反序列化引用复用与 Trait 可变函数 RCE
android
石头猫灯9 小时前
WordPress wp2shell漏洞断点逐过程到注入点
android·学习
Android打工仔10 小时前
Kotlin 协程源码解析(五):BaseContinuationImpl.resumeWith() —— Continuation 链是如何被展开的?
android·kotlin
存在morning10 小时前
【PySpark 学习笔记 三】DataFrame API 入门
android·java·数据库