主module不能引用子module资源文件

Android studio的Bumblebee版本Gradle7.2降到Gradle4.2.0详细步骤记录(项目已上传) Android studio的Bumblebee版本Gradle7.2降到Gradle4.2.0详细步骤记录 Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager. 阅读详情
AI摘要

随着项目规模扩大,组件化开发变得常见。然而,在新版本Android Studio中,非传递性R类(nonTransitiveRClass)导致无法跨模块引用资源。为解决此问题,可以选择修改引用方式或在gradle.properties设置android.nonTransitiveRClass=false。nonTransitiveRClass旨在减少冗余R文件,减小应用体积,但可能影响旧项目兼容性。理解这一变化对于优化项目结构和资源管理至关重要。

问题

当项目越做越大的时候我们往往会使用组件化开发,项目整体架构与下图类似:
在这里插入图片描述
red的颜色虽然我们是在base模块中添加的,但是在App模块中依旧可以通过com.android.app.R来引用
但是最近创建的一个新项目居然引用不到下层模块的资源文件了…

解决

方案一

引用red属性的地方统一使用com.android.base.R.color.red来引用。如果是新项目还好,如果是老项目,要改动的地方可能会很多,可以采用方案二。

方案二

解决方式非常简单,只需要在gradle.properties进行如下设置:

android.nonTransitiveRClass=false

分析

nonTransitiveRClass这个属性以前是没有的,新版本才有(我使用的版本是Android Studio Bumblebee,gradle 7.2.0),之前我们使用都是很好的,为什么要添加这个属性给我们带来引用上的不方便?

先分析下上面架构中R文件的生成:
首先base模块中的R文件(com.android.base.R) 会存在一个R.color.red的属性。
其次video模块中的R文件(com.android.video.R)也会存在一个R.color.red的属性。
最后app模块中的R文件(com.android.app.R)也会存在一个R.color.red的属性。
此外product、mine模块对应的R文件中都会存在这个R.color.red的属性。
仅一个颜色值代码中就存放了5份,而我们在实际开发中资源文件要更多,module也会更复杂,这些冗余的代码会增加程序包体积。

为了解决R文件的冗余代码,nonTransitiveRClass这个属性就诞生了。当它为false的时候,冗余代码依旧会生成,相当于是对旧项目的兼容。当为true的时候,只会在资源所属module的包名下生成对应R文件,其他module引用只能通过原module的包名引用。

Android Studio主module中引用其他module的xml文件android.content.res.Resources$NotFoundException问题 起因: 主工程中代码 mItemView.setBackgroundResource(R.drawable.selector_key_blue_bg); selector_key_blue_bg.xml内容: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schem... 阅读详情

相关推荐

Android多Module开发,最终打包成一个aar对外提供

文章目录前言问题解决方案 前言 现在通过Android Studio进行多Module开发已经非常常见了,除了方便我们分离项目业务,还可以很好的实现基础代码的复用 问题 我们在多Module开发后,如果是直接打包apk还好,直接可以通过gradle命令或者通过AS图形化界面就可以实现打包apk;但是如果我们只是为了提供一个功能模块,方便其他开发人员接入呢,我们使用了多个Module,能不能最终只对...

qq_34696209的博客 7188

别搞错了,nonTransitiveRClass 不能解决资源冲突!

非传递性 R 类的属性,在文件里使用。不少开发者可能听过它,但了解可能仅限于是对 R 文件做了优化,甚至以为它可以解决资源冲突!但它到底做了什么优化、能否解决资源冲突,则鲜少有机会去了解。本文通过该属性使用前后对比、在资源冲突场景下的表现等角度去充分解读它。上面的示例可以看到,没有开启的话,仅仅定义10多个资源的 Module 的 R 文件会激增到4000+个 ID。这对编译速度、AAR / APK 体积的影响是可以预见的。

allisonchen的专栏 3446

HarmonyOS NEXT鸿蒙开发:module.json5-UIAbility组件、启动模式、abilities标签、应用图标、应用名

HarmonyOS NEXT鸿蒙开发:module.json5-UIAbility组件、启动模式、abilities标签、应用图标、应用名

重名又重名 1868

Android 不能引用子module资源文件

当nonTransitiveRClass为true的时候,只会在资源所属module的包名下生成对应R文件,其他module引用只能通过原module的包名引用。

weixin_51861199的博客 1271

HarmonyOS—添加/删除Module

鸿蒙开发学习是一个系统化的过程,从基础知识的学习到实战技能的锤炼,再到对前沿技术的探索,每一环节都至关重要。希望这份教程资料能帮助您快速入门并在鸿蒙开发之路上步步攀升,成就一番事业。让我们一起乘风破浪,拥抱鸿蒙生态的广阔未来!,才是我创造的动力。

m0_70749039的博客 1971

SAP SD销售订单抬头自定义字段增强:BADI_SLS_HEAD_SCR_CUS实战指南

SAP ERP系统中的销售订单管理是企业核心业务流程,经常需要扩展标准功能来满足个性化业务需求。在SAP SD模块中,销售订单抬头屏幕的增强是常见需求。通过BADI(Business Add-In)技术,可以在不修改标准代码的前提下,实现自定义字段的添加与数据处理。本文详细介绍了如何使用BADI_SLS_HEAD_SCR_CUS实现销售订单抬头自定义字段,包括函数组子屏幕设计、数据存储表构建以及BADI方法的具体实现。这种增强方式适用于VA01/VA02/VA03等事务,保证了系统升级的兼容性和维护的便捷性

weixin_29758911的博客 348

Android 性能优化之 R 文件优化详解

本文主要介绍了目前R文件传递带来的一些问题,并介绍了R文件内联与非传递R类两种方案R文件内联方案library模块中的R文件也将被内联并删除,在包体积大小方面优化的更加彻底,但由于不是官方方案,存在一定适配成本,在AGP版本更新后需要及时适配,同时对编译速度也会有一定影响在多模块情况下,R文件传递是R文件快速膨胀的重要原因,因此非传递R类在包体积方面也有很大的作用,同时可以在添加资源时,避免重新编译下游模块,从而加快编译速度我们在项目中启用了非传递R类,包体积减小了2M左右,dexhttps。...

m0_70749039的博客 2541

华为C语言笔试题(附答案)

华为C语言笔试题(附答案)     1、局部变量能否和全局变量重名?   答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "   局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。  

峰云四起 3031

记Android新版本构建导致的问题-android 不能直接引用module资源

Android Studio 新特性详解 支持非传递 R 类

hyx448222465的博客 2277

智能音箱开发者必看:CEVA-BX vs Cadence HiFi音频DSP实战选型指南(附功耗对比表)

本文深入对比了CEVA-BX和Cadence HiFi两大音频DSP架构在智能音箱开发中的性能差异,涵盖语音唤醒、多麦克风阵列处理等核心场景。通过实测数据和功耗对比表,为开发者提供选型参考,帮助优化产品性能和能效表现。

weixin_29309213的博客 225

合宙ESP32C3实战:MPU6500六轴传感器数据读取与校准全解析

本文详细解析了如何使用合宙ESP32C3开发板读取和校准MPU6500六轴姿态传感器数据。从硬件接线、开发环境搭建到核心代码解析,提供了全面的实战指南,帮助开发者快速掌握传感器配置与数据处理技巧,适用于姿态控制、运动检测等应用场景。

weixin_27066963的博客 404

Gradle 17 Android 同module 不能引用其他项目的资源文件

在gradle.properties中添加一句话即可。

丿灬安之若死 327

YOLOv11改进策略【卷积层】| ICCV-2023 引入Dynamic Snake Convolution动态蛇形卷积,改进C3k2

基于拓扑几何约束的动态蛇卷积用于管状结构分割DSConv(Dynamic Snake Convolution,动态蛇形卷积)模块的设计主要是为了更好地处理管状结构的分割任务,解决传统卷积在处理细管状结构时的不足。

Limiiiing的博客 1627

Maven子Module引用父Module resources下的文件

【代码】Maven子Module引用父Module resources下的文件。

哈 1058

基于Python的异步爬虫实战:高效抓取同花顺概念板块数据

本文将详细介绍如何使用Python最新异步爬虫技术(requests-html+aiohttp+selenium)高效抓取同花顺概念板块数据。内容涵盖:反爬机制破解、动态页面渲染处理、数据解析存储等完整流程,并提供可复用的高性能爬虫代码实现。高性能:异步并发处理,QPS可达50+高可用:完善的异常处理机制可扩展:支持分布式部署增加历史数据回溯功能集成机器学习识别验证码构建实时数据推送系统。

2201_76125261的博客 1534

基于深度学习的垃圾邮件识别

垃圾邮件的大量存在严重威胁着电子邮件系统的安全和效率。基于深度学习的垃圾邮件识别技术已经成为目前最有效的解决方案之一。本文将详细介绍使用深度学习技术进行垃圾邮件识别的方法,并提供相应的代码实现。 随着电子邮件的广泛应用,垃圾邮件的数量不断增加,传统的规则和统计方法已经无法满足对垃圾邮件进行准确识别的需求。深度学习技术以其强大的模式识别能力和自动特征提取能力成为解决垃圾邮件识别难题的有效工具。

一键难忘的博客 1093

Android基于gradle task检查各个module之间资源文件冲突情况

做组件化开发的时候,我们经常会遇到各个不同的module之间资源文件冲突的问题,运行也不报错,但是会出现覆盖的问题,导致运行之后发送错误的效果。所以我们需要利用一个gradlke 脚本task,来自动化检查资源文件冲突。定义一个android gradle脚本,检查各个module之间资源文件冲突(命令重复)的task。下面是一个完整的 Gradle 脚本示例,用于检查不同模块之间的资源文件冲突。这个任务将遍历所有子模块的资源文件,并在发现同名文件时输出冲突信息。

yundashi168.com 1641

基于Lstm+transformer的刀具磨损预测实战

基于Lstm+transformer的刀具磨损预测实战

2906

利用makefile将添加的资源文件编译到Android系统中

利用makefile编译新增资源文件

Le_773的专栏 1366

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

多模块项目Module must not contain source root. The root already belongs to module

多模块项目Module “*” must not contain source root *. The root already belongs to module “*”.有时候新建了maven工程,然后删了里面的src目录让它成为空的父项目,但是会报下面的错误。Module “*” must not contain source root *. The root already belongs

alwaysBrother的博客 7万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IDEA中的Project与Module的概念及使用方法

IDEA中project与module的设计初衷及使用方法

u010804417的博客 3346

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关于多module的项目,需要在同项目中拷贝特定module的步骤

6、将module2中所有的package包名和import包名修改(如下图所示,可以通过快捷键Ctrl+shift+R一键替换,1、直接Ctrl+C拷贝module1、在项目目录中Ctrl+V,新module名称改为module2。7、如果用ARouter的情况,需要修改ARouter的路径信息。2、修改module2中的build.gradle文件。将该文件中的package改为新的包名。5、在新module中修改文件夹名称。把混淆文件中的混淆文件路径改为新的。9、在项目中引用module2。

weixin_39877109的博客 348

android中module间资源文件的覆盖规律

1、主项目是否会覆盖它依赖的module中的资源文件。 类型 app是否会覆盖module color中定义的值 是 string中定义的值 是 dimen中定义的值 是 layout文件 是 drawable中的图片 是 drawable的shape文件 是 styles中的style 是 2、library会覆盖它依赖的library中的资源文件。 原文链接:https://blog.csdn.net/qq_26287

zhifanxu的专栏 634

python之Eric中资源文件未编译错误:ImportError: No module named resource_rc

ImportError: No module named resource_rc – Python Tips  https://pythontips.com/2014/03/08/importerror-no-module-named-resource_rc/python - PyQt - ImportError: No module named 'resource_rc' - Stack Ove...

bluewater的专栏 5311

android某个module生成apk,Android多Module开发,最终打包成一个aar对外提供

文章目录前言问题解决方案前言现在通过Android Studio进行多Module开发已经非常常见了,除了方便我们分离项目业务,还可以很好的实现基础代码的复用问题我们在多Module开发后,如果是直接打包apk还好,直接可以通过gradle命令或者通过AS图形化界面就可以实现打包apk;但是如果我们只是为了提供一个功能模块,方便其他开发人员接入呢,我们使用了多个Module,能不能最终只对外提供一...

weixin_35971653的博客 1423

Module、Library、Jar 的理解

Module、Library、Jar 的理解: 我们新建module的时候,可以新建普通的module项目,默认的普通项目包含代码、资源可以编译成apk;同时,也可以新建library这种module,library不是自己来用的,主要是将独立的功能包装好,方便作为功能包提供给别的module用的,新建的时候,可以新建Android Library也可以新建Java or Kotlin Library,前者是安卓lib后者是javalib,安卓lib包含代码加资源文件,javalib只包含...

zhangzhuo1024的博客 2319
上一篇: BottomSheetDialog
下一篇: gradle迁移到gradle.kts(复制可用)
得食猫
博客等级 码龄11年 50粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得食猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值