【问题标题】:Do we still need support-v4 and appcompat-v7 when we have support-design?当我们有 support-design 时,我们还需要 support-v4 和 appcompat-v7 吗?
【发布时间】:2018-01-28 18:49:26
【问题描述】:

关于这个有很多讨论。有人说如果我有 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 的所有类。

【问题讨论】:

  • 你从一开始就需要它们

标签: android android-support-design support-v4 android-appcompat


【解决方案1】:

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

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

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

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

  • 设计
    • 支持-v4
      • 支持兼容
        • 支持注释
        • android.arch.lifecycle:runtime
          • android.arch.lifecycle:common
          • android.arch.core:common
          • 支持注释
      • 支持媒体兼容
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持核心实用程序
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持-核心-ui
        • 支持注释 (*)
        • 支持兼容 (*)
      • 支持片段
        • 支持注释 (*)
        • 支持兼容 (*)
        • support-core-ui (*)
        • support-core-utils (*)
    • appcompat-v7
      • 支持注释 (*)
      • support-core-utils (*)
      • 支持片段 (*)
      • 支持矢量可绘制
        • 支持注释 (*)
        • 支持兼容 (*)
      • 动画矢量可绘制
        • 支持向量可绘制 (*)
        • support-core-ui (*)
    • recyclerview-v7
      • 支持注释 (*)
      • 支持兼容 (*)
      • support-core-ui (*)
    • 过渡
      • 支持注释 (*)
      • 支持兼容 (*)

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

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

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

现在您可以尝试从 design 依赖项中显式删除 support-v4 并查看这会将您引导到哪里(即您可能会因为缺少类而崩溃)。

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

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

显然是 Android Team has fixed this 并将在下一个支持库中发布。

【讨论】:

  • 所以你建议 1)我不需要在我的 gradle 上添加 support-v4,因为它是在支持设计时自动完成的,2)因为 support-v4 已经自动添加到支持-design,如果我想实际删除 support-v4 并且只添加所需的模块,例如 support-component、support-core-ui 等,我必须手动删除 support-v4 并处理我需要的类,我可以手动添加将 support-core-ui 等模块添加到我的 gradle 中。
  • @AlbertanoSantacruz 在这两种情况下都是正确的。我可以告诉你design 绝对需要appcompat-v7,它不仅使用代码,还依赖Android 资源。最后,我认为,除了support-media-compat 之外,您最终会保留所有内容。这取决于您使用design 的哪些部分。
  • @AlbertanoSantacruz 有一个不使用 appcompat-v7 的 min SDK 21 的 design fork。 github.com/commonsguy/cwac-crossportCheck out its dependencies.
  • 我已经从 gradle 中排除了模块 support-v4 但我仍然可以在我的外部库列表中看到 support-v4 的以下模块部分:support-compat-26.0.1 和 support-core-ui -26.0.1,但是 support-v4 和其他模块,如 support-media-compat 和 support-media-utils 都消失了。为什么他们没有被删除?
  • 我的最小 sdk 是 16
猜你喜欢
  • 2016-12-25
  • 2013-08-18
  • 2016-03-06
  • 2015-12-21
  • 1970-01-01
  • 2020-08-22
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多