你能解释为什么在android上支持v4和v7

use*_*366 12 android facebook-android-sdk

我正在检查Android的支持库,但我不明白为什么他们分为v4和v7?

为什么不对所有版本使用一个支持库?甚至所有支持的课程都适用于SDK?

Com*_*are 13

但我不明白为什么他们分为v4和v7?

它们不是"分为v4和v7".它们按功能划分.Android支持包有很多部分,例如:

compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.android.support:gridlayout-v7:21.0.0'
compile 'com.android.support:leanback-v17:21.0.0'
compile 'com.android.support:mediarouter-v7:21.0.0'
compile 'com.android.support:palette-v7:21.0.0'
compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.android.support:support-annotations:21.0.0'
compile 'com.android.support:support-v13:21.0.0'
compile 'com.android.support:support-v4:21.0.0'
Run Code Online (Sandbox Code Playgroud)

这些中唯一的替代品是support-v4support-v13.support-v13包含所有内容support-v4,以及一些仅与运行API级别13或更高级别的设备相关的其他类.

-vNN工件名称中的表示法只是为了帮助提醒您该库中的代码所使用的Android API级别.

为什么不对所有版本使用一个支持库?

出于同样的原因,我们不会在人类历史上编写的每一行代码中编译:我们不需要它.例如,它appcompat-v7是一个独立的图书馆leanback-v17- 它们与我的一个图书馆有关.

甚至所有支持的课程都适用于SDK?

在某些情况下,因为我们还没有发明时间机器,所以我们不能"重新调整"旧版本的Android以拥有不同的类和方法.例如,appcompat-v7存在的部分原因是允许操作栏模式在返回到API级别7的设备上使用; 本机操作栏仅出现在API级别11.

制造商也面临着降低操作系统规模的压力,尤其是框架类,以减少构建Android设备所需的RAM和闪存存储量.因此,有些东西(例如,leanback-v17对于Android TV风格的体验)不是操作系统的一部分,因为它们并不是随处可见的.

此外,通过在库中添加内容,您的应用程序更加独立于底层设备.例如,一些开发人员将使用片段的backport,support-v4或者support-v13不是因为他们想要在比Level Level 11更早的设备上运行(当引入本机片段时),而是因为他们想要在所有Android上实现相同的片段实现版本.本机片段的实现因Android OS版本而异.


Gab*_*han 6

v4兼容到Android的第4版.v7与v7兼容.由于Android SDK v4受限制较多,因此将某些内容移植回来更加困难(有些事情甚至可能无法移植到那么远,但可能会移植到7).谷歌认为增加的难度并不值得,因为v4只是古老的(它不到1%的有源设备).

实际上有更多的版本 - 存在v8,v11和v13支持库,它们使用起来不太常见.

  • 如果v4支持回到版本4而v7支持回到版本7,那么为什么它支持-v4 for v4和appcompat-v7 for v7?为什么不把它命名为"support-v7"? (2认同)