Android 支持包/兼容性库 - 使用 v4 还是 v13?

Posted

技术标签:

【中文标题】Android 支持包/兼容性库 - 使用 v4 还是 v13?【英文标题】:Android Support Package / Compatibility Library - use v4 or v13? 【发布时间】:2012-04-13 03:51:03 【问题描述】:

我刚刚阅读了 android 支持包/兼容性库的说明...

http://developer.android.com/sdk/compatibility-library.html

...这让我有点困惑!它说 v13 库是 v4 的超集,但我认为它是相反的方式?

实用:如果我想使用兼容性库,以便我的应用在运行 Android 2.2 (API 8) 到 4.0 (API 14) 及更高版本的手机上构建和运行良好,v4 对我来说是否足够?

【问题讨论】:

【参考方案1】:

要面向 API 8 (v2.2),您应该使用 v4 版本。

v13 的大部分内容都可以使用,但如果您使用其中的任何依赖于平台 13 API 的功能,您的应用将在旧设备上崩溃。

除非有特别令人信服的理由需要 v13,否则我建议直接使用 v4。

【讨论】:

澄清一下:我在清单中将“targetSdkVersion”指定为“14”,将“minSdkVersion”指定为“8”。所以 v4 仍然是我想要的,对吧? 如果您使用 v13,并且您在其中使用依赖于平台 13 API 的功能,您的应用程序将会崩溃。仅仅因为它可以编译,并不意味着它可以在所有设备上运行。 我仍然不明白 v13 是否需要 13+ 设备为什么它是 v4 的超集... 相当于说v4是v13的一个子集。 v4 中的所有 API 都包含在 v13 中,v13 中非 v4 的额外 API 需要 13+。 感谢@ChristopherPerry 我错误地添加了 v4 和 v13 支持库,您的评论解决了我的问题。如果我的 minSdkVersion 大于 13,我只需要 v13 而不是两者都需要。【参考方案2】:

答案是正确的,但也有点令人困惑! 目前有 3 个支持 jar:V4、V7 和 V13。 不幸的是,V7 仅适用于网格布局,因此不是超集。

我们只对支持库中的一个 jar 感兴趣 [除非我们也想要 gridlayout(我不知道它是什么!)]。因此,我们正在查看我们的 android:minSdkVersion="8" 并对照 jar 进行检查。所以我们想要 V4。

V13 只是一个超集,它复制了 V4 的方法,而不是代码。 IE。在这个例子中使用 V13 是不正确的。

【讨论】:

【参考方案3】:

我认为我们不应该使用超集(或子集)来描述这三个库(v4、v7、v13),尽管最简单的含义似乎是向后兼容版本 4、7 和 13。

Google 首先在 v4 中添加 Fragment,然后在每个新版本发布时更新它。这意味着除非您的应用仅支持最新版本(强烈不推荐),否则我们几乎随时都需要 support-v4.假设你的 minsdk 是 14 已经有片段,但是“嵌入式片段”只支持 17 之后,所以我们仍然需要 v4 并在这种情况下使用 v4 片段。

今年(2013)google发布了v7,并在其中添加了appcompat-library。这意味着除了11之前第三次支持Actionbar(ActionbarSherlock)之外,官方支持可能会更好One?? 然后我相信将来在 v7 中发布每个新版本时,我们都会更新所有操作栏功能。

我们仍然需要 minsdk=XX(7 到 10 之间)today(2013 年 11 月 24 日)。我们应该为片段添加 support-v4,为 actionBar 添加 support-v7,以达到最佳效果练习。

【讨论】:

您的回答很好地解释了大多数人相信的这些库之间没有子集超集关系。【参考方案4】:

我查看了 v13 的源代码,它只增加了 4 个类。

片段兼容性 FragmentPagerAdapter FragmentStatePagerAdapter FragmentTabHost

FragmentCompat 添加了 2 个静态 util 方法,这些方法已经包含在 v4 Fragment 中。

FragmentPagerAdapter、FragmentStatePagerAdapter 和 FragmentTabHost,这 3 个类在 v4 中都有对应的同名类,并且具有相同的行为。

v13 中提供的额外 API 不是必需的。

所以通过添加 v4,您可以支持比 v13 更多的平台,并且与 v13 具有相同的行为,那么为什么不直接使用 v4?

所以我看不出 v13 有任何必要性。 我说的对吗?

【讨论】:

【参考方案5】:

v13 只有关于 Fragment 的功能。 大多数情况下,如果您的 minVersion 高于 13 并且未使用以下功能:FragmentPagerAdapter、FragmentStatePagerAdapter、FragmentTabHost 和嵌套片段; 您不需要支持 v13。

所以“v4 是 v13 的子集”是不正确的!

【讨论】:

【参考方案6】:

有点晚了,但请仔细看看下面的图片。 在 JAR 文件 android-support-v13.jar 中,有 3 个包:

注释 v4 v13

意思是我们只需要添加这个 jar,我们就可以同时支持 v4 和 v13。由于 v7 不在编译中,我们需要自己添加该 JAR。

【讨论】:

以上是关于Android 支持包/兼容性库 - 使用 v4 还是 v13?的主要内容,如果未能解决你的问题,请参考以下文章

使用 android.support.v4.app 蜂窝兼容包导出签名应用时出现 Proguard 错误

无法使用兼容包 v4 解决在 Android 2.3.3 上运行的 FragmentActivity

android support v4支持包要点分析,api介绍

Android 安装包优化Android 中使用 SVG 图片 ( 使用 appcompat 支持库兼容 5.0 以下版本的 Android 系统使用矢量图 )

添加v4支持库

如果最低 SDK = 14,Lollipop 的 Appcompat、兼容性和支持库