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

比如我现在有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引用的时候,就不会混乱了!!

如果你还知道其他方法,请不吝赐教!!
————————————————
版权声明:本文为CSDN博主「JohanMan」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JohanMan/article/details/77101477

原文地址:https://www.cnblogs.com/Im-Victor/p/11399101.html

时间: 2024-10-22 12:06:59

Android 组件化之路 资源冲突问题的相关文章

Android组件化方案

1为什么要项目组件化 2如何组件化 3组件化实施流程 1组件模式和集成模式的转换 2组件之间AndroidManifest合并问题 3全局Context的获取及组件数据初始化 4library依赖问题 5组件之间调用和通信 6组件之间资源名冲突 4组件化项目的工程类型 1app壳工程 2功能组件和Common组件 2业务组件和Main组件 5组件化项目的混淆方案 6工程的buildgradle和gradleproperties文件 1组件化工程的buildgradle文件 2组件化工程的grad

Android组件化框架设计与实践

在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. 上图显示的是传统的服务端架构和客户端 App 架构对比.传统的服务端架构中最底下是一个 OS,一般是 Linux,最上面服务端的业务,而中间有非常多的层次可以在架构上,按照我们的意愿搭建中间的各个层次的衔接环节,使得架构具有足够的灵活性和扩展性.但是到了 App 就会面对一个完全不同的现状,App

Gradle自动实现Android组件化模块构建

背景 随着App的不断迭代,业务会变得越来越复杂,业务模块会越来越多,且每个模块的代码也会变得越来越多.为了应对这一场景,我们需要把不同的业务模块划分成一个个组件,在修改业务代码的时候只需要在对应模块修改就可以了.通过高内聚,低耦合的业务模块来保证工程的健壮性和稳定性.现在问题来了,当组件的数量变得越来多的时候,我们如何管理业务组件呢? 原创声明: 该文章为原创文章,未经博主同意严禁转载. 为什么我们要用Gradle管理组件呢? 先来看看Android组件化需要实现的目标.(什么是组件化构建?)

Android组件化

附:Android组件化和插件化开发 App组件化与业务拆分那些事 Android项目架构之业务组件化 Android组件化核心之路由实现

Android组件化之终极方案

Android组件化项目地址:Android组件化项目AndroidModulePattern Fragment或View如何支持组件化 如何管理组件 Fragment或View如何支持组件化 距离 Android组件化方案 发布已经半年有余,虽说这个方案已经能够解决一些项目的需求,但是依然不够完美.很多开发者也在博客和GitHub中留言甚至发邮件问我,Fragment怎么办? 目前市面上APP的风格还是类似于微信界面的比较多,好几个Fragment摆在主界面中,然后点击NavigationBa

Android组件化最佳实践 ARetrofit原理

简介 ARetrofit是一款针对Android组件之间通信的框架,实现组件之间解耦的同时还可以通信. 源码链接:https://github.com/yifei8/ARetrofit欢迎star.issues.fork 组件化 Android组件化已经不是一个新鲜的概念了,出来了已经有很长一段时间了,大家可以自行Google,可以看到一堆相关的文章. 简单的来说,所谓的组件就是Android Studio中的Module,每一个Module都遵循高内聚的原则,通过ARetrofit来实现无耦合

组件化之路的尝试

最新因为使用pod私有库来进行开发,将所有模块拆分成各个Private Pod,它的Podfile目录结构类似这样: 123 pod 'PrivateKit'pod 'ModuleA'pod 'ModuleB' 其中PrivateKit里面包含多个通用库,其中包含:RequestKit网络请求库(将所有请求看作一个对象),ConfigurationKit(包含通用的样式以及配置信息等),第三方需要引用的库如:AFNetworking,SDWebImage等. 这样所有的业务模块可以进行拆分,业务

蘑菇街 App 的组件化之路

在组件化之前,蘑菇街 App 的代码都是在一个工程里开发的,在人比较少,业务发展不是很快的时候,这样是比较合适的,能一定程度地保证开发效率. 慢慢地代码量多了起来,开发人员也多了起来,业务发展也快了起来,这时单一工程开发模式就会显露出一些弊端 耦合比较严重(因为没有明确的约束,「组件」间引用的现象会比较多) 容易出现冲突(尤其是使用 Xib,还有就是 Xcode Project,虽说有 脚本 可以改善) 业务方的开发效率不够高(只关心自己的组件,却要编译整个项目,与其他不相干的代码糅合在一起)

Android组件化开发实践

Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟.Android studio推出instant run由于各种缺陷一般情况下是被关闭的--组件化开发可以有效降低代码模块的耦合度,使代码架构更加清晰,同时模块化的编译可以有效减少编译时间,当然总的编译时间是不会减少的,只是App模块化之后开发某个模块时,只需要编译特定模块,可以快速编译调试. 百牛信息技术bainiu.ltd整理发布于博客园 原理 组件化和插件化有些同学有些迷惑,简单来说组件化是在