繁体   English   中英

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

[英]Why Android cannot deal with Resources name conflict between Project and Library?

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

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

如果您想在不知情的情况下防止这种情况发生,我们始终建议用户在库资源中使用前缀。

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

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

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

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

  2. 如果您需要库资源,请通过library.packagename.R.drawable.resourceId引用它们,而不是通过R.drawable.resourceId引用它们library.packagename.R.drawable.resourceId

  3. 检查您的gen文件是否有2个R.java文件。

暂无
暂无

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

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