如何Android处理多个R.java?(How Android handle multiple R

2019-07-29 02:22发布

我做夫妻的Android库应用的一个项目。 为了简化问题,比方说,我在这个项目中的两个库(utilLib,screenLib)(现在被称为应用程序 )。

有每个项目内,但使用不同的值相同名称的字符串资源。 像这样:

utilLib

<string name="app_version">1.0</string>
<string name="hello">UtilLib Hello</string>

screenLib

<string name="app_version">0.7a</string>
<string name="hello">ScreenLib Hello</string>

应用

<string name="app_version">0.1</string>

我意识到,我可以参考使用com.package.R但该字符串,如果我的代码看起来像这样会有什么表现呢?

<!-- language: java -->
import com.app.R; 
...

private void checkValue(){
    String version = getString(R.app_version);
    Log.d(TAG, "version: " + version); // 0.1 show be here
    String hello = getString(R.hello);
    Log.d(TAG, "Hello: " + hello); // <---- ? ('UtilLib Hello' or 'ScreenLib Hello')
}

我想在这里做模块化的结构,但不完全理解的Android如何优先考虑其R.java使用。 有没有人有这种经验?

Answer 1:

Log.d(TAG, "version: " + version); // 0.1 show be here

原因来自官方开发指南引用管理项目-库项目 :

当你建立依赖于一个库项目的应用程序,SDK工具编译库到一个临时JAR文件,并使用它的主要项目中,然后使用结果生成.apk文件。 在一个资源ID在应用程序和库都定义的情况下,该工具可确保在应用程序中声明的资源获得优先权,并在库项目的资源没有被编译到应用程序.apk文件。 这使您的应用程序的灵活性,或者使用或者重新定义任何库中定义的任何资源行为或值。


Log.d(TAG, "Hello: " + hello); // <---- ? ('UtilLib Hello' or 'ScreenLib Hello')

这是通过库项目的优先级确定。

从官方开发指南引用管理项目-Library中的项目 :

  • 资源冲突

    由于工具合并与那些依赖应用程序项目库项目的资源,给定的资源ID可能在这两个项目中定义。 在这种情况下,这些工具选择从应用程序,或具有最高优先级图书馆的资源,并放弃其他资源。 当你开发的应用程序,要知道,公共资源的ID很可能在多个项目中进行定义和将被合并,从应用程序或优先级最高的库采取优先次序的资源。

从官方开发指南引用使用adt -引用库项目 :

如果要添加多个库的引用,请注意,您可以设置其相对优先级(与合并顺序)通过选择库,并使用向上和向下控制。 这些工具合并引用的库与您的应用程序从最低优先级(列表的底部)开始最高(列表的顶部)。 如果有多个库定义相同的资源ID,该工具从库中选择具有较高优先级的资源。 该应用程序本身具有最高优先级,资源总是优先于库中定义相同的资源ID使用。

从官方的开发者指南引用从命令行-引用库项目 :

如果要添加多个库的引用,请注意,您可以设置其相对优先级(与合并顺序)通过手动编辑project.properties文件,并调整每个参考的.N指数为适宜。 例如,假设这些引用:

  android.library.reference.1=path/to/library_projectA android.library.reference.2=path/to/library_projectB android.library.reference.3=path/to/library_projectC 

您可以重新排列引用给予最高优先library_projectC这样:

  android.library.reference.2=path/to/library_projectA android.library.reference.3=path/to/library_projectB android.library.reference.1=path/to/library_projectC 

我找不到可以解释这个比官方开发指南更加清晰的任何单词。



Answer 2:

你将不得不进口com.screenLib.R和com.utilLib.R
在你的代码应该可能抛出一个错误“无法解析你好”

Lemmme知道这是否是正确!!!!



文章来源: How Android handle multiple R.java?