没有BuildConfig

news2024/11/24 4:44:47

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 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版本。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优雅码住!ChatGPT的五大开源替代方案

自去年11月发布以来&#xff0c;ChatGPT吸引了全球各行业人士的注意力和想象力。人们将它用于各种任务和应用程序&#xff0c;而且它有可能改变流行的应用程序并创建新的应用程序。 但ChatGPT也引发了微软和谷歌等科技巨头之间的人工智能竞赛&#xff0c;使得该行业在大型语言模…

Docker服务编排之Docker Compose的使用

Docker服务编排 概念&#xff1a;按照一定的业务规则批量的管理容器 微服务架构的应用系统中一般包含很多微服务&#xff0c;一个微服务中又包含很多的实例&#xff0c;每个微服务都要手动管理&#xff0c;维护的工作量很大。 拉去镜像&#xff0c;创建多个容器&#xff0c;分…

使用YOLOv5实现实时目标检测结果保存

本文将分享保存实时目标检测结果的方法&#xff0c;包括将目标信息逐帧保存到.txt文件中、逐帧输出检测结果图片、以及如何保存所有检测图片&#xff08;包括视野中无目标的帧&#xff09;。 目录 0.准备 1.目标信息保存 2.检测图片保存 3.保存所有帧 0.准备 本文以单摄像…

基于卷积变分自动编码器的3D数据处理与重建【CVAE】

在这个项目中&#xff0c;我们将学习如何使用卷积变分自动编码器 (CVAE) 来处理和重建 3D 湍流数据。 我们使用计算流体动力学 (CFD) 方法生成 3D 湍流立方体&#xff0c;每个 3D 立方体沿着三个速度分量携带物理信息&#xff08;与图像数据类似&#xff0c;被视为单独的通道&…

elk中kibana使用

1.前言 kibana是一款作为elasticsearch可视化的一款软件&#xff0c;将elasticsearch中的数据以可视化的状态展现出来&#xff0c;kibana也提供了查询、统计、修改索引等功能 2.kibana使用 索引管理 在索引管理中&#xff0c;可以看到所有索引的状态、运行状况、主分片、副本…

76-基于51单片机家庭红外人体检测震动报警系统(程序+原理图+元件清单全套资料)...

资料编号&#xff1a;076 功能介绍&#xff1a;采用51单片机作为主控CPU&#xff0c;采用红外接触传感器采集当前是否有人&#xff0c;采用震动传感器采集当前是否有震动&#xff0c;起到家庭防盗效果&#xff0c;采用按键设置当前布防/撤防状态&#xff0c;布防状态下&#xf…

Binder系列--获取ServiceManager

获取ServiceManager hongxi.zhu 2023-7-1 以SurfaceFlinger为例&#xff0c;分析客户端进程如何获取ServiceManager代理服务对象 主要流程 SurfaceFlinger中获取SM服务 frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp // publish surface flingersp<…

适合初中生用的台灯有哪些?这样的台灯最适合学生!

对于学生而言台灯主要的点就是能够护眼、缓解眼睛疲劳&#xff0c;因为学生需要长时间的学习和用眼而且可以休息放松的时间比较少&#xff0c;导致眼睛过度疲劳&#xff0c;这也是为什么这么多中小学生近视的原因。那么我们应该怎么样选好一款台灯呢&#xff1f; 要想台灯能护眼…

Linux系统之dnf包管理器的基本使用

Linux系统之dnf包管理器的基本使用 一、dnf工具介绍1. dnf工具简介2. dnf的功能 二、DNF的安装1. 检查本地操作系统版本2. 安装epel3. 检查本地yum仓库状态4. 安装dnf包 三、dnf的使用帮助1. 查看dnf版本2. 查看dnf命令的帮助信息3. dnf命令的选项解释 四、dnf命令的基本使用1.…

浅谈Unicode与UTF-8

我们都知道&#xff0c;在Golang中字符都是以UTF-8编码的形式存储&#xff0c;当我们使用range遍历字符串的时候&#xff0c;go会为我们取出一个字符(rune)而不是一个byte&#xff0c;例如以下例子&#xff0c;我们使用range迭代取出第一个字符“你”&#xff0c;并且打印输出取…

TechSmith Camtasia for Mac 2023.0.3 中文破解版 Win/Mac上强大的屏幕录像工具

Camtasia 是Win/Mac上最强大的屏幕录像工具之一&#xff0c;该软件集成了视频录制、编辑、导出等一系列功能&#xff0c;支持鼠标光标样式、草绘示意插图、冰冻区域等实用的功能&#xff0c;还具有移动客户端让你录制视频&#xff0c;然后通过无线传输到 Camtasia 中进行编辑&a…

判断数组中所有元素是否均为实数对象 numpy.isrealobj()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中所有元素 是否均为实数对象 numpy.isrealobj() [太阳]选择题 请问关于以下代码的说法错误的是&#xff1f; import numpy as np a np.array([1, 2, 3]) b np.array([1, 1 2j, …

剑指 Offer 19: 正则表达式匹配

可能存在一个现象&#xff0c;就是aaab&#xff0c;然后a*ab&#xff0c;那么这样*只能代表一个a。 这道题可以使用动态规划的方式来解决。 这道题就是状态的判断&#xff1a;是否两个都为0&#xff1f;只有两个都为0才为true&#xff0c;并且判断*&#xff0c;有两个情况&…

Docker WebRTC容器部署方案

文章目录 WebRTC简介WebRTC Docker容器部署优势方案&#xff08;mpromonet/webrtc-streamer&#xff09;步骤 WebRTC简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种开放的实时通信技术&#xff0c;它允许浏览器之间进行音频、视频和数据的实时传输。W…

从古代八卦探究计算机的八进制

八进制&#xff0c;即八卦&#xff0c;是中国古代哲学体系中非常重要的一个概念&#xff0c;它被广泛应用于易经、道家、儒家等诸多领域。随着计算机科学的快速发展&#xff0c;人们开始思考&#xff1a;八进制是否可以应用到计算机上&#xff1f; 一、什么是八进制&#xff1…

Javaee技术目的总结

一.前节回顾 在前一节中&#xff0c;我们了解了&#xff1a; 1.将中央控制器中的Action容器&#xff0c;变成可控制! 2.针对于反射调用业务代码&#xff0c;最终页面跳转 3.jsp页面参数传递后台的代码优化字段太多有影响&#xff01; 二.项目部署前期准备工作 1.项目运行环境…

c语言 va_start/va_end函数

c语言 va_satrt和va_end函数介绍 头文件&#xff1a;#include <stdarg.h> 函数原型&#xff1a;void va_start(va_list ap, last) 和 void va_end(va_list ap); 可以被参数数量和类型可变的函数调用。 可变参数用…&#xff08;3个省略号表示可变参数列表&#xff09; …

深入理解 http 反向代理

要理解什么是 反向代理(reverse proxy) , 自然你得先知道什么是 正向代理(forward proxy). 另外需要说的是, 一般提到反向代理, 通常是指 http 反向代理, 但反向代理的范围可以更大, 比如 tcp 反向代理, 在这里, 不打算讨论 tcp 之类的反向代理, 当文中说到反向代理时, 指的就是…

C++day5

2、 #include <iostream> using namespace std; static int blood 10000; class hero { protected:string name;int hp;int attack; public:hero(){}//无参构造hero(string name,int hp,int attack):name(name),hp(hp),attack(attack){}//有参构造virtual void Atk(){b…

使用supervisor管理进程

写目录 一、supervisor简介二 、supervisor安装2.1下载supervisor2.2配置文件详解2.3把squid服务加入到supervisor管理当中 一、supervisor简介 supervisor是Python开发的c/s服务&#xff0c;是Linux系统下的进程管理工具。可以监听、启动、停止、重启一个或多个进程用supervi…