【问题标题】:Different IDs are generated for the same resource in R classes在 R 类中为同一资源生成不同的 ID
【发布时间】:2014-02-25 17:11:45
【问题描述】:

当一个具有多个 apk 库之一的项目被编译时,aapt 工具会生成多个 R.java。一个用于每个库,一个用于应用程序本身。

每个 R 文件都会定义相同的 ID。这在很长一段时间内都没有问题。事实上几年。但是突然就没有了。现在同一个资源有两个不同的 ID。

target/generated-sources/r/com/viewpagerindicator/R.java:

public static int default_line_indicator_selected_color=0x7f04000b;

target/generated-sources/r/net/sourceforge/uiq3/fx602p/R.java:

public static final int default_line_indicator_selected_color=0x7f07000b;

有人知道可能出了什么问题吗?

更新:

我仔细检查了其他项目。我注意到,除了final 之外,R.java 文件应该 100% 相同。特别是:每个 R.java 文件都应该定义所有的 ID——即使是不属于库的 ID。

在我这个麻烦的项目中也不是这样。每个库 R.java 只定义了库使用的 ID。

快速而肮脏的修复

在我找出真正的问题之前,我使用以下 ant 任务作为快速而肮脏的修复:

            <copy
              encoding='${project.build.sourceEncoding}'
              file='target/generated-sources/r/net/sourceforge/uiq3/fx602p/R.java'
              overwrite='true'
              toFile='target/generated-sources/r/com/viewpagerindicator/R.java'
            >
              <filterchain>
                <tokenfilter>
                  <replacestring
                    from='net.sourceforge.uiq3.fx602p'
                    to='com.viewpagerindicator'
                  ></replacestring>
                </tokenfilter>
              </filterchain>
            </copy>

我想知道为什么 aapt 被多次调用,而带有搜索和替换的副本也可以做到这一点。请注意,我也不会删除 final

【问题讨论】:

  • 是的,它们位于不同的 R.java 文件中——我将它们放在一起,这样人们就可以发现一个字符的差异。但是您的问题表明这令人困惑。我改变了文字。
  • 唯一重要的是您正在构建的项目中的那个。

标签: android android-resources aapt


【解决方案1】:

当您组装项目时,库资源会被主项目覆盖。 我认为这解释了为什么库中的 R id 不是 final

您对default_line_indicator_selected_color 的所有引用都将使用新值0x7f07000b

在什么情况下你会遇到这个问题?

当您构建依赖于库项目的应用程序时,SDK 工具会将库编译为临时 JAR 文件并在主项目中使用,然后使用结果生成 .apk。如果在应用程序和库中都定义了资源 ID,这些工具会确保应用程序中声明的资源获得优先权,并且库项目中的资源不会编译到应用程序 .apk 中。这使您的应用程序可以灵活地使用或重新定义在任何库中定义的任何资源行为或值。

http://developer.android.com/tools/projects/index.html

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2013-03-12
    • 2013-02-09
    相关资源
    最近更新 更多