Android 安卓技术分享Android开发Android知识

彻底理解Android Support Library

2017-03-20  本文已影响204人  卑鄙的鹿尤菌

前言


能够让App运行在大量不同型号和系统版本的设备上是Android系统最牛逼的地方之一。注意,我这里说的是设备,这其中除了不同型号的手机,还包括平板电脑,手表,甚至是电视,汽车等等。

要想兹次花样繁多的设备和平台本身已经是一件挺麻烦的事儿了,Android系统又在不断发展着,时不时地用科技改变一下生活。
然而用户们才不管这些,他们还特别希望同一个App在不同版本的系统和设备上运行的时候外观和功能上都差不多,哪怕有些系统都老掉牙了。
用户的需求给程序猿的开发工作带来了巨大的挑战,到底如何让新版本的特性展现在老版本的系统上呢?

上帝说渊面黑暗的时候要有光,于是Google贴心地为开发者们准备了Android Support Library

Android Support Library


几乎每个Android开发者都多少了解一点Android Support Library:就是给老版本的系统提供新API的库嘛,几乎的App开发中都用到了。这的确是Android Support Library作用,但往往人们对它的理解还存在一些细节上的误区,今天我们就来彻底理解一下Android Support Library

事实上,Android Support Library 在设计上并不是用一个library来保证所有的老设备都能用上新功能,道理很简单:随着新功能越来越多会让它变得越来越庞大和难以维护。(我要吐槽一句,也许刚开始就是这么设计的,所以v4才海纳百川般庞大)
因此,Android Support Library 是一个众多兼容库的集合,开发者根据自己的需求来选择合适的library来依赖就可以了。

我们注意到,Android Support Library在命名上都有一个版本号(例如v7,v4等等),这个版本号其实是标识了工程必须使用的minSdkVersion,而不是说高版本的library包含了低版本的所有功能和特性。

总体上,Android Support Library 可以分为两类:兼容库和组件库,下面我们来仔细了解一下。

顾名思义,兼容库的主要作用就是解决向后兼容的问题:来让App运行在低版本手机上的时候能够使用新版本系统才有的特性。很多人会混淆向前兼容(Forwards Compatibility)和向后兼容(Backwards Compatibility)的意思,向前兼容并不是说兼容以前的版本,而是兼容将来(Forwards)的版本。我们这里所讨论的是向后兼容的问题。

大多数情况下,兼容库会采用包装类的方式来实现向后兼容的问题,在新版Android系统的API调用上有两种实现策略:

那么对于一个组件或者新的API,系统framework和兼容包中的实现是相同的么?Google表示尽管两者在类文件,打包的资源等都不相同,但向外暴露的API基本都是相同的。

听上去我们开发者在日常工作中用哪套接口都是可以咯?然而在实际开发中我们会发现并不是这样简单。举个例子,Android在 API 21引入了Material Design,并在低版本中我们可以通过v7-appcompat 对其进行兼容。然而,我们要想使用Material Design就需要我们的activity继承AppCompatActivity,而恰恰AppCompatActivity又继承了v4包中实现的FragmentActivity,因此,即使app运行在Android 21以上,它所使用的fragment也不是framework中所实现的,而是在v4包中所实现的fragment。我们平时开发工作中,用到最多的兼容库就是v4v7-appcompat

Android在推出新版本的时候往往也会推出一些新的组件,这些组件自身并没有调用底层的framework的API,因此在旧版本系统上进行兼容就显得很方便,进行开发时只需引入相应的组件依赖即可。Android Support Library提供了诸如v7-recyclerview,v7-cardview,v7-gridlayout等更小更灵活的组件库。


总结

综上,当我们希望在低版本系统上运行的App也能使用高版本系统所推出的新特性时,需要引入相应的兼容库或者组件库,只需要保证工程的minSdkVersion API要大于Library支持的版本。

上一篇 下一篇

猜你喜欢

热点阅读