当编译具有多个apk库之一的项目时,aapt工具会生成一个以上的。一个用于每个库,另一个用于应用程序本身。
每个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文件都应该定义所有IDs -甚至不属于库的ID。
在我棘手的项目中,情况也不是这样。每个库R.java只定义库使用的ID。
Quick
在找出真正的问题之前,我使用下面的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。
发布于 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
https://stackoverflow.com/questions/22021341
复制相似问题