徹底理解Android Support Library

前言


能夠讓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調用上有兩種實現策略:

  • 調用Android framework層的API。假設Android新版本中引入了一種組件,兼容庫在支持該組件的新版系統上調用系統framework層的API來實現相應功能,而在低版本系統上則會調用兼容庫自身所做的相關實現。從而來保證舊的系統也能使用該組件及相應功能。

  • 調用Android Support Library自身所實現的API。例如v4包中所支持的Fragment,就算App運行在新版系統上也會調用Fragment在兼容庫里面的實現,而不是framework層的實現。

那么對于一個組件或者新的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

  • v4
    正如上面提到的,v4包相對來說比較大,也支持了API 4之后非常多的新特性(例如Fragment),因此它看上去更像諸多library的祖宗。仍要強調的一點是,v4包并不是支持了Android API 4以來的所有的新特性,而是說依賴v4的工程的minSdkVersion要大于4.

  • v7-appcompat
    v7-appcompat 提供了API 21 引入的Toolbar在API 7 以后的實現,從而保證開發者可以在API 21 之前就可以使用到Toolbar。v7-appcompat雖然不包含v4,但是會依賴v4,因此那些需要使用v7-appcompat的工程也需要依賴v4。

Android在推出新版本的時候往往也會推出一些新的組件,這些組件自身并沒有調用底層的framework的API,因此在舊版本系統上進行兼容就顯得很方便,進行開發時只需引入相應的組件依賴即可。Android Support Library提供了諸如v7-recyclerview,v7-cardview,v7-gridlayout等更小更靈活的組件庫。


總結

綜上,當我們希望在低版本系統上運行的App也能使用高版本系統所推出的新特性時,需要引入相應的兼容庫或者組件庫,只需要保證工程的minSdkVersion API要大于Library支持的版本。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容