首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为R类中的同一资源生成不同的ID

为R类中的同一资源生成不同的ID
EN

Stack Overflow用户
提问于 2014-02-25 17:11:45
回答 1查看 346关注 0票数 5

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

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

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

代码语言:javascript
复制
public static int default_line_indicator_selected_color=0x7f04000b;

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

代码语言:javascript
复制
public static final int default_line_indicator_selected_color=0x7f07000b;

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

更新:

我和其他项目进行了反复检查。在这里,我注意到除了final之外,R.java文件应该是100%相同的。特别是:每个R.java文件都应该定义所有IDs -甚至不属于库的ID。

在我棘手的项目中,情况也不是这样。每个库R.java只定义库使用的ID。

Quick

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

代码语言:javascript
复制
            <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

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 19:11:35

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

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

在什么情况下你对此有问题?

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22021341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档