Android 组件化之路 资源冲突问题

Android资源ID冲突解决方案 本文深入解析了Android多模块开发中的资源ID冲突问题,并提供了两种主流解决方案:资源前缀强制隔离和AAPT2动态资源合并机制。通过详细代码示例和配置指南,帮助开发者在模块化、组件化和插件化场景中有效避免资源ID冲突。资源前缀强制隔离方案通过在资源文件名和内部资源名称中添加前缀,确保资源ID唯一;AAPT2动态资源合并机制通过packageId配置和稳定ID机制,为不同模块分配不同的资源ID范围。 阅读详情

比如我现在有3个模块:app模块,user模块,me模块,其中app模块依赖user模块和me模块。

然后我在user模块和me模块的strings.xml中都定义了greet字符串:

// user模块
<resources>
    ...
    <string name="greet">Hello!</string>
    ...
</resources>

// me模块
<resources>
    ...
    <string name="greet">Hi!</string>
    ...
</resources>

然后在app模块引用greet这个字符串:

// app模块
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="30dp"
    android:text="@string/greet"
    />

那么问题来了,app模块引用的greet是user模块的呢,还是me模块的呢??这里出现资源冲突问题!!

解决办法比较容易,每个子模块给资源名添加前缀,具体做法是在每个子模块的build.gradle文件的android块内添加一行代码:resourcePrefix “资源名前缀”:

// me模块的build.gradle文件
...
android {

    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    resourcePrefix "me_"

    ...

}
...
// user模块的build.gradle文件
...
android {

    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    resourcePrefix "user_"

    ...

}
...

此时,你会发现,你定义的xml资源文件会报错!!为啥?

我天真的以为AS会自动帮我们的资源名自动加上前缀,原来写了这段代码之后,AS会约束我们定义资源时,要我们手动加上前缀,否则报错!!所以只是起约束作用!!

改正错误之后,资源文件变成这样了:

// user模块
<resources>
    ...
    <string name="user_greet">Hello!</string>
    ...
</resources>

// me模块
<resources>
    ...
    <string name="me_greet">Hi!</string>
    ...
</resources>

这样app引用的时候,就不会混乱了!!

如果你还知道其他方法,请不吝赐教!!

Android-一个强大完善的Android组件化方案 一个强大完善的Android组件化方案 立即下载

相关推荐

Android库项目中的资源ID冲突的解决方法

本篇文章主要介绍了Android库项目中的资源ID冲突的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

android studio 不同module资源重名引起引用混乱

方法一: 通过gradle配置dependencies { provided fileTree(dir: ‘libs’, include: [‘*.jar’])}方式二: 右键module选择open module setting,选择要修改的module名,切换到dependencies页面,将要修改的jar的scope修改provided模式。

六道对穿肠的学习之旅 7175

从零构建RK3568视频处理管线:C++ V4L2捕获与RKMPP硬编解码实战

本文详细介绍了在RK3568平台上,使用C++语言从零构建高性能视频处理管线的实战过程。核心内容包括通过V4L2接口高效捕获摄像头视频流,并利用RKMPP硬件编码器实现零拷贝的H.264/H.265硬编码。文章深入讲解了设备初始化、DMA缓冲区管理、编码器参数配置以及主循环协同工作等关键步骤,旨在帮助开发者构建低延迟、高效率的嵌入式视频应用。

weixin_29193359的博客 84

Android库项目中的资源ID冲突

1、前言 Android Studio对模块化开发提供的一个很有用的功能就是可以在主项目下新建库项目(Module),但是在使用库项目时却有一个问题就是资源ID冲突,因为编译时SDK会自动帮我们处理这个问题,所以一般我们不会察觉到,但是在某些情况下,我们需要意识到这个问题的存在。 比如,在新建的库项目中使用如下代码: public void onButtonClick(View view...

weixin_30378623的博客 720

告别简陋行情!在Ubuntu24.04系统用Wine9.0跑同花顺远航版的全流程记录

本文详细记录了在Ubuntu 24.04系统上,通过Wine 9.0兼容层成功安装并流畅运行同花顺远航版的全过程。文章对比了该方案与官方简陋Linux原生版本的功能差异,重点解决了高分辨率屏幕下的字体与界面显示问题,并提供了关键配置调优与长期维护建议,为Linux用户提供了功能完备的专业金融行情解决方案。

weixin_29207533的博客 1074

Anomalib实战指南:从零开始构建自定义异常检测数据集

本文提供了一份详细的Anomalib实战指南,指导用户从零开始构建自定义异常检测数据集。文章深入解析了数据准备的核心步骤、目录结构规范,并对比了PatchCore与FastFlow等关键模型的适用场景。通过清晰的代码示例,手把手演示了环境配置、模型训练与推理评估的全流程,旨在帮助开发者快速掌握这一工业视觉异常检测利器,有效解决实际生产中的缺陷识别难题。

weixin_29054245的博客 643

android pod 组件化_Android组件化开发实践

Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟。Android studio推出instant run由于各种缺陷一般情况下是被关闭的……组件化开发可以有效降低代码模块的耦合度,使代码架构更加清晰,同时模块化的编译可以有效减少编译时间,当然总的编译时间是不会减少的,只是App模块化之后开发某个模块时,只需要编译特定模块,可以快速编译调试。原理组件...

weixin_39945178的博客 128

Source Insight 4.0 及最新版序列号验证机制全解析:如何快速定位关键函数并构造有效Key

本文深入解析了Source Insight 4.0及最新版的序列号验证机制,详细介绍了如何快速定位关键函数并构造有效Key。通过静态分析和动态调试技术,帮助开发者理解现代软件保护的设计哲学,掌握逆向分析方法论,提升安全研究能力。

weixin_26642481的博客 426

Android 组件化架构概要

下面是辛苦给大家整理的学习路线《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!再结合自己的理解,就会看到更加广阔的天地了。源代码地址:中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…下面是辛苦给大家整理的学习路线[外链图片转存中…(img-N5ljep8K-1714451624292)]《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2301_82242484的博客 769

SAP中寄售结算规则及要点分析

在做MRKO寄售结算时,系统会根据选定的期间和供应商等条件,将符合条件的寄售消耗或寄售上线的物料凭证找出。然后以供应商为单位。合并产生一张会计凭证。下图显示了通过MRKO结算后自动生成的会计凭证。 那么,在MRKO做寄售结算的规则是什么样的?做为寄售业务处理者的物流和财务需要掌握和了解哪些关于寄售结算的规则和控制逻辑。下面以笔者的经验分析一下: 1、寄售物料在系统中有两种处理方法,一种是通过MB1B 411 K ,通常该操作达到两个目的:将物料从仓库转移到线边库(表示即将要投入生产了)的同时将寄售库

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 8296

ThingsBoard-阿里云短信规则节点

由于Thingsboard平台国内只支持短信服务,那我们运维人员去及时接收邮箱肯定是没有短信来的方便的,在这基础上,需要自己从规则链入手,自定义一个支持阿里云短信服务的规则节点。

weixin_67440240的博客 2094

More than one file was found with OS independent path 'AndroidManifest.xml

More than one file was found with OS independent path 'AndroidManifest.xml'AGP升级 3.5.0+修复组件化排查此类问题类似的错误 AGP升级 3.5.0+ 你组件化项目升级由原本的gradle 插件版本 3.4.2 升级到了 3.5.3, 执行assembleRelease。的时候报了一个错误: More than on...

Caldremch的专栏 7625

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

Robot_PLC_HMI_Automation 3158

Android 组件化,从入门到不可自拔

组件化能够显著提高Android项目开发效率,支持不同业务组件单独打包或者组合打包,可以说是Android开发者必备技能。 本文通过一个极其简单的实践案例,梳理了组件化的配置过程,并辅以全部源码,希望对还没有应用组件化的开发者有些帮助。

牛角尖 1万+

8155源码编译DSP(ubuntu环境下)

一.设置环境变量 -users:/$ sudo gedit ~/.bashrc #set adsp cdsp tools path #export ARMLMD_LICENSE_FILE=<LICENSE FILE INFO> #export ARMTOOLS=RVCT221 #export ARMROOT=/pkg/asw/compilers/arm/ADS1.2 #export ARM_COMPILER_PATH=/pkg/qct/software/arm/RVDS/2.2BLD593

Johnny2004的专栏 1676

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android组件化思考

android发展到今天,虽然说很多的业务逻辑都会放在服务端处理,但是随着功能的增加,app的体积还是会越来越大,有时候连自己都觉得各个模块间的相互依赖太多,比如说我们有订单模块,购物车模块,门店模块,个人中心模块等等,相互之间都会有依赖。 以前我们的模块是这样的: 上面这个图是做过androd的程序员最熟悉不过的工程了,所有的java文件都写在同一个app模块下。 那么下面我们再来看下现

yuanbing1988的博客 3892

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android 组件化面试必备,安卓面试问题和答案

通过ARouter在module间共享对象,实现module间通信。 比如:我们有一个账号模块 business:account ,提供了登录、登出、用户信息查询等业务。 同级的其他模块,如何跟账号模块通信?获取用户的登录状态以及用户相关信息? public class AccountBean { private String name; private int age; //… } public interface IAccountService extends IProvider { void

m0_65145113的博客 735

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

三方 - (11) -  组件化

一.组件化需解决的问题 1、组件之间 - 通信问题 数据通信 - 接口下沉 界面 - Arouter 事件 - EventBus 2、组件单独运行 - Application 和 module 切换 gradle自定...

lmcs87的专栏 277

Android组件化项目详细实施方案

1、Android组件化项目 在Android项目组件化之前,我们的项目都是像下图那样,一个单一工程下,根据不同的业务分几个文件夹,把需要的第三方库依赖下就开始开发了,这样的代码耦合严重,牵一发而动全身,删除某处代码就会到处报错,如果不解决掉报错的地方,就没法编译打包,而且这样的代码只适合于个人开发,尤其团队开发合并代码的时候那真是一个麻烦,相信大家都会深有体会,如果项目很大的话,修改一点简

菜鸟的博客 1780

Android 组件化案例

Android组件化案例

asddavid的专栏 7617

Android 组件化,2024年最新聊聊 Android 开发的现状和思考

分享一份NDK基础开发资料分享内容包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2301_76348189的博客 1174

Android 组件化/模块化 的理解!

到现在组件化真的不是什么新鲜东西了,大公司都用的滚瓜烂熟,龙飞凤舞了,也就是现在部分中型项目和小项目在组件化的路上努力。所以同志们,组件化没玩过的,不熟悉的赶紧搞起来,说一点,你不会组件化,发布影子工程那么对你来说就是个噩梦。从本质上来讲任何技术进步都是在现实需求的逼迫下抓耳挠腮,耗尽无数头发才想出来的。哈哈,这里说个笑话罢了。所以呢组件化这个东西出来这么久了,页发展了这么久了,用的人越来越多,那肯定是对我们显示开发大有裨益的,下伙伴们不会,不熟悉抓紧啦,要不面试问你你怎么回答呢!

一个IT人的技术成长历程。 812

Android架构之组件化方案

1、Android组件化项目 在Android项目组件化之前,我们的项目都是像下图那样,一个单一工程下,根据不同的业务分几个文件夹,把需要的第三方库依赖下就开始开发了,这样的代码耦合严重,牵一发而动全身,删除某处代码就会到处报错,如果不解决掉报错的地方,就没法编译打包,而且这样的代码只适合于个人开发,尤其团队开发合并代码的时候那真是一个麻烦,相信大家都会深有体会,如果项目很大的话,修改一

旺仔的专栏 5173
上一篇: Android 组件化之路 路由设计
下一篇: Android 热修复 Tinker接入方法
JohanMan
博客等级 码龄10年 72粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值