我有一个由图书馆B引用的项目A,A和B具有相同的名称和类型,但它们的值不同。我认为aapt应该处理这个问题,确保项目和库访问正确的值。除了重命名项目或库中的所有资源外,我还应该做些什么来解决这个问题?
答案 0 :(得分:8)
构建系统有意将所有项目资源覆盖在库资源之上。这样做是为了能够根据使用它的应用程序以不同方式自定义库资源。
如果您想在不知情的情况下防止这种情况发生,我们一直建议用户在图书馆资源中使用前缀。
此时改变行为会打破许多人的项目。我们已经考虑过将它作为一个选项,但是在新的构建系统完成之前它不会发生。
答案 1 :(得分:1)
根据Android Building process,所有项目和库(以及所有项目中的所有资源)都将作为apkbuilder流程的一部分进行组合。如果项目和库之间(或两个库之间)存在冲突,则最终构建将不知道引用哪个,因为它们共享相同的名称。当然,这有一个好处,即您可以按名称引用项目中的库资源,即使底层构建过程与底层ID相冲突。
答案 2 :(得分:0)
导入相应的R.java文件以解决资源冲突。
确保您的包名和库的包名不同。
如果您需要图书馆资源,请library.packagename.R.drawable.resourceId
而不是R.drawable.resourceId
检查您的gen文件是否有2个R.java文件。