我正在检查Android的支持库,但我不明白为什么他们分为v4和v7?
为什么不为所有版本使用一个支持库?甚至所有支持的课程都适用于SDK?
答案 0 :(得分: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'
其中唯一替换为support-v4
和support-v13
的替代品。 support-v13
包含support-v4
中的所有内容,以及一些仅与运行API级别13或更高级别的设备相关的其他类。
工件名称中的-vNN
表示法只是为了帮助提醒您该库中的代码所使用的Android API级别。
为什么不对所有版本使用一个支持库?
出于同样的原因,我们没有在人类历史上编写的每一行代码中编译:我们不需要它。例如,appcompat-v7
是来自leanback-v17
的独立库 - 它们与我的某个库相关。
甚至所有支持的课程都适用于SDK?
在某些情况下,它是因为我们尚未发明时间机器,所以我们不能" retcon"旧版本的Android有不同的类和方法。例如,appcompat-v7
存在的部分原因是允许操作栏模式在返回到API级别7的设备上使用;本机操作栏仅出现在API级别11。
制造商也面临着降低操作系统规模的压力,特别是框架类,以减少构建Android设备所需的RAM和闪存存储量。因此,某些内容(例如,leanback-v17
,适用于Android电视风格体验)不属于操作系统,因为它们并非在任何地方都需要。
此外,通过在库中添加内容,您的应用程序更加独立于底层设备。例如,一些开发人员将使用support-v4
或support-v13
中的片段的backport,而不是因为他们想要在比Level Level 11更早的设备上运行(当引入本机片段时),但是因为他们想要一个在所有Android版本中实现相同功能的片段。本机片段的实现因Android OS版本而异。
答案 1 :(得分:6)
v4兼容到Android的第4版。 v7与v7兼容。由于Android SDK v4受限制较多,因此将某些内容移植回来更加困难(有些事情甚至可能无法移植到那么远,但可能会移植到7)。谷歌认为增加的难度并不值得,因为v4只是古老的(它不到1%的有源设备)。
实际上有更多的版本 - 存在v8,v11和v13支持库,它们使用起来不太常见。
答案 2 :(得分:2)
v4支持库和 v7支持库均支持 Android版本2.3(API级别9)及更高版本,并且需要向后兼容设备
<强>差强>
v4 拥有最多的API,而不是其他应用程序组件,用户界面功能,数据处理,网络连接和实用程序。
v7 提供了可以独立包含在您应用中的特定功能集。
还有 v7 AppCompact 和 v13 SupportLbrary :
v7 AppCompact - 用于ActionBar用户界面和设计。它也需要v4。
v13 SupportLbrary - android版本3.2(API级别13)及更高版本,支持片段用户界面模式