关于这个问题有很多讨论。 有人说如果我有 appcompat-v7,我不需要 support-v4,因为 appcompat-v7 已经拥有 support-v4 的所有类。 此外,该支持设计已经具有 appcompat-v7 中的所有类,因此我们甚至不需要它。 有一些答案已经很多年了,所以现在情况可能已经发生了变化。 我做了一个测试,在我的项目中我有支持设计、支持-v4 和 appcompatv7,在删除 support-v4 和 appcompatv7 后,我仍然能够使用支持-v4 和 appcompatv7 中的所有类只需支持设计。 谁能澄清一下?
我要做的就是从我的项目中删除 support-v4,并且只包含 support-v4 中的独立模块,例如支持兼容、支持核心等。但是,如果支持设计自动添加支持v4,这似乎是不可能的。我已经从 gradle 和 appcompat-v7 中删除了 support-v4,并且通过保留支持设计仍然可以在我的项目中找到 support-v4 中的所有类。
当我们有支持设计时,我们还需要 support-v4 和 appcompat-v7 吗?
从技术上讲,这取决于你的观点。
您不需要在依赖项中指定它们,但design
编译时和运行时仍然需要所有这些类。Gradle + maven负责自动获取这些传递依赖项。
以下是最新版本的支持库design
依赖项图:
- 设计
- 支持-v4
- 支持兼容
- 支持注释
- android.arch.lifecycle:runtime
- android.arch.lifecycle :common
- android.arch.core:common
- 支持注释
- 支持媒体兼容
- 支持注释 (*)
- 支持兼容 (*)
- support-core-utils
- 支持注释 (*)
- 支持兼容 (*)
- 支持核心用户界面
- 支持注释 (*)
- 支持兼容 (*)
- 支持片段
- 支持注释 (*)
- 支持兼容 (*)
- 支持核心用户界面 (*)
- 支持核心实用程序 (*)
- 支持兼容
- Appcompat-v7
- 支持注释 (*)
- 支持核心实用程序 (*)
- 支持片段 (*)
- 支持矢量可绘制
- 支持注释 (*)
- 支持兼容 (*)
- 动画矢量可绘制
- 支持矢量可绘制 (*)
- 支持核心用户界面 (*)
- 回收器视图-v7
- 支持注释 (*)
- 支持兼容 (*)
- 支持核心用户界面 (*)
- 过渡
- 支持注释 (*)
- 支持兼容 (*)
- 支持-v4
(*) 表示前面已经提到的依赖关系。
但是,如果支持设计自动添加支持v4,这似乎是不可能的。
在研究上述树时,令我自己惊讶的是,我可以确认这一点。
现在,您可以尝试从依赖项中显式删除support-v4
design
并查看这会将您引向何方(即您可能会因为缺少类而崩溃)。
implementation ('com.android.support:design:27.0.2') {
exclude group: 'com.android.support', module: 'support-v4'
}
如果您确实崩溃,请导入缺少的库,直到您不崩溃。
显然,Android团队已经解决了这个问题,并将在下一个支持库中发布。