比如我现在有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
buildToolsVersion "25.0.3" resourcePrefix "me_" ... }
...
// user模块的build.gradle文件
...
android { compileSdkVersion
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

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

  1. Android 组件化/模块化之路——在展示层搭建MVP结构

    Android 组件化/模块化之路——在展示层搭建MVP结构 什么是MVP Model–View–Presenter (MVP) 源于 Model–View–Controller (MVC) 的结构设 ...

  2. Android组件化框架设计与实践

    在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...

  3. Android组件化方案

    Android组件化项目地址:Android组件化项目AndroidModulePattern Android组件化之终极方案地址:http://blog.csdn.net/guiying712/ar ...

  4. android插件化之路

    概论  插件式开发通俗的讲就是把一个很大的app分成n多个比较小的app,其中有一个app是主app.基本上可以理解为让一个apk不安装也可以被运行.只不过这个运行是有很多限制的运行,所以才叫插件. ...

  5. Android组件化demo实现以及遇坑分享

    首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo 作者:TenzLiu原文链接:https://www.jianshu ...

  6. Android组件化

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

  7. 我所理解的Android组件化之通信机制

    之前写过一篇关于Android组件化的文章,<Android组件化框架设计与实践>,之前没看过的小伙伴可以先点击阅读.那篇文章是从实战中进行总结得来,是公司的一个真实项目进行组件化架构改造 ...

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

    背景 随着App的不断迭代,业务会变得越来越复杂,业务模块会越来越多,且每个模块的代码也会变得越来越多.为了应对这一场景,我们需要把不同的业务模块划分成一个个组件,在修改业务代码的时候只需要在对应模块 ...

  9. Android组件化之终极方案

    Android组件化项目地址:Android组件化项目AndroidModulePattern Fragment或View如何支持组件化 如何管理组件 Fragment或View如何支持组件化 距离 ...

随机推荐

  1. 《信息安全系统设计基础》--Myod

    Myod 回顾Makefile 任务详情 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Mak ...

  2. Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一

    下次会为大家深入解析这个小工具.  最先看到这个工具是在EF产品组最新的博客文章上,http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power ...

  3. loadrunner事务判断常用方法

    //判断关联到的字符串是否为空 if (strlen(lr_eval_string("{param}")) == 0); //判断关联的字符串是否跟期望的值相同 if(strcmp ...

  4. 全面解读php-常量及数据类型

    本文主要讲解字符串的定义方式,数据类型和常量的相关内容. 一.字符串的定义方式 1.字符串的定义方式除了单双引号外,还有一种叫 heredoc 和 newdoc  在我们需要定义很长一段儿字符串的时候 ...

  5. TCP/IP,Http,Socket的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  6. emqtt emq 的用户密码认证

    MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启 ...

  7. Swift 发送邮件和附件

    public function send($filename, array $render = [],$subject = '审核通知') { // Create the Transport $tra ...

  8. python 爬取动态数据

    按照:https://dryscrape.readthedocs.io/en/latest/installation.html 安装dryscrape 以下是简单实现 import dryscrape ...

  9. django.db.migrations.exceptions.BadMigrationError: Migration tests in app bl

    这个错误基本上都是 替换文件后才会出现的问题 因为你替换后他的日志文件没有完全替换的话,那么日志对应不到就会出现这样的问题, 一个模糊的处理办法:重新进行数据迁移:首先删除migrations中除去_ ...

  10. 【LeetCode】123、买卖股票的最佳时机 III

    Best Time to Buy and Sell Stock III 题目等级:Hard 题目描述: Say you have an array for which the ith element ...