Android Gradle 插件 9.0.1(2026 年 1 月)

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 中使用技能,请参阅使用技能扩展智能体模式。

兼容性

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 版本。
Kotlin Gradle 插件 (KGP) 2.2.10 2.2.10 如需了解详情,请参阅对 Kotlin Gradle 插件的运行时依赖项。

android DSL 类现在仅实现新的公共接口

在过去几年中,我们为 DSL 和 API 引入了新接口,以便更好地控制哪些 API 是公开的。AGP 7.x 和 8.x 版仍使用旧 DSL 类型(例如 BaseExtension),这些类型也实现了新的公共接口,以便在接口开发过程中保持兼容性。

AGP 9.0 仅使用我们的新 DSL 接口,并且实现已更改为完全隐藏的新类型。这也会移除对已弃用的旧版 Variant API 的访问权限。

如需更新到 AGP 9.0,您可能需要执行以下操作:

  • 确保您的项目与内置 Kotlin 兼容:org.jetbrains.kotlin.android 插件与新 DSL 不兼容。
  • 将 KMP 项目切换到适用于 KMP 的 Android Gradle 库插件:在与 com.android.library 和 com.android.application 插件相同的 Gradle 子项目中使用 org.jetbrains.kotlin.multiplatform 插件与新 DSL 不兼容。

  • 更新 build 文件:虽然接口更改旨在尽可能保持 DSL 相似,但可能会有一些细微变化。

  • 更新自定义 build 逻辑以引用新的 DSL 和 API:将对内部 DSL 的所有引用替换为公共 DSL 接口。在大多数情况下,这是一对一的替换。 将 applicationVariants 和类似 API 的所有使用替换为新的 androidComponents API。这可能更复杂,因为 androidComponents API 旨在提高稳定性,以便让插件保持更长时间的兼容性。如需查看示例,请参阅我们的 Gradle 诀窍。

  • 更新第三方插件:某些第三方插件可能仍依赖于不再公开的接口或 API。请迁移到与 AGP 9.0 兼容的插件版本。

切换到新的 DSL 接口可防止插件和 Gradle 构建脚本使用各种已废弃的 API,包括:

android 块中已废弃的 API 函数 替换
applicationVariants、
libraryVariants、
testVariants和
unitTestVariants
插件扩展点,用于向 AGP 添加新功能。 请将其替换为 androidComponents.onVariants API,例如:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
可能并非所有旧版 API 都有直接替代方案。 如果新变体 API 未涵盖某个用例,请提交问题。
variantFilter 允许停用所选变体。 请将其替换为 androidComponents.beforeVariants API,例如:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider和
testServer
注册自定义测试环境,以便针对 Android 设备和模拟器运行测试。 改用 Gradle 管理的设备。
sdkDirectory、
ndkDirectory、
bootClasspath、
adbExecutable和
adbExe
使用 Android SDK 的各种组件执行自定义任务。 切换到 androidComponents.sdkComponents。
registerArtifactType、
registerBuildTypeSourceProvider、
registerProductFlavorSourceProvider、
registerJavaArtifact、
registerMultiFlavorSourceProvider和
wrapJavaSourceSet
与 Android Studio 中生成的源代码的处理方式相关的大多数过时功能,这些功能在 AGP 7.2.0 中已停止运行。 这些 API 没有直接替代项。
dexOptions 与 dx 工具相关的过时设置,该工具已被 d8 取代。自 Android Gradle 插件 7.0 起,所有设置均无效。 没有直接替代项。
generatePureSplits 为免安装应用生成配置拆分。 Android App Bundle 现已内置提供配置拆分功能。
aidlPackagedList 要打包在 AAR 中以作为 API 公开给依赖于此库的库和应用的 AIDL 文件。 此方法仍会在 LibraryExtension 上公开,但不会在其他扩展程序类型上公开。

如果您更新到 AGP 9.0 并看到以下出错提示,则表示您的项目仍在引用一些旧类型:

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

如果您因不兼容的第三方插件而受阻,可以选择停用并恢复 DSL 的旧实现以及旧版 Variant API。 在此期间,新接口也可用,您仍然可以将自己的 build 逻辑更新为新 API。如需停用,请在 gradle.properties 文件中添加以下行:

android.newDsl=false

或者,为了更渐进地迁移,AGP 9.4 允许您选择停用单个模块。如需了解具体方法,请参阅选择退出 Variant API 模块。

在 AGP 9.0 中,之前的类会被标记为已废弃。这意味着,选择停用 newDsl 标志的项目将看到弃用警告,包括在 android 代码块本身上。

您也可以在升级到 AGP 9.0 之前,先开始升级到新 API。新接口已在许多 AGP 版本中提供,因此您可以混合使用新旧接口。AGP API 参考文档显示了每个 AGP 版本的 API Surface,以及每个类、方法和字段的添加时间。

我们正在与常用插件的作者联系,帮助他们调整和发布与新模式完全兼容的插件,并将继续增强 Android Studio 中的 AGP 升级助理,以指导您完成迁移。

如果您发现新的 DSL 或 Variant API 缺少某些功能,请尽快提交问题。

内置 Kotlin

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

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

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

对 Kotlin Gradle 插件的运行时依赖

为了提供内置 Kotlin 支持,Android Gradle 插件 9.0 现在对 Kotlin Gradle 插件 (KGP) 2.2.10 具有运行时依赖项。这意味着您不再需要声明 KGP 版本,并且如果您使用的 KGP 版本低于 2.2.10,Gradle 会自动将您的 KGP 版本升级到 2.2.10。 同样,如果您使用的 KSP 版本低于 2.2.10-2.0.2,AGP 会将其升级到 2.2.10-2.0.2,以匹配 KGP 版本。

升级到更高的 KGP 版本

如需使用更高版本的 KGP 或 KSP,请将以下内容添加到顶级 build 文件中:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

降级到较低的 KGP 版本

只有在选择停用内置 Kotlin 的情况下,您才能降级 KGP 版本。 这是因为 AGP 9.0 默认启用内置 Kotlin,而内置 Kotlin 需要 KGP 2.2.10 或更高版本。

如需使用较低版本的 KGP 或 KSP,请在顶级 build 文件中使用严格版本声明来声明该版本:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

请注意,您可以降级到的最低 KGP 版本为 2.0.0。

IDE 支持测试固件

AGP 9.0 为测试固件提供了完整的 Android Studio IDE 支持。

融合库插件

借助 Fused Library 插件(预览版),您可以将多个库作为一个 Android 库 AAR 发布。这样,用户可以更轻松地依赖您发布的工件。

如需了解如何开始使用,请参阅使用 Fused Library 将多个 Android 库作为一个库发布。

行为变更

Android Gradle 插件 9.0 具有以下新行为:

行为 建议
Android Gradle 插件 9.0 默认使用 NDK 版本 r28c。 请考虑明确指定要使用的 NDK 版本。
默认情况下,Android Gradle 插件 9.0 要求库的使用方使用相同或更高的编译 SDK 版本。 使用库时,请使用相同或更高的编译 SDK。 如果无法做到这一点,或者您想让您发布的库的使用者有更多时间进行切换,请明确设置 AarMetadata.minCompileSdk。

AGP 9.0 更新了以下 Gradle 属性的默认值。 这样,您就可以在升级时选择保留 AGP 8.13 的行为:

属性 函数 从 AGP 8.13 更改为 AGP 9.0 建议
android.newDsl 使用新版 DSL 接口,而不公开 android 代码块的旧版实现。
这也意味着,旧版变体 API(例如 android.applicationVariants)将无法再访问。
false → true 您可以通过设置 android.newDsl=false 选择停用。
当项目使用的所有插件和 build 逻辑都兼容后,请移除停用设置。
android.builtInKotlin 启用内置 Kotlin false → true 如果可以,请迁移到内置 Kotlin,或者选择停用。
android.uniquePackageNames 强制要求每个库都具有不同的软件包名称。 false → true 为项目中的所有库指定唯一的软件包名称。 如果无法做到这一点,您可以在迁移期间停用此标志。
android.useAndroidx 默认使用 androidx 依赖项。 false → true 采用 androidx 依赖项。
android.default.androidx.test.runner 默认情况下,使用 androidx.test.runner.AndroidJUnitRunner 类运行设备端测试,替换已弃用的 InstrumentationTestRunner 的默认值
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
false → true 采用 AndroidJUnitRunner,或明确指定自定义 testInstrumentationRunner。
android.dependency.useConstraints 控制配置之间依赖项约束条件的使用。
AGP 9.0 中的默认值为 false,它仅在应用设备测试 (AndroidTest) 中使用约束条件。 如果将此设置设为 true,则会还原为 8.13 行为。
true → false 除非必要,否则请勿在所有位置都使用依赖项限制。 接受此标志的新默认值还会在项目导入过程中启用优化,这应该会缩短具有许多 Android 库子项目的 build 的导入时间。
android.enableAppCompileTimeRClass 针对非最终 R 类编译应用中的代码,使应用编译与库编译保持一致。
这可以提高增量性,并为未来对资源处理流程进行性能优化铺平道路。
false → true 许多项目只需采用新行为,而无需更改源代码。 如果 R 类字段在任何需要常量的地方(例如 switch case)使用,请重构为使用链式 if 语句。
android.sdk.defaultTargetSdkToCompileSdkIfUnset 在应用和测试中,将编译 SDK 版本用作目标 SDK 版本的默认值。
在此变更之前,目标 SDK 版本默认为最低 SDK 版本。
false → true 为应用和测试明确指定目标 SDK 版本。
android.onlyEnableUnitTestForTheTestedBuildType 仅为经过测试的 build 类型创建单元测试组件。
在默认项目中,这会产生一个用于调试的单元测试,而之前的行为是针对调试或发布运行单元测试。
false → true 如果您的项目不需要同时针对调试和发布运行测试,则无需进行任何更改。
android.proguard.failOnMissingFiles 如果 AGP DSL 中指定的任何 keep 文件在磁盘上不存在,则构建失败并报错。在此次变更之前,文件名中的拼写错误会导致文件被静默忽略。 false → true 移除所有无效的 ProGuard 文件声明
android.r8.optimizedResourceShrinking 允许 R8 通过同时考虑类和 Android 资源来保留更少的 Android 资源。 false → true 如果项目的保留规则已完整,则无需进行任何更改。
android.r8.strictFullModeForKeepRules 允许 R8 在保留类时不隐式保留默认构造函数,从而减少保留的内容。 也就是说,-keep class A 不再暗示 -keep class A { <init>(); }
false → true 如果项目的保留规则已完整,则无需进行任何更改。

在需要保留默认构造函数的任何情况下,请在项目的保留规则中将 -keep class A 替换为 -keep class A { <init>(); }。
android.defaults.buildfeatures.resvalues 在所有子项目中启用 resValues true → false 通过在这些项目的 Gradle build 文件中设置以下内容,仅在需要 resValues 的子项目中启用它:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders 在所有子项目中启用着色器编译 true → false 仅在包含要编译的着色器的子项目中启用着色器编译,方法是在这些项目的 Gradle build 文件中设置以下内容:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed 在 AGP 9.0 中,getDefaultProguardFile() 将仅支持 proguard-android-optimize.txt,而不支持 proguard-android.txt。这是为了防止意外使用 proguard-android.txt 中包含的 ­dontoptimize 标志。 false → true 如果您想避免优化,可以在自定义 proguardFile 中明确指定 ­dontoptimize,同时使用 proguard-android-optimize.txt。请务必尽可能从此文件中移除 ­dontoptimize 标志,因为它会降低 R8 优化优势。如果不想启用,请通过设置 android.r8.globalOptionsInConsumerRules.disallowed=false 选择停用。
android.r8.globalOptionsInConsumerRules.disallowed 从 AGP 9.0 开始,如果消费者保留文件包含有问题的 Proguard 配置,Android 库和功能模块发布将会失败。包含 ­dontoptimize 或 ­dontobfuscate 等全局选项的使用方保留文件应仅在应用模块中使用,并且可能会降低库用户的优化优势。如果此类全局选项嵌入在预编译的依赖项(JAR 或 AAR)中,Android 应用模块编译会静默忽略这些选项。您可以通过在 configuration.txt(通常位于 <app_module>/build/outputs/mapping/<build_variant>/configuration.txt 等路径中)中查看如下注释来了解何时会发生这种情况:# REMOVED CONSUMER RULE: ­dontoptimize false → true 已发布的库应移除所有不兼容的规则。内部库应将所有不兼容但必需的规则移至应用模块中的 proguardFile。如需停用,请设置 android.r8.globalOptionsInConsumerRules.disallowed=false。在所有消费者 Keep 文件都兼容后,请移除停用设置。
android.sourceset.disallowProvider 禁止使用 AndroidSourceSet DSL 为生成的源代码传递提供程序。 false → true 使用 androidComponents 上的 Sources API 注册生成的源代码。
android.custom.shader.path.required 如果启用了着色器编译,则需要在 local.properties 中明确设置着色器编译器路径。 false → true 将 glslc.dir=/path/to/shader-tools 添加到项目的 local.properties 中。

已移除的功能

Android Gradle 插件 9.0 移除了以下功能:

  • 嵌入式 Wear OS 应用支持
    AGP 9.0 移除了对嵌入 Wear OS 应用的支持,Play 不再支持此功能。这包括移除 wearApp 配置和 AndroidSourceSet.wearAppConfigurationName DSL。如需了解如何将应用发布到 Wear OS,请参阅分发到 Wear OS 平台。
  • androidDependencies 和 sourceSets 报告任务
  • 密度拆分 APK 支持
    AGP 9.0 移除了对基于屏幕密度创建拆分 APK 的支持。该功能和相关 API 已被移除。如需使用 AGP 9.0 或更高版本根据屏幕密度拆分 APK,请使用 app bundle。

更改了 DSL

Android Gradle 插件 9.0 包含以下破坏性 DSL 变更:

  • CommonExtension 的形参化已被移除。

    就其本身而言,这只是一个源代码级破坏性更改,旨在帮助避免未来发生源代码级破坏性更改,但这也意味着块方法需要从 CommonExtension 移至 ApplicationExtension、LibraryExtension、DynamicFeatureExtension 和 TestExtension。

    将项目升级到 AGP 9.0 时,请重构使用这些参数或块方法的 Gradle 插件代码。例如,以下插件已更新,以移除 type 参数,并且不依赖于已移除的块方法:

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    对于以一系列 AGP 版本为目标的插件,直接使用 getter 与低于 9.0 的 AGP 版本具有二进制兼容性。

移除了 DSL

Android Gradle 插件 9.0 移除了以下内容:

已移除的 API

Android Gradle 插件 9.0 移除了以下内容:

已移除 Gradle 属性

以下 Gradle 属性最初是作为全局停用默认启用的功能的方式添加的。

自 AGP 8.0 或更低版本起,这些功能默认处于停用状态。仅在需要使用这些功能的子项目中启用它们,以提高构建效率。

属性 函数 替换
android.defaults.buildfeatures.aidl 在所有子项目中启用 AIDL 编译 通过在这些项目的 Gradle build 文件中设置以下属性,仅在具有 AIDL 源代码的子项目中启用 AIDL 编译:
在每个包含 AIDL 源代码的子项目的 Gradle build 文件中添加
android {
  buildFeatures {
    aidl = true
  }
}
android.defaults.buildfeatures.renderscript 在所有子项目中启用 RenderScript 编译 通过在这些项目的 Gradle build 文件中设置以下属性,仅在具有 renderscript 源代码的子项目中启用 renderscript 编译:
android {
  buildFeatures {
    renderScript = true
  }
}

强制执行的 Gradle 属性

如果您设置了以下 Gradle 属性,AGP 9.0 会抛出错误。

Android Gradle 插件升级助理不会将使用这些属性的项目升级到 AGP 9.0。

属性 函数
android.r8.integratedResourceShrinking 现在,资源缩减始终作为 R8 的一部分运行,之前的实现已被移除。
android.enableNewResourceShrinker.preciseShrinking 资源缩减现在始终使用精确的资源缩减,这样可以移除更多资源。

R8 变更

AGP 9.0.0 包含以下 R8 变更。

新配置选项 -processkotlinnullchecks

我们添加了新的 R8 选项 -processkotlinnullchecks,用于配置 R8 以处理 Kotlin null 检查。该选项接受一个必需参数,该参数必须是以下三个值之一:keep、remove_message 和 remove。该选项会处理 Kotlin 编译器添加的以下 null 检查:

class kotlin.jvm.internal.Intrinsics {
  void checkNotNull(java.lang.Object);
  void checkNotNull(java.lang.Object, java.lang.String);
  void checkExpressionValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkNotNullExpressionValue(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkFieldIsNotNull(java.lang.Object, java.lang.String);
  void checkFieldIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkParameterIsNotNull(java.lang.Object, java.lang.String);
  void checkNotNullParameter(java.lang.Object, java.lang.String);
}

选项值按从最弱到最强的顺序排列,具有以下效果:

  • keep 不会更改检查。
  • remove_message 会将每个检查方法调用重写为对调用的第一个参数调用 getClass()(实际上保留了 null 检查,但没有任何消息)。
  • remove 会完全移除这些检查。

默认情况下,R8 使用 remove_message。任何 -processkotlinnullchecks 规范都会覆盖该规范。如果多次指定,则使用最强的值。

停止将保留信息传播到伴随方法

当 keep 规则与需要脱糖的接口方法匹配时,R8 之前会在内部将禁止优化和禁止缩减位转移到合成的伴随方法。

从 AGP 9.0 开始,保留规则不再适用于伴生方法。这与保留规则不适用于其他编译器合成的字段/方法/类这一事实一致。

通过将禁止优化和禁止缩减位转移到配套方法,之前支持以下用例:

  1. 使用 default/static/private 接口方法将库编译为 DEX(minSdk < 24),并使用保留接口方法的规则。
  2. 使用类路径和 -applymapping 上的库编译应用。
  3. 合并应用和库。

请注意,这仅适用于 -applymapping,因为 disallow obfuscation 位不会转移到伴生方法,也就是说,第 1 步中生成的伴生类的方法名称会被混淆。

今后,minSdk < 24 将不再支持此用例。解决方法是执行以下操作:

  1. 将具有 default/static/private 接口方法的库脱糖为具有 minSdk < 24 的类文件。
  2. 使用 R8 和在伴随类上保留接口方法的规则编译脱糖工件。
  3. 使用类路径中的库编译应用。
  4. 合并应用和脱糖工件。

另一个副作用是,无法再在接口伴生方法中保留匿名类和局部类的内部类和封闭方法属性。

将默认发出的源文件更改为 r8-map-id-<MAP_ID>

此变更自 8.12.0 起在 AGP 中生效。

当需要回溯时(即启用混淆处理或优化时),类的默认发出的源文件属性会从 SourceFile 更改为 r8-map-id-<MAP_ID>。

对于经过混淆处理的堆栈轨迹,新的源文件属性可以提取轨迹还原所需的映射文件的 ID,该 ID 可用于支持在 Logcat 中自动还原堆栈轨迹。

如果使用了自定义源文件属性 (-renamesourcefileattribute),则此自定义源文件属性仍会优先使用。

在 ProGuard 兼容模式下(当 gradle.properties 包含 android.enableR8.fullMode=false 时),只有在不保留 SourceFile 属性的情况下,发出 r8-map-id-<MAP_ID> 的源文件属性才会生效。如果应用使用 ProGuard 兼容模式,并且希望在堆栈轨迹中包含映射文件 ID,则应移除 -keepattributes SourceFile(或迁移到 R8 完整模式)。

r8-map-id-<MAP_ID> 中使用的映射 ID 是完整映射哈希,而不是之前使用的映射哈希的 7 个字符前缀。

在 L8 脱糖中启用最小化合成名称

D8 生成的合成类的名称通常包含子字符串 $$ExternalSynthetic,该子字符串表示这是 D8 生成的合成类。此外,合成类的名称还会对合成类型(例如 Backport、Lambda)进行编码。这会对生成的 DEX 大小产生负面影响,因为类名称会在字符串池中占用更多空间。

AGP 9.0 会配置 L8(核心库脱糖),以便包含所有 j$ 类的 DEX 文件对合成类使用新的缩短类名格式。新类名称使用数字 ID(例如 $1)。

移除对 -addconfigurationdebugging 的支持

AGP 9.0 移除了对 -addconfigurationdebugging 的支持。现在,如果使用该标志,编译器会报告警告。

移除了对从 D8/R8 生成 L8 规则的支持

此变更仅与直接使用 D8/R8 命令行或 API 的开发者相关。

R8 9.0 移除了对从 D8 和 R8 为 L8 生成 keep 规则的支持。 您应改用 TraceReferences。

更具体地说,方法 D8Command.builder.setDesugaredLibraryKeepRuleConsumer 和 R8Command.Builder.setDesugaredLibraryKeepRuleConsumer 已被移除,并且 D8 和 R8 的命令行选项中已移除对 --desugared-lib-pg-conf-output 的支持。

修复的问题

Android Gradle 插件 9.0.0

已修复的问题
Android Gradle 插件
功能请求:将理想的 AGP 版本作为属性注入
稳定 SingleArtifact.VERSION_CONTROL_INFO_FILE
androidTest connectedCheck logcat 输出已损坏
AGP 中的内置 Kotlin 支持不应与 Kotlin 源代码集同步
missingDimensionStrategy 倾向于选择与其自身名称匹配的变种,即使该变种来自不相关的维度
AGP 中的内置 Kotlin 支持不应与 Kotlin 源代码集同步
AGP 9.0.0-rc01 无法通过 kotlin() 函数解析 Kotlin 库
Built-in-kotlin 不会在 Maven pom 中发布 kotlin-stdlib 依赖项约束
针对 compileSdk 和 targetSdk 之间的差异添加测试用例
resConfigs 值为空会导致 aapt 错误不明确
纯 Java 项目依赖于 kotlin stdlib。
在 AGP 9.0 中移除已废弃的 KotlinMultiplatformAndroidCompilationBuilder 属性
`com.android.tools.build:gradle:9.0.0-alpha05` 应具有对 KGP 和 gradle-api 的 API 依赖项
重命名 com.android.experimental.built-in-kotlin Gradle 插件
AGP9:“variant.sources.kotlin!!.addGeneratedSourceDirectory()”不起作用
编译 SDK 上的 AAR 元数据检查使用旧版 DSL
移除了已废弃的 `com.android.build.api.dsl.ManagedDevices.devices` 属性
AGP 中的内置 Kotlin 支持不应与 Kotlin 源代码集同步
如果使用方 keep 文件包含 -dontobfuscate,则 Android 库发布失败
没有用于打印优化资源映射的选项
在通过此阶段后,调用 finalizeDsl 会出错
即使 Jetifier 已停用,AGP 也会初始化 Jetifier 配置
当 `kotlin.stdlib.default.dependency` 为 true 时,内置 Kotlin 不会将 kotlinStdlib 作为编译时间依赖项添加到模块和 pom 文件中
默认情况下,新的优化 DSL 不会创建 configuration.txt
AGP 8.13.0 无法验证模块中的导航图
AGP 使用已废弃的 Gradle API:多字符串表示法
在用户尝试将旧版 MultiDex 库与 minSdkVersion >=21 搭配使用时发出警告
如果存在代码生成任务,构建会失败
如果 `android.builtInKotlin=false`、`android.newDsl=false` 且 `android.enableLegacyVariantApi=false`,使用 `kotlin-android` 插件将会失败,并显示“API‘applicationVariants’已过时”
当 kotlin.stdlib.default.dependency=false 时,内置 Kotlin 无法解析无版本 kotlin-stdlib
DexData 打开文件后未关闭,导致无法清理
AndroidSourceDirectorySet 应在 AGP 9.0 中停止扩展 PatternFilterable
仅测试模块中的测试夹具错误
在测试固件中使用上下文接收器时出现不正确的错误
testFixtures 中 Kotlin 代码的 IDE 错误不正确
与 `kotlin-kapt` 不同,`legacy-kapt` 插件会跳过注解处理
compileSdkSpec.minorApiLevel 无法与 SettingsExtension 搭配使用
[fused lib - public] Generated fused library does not include sources
extractNativeLibs 和 useEmbeddedDex 不应来自清单
AGP 9.0.0-alpha09 中 R8 发出的警告
在 AGP 9.0 中移除已废弃的 AndroidSourceSet.jni
在 AGP 9.0 中移除了 Installation.installOptions()
移除了 AGP 9.0 中的 BuildType.isRenderscriptDebuggable。
移除 android.defaults.buildfeatures.renderscript
`com.android.kotlin.multiplatform.library` 在 Gradle 管理的设备上崩溃
移除了 `android.defaults.buildfeatures.aidl` 默认 gradle.properties 标志
ProGuard 文件不存在时构建失败
移除 buildconfig 默认 gradle.properties 标志
将应用的 targetSdk 默认值更改为基于 compileSdk(而非 minSdk)
启用 `isIncludeAndroidResources` 后,`process{Variant}UnitTestManifest` 无法在 AGP 8.12.0 中合并 tools:overrideLibrary 用法
AGP 导致 Gradle 中出现 JVM 测试任务废弃警告
DependencyReportTask 与配置缓存不兼容
在 AGP 9.0 中,将默认源/目标 Java 版本从 Java 8 切换到 Java 11
将 android.useAndroidX 默认值切换为 true
使用内置 Kotlin 应用 kapt 插件时,异常处理机制更完善。
android.proguard.failOnMissingFiles 不适用于 consumerProguardFiles
将 Kotlin Gradle 插件依赖项更新为 2.2.10
使用 KGP API 创建 KotlinJvmAndroidCompilation
Kotlin 显式 API 模式已应用于测试源代码
lint
AGP 8.11.0:使用 apply(from = "…") 应用 .gradle.kts 文件时,lintAnalyzeRelease 任务会崩溃
Lint 检查 SdkIntAtLeast 检查不会检查带注解的值是否正确
内置 Kotlin 不会将 .kotlin_module 添加到 META-INF
Lint 类路径包含不同版本的重复类
覆盖私有资源的权宜解决方法不起作用 (tools:override = "true")
bug:移除未使用的资源时,不会同时移除其翻译,也不会询问是否移除
Lint 抛出警告“Could not clean up K2 caches”(无法清理 K2 缓存)
Lint 抛出警告“Could not clean up K2 caches”
lint 集成
由于 systemPropertyInputs.javaVersion 差异,AndroidLintAnalysisTask 缓存未命中不同的 JDK 供应商或次要版本
Lint 会自动使用最新安装的 SDK(尽管有 compileSdk),不会注册为任务输入,并且会破坏缓存
缩减器 (R8)
如果使用最终资源 ID,R8 优化后的资源缩减功能会静默失败