2

对此有很多讨论。有人说如果我有 appcompat-v7,我就不需要 support-v4,因为 appcompat-v7 已经拥有 support-v4 的所有类。此外,该支持设计已经包含 appcompat-v7 中的所有类,因此我们甚至不需要它。有一些答案已经有很多年了,所以现在情况可能已经改变了。我做了一个测试,在我的项目中,我有 support-design、support-v4 和 appcompatv7,在删除 support-v4 和 appcompatv7 后,我仍然可以通过 support-design 使用 support-v4 和 appcompatv7 中的所有类。任何人都可以澄清这一点吗?

我要做的就是从我的项目中删除 support-v4,并且只包括 support-v4 中的独立模块,例如 support-compat、support-coreui 等。但是,如果 support-design 自动添加 support-v4 这不会似乎不可能。我已经从 gradle 和 appcompat-v7 中删除了 support-v4,并且只保留了 support-design,我的项目中仍然可以找到 support-v4 中的所有类。

4

1 回答 1

0

当我们有 support-design 时,我们还需要 support-v4 和 appcompat-v7 吗?

从技术上讲,这取决于您的观点。

您不需要在依赖项中指定它们,但design在编译时和运行时仍需要所有这些类。Gradle + maven 负责自动获取这些传递依赖项。

这是最新版本的design支持库的依赖关系图:

  • 设计
    • 支持-v4
      • 支持兼容
        • 支持注释
        • android.arch.lifecycle:运行时
          • android.arch.lifecycle:common
          • android.arch.core:common
          • 支持注释
      • 支持媒体兼容
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持核心工具
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持核心用户界面
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持片段
        • 支持注释 (*)
        • 支持兼容 (*)
        • 支持核心用户界面 (*)
        • 支持核心工具 (*)
    • appcompat-v7
      • 支持注释 (*)
      • 支持核心工具 (*)
      • 支持片段 (*)
      • 支持向量可绘制
        • 支持注释 (*)
        • 支持兼容 (*)
      • 动画矢量可绘制
        • 支持向量可绘制 (*)
        • 支持核心用户界面 (*)
    • 回收站视图-v7
      • 支持注释 (*)
      • 支持兼容 (*)
      • 支持核心用户界面 (*)
    • 过渡
      • 支持注释 (*)
      • 支持兼容 (*)

(*) 表示之前已经提到的依赖关系。

但是,如果 support-design 自动添加 support-v4,这似乎是不可能的。

在研究上述树时,令我惊讶的是,我可以证实这一点。

现在,您可以尝试support-v4design依赖项中显式删除并查看它会导致您的位置(即您可能会因为缺少类而崩溃)。

implementation ('com.android.support:design:27.0.2') {
    exclude group: 'com.android.support', module: 'support-v4'
}

如果您确实崩溃了,请导入缺少的库,直到您没有崩溃为止。

显然,Android 团队已经解决了这个问题,并将在下一个支持库中发布。

于 2018-01-28T20:08:10.923 回答