Android 当我们有支持设计时,我们还需要support-v4和appcompat-v7吗?

Android 当我们有支持设计时,我们还需要support-v4和appcompat-v7吗?,android,android-support-design,support-v4,android-appcompat,Android,Android Support Design,Support V4,Android Appcompat,关于这一点有很多讨论。有人说,如果我有appcompat-v7,我就不需要support-v4,因为appcompat-v7已经拥有support-v4的所有类。此外,该支持设计已经拥有来自appcompat-v7的所有类,因此我们甚至不需要这些类。有一些答案已经有很多年了,所以现在情况可能已经改变了。我做了一个测试,在我的项目中,我有support design、support-v4和appcompatv7,在删除support-v4和appcompatv7之后,我仍然能够通过support

关于这一点有很多讨论。有人说,如果我有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-v4中的所有类仍然可以通过保留support design在我的项目中找到

当我们有支持设计时,我们还需要support-v4和appcompat-v7吗

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

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

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

  • 设计
    • 支持-v4
      • 支持同胞
        • 支持注释
        • 生命周期:运行时
          • 生命周期:通用
          • android.arch.core:common
          • 支持注释
      • 支持媒体兼容性
        • 支持注释(*)
        • 支持兼容(*)
      • 支持核心UTIL
        • 支持注释(*)
        • 支持兼容(*)
      • 支持核心用户界面
        • 支持注释(*)
        • 支持兼容(*)
      • 支撑碎片
        • 支持注释(*)
        • 支持兼容(*)
        • 支持核心用户界面(*)
        • 支持核心UTIL(*)
    • appcompat-v7
      • 支持注释(*)
      • 支持核心UTIL(*)
      • 支持片段(*)
      • 支持向量机可绘制
        • 支持注释(*)
        • 支持兼容(*)
      • 动画矢量可绘制
        • 支持向量可绘制(*)
        • 支持核心用户界面(*)
    • recyclerview-v7
      • 支持注释(*)
      • 支持兼容(*)
      • 支持核心用户界面(*)
    • 过渡
      • 支持注释(*)
      • 支持兼容(*)
(*)表示前面已经提到的依赖项

然而,如果支持设计自动添加support-v4,这似乎是不可能的

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

现在,您可以尝试从
design
依赖项中显式删除
support-v4
,并查看这会导致您的情况(即,您可能会因为缺少类而崩溃)

如果发生崩溃,请导入丢失的库,直到没有


很明显,和将在下一个支持库中发布。

您一开始就不需要它们,因此您建议1)我不需要在gradle上添加support-v4,因为这是在支持设计时自动完成的;2)因为support-v4已经自动添加到支持设计中,如果我想实际删除support-v4并只添加所需的模块,如support component、support core ui等,我必须手动删除support-v4并处理所需的类,我可以手动将support core ui等模块添加到我的gradle中。@AlbertanoSantacruz在这两种情况下都正确。我可以告诉你,
design
绝对需要
appcompat-v7
,它不仅使用代码,还依赖Android资源。最后,我认为,您将保留除支持媒体兼容性之外的所有内容。这将取决于您使用的
design
的哪些部分。@AlbertanoSantacruz min SDK 21有一个
design
fork,它不使用appcompat-v7。我已经从gradle中排除了模块support-v4,但我仍然可以在我的外部库列表中看到support-v4的以下模块:support-compat-26.0.1和support-core-ui-26.0.1,但是support-v4和其他模块(如support media compat和support media UTIL)已经消失。为什么它们没有被移除呢?我的最小sdk是16
implementation ('com.android.support:design:27.0.2') {
    exclude group: 'com.android.support', module: 'support-v4'
}