理解安卓支持库(Android Support Library)

安卓平台其中一个很牛逼的地方在于它支持各种不同的设备。从你的平板电脑,到你的手机,电视等,安卓无处不在。安卓想成为一个全领域的移动计算平台。光从它的数量上来说,已经算是很成功了。

支持所有这些设备是有一些挑战的。不管硬件还是软件上的不同,用户希望应用程序可以在每一台设备上用样的运行;同样,对于开发者来说,你不能总指望用户已经升级到最近的安卓版本。事实上,开发者遇到的用户大多使用18个月前或者更老的版本。

如果没有安卓团队的帮助,开发者会不得不做些“丑陋的代码”去兼容那些使用老版本的用户。幸运的是,安卓团队已经意识到包容老设备这一点很重要。不过兼容老的同时不影响新的这一要求是一个架构上的挑战,因为安卓接口随着版本演进一直是在变动的。如何让那些没有更新设备的老安卓设备成功运行这些最新的安卓接口呢?

答案就是安卓团队做得最重要和奇特的设计决定:安卓支持库(the Android Support Library)

什么是安卓支持库(Android Support Library)?

早在2011年它作为安卓兼容库发布,在75%的应用中使用过,是最广泛使用的安卓库。它事实上不是一个单一的文件,而是一个集合,其中可以大致可以分为两组:兼容库组件库

每一个库都指明了所支持的最小sdk版本。有一点容易弄错,就是高版本的支持库很容易被理解为涵盖了低版本支持库的所有内容。实际上,并非如此。(可能你认为v7-appcompat包含了v4,但是不是这样的)

兼容库(Compatibility Lib)

专注新版本向后兼容,使老版本上可以使用新的API。主要的兼容库有v4和v7版本。

v4

正如名字所示,它向后兼容到API4.支持了一些主要类的实现,比如Frament和Loader(API11引入),也支持了一些广泛使用的但不存在framework中的类,比如ViewPager和DrawerLayout。

不要光看名字。不管是不是要支持安卓1.6,这里仍然有一些很有用和重要库。并且由于支持库的引用依赖,一般很难避免不用v4.

v7

通常单纯地用于兼容。v7提供了诸如ActionBar(API11引入),Toolbar(API21引入),并且向后兼容到API7.它依赖v4支持库。

幕后情况

兼容库大量地使用shims技术(填充码)来向后支持。这些shrims是简单的封装,如果在新版本上调用,shrims会将调用传入底层framework实现;在老版本中,可能就是稍微不同的实现或者减少了一些功能。

在一些情况下,shim没有使用到。相对地,支持库使用了一套自己的实现来代替framework的实现。(可能真的是没法100%兼容了)主要的一个例子就是v4中的Fragment。这个Fragment和framework中的Fragment就不一样,也不兼容。

这个影响了整个安卓Framework,这个是有意思的设计。安卓创建了一整套不同的兼容实现,重复创造了大量相同功能。这些向后兼容的实现并行于framework,并且有它们自己的继承结构以及bugs。

Google声称这些情况下大部分API仍然是一样的,除了那些属于不同package并且有一些不同的方法。可事实上,是有一些不一致和非显著不同存在于支持库和framework之间的,并且这些不同很有可能将随时间推移而增长。

另外,在一些情况下,开发者以为他们自己有选择去使用framework或者支持库,但其实这得听从于所支持的引用出自哪里。比如说,v7支持库允许开发者使用Material Design UI(API 21引入)。但是这样需要Activity继承AppCompatActivity,而AppCompatActivity是继承自FragmentActivity(v4中实现)。所以在API21之下或者使用Material Design UI特性的全部都强制使用了v4版本的Fragment,而不是framework中的Fragment。不过Google认为使用支持库是一个好的实践,即使没有需求去使用它。

组件库

安卓支持库同样提供了更小,更模块化的组件库,从而使开发者可以添加framework中没有的特性。这些库可以轻松的增删而不用考虑引用问题。以下是几个有价值的组件库:

  • v7-recyclerview: provides the RecyclerView component, which efficiently displays and animates large amounts of data and is designed to replace ListView
  • v7-cardview: provides the CardView component, enabling the cards UI design pattern
  • v7-gridlayout: provides the GridLayout class, which enables organizing UI elements into a rectangular grid
  • v7-mediarouter: provides MediaRouter and related classes, enabling Google Cast support
  • v7-palette: provides the Palette class, which enables developers to identify primary colors in an image

向你工程里添加这些组件就如同在你的build脚本中添加一个引用一样简单。

先不说便利性和模块化的好处,将组件从库中抽离出来允许Google在Framework之外发布重要API。这样在正式何入到framework之前方便收集反馈,和设计上的迭代更新。总比先在framework中发布再做更改好的吧。

其他库

同样包含了一些其他比较少用的库,但是值得注意:

  • v8: provides support for RenderScript (introduced in API 11) back to API 8
  • v13: provides additional compatibility support for the Fragment UI pattern and bundles the v4 library
  • v17: provides support for building TV UIs
  • multidex: provides support for building apps with multiple DEX files
  • annotations: provides support for annotations like @NonNull and @IntDef

常见问题

我什么情况下应该用安卓支持库?

如果你需要的特性比你应用支持的最低sdk版本要老,或者该特性在标准framework中不支持。

不过Google认为使用支持库是一个好的实践,即使没有需求去使用它。

我应该用哪一个版本?

简而言之,使用有你需要功能的版本。比如你要用RecyclerView,直接将v7-recycleview引用添加到你的build脚本中就好。

如果你需要一个v4组件,你可以使用v13如果你的最小sdk版本支持的话。

不过,支持库中的引用可能会使你决定使用哪一个版本。

翻译自 http://martiancraft.com/blog/2015/06/android-support-library/

时间: 2024-12-15 06:51:16

理解安卓支持库(Android Support Library)的相关文章

Android support library支持包常用控件介绍(二)

谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library 支持库,让开发者更容易的实现材料设计的效果.顺便推荐官方的一个图标库:Material Icons 控件名称 NavigationView FloatingActionButton TextInputLayout Snackbar TabLayout AppBarLayout Coordinator

Android Support Library 23.2

Android Support Library 23.2 When talking about the Android Support Library, it is important to realize this isn't one monolithic library, but a whole collection of libraries that seek to provide backward-compatible versions of APIs, as well as offer

Android Support library

1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有support库? 如果在低版本Android平台上开发一个应用程序,而应用程序又想使用高版本才拥有的功能,就需要使用Support库. 3, 三个Support 库的区别和作用是什么? Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之上.它包含了相对V4, V13大的多的功能.

Android Support Library介绍

v4 Support Library 这个库是为Android 1.6(API版本为4)及以上的版本设计的,它包含大部分高版本中有而低版本中没有的API,包括application components.user interface features.accessibility.data handling.network connectivity.and programming utilities,下面是对V4中的一些关键API的介绍: App Components Fragment:通过它可以

Android Support Library 学习入门

0. 文前闲话 作为一个由原生桌面应用程序开发者(VC.Delphi)转行的Android菜鸟,虐心的事真是数不胜数:安装个开发工具下载个SDK需要整整一夜:早晨一上班点开Android Studio(简称AS),去倒个水回来了还不见它开始工作:开发工具一忙起来就会忘记你这个开发者,不知过了多久后才给你一句:"去TMD的GFW,我啥也没干成,你自己看着办吧!". 对于我们这些已经被微软.Borland.Sybase洗脑多年的开发者,除了开发工具的不适应,最大的壁垒其实是大脑中已经固有的

【翻译】Android Support Library Features(二)

原文地址:http://developer.android.com/tools/support-library/features.html 在Android Support Library包中,包含了几个可以被引入到你应用的库.每一个库支持一个特定的Android平台版本范围和功能集合. 原文:The Android Support Library package contains several libraries that can be included in your applicatio

Support v4 v7 v13: Android Support Library

Android Support v4:  这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认带有了. Android Support v7:  这个包是为了考虑照顾2.1及以上版本而设计的,但不包含更低,故如果不考虑1.6,我们可以采用再加上这个包,另外 注意,v7是要依赖v4这个包的,即,两个得同时被包含. Android Support v13:这个包的设计是为了android 3.2及更高版本的,一般我们都不常用,平板开发中能用到. Andro

[Xamarin.Android] Support Library Tips

[Xamarin.Android] Support Library Tips Support Library支持内容 Xamarin Support Library每个版本支持.那些组件,可以参考这份简报的第8张. Backwards Compatibility in Xamarin.Android Made Easy

提高Android Support Library稳定性的三个关键方法

在Crashlytics,我们经常帮助开发者探索如何建立最稳定应用的方法.抱着这个想法,最近我们开始研究安卓应用崩溃的普遍原因.尤其令我们好奇的是能否在Android Support Library中找到应用崩溃的一些蛛丝马迹,因为这是安卓应用中最广泛使用的Library之一.(貌似是老外写的) 在我们分析的一亿个崩溃里,发现大约有4%的崩溃与这个Support Library有关.通过更深层次的分析,我们的研究表明,绝大多数的崩溃是由一些常见较小的错误造成,而且这些错误却可以避免的.基于这些分