【发布时间】: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