5

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

4

3 回答 3

9

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

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

在这一点上改变行为会破坏很多很多人的项目。我们已经考虑过让它成为一种选择,但它不会在新的构建系统完成之前发生。

于 2013-05-03T03:29:28.040 回答
1

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

于 2013-05-03T03:18:15.733 回答
0

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

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

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

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

于 2013-05-03T03:23:35.383 回答