主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. 阅读详情

问题

当项目越做越大的时候我们往往会使用组件化开发,项目整体架构与下图类似:
在这里插入图片描述
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 Studiomodule中引用其他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的博客 7182

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

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

allisonchen的专栏 3422

HarmonyOS—添加/删除Module

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

m0_70749039的博客 1962

Android 不能引用module资源文件

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

weixin_51861199的博客 1267

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

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

m0_70749039的博客 2532

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

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

hyx448222465的博客 2270

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

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

丿灬安之若死 325

MavenModule引用父Module resources下的文件

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

1048

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

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

yundashi168.com 1632

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

利用makefile编译新增资源文件

Le_773的专栏 1361

多模块项目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万+

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

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

u010804417的博客 3338

关于多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的博客 347

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

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

weixin_35971653的博客 1418

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的专栏 629

【HarmonyOS】低代码开发使用module中的自定义组件

Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。这个是HarmonyOS官网对Module模块的描述,我们可以在本地依赖库中创建组件,然后在Module中使用。完成了上述的步骤后,我们还是不能在Module Entry目录下使用我们创建的lib中的自定义组件,那该如何操作呢。完成自定义组件创建后,我们就可以在Visual Library的其他页面中拖拉拽我们刚刚创建好的这个自定义组件了。,或者右击目录,选择。

Mayism123的博客 660

Module、Library、Jar 的理解

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

zhangzhuo1024的博客 2314

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的专栏 5310
上一篇: BottomSheetDialog
下一篇: gradle迁移到gradle.kts(复制可用)
得食猫
博客等级 码龄10年 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、付费专栏及课程。

余额充值