没有BuildConfig

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 是一个主要版本,包含各种新功能和改进。

兼容性

最小版本默认版本备注
Gradle8.08.0查看更新Gradle学习更多
SDK Build Tools30.0.330.0.3安装或配置SDK构建工具
NDKN/A25.1.8937393安装或配置不同版本的NDK
JDK1717查看设置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 模块都有一个命名空间,此命名空间为KotlinJava包名,用于产生RBuildConfig类。

命名空间由模块的 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.buildconfigfalsetrueAGP 8.0 默认不产生BuildConfig
android.defaults.buildfeatures.aidlfalsetrueAGP 8.0 默认不启用AIDL支持
android.defaults.buildfeatures.renderscriptfalsetrueAGP 8.0 默认不启用RenderScript支持
android.nonFinalResIdstruefalseAGP 8.0 默认使用non-final fields产生R
android.nonTransitiveRClasstruefalseAGP 8.0仅为当前模块中定义的资源生成R类。
android.enableR8.fullModetruefalseAGP 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)意思为待定。

具体设置方式为:

  1. 在模块中设置,只对该模块生效:

    android {buildFeatures {buildConfig = true}
    }
    
  2. gradle.properties中添加一行,对所有模块生效:

    android.defaults.buildfeatures.buildconfig = true
    
  3. 对于其它一些设置也是类似的,在Android开发者网站的官网搜索BuildFeatures,然后查看aidl这个属性即可知道,如下:
    在这里插入图片描述在这里插入图片描述

新的设置插件

AGP 8.0.0-alpha09 引入了新的设置插件。设置插件可让您将全局配置(适用于所有模块的配置)集中在一处,因此您无需在多个模块中复制并粘贴配置。此外,您可以使用设置插件来创建工具 执行配置文件,或如何运行工具的不同指令,并在它们之间进行切换。

注意:该设置插件目前仅适用于 Groovy。

要使用设置插件,请在settings.gradle文件中应用该插件:

apply plugin 'com.android.settings'

集中全局配置

要配置全局配置,请在settings.gradle文件中使用新的android块,如下:

android {compileSdk 31minSdk 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版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7166.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子企业MES管理系统如何加强生产现场管控

随着数字化时代的到来&#xff0c;中小型电子企业面临着提升生产现场管控的挑战。为了应对这一挑战&#xff0c;许多企业开始采用MES生产管理系统。本文将探讨MES生产管理系统如何帮助电子企业加强生产现场管控&#xff0c;提高生产效率和质量。 在电子企业的生产现场&#xf…

【零基础入门学习Python---Python中Web开发基础之快速入门实践】

&#x1f680; 零基础入门学习Python&#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜…

相对位置编码(relative position representation)

最近在看wenet项目时&#xff0c;发现其用的是相对位置编码。同时在做tts时&#xff0c;发现其效果还可以&#xff0c;但是就是对于长文本的生成效果不好&#xff0c;一直在思考是什么原因导致的&#xff0c;有想到最有可能是fastspeech是的绝对位置编码问题&#xff0c;所以还…

计算机网络

计算机网络 学习路径规划Cisco Packet TracerCisco Packet Tracer下载和安装探究集线器性质访问Web服务器&#xff08;加深对网络体系结构的理解&#xff09;_一台主机访问一个Web服务器&#xff0c;HTTP协议 MAC帧交换机网桥网桥和交换机的区别 学习路径规划 用cisco的课程和…

CV多模态和AIGC的原理解析:从CLIP、BLIP到Stable Diffusion、Midjourney

前言 终于开写本CV多模态系列的核心主题&#xff1a;stable diffusion相关的了&#xff0c;为何执着于想写这个stable diffusion呢&#xff0c;源于三点 去年stable diffusion和midjourney很火的时候&#xff0c;就想写&#xff0c;因为经常被刷屏&#xff0c;但那会时间错不…

OpenCV(图像处理)-基于python-滤波器(低通、高通滤波器的使用方法)

1.概念介绍2. 图像卷积filter2D() 3. 低通滤波器3.1 方盒滤波和均值滤波boxFilter()blur() 3.2 高斯滤波&#xff08;高斯噪音&#xff09;3.3 中值滤波&#xff08;胡椒噪音&#xff09;3.4 双边滤波 4. 高通滤波器4.1Sobel&#xff08;索贝尔&#xff09;&#xff08;高斯&am…

查询Oracle当前用户下,所有数据表的总条数

1. 需求 查询Oracle当前用户下&#xff0c;所有数据表的总条数 2.方法 存储过程 3. 操作 3.1 新建 右键点击Procedures&#xff0c;点击New 点击OK 把存储过程写进去&#xff0c;然后点击编译运行&#xff1a; create or replace procedure tables_count ist_count n…

uni-App踩坑记录

​ 1、uni自己封装的axios在真机中失效&#xff0c;发不出请求 uniapp中使用axios 需要配置适配器 (添加适配器有点费劲&#xff0c;直接封装uni自带请求也可以) axios-adapter-uniapp传送门 axios.defaults.adapter function(config) { //自己定义个适配器&#xff0c;用来…

WIN11系统安装MySql8.0.15详细安装

一.下载mysql8.015数据库 下载地址&#xff1a; 如下图所示 此处下载的是8.0.15版本&#xff0c;免安装版&#xff0c;系统为64位系统&#xff1a; 二&#xff0c;配置mysql环境变量: D:\program_file_worker\mysql8.15\mysql-8.0.15-winx64\bin 三. 环境配置完成后&#xff…

UI自动化截图之chromeFirefox篇

在web的UI自动化中&#xff0c;小伙伴们经常遇到的一个问题是&#xff0c;IE的截屏非常好实现&#xff08;一个save_screenshot即可满足&#xff09;&#xff0c;而chrome和Firefox的全屏截图就让人很是头疼了。今天作者来给大家分享下自己实例中使用的chrome和Firefox浏览器全…

Jira UI Locations及注意事项总结

issue view ui locations : https://developer.atlassian.com/server/jira/platform/issue-view-ui-locations/#issue-operations-bar-locations1.问题操作栏Issue Operations Bar Locations模块分为两部分: opsbar-operationsflopsbar-transitions两个location.共同定义了问题…

【uniapp】uniapp反向代理解决跨域问题(devServer)

背景介绍 前段时间&#xff0c;在拿uniapp开发的时候&#xff0c;出现了跨域问题&#xff0c;按理说跨域应该由后端解决&#xff0c;但既然咱前端可以上&#xff0c;我想就上了&#xff08;顺手装个13&#xff09; 首先介绍什么是跨域 出于浏览器的同源策略&#xff0c;在发…