但我不明白他们为什么分为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'
这些的,仅仅是为其他的替代品是support-v4和support-v13。 support-v13包含support-v4中的所有内容,以及一些仅与运行API Level 13或更高版本的设备相关的其他类。
工件名称中的-vNN表示法只是为了帮助您提醒该库中代码的Android API级别。
为什么只是不使用一个支持库的所有版本?
出于同样的原因,我们没有在人类历史上编写的每一行代码中进行编译:我们不需要它。 appcompat-v7是一个来自leanback-v17的独立库,它们与我的一个库相关。
甚至所有的支持上的类,都在SDK上吗?
在某些情况下,这是因为我们还没有发明时间机器,所以我们不能“检测”旧版Android的不同类和方法。例如,appcompat-v7存在的部分原因是允许在回到API级别7的设备上使用操作栏模式;本机操作栏仅在API级别11出现。
制造商也有压力来保持操作系统的大小,特别是框架类,以减少构建Android设备所需的RAM和闪存存储量。因此,有些东西(例如,Android电视风格的leanback-v17)不属于操作系统的一部分,因为它们在任何地方都不需要。
此外,通过库中的东西,您的应用程序更独立于底层设备。例如,一些开发人员将使用support-v4或support-v13中的片段backport,这并不是因为他们希望在比API Level 11更早的设备(引入本机片段时)上运行,而是因为他们希望实现跨越相同的片段所有Android版本。 Android操作系统版本的本地片段实现会有所不同。