在 Android 的日常开发中,我们会使用到大量的第三方库或者自己编写的组件库,这些依赖库中资源加上主工程本身的资源,可能会发生同名冲突,会发生资源相互覆盖的现象。
常用的解决方案:
1.在 module 中的所有资源前加上它的 module 名称,例如library_help_text
- 在app模块引用greet字符串就会出现资源冲突问题。解决方法也挺简单,就是给每个子模块给资源名添加前缀,具体做法是在每个子模块的build.gradle文件的android块内添加一行代码:resourcePrefix “资源名前缀”。
// me模块的build.gradle文件...android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
resourcePrefix "me_"
...}...// user模块的build.gradle文件...android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
resourcePrefix "user_"
...}...
如果修改后,那么对应的资源文件也要做相应的修改。
// user模块
<resources> ...
<string name="user_greet">Hello!</string> ...</resources>
// me模块
<resources> ...
<string name="me_greet">Hi!</string> ...</resources>
- 设置android.nonTransitiveRClass=true
在使用时,如app引用a module 下的red 颜色资源,需要从从R.color.red改为 com.excample.a.R.color.red. - 啥都不做,自己命名的时候多注意,别重复
refer:
https://juejin.cn/post/7170562275374268447
https://www.epubit.com/articleDetails?id=Na133fc81-af1b-4669-bfa5-0556dd825df7
https://juejin.cn/post/7096344799103418399
https://juejin.cn/post/6844903993894780942