当前位置: 首页 > news >正文

Android Studio新版本的一个资源id无法找到的bug解决

Android Studio新版本的一个资源id无法找到的bug解决

文章目录

  • Android Studio新版本的一个资源id无法找到的bug解决
    • 一、前言
    • 二、Android Studio的无法获取到资源id的bug
      • 1、一段简单的Java代码
      • 1、错误现象
      • 2、错误解决方法
    • 三、其他
      • 1、小结
      • 2、gradle.properties文件 其他相关属性
      • 3、Android13系统签名应用代码在旧Gradle无法编译的小bug

一、前言

Android Studio 导入以前的项目发现资源文件明明有id声明了,但是无法Java代码中无法识别的问题。

比如switch 的case R.id.textView: 会编译报错,这个textView 已经在res的布局文件中有声明了。

后面验证对比了一下,发现是Android Studio Gradle版本的一个bug:

gradle 6.5 没有这个问题
gradle 8.7 就有这个问题

新下载的Android Studio默认都是使用的最新的gradle版本8.7,当然也能兼容旧版本的gradle。

这是一个小问题,在配置文件中多配置一个属性“android.nonFinalResIds”就行了。

下面简单记录一下。

二、Android Studio的无法获取到资源id的bug

1、一段简单的Java代码

    //首先layout的一个TextView已经声明了textView的idprivate void test(View view) {if (v.getId() == R.id.textView) { //这里不会编译报错return;}switch (view.getId()) {case R.id.textView: //这行会编译报错!break;default:break;}}

把上面这段代码加载新版本的Android Studio项目的任意一个类中直接编译是会报错的。

1、错误现象

在这里插入图片描述

上面可以看到报错信息是:
Constant expression required (需要常量表达)
简单的理解就是,gradle 编译环境认为 R.id.textView 不是一个数值。
这个算是Android Studio 新版本的有个误判吧。

网上也有人是这样说的:

Android Studio 中使用switch语句时报错Constant expression required:
在Android Studio中使用JDK17以上版本,会出现switch语句报错:
"Constant expression required"的问题,
这是因为在JDK17中switch语句的条件表达式支持使用枚举类型,而这个特性还没有被支持。

但是我用gradle 8.7搭配JDK8 也是有问题的,说明还是和Android Studio的编译环境有关。

2、错误解决方法

通过网上搜索还是能发现了解决方法如下:

在这里插入图片描述

在 gradle.properties 文件添加一个ResIds跳过检测的属性。

Demo\gradle.properties

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false //id 找不到文件解决!

上面三个配置属性是默认就有的,第四个需要自己添加进去;

如果还有其他需求属性也是可以自己添加进入比如.kt代码,要加对应的支持属性,才能编译。

三、其他

1、小结

如果是新版本Android Studio 遇到 switch语句时报错Constant expression required,
可以在gradle.properties文件添加android.nonFinalResIds=false 试试,
看看是否能解决这个编译报错问题。

2、gradle.properties文件 其他相关属性

下面这些属性大部分没啥用,有兴趣的可以看看。

(1)构建环境配置属性
org.gradle.jvmargs:用于指定 Gradle 守护进程的 JVM参数,对于调整内存设置特别有用。例如org.gradle.jvmargs=-Xmx1536m,表示将 Gradle守护进程的最大堆内存设置为 1536MB,可根据项目的复杂程度和系统资源情况适当调整此值,以优化构建性能.
org.gradle.parallel:当设置为true时,Gradle会在多模块项目中以并行模式运行,能够显著提高构建速度,但该选项只适用于解耦的项目,即各个模块之间的依赖关系相对简单的情况。org.gradle.caching:设置为true时,Gradle会缓存构建过程中的输出结果,当下次执行相同的构建任务时,如果输入没有变化,Gradle 会直接使用缓存的结果,从而大大提高构建速度,尤其适用于频繁进行构建操作的项目,如在持续集成环境中.(2)Android 项目配置属性COMPILE_SDK_VERSION、MIN_SDK_VERSION、TARGET_SDK_VERSION:分别用于指定项目的编译 SDK 版本、最低支持的 SDK 版本和目标 SDK 版本。在多开发者协作或项目需要兼容不同设备的场景下,将这些版本号统一配置在gradle.properties文件中,可以确保所有开发者使用相同的SDK版本进行开发,避免因版本不一致导致的构建问题.android.useAndroidX:如果设置为true,表示在项目中使用 AndroidX 库。android.enableJetifier:当android.useAndroidX为true时,若项目中依赖了使用旧版 Android Support Library的第三方库,设置android.enableJetifier=true可以让 Gradle自动将这些库转换为使用 AndroidX,方便项目的集成和升级.提高旧项目的兼容性。
android.nonTransitiveRClass:当设置android.nonTransitiveRClass=true时,R类的引用将不再具有传递性。在默认情况下(android.nonTransitiveRClass=false),如果一个库项目(例如,Android Library)暴露了它的R类,那么使用这个库的其他项目(主项目或者其他依赖此库的二级库)可以访问这个库中的所有资源引用,包括它所依赖的其他库的资源引用。android.nonFinalResIds:设置为false可以规避gradle高版本编译报错:Constant expression required的问题(3)依赖管理属性versions.properties引用:可以在gradle.properties文件中定义依赖库的版本号,然后在build.gradle文件中通过变量引用这些版本号。这样,当需要更新依赖库版本时,只需要在gradle.properties文件中修改相应的版本号,而无需在多个build.gradle文件中逐个查找和修改,提高了依赖管理的效率和可维护性。例如:appcompat_version=1.4.0,然后在build.gradle中使用implementation "com.android.support:appcompat-v7:$appcompat_version".
mavenCentral()配置:如果项目需要从 Maven Central仓库获取依赖库,可以在gradle.properties文件中配置 Maven Central仓库的地址,确保项目能够正确地下载和使用所需的依赖。例如:repositories { mavenCentral() },不过通常情况下,Android Studio 默认会配置 Maven Central 仓库,但在某些特殊情况下,如需要使用特定的镜像仓库或添加其他私有仓库时,就可以在此文件中进行配置。(4)代码风格与编译选项属性kotlin.code.style:用于设置 Kotlin 的代码风格,可设置为official等,以确保项目中的 Kotlin代码遵循统一的风格规范,提高代码的可读性和可维护性.kapt.verbose:设置为true时,会启用 Kapt 的详细日志输出,显示有关 Kapt 注解处理的警告和详细信息,有助于在开发过程中排查与 Kapt 相关的问题,特别是在使用 Kotlin 的注解处理器时,方便查看注解的处理过程和结果.kapt.incremental.apt和kapt.use.worker.api:这两个属性一起使用可以启用 Kapt 的增量注解处理功能,并使用多线程并行编译注解,能够显著提高 Kotlin 项目的编译速度,减少编译时间.

3、Android13系统签名应用代码在旧Gradle无法编译的小bug

如果是要用Android Studio编译Android13 或者更新版本的系统签名应用,
需要使用新版本的gradle8.7 ,之前使用gradle6.5 怎么搞都不行;
网上很多人说是更新JDK,我试了也不行,后面更新Android Studio 也不行;
因为旧项目默认使用的是gradle6.5 进行编译的,后面使用gradle8.7 就可以了。
当时情况是使用Android13 系统签名文件放到项目中编译会失败;
使用Android11的系统签名文件放到项目中编译是OK的;

具体情况也可能有不同,
这里只简单说明一下Android13 版本签名文件在Android Studio 旧Gradle无法编译的情况。

相关文章:

Android Studio新版本的一个资源id无法找到的bug解决

Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…...

Datawhale AI冬令营(第一期)--零基础定制你的专属大模型

本文主要简述如何快速完成和一些小细节 第一步下载嬛嬛数据集 数据来源:self-llm/dataset/huanhuan.json at master datawhalechina/self-llm GitHub 注意:1.一定是数据集下载完成一定是.json结尾的 2.这个是github的网址,可能会遇到打不开的情况 …...

LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略

LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…...

【Unity人形布娃娃插件】Ragdoll Animator

Ragdoll Animator 是一款为 Unity 引擎开发的插件,专注于让角色在运行时动态地切换到布娃娃物理系统(Ragdoll Physics)。该插件帮助开发者轻松创建逼真的角色动画过渡效果,尤其适用于需要角色碰撞、摔倒、受击或其他物理反应的场景…...

跨团队协作中目标一致性至关重要

在团队协作的复杂拼图里,目标一致性是那根贯穿始终的主线,缺之则拼图难成,团队亦难达预期之效。 且看这样一个实例:部门承接了业务方一项紧急的数据处理需求,此任务犹如一座亟待攀登的险峰,落在了 A 团队…...

Excel的文件导入遇到大文件时

Excel的文件导入向导如何把已导入数据排除 入起始行,选择从哪一行开始导入。 比如,前两行已经导入了,第二次导入的时候排除前两行,从第三行开始,就将导入起始行设置为3即可,且不勾选含标题行。 但遇到大文…...

使用字典进行动态编程

在你的程序中,你想要执行各种计算,例如计算卫星的总数。 此外,当你进行更高级的编程时,你可能会发现你需要从文件或数据库中加载此类信息,而不是直接编码到 Python 中。 为了帮助支持这些场景,Python 使你…...

机器学习02-发展历史补充

机器学习02-发展历史补充 文章目录 机器学习02-发展历史补充1-机器学习个人理解1-初始阶段:统计学习和模式识别(20世纪50年代至80年代)2-第二阶段【集成时代】【核方法】(20世纪90年代至2000年代初期)3-第三阶段【特征…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之计数器与累加器(一)

学习背景: 在现实生活中一些需要计数的场景下我们会用到计数器,如空姐手里记录乘客的计数器,跳绳手柄上的计数器等。累加器是累加器求和,以得到最后的结果。计数器和累加器它们虽然是基础知识,但是应用广泛&#xff0…...

Android的SurfaceView和TextureView介绍

文章目录 前言一、什么是SurfaceView ?1.1 SurfaceView 使用示例1.2 SurfaceView 源码概述1.3 SurfaceView 的构造与初始化1.4 SurfaceHolder.Callback 回调接口1.5 SurfaceView 渲染机制 二、什么是TextureView?2.1 TextureView 使用示例2.2 TextureVie…...

Scala的集合

1 集合简介 1)Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 特质。 2)对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两 个包 不可变集合&am…...

1. Flink自定义Source

一. Source 简介 DataStream是Flink的低级API,用于进行数据的实时处理,Flink编程模型分为Source、Transformation、Sink三个部分,如下图所示。 默认Flink提供了大量的内置Source,常见的Source如下: 基于文件的Sour…...

关于LinuxWindows双系统在八月更新后出现的问题

问题描述类似于:Verifying shim SBAT data failed: If you are, this is caused by a reported problem in the August update if you can get into Windows, either uninstall the August update, or open Command Prompt as administrator and run this command,…...

VMware:如何在CentOS7上开启22端口

打开虚拟机:【编辑】【虚拟机网络设置】 其中填入的虚拟机IP地址是虚拟机中centos的IP地址,虚拟机端口为需要映射的centos端口 配置好之后保存,打开宿主机 win cmd telnet 192.168.1.26 22 如果出现上述窗口,则说明已经成功开放…...

ubuntu远程桌面开启opengl渲染权限

背景 最近用windows的【远程桌面连接】登录ubuntu后(xrdp协议),发现gl环境是集显的,但是本地登录ubuntu桌面后是独显(英伟达),想要在远程桌面上也用独显渲染环境。 一、查看是独显还是集显环境…...

从小学题到技术选型哲学:以智能客服系统为例,解读相关AI技术栈20241211

🧠💡从小学题到技术选型哲学:以智能客服系统为例,解读相关AI技术栈 引言:从小学数学题到技术智慧 📚✨ 在小学数学题中,有这样一道问题: “一个长方形变成平行四边形后&#xff0c…...

【C语言练习(5)—回文数判断】

C语言练习(5) 文章目录 C语言练习(5)前言问题问题解析结果总结 前言 通过回文数练习,巩固数字取余和取商如何写代码 问题 输入一个五位数判断是否为回文数? 问题解析 回文数是指正读反读都一样的整数。…...

【Rust 学习笔记】Rust 基础数据类型介绍——数组、向量和切片

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 博客内容主要围绕: 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——数组、向量和切片一、数组、向量和…...

2024年特别报告,「十大生活方式」研究数据报告

“一朵花成轻奢品、一只玩偶掀抢购狂潮、一片荒地变文旅圣地…” 近年爆火的野兽派、Jellycat、阿那亚等诸多品牌,与消费者选择的生活方式息息相关。 今年小红书的内容种草、直播电商,也都依循着“生活方式”的轨迹。生活方式的价值所向,可…...

R中单细胞RNA-seq分析教程 (5)

引言 本系列开启R中单细胞RNA-seq数据分析教程[1],持续更新,欢迎关注,转发! 10. 伪时间细胞排序 如前所述,在 UMAP 嵌入中看到的背侧端脑细胞形成的类似轨迹的结构,很可能代表了背侧端脑兴奋性神经元的分化…...

openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection

文章目录 openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection概述笔记环境光最好弱一些在设备标定时,吸嘴上不要装绿色屏蔽片如果吸嘴不在底部相机中间,先检查设置底部相机坐标调整底部相机坐标 吸嘴校验的细节底部相机坐…...

不与最大数相同的数字之和

不与最大数相同的数字之和 C语言代码C 语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 输出一个整数数列中不与最大数相同的数字之和。 输入 输入分为两行: 第一行为N(N为接下来数的个数&…...

CSS学习记录11

CSS布局 - display属性 display属性是用于控制布局的最终要的CSS属性。display 属性规定是否/如何显示元素。每个HTML元素都有一个默认的display值,具体取决于它的元素类型。大多数元素的默认display值为block 或 inline。 块级元素(block element&…...

D95【python 接口自动化学习】- pytest进阶之fixture用法

day95 pytest的fixture详解(二) 学习日期:20241210 学习目标:pytest基础用法 -- pytest的fixture详解(二) 学习笔记: fixture(autouseTrue) func的autouse是TRUE时,所有函数方法…...

Abaqus断层扫描三维重建插件CT2Model 3D V1.1版本更新

更新说明 Abaqus AbyssFish CT2Model3D V1.1版本更新新增对TIF、TIFF图像文件格式的支持。本插件用户可免费获取升级服务。 插件介绍 插件说明: Abaqus基于CT断层扫描的三维重建插件CT2Model 3D 应用案例: ABAQUS基于CT断层扫描的细观混凝土三维重建…...

隐式对象和泛型

implicit object 作用: case class DatabaseConfig(driver:String,url:String)//作为函数的隐士参数的默认值implicit object MySqlDefault extends DatabaseConfig("mysql","localhost:443")def getConn(implicit config: DatabaseConfig):Uni…...

CSS的颜色表示方式

以下介绍几种常见的CSS颜色表示方式: 颜色名称 html和css规范中定义了147种可用的颜色名用的相对较少 16进制表示 css三原色:红、绿、蓝16进制的颜色值: #rrggbb16进制整数规定颜色成分,所有的值均介于 00 - ff 之间&#xff…...

单链表常见面试题 —— LeetCode

一.删除链表中与val相等的所有节点 1.题目描述 ----- 203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 列表中的节点数目在范…...

Pydantic中的discriminator:优雅地处理联合类型详解

Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…...

pgloader SQLSERVER -> PostgreSQL 配置文件样例

pgloader 是什么?安装和基本用户法可以去其他同道的blog上去看,这里不占用网络空间了。刚开始用官方的文档读起还是很费劲的,所以把常用的配置例子放在这里。 官方文档:https://pgloader.readthedocs.io/en/latest/index.html 迁…...

乌鲁木齐市市政工程建设处网站/外贸seo是什么意思

1.5Java设计模式快速入门之建造者模式 1.5.1概念 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的…...

网站建设具体流程图/竞价推广开户多少钱

单文件版的perl程序只能用于构建较小的脚本程序。当代码规模较大时,应该遵循下面两条规则来构建程序。这样能将程序的各个部分按功能一个一个地细化,便于维护,也便于后续开发。 能复用的代码放进函数 能复用的函数放进模块 名称空间和包 名称…...

棋牌源码交易商城/西安seo排名公司

设置HSSFCellStyle的前景色总是黑色的我正在使用POI来创build一个Java电子表格。 我有以下用于创build标题行的代码:HSSFWorkbook wb new HSSFWorkbook(); HSSFSheet sheet wb.createSheet("Report"); // some more code HSSFRow row sheet.createRow(…...

北京手机站建站/公关负面处理公司

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId74 http://poj.org/problem?id1050 解题报告: 1、用b[i]来记录某一行到第i行的某一列的和。 2、用b[k]b[k]a[j][k]来更新。 3、用sumsumb[k]来记录第i行到下面的那一行的那个矩阵…...

让人做网站需要注意什么条件/火蝠电商代运营公司

Ae菜单:窗口/内容识别填充Window/Content-Aware Fill使用内容识别填充面板 Content-Aware Fill,可以移除视频中不需要的对象,比如话筒、电线杆或人等等。此功能基于 Adobe Sensei 技术,具备即时感知能力,可自动移除选定…...

官方网站建设 在线磐石网络/视频号推广方法

前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构。新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform add android6.4.0 cordova platform add android7.0.0生成的安卓平台结构分别为: 可以看到Cordova从7.0.0项目结构开始和原…...