为什么Android无法处理Project和Library之间的资源名称冲突?

时间:2013-05-03 03:06:25

标签: android android-resources

我有一个由图书馆B引用的项目A,A和B具有相同的名称和类型,但它们的值不同。我认为aapt应该处理这个问题,确保项目和库访问正确的值。除了重命名项目或库中的所有资源外,我还应该做些什么来解决这个问题?

3 个答案:

答案 0 :(得分:8)

构建系统有意将所有项目资源覆盖在库资源之上。这样做是为了能够根据使用它的应用程序以不同方式自定义库资源。

如果您想在不知情的情况下防止这种情况发生,我们一直建议用户在图书馆资源中使用前缀。

此时改变行为会打破许多人的项目。我们已经考虑过将它作为一个选项,但是在新的构建系统完成之前它不会发生。

答案 1 :(得分:1)

根据Android Building process,所有项目和库(以及所有项目中的所有资源)都将作为apkbuilder流程的一部分进行组合。如果项目和库之间(或两个库之间)存在冲突,则最终构建将不知道引用哪个,因为它们共享相同的名称。当然,这有一个好处,即您可以按名称引用项目中的库资源,即使底层构建过程与底层ID相冲突。

答案 2 :(得分:0)

导入相应的R.java文件以解决资源冲突。

  1. 确保您的包名和库的包名不同。

  2. 如果您需要图书馆资源,请library.packagename.R.drawable.resourceId而不是R.drawable.resourceId

  3. 引用它们
  4. 检查您的gen文件是否有2个R.java文件。