0

主项目 A (APK) 依赖于子项目 B (AAR)。A 和 B 都依赖于 C (AAR)。问题是 C 包含两次,这导致:

“values.xml:XXX:错误:属性“YYY”已被定义”

如何从最终 APK 中排除瞬态依赖 C?

项目一:

android_binary (
  deps = [    
    ':src',
  ], ...
)

android_library(
  name = 'src',
  deps = [
  ':C',
  '//B:src',    
  '//B:res',
  ], ...
}

android_resource(
  name = 'res',
  res = 'src/main/res', ...
}

子项目B

android_aar (
  deps = [
    ':src',
    ':res'
  ], ...
)

android_library(
  name = 'src',
  deps = [
    ':res',
    ':C'
  ], ...
)

android_resource(
  name = 'res',
  deps = [
    ':C'
  ], ...
)

C 是“appcompat-v7.aar”。
注意:A 在“A/libs”中包含 C,B 在“B/libs”中包含 C。

4

2 回答 2

0

当我在处理子项目 B 时,我最终从主项目 A 中删除了依赖项 C。
这样,A 通过子项目 B 获取 C 作为传递依赖项,并防止 C 被包含两次。

于 2016-05-07T19:20:55.783 回答
0

从您提供的示例中很难分辨,但听起来您已经定义了两次“C”:一次在 A/libs 中,一次在 B/libs 中。因为这个,巴克不明白这是“同一件事”。您应该做的是将“C”放在 A 和 B 都可以引用它的位置(有一个与“A”和“B”对等的“第三方”文件夹很常见),这样 Buck 会能够看到图中有一个依赖菱形并正确解决。

于 2016-05-16T08:52:23.900 回答