Android Gradle 插件8.0.0(2023年4月)
刚刚发现,新创建的一个Android项目,成功运行到手机上了,然后在代码中想使用一下BuildConfig这个类,发现没有,按以前的经验,项目刚创建时BuildConfig是不存在的,但是一但成功运行到手机上后就肯定是已经自动生成了的,但是这次是真没有这个类,如果在代码中不理会报错直接使用BuildConfig,运行将会失败,会提示找不到这个类。
几经周折,发现是在Android Gradle Plugin 8.0(简称AGP 8.0)版本的时候发生了改变,运行AGP 8.0需要JDK 17,官网链接:https://developer.android.google.cn/build/releases/gradle-plugin#8-0-0,这里我们顺便把AGP 8.0的其他功能也一起记录一下,这里只记录了其中一部分主要功能,完整的还请查看官网。
Android Gradle 插件 8.0.0 是一个主要版本,包含各种新功能和改进。
兼容性
| 最小版本 | 默认版本 | 备注 | |
|---|---|---|---|
| Gradle | 8.0 | 8.0 | 查看更新Gradle学习更多 | 
| SDK Build Tools | 30.0.3 | 30.0.3 | 安装或配置SDK构建工具 | 
| NDK | N/A | 25.1.8937393 | 安装或配置不同版本的NDK | 
| JDK | 17 | 17 | 查看设置JDK版本学习更多 | 
重大更改:模块级构建脚本中需要命名空间
之前是在清单文件中通过package设置命名空间,如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.helloworld">
新版本设置官网链接:https://developer.android.google.cn/studio/build/configure-app-module?hl=zh-cn#set-namespace
每个 Android 模块都有一个命名空间,此命名空间为Kotlin或Java包名,用于产生R和BuildConfig类。
命名空间由模块的 build.gradle 文件中的 namespace 属性定义,如以下代码段所示。namespace 最初会设为您在创建项目时选择的软件包名称。
android {
    namespace "com.example.myapp"
    ...
}
重大更改:构建选项默认值
从 AGP 8.0 开始,这些标志的默认值已更改以提高构建性能。要升级AGP请使用AGP Upgrade Assistant(Tools > AGP Upgrade Assistant)。升级助手将指导您更新代码以适应新行为或设置flags以保留以前的行为。
| Flag | 新的默认值 | 以前的默认值 | 说明 | 
|---|---|---|---|
| android.defaults.buildfeatures.buildconfig | false | true | AGP 8.0 默认不产生 BuildConfig | 
| android.defaults.buildfeatures.aidl | false | true | AGP 8.0 默认不启用 AIDL支持 | 
| android.defaults.buildfeatures.renderscript | false | true | AGP 8.0 默认不启用 RenderScript支持 | 
| android.nonFinalResIds | true | false | AGP 8.0 默认使用 non-final fields产生R类 | 
| android.nonTransitiveRClass | true | false | AGP 8.0仅为当前模块中定义的资源生成R类。 | 
| android.enableR8.fullMode | true | false | AGP 8.0 默认启用 R8 完整模式。更多详情请参见 R8全模式。 | 
在这里可以看到android.defaults.buildfeatures.buildconfig标志以前默认值为true,到APG8.0版本后默认为false,也就是说现在默认是不会生成BuildConfig.java文件了,那如何配置它生成BuildConfig.java文件呢?在官网链接有说到:https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/dsl/BuildFeatures#buildconfig,如下:
abstract var buildConfig: Boolean?标志启用/禁用
BuildConfig类的生成。
将值设置为null重置为默认值。默认值为true。
您可以通过在构建根项目的gradle.properties文件中添加一行
android.defaults.buildfeatures.buildconfig=true来覆盖构建中所有项目的默认设置。
更多关于这个特性的信息在:TBD,TBD(To Be Determined)意思为待定。
具体设置方式为:
-  在模块中设置,只对该模块生效: android { buildFeatures { buildConfig = true } }
-  在 gradle.properties中添加一行,对所有模块生效:android.defaults.buildfeatures.buildconfig = true
-  对于其它一些设置也是类似的,在Android开发者网站的官网搜索 BuildFeatures,然后查看aidl这个属性即可知道,如下:
   
新的设置插件
AGP 8.0.0-alpha09 引入了新的设置插件。设置插件可让您将全局配置(适用于所有模块的配置)集中在一处,因此您无需在多个模块中复制并粘贴配置。此外,您可以使用设置插件来创建工具 执行配置文件,或如何运行工具的不同指令,并在它们之间进行切换。
注意:该设置插件目前仅适用于 Groovy。
要使用设置插件,请在settings.gradle文件中应用该插件:
apply plugin 'com.android.settings'
集中全局配置
要配置全局配置,请在settings.gradle文件中使用新的android块,如下:
android {
  compileSdk 31
  minSdk 28
  ...
}
运行 AGP 8 需要 JDK 17.0
使用 Android Gradle Plugin 8.0 构建应用程序时,现在需要 JDK 17 才能运行 Gradle。Android Studio Flamingo 捆绑了 JDK 17 并配置 Gradle 默认使用它,这意味着大多数 Android Studio 用户不需要对其项目进行任何配置更改。
如果您需要在 Android Studio 内手动设置 AGP 使用的 JDK 版本 ,则需要使用 JDK 17 或更高版本。
当使用独立于 Android Studio 的 AGP 时,请通过设置环境变量JAVA_HOME或使用-Dorg.gradle.java.home 命令行选项设置JDK17的安装目录来升级JDK版本。



















