繁体   English   中英

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

[英]Different IDs are generated for the same resource in R classes

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

这些R文件中的每一个都将定义相同的ID。 现在已经有一段时间没有问题了。 多年来实际上。 但突然间不再了。 现在,相同的资源有两个不同的ID。

目标/生成来源/ R / COM / viewpagerindicator / R.java:

public static int default_line_indicator_selected_color=0x7f04000b;

目标/生成来源/ R /净/ 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。

快速和肮脏的修复

直到我发现真正的问题,我使用以下蚂蚁任务作为快速和肮脏的修复:

            <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 id不是final

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

在什么情况下你有这个问题?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM