你能解释为什么在Android上suport v4和v7

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

为什么不使用一个支持库的所有版本? 甚至所有的支持类,在SDK上吗?

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

他们不是“分为v4和v7”。 它们按function划分。 有很多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' 

其中唯一替代的是support-v4support-v13support-v13包含support-v4中的所有内容,以及一些仅与运行API Level 13或更高版本的设备相关的其他类。

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

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

出于同样的原因,我们没有编写在人类历史上曾经写过的每一行代码:我们并不需要它。 appcompat-v7appcompat-v7一个独立的库,例如,它们与我的一个库相关。

甚至所有的支持类,在SDK上吗?

在某些情况下,这是因为我们还没有发明一个时间机器,所以我们不能“停留”旧版Android的不同的类和方法。 例如, appcompat-v7存在的部分原因是允许在返回API级别7的设备上使用操作栏模式; 本机操作栏只出现在API级别11。

制造商也面临着压力,特别是框架类,以减less构buildAndroid设备所需的RAM和闪存容量。 因此,有些东西(例如,针对Android TV体验的leanback-v17 )不是操作系统的一部分,因为它们并不是无处不在。

另外,通过库中的东西,你的应用程序更独立于底层设备。 例如,一些开发人员将使用support-v4support-v13的片段backport,而不是因为他们希望在比API Level 11更早的设备(引入本机片段时)上运行,而是因为他们想要实现片段在所有Android版本中都是一样的。 Android OS版本的本地片段实现会有所不同。

v4可以兼容Android的第4版。 v7兼容到v7。 由于Android SDK v4更加有限,所以更难以将某些东西移回(有些东西甚至可能无法移回那么远,但有可能移植到7)。 谷歌认为,增加的难度不值得,因为v4是古老的(它不到1%的有源设备)。

实际上有更多的版本 – v8,v11和v13支持库,它们只是不常用。

v4支持库v7支持库都支持android版本2.3(API级别9)及更高版本,并且需要对旧设备进行向后兼容。

区别

v4拥有最多的一组API,比App组件,用户界面function,数据处理,networking连接和实用程序等都要好。

v7提供了可以独立包含在您的应用中的特定function集。

还有v7 AppCompactv13 SupportLabrary

v7 AppCompact – 用于ActionBar用户界面和devise。 它也需要v4。

v13 SupportLbrary – Android版本3.2(API级别13)及更高版本,并支持片段用户界面模式