Android Support Library 學習入門
0. 文前閑話
作為一個由原生桌面應用程序開發者(VC、Delphi)轉行的Android菜鳥,虐心的事真是數不勝數:安裝個開發工具下載個SDK需要整整一夜;早晨一上班點開Android Studio(簡稱AS),去倒個水回來了還不見它開始工作;開發工具一忙起來就會忘記你這個開發者,不知過了多久后才給你一句:“去TMD的GFW,我啥也沒干成,你自己看著辦吧!”。
對于我們這些已經被微軟、Borland、Sybase洗腦多年的開發者,除了開發工具的不適應,最大的壁壘其實是大腦中已經固有的思維方式,往往在接受新概念時總要習慣性的去跟以往已經認知的東西做對比,這就要比一個New Comer耗費更多的時間和體力。比如說本文要談的Android Support Library,一直被我望文生義的當做系統底層的支持庫,在我的身邊不停的出現,可是始終沒有進入我的腦袋。于是經過一番搬梯KX上網,查閱了官網資料,在這兒試著弄個水落石出。
要想真正的掌握Android Support Library,沒有其它什么捷徑,竅門。只有一條路,就是閱讀官方的API參考,一個類一個函數的逐個搞明白。那就讓本文做你開始品嘗"API參考"大餐前的一道開胃菜吧。
1. Support Library 介紹
官方文檔上(原文:http://developer.android.com/tools/support-library/index.html)第一句話就指明了Support Library的作用:“Android Support Library代碼包使新版本的Android框架中的最新特性能夠兼容之前版本Android框架“。也就是說Support Library為不斷升級的Android系統提供了向下兼容性。
上面的翻譯還是不太直白,還是打個比方吧:假設Google發布的新版本Android API提供了一個新特性:你只需要調用一個簡單的api函數就可以實現在App應用出現車輛照片時自動識別車輛品牌,并振動提醒用戶,真是太酷了。可是你調用這個api寫出的App應用在舊版Android手機上卻無法展示如此狂拽酷炫diao炸天的車震特效,甚至都無法安裝運行,真是讓人沮喪。這時候就該Support Library出馬了,Support Library可以讓新api特性在指定版本的Android上也能正常運行。(請注意這里的“新api特性”和“指定版本”,在使用Support Libary時,首先要確定這兩點:你要使用什么新api特性以及最低支持到哪個版本的Android。)
對于做過VC++開發的,Google的這種兼容方式看著太眼熟了。每一次Visual Studio的升級都會帶來新版本的MFC庫,程序發布時一定要同時打包相應版本的MFC庫,才能在各個版本的Windows中運行。只是Google沒有直接通過Google API庫來實現這種兼容性,而是單獨搞出個Support Library來。
官方文檔上提到,對于應用開發者,根據應用程序支持的系統版本和使用的API函數,最好在Android工程中包含相應的Support Libary以使用新特性,這樣不僅可以把你應用程序的界面由窮D絲變成白富美,更重要的是可以擴大你的用戶群體。
對于Android開發者,由于要面對各種各樣的設備類型、高低不同的系統版本,因此在由一坨Android開發的小鮮肉變成老臘肉的演變過程中,能夠熟練處理兼容性問題是必不可缺的基本功之一。為此要熟知每一個特性是在哪一個API level上加入的,在查閱官方手冊Api Reference時多留心右上角的API level。
另外還要把下一節所介紹的Support Library Features原文多讀幾遍。
2. Support Library Features
Support Library其實是多個庫(jar包)的組合,這里不得不說,它的jar包名比較有迷惑性,對于我這樣的初學者來說,容易形成錯誤的“想當然認知”判斷。例如下面的
com.android.support:support-v4:21.0.0
我一開始就粗心的把v4當成了版本號(21.0.0才是真正的版本號),因此總是迷惑什么情況選擇v4版,什么情況選擇v7版?是不是還有v5, v6?其實v4、v7都是Support Library中不同的庫名稱而已。包名中的v4不是版本號,只不過表明了它不凡的身世:“我的誕生,是為了照亮Android1.6(API level 4)用戶的!”
Support Library的第1版(2011年3月發布)就只包含v4庫,之后的版本不斷地在完善v4庫。一直到2年后(2013年5月)的第13版,為了兼容API level 7(android2.1)增加了v7這個庫(v7其實也是一組庫的組合)。此時已經Android4.3(API level 18)的時代。
隨著Google為了提升用戶體驗,不斷的解決版本兼容性問題,Support Library也越來越大。除了v4和v7這兩個最常用的庫,Support Library Features還包含了其它10幾個庫(不知將來Support Library是否會有終點?),關于每一個庫的功能特性,在原文中(http://developer.android.com/tools/support-library/features.html)有詳細的論述。在這里,只把Support Library包含的庫名羅列一下。
-
v4 Support Library
-
Multidex Support Library
-
v7 Support Libraries(注意是復數,因此是一組庫)
-
v7 appcompat library(這個最常用吧)
-
v7 cardview library
-
v7 gridlayout library
-
v7 mediarouter library
-
v7 palette library
-
v7 recyclerview library
-
v7 Preference Support Library
-
v8 Support Library
-
v13 Support Library
-
v14 Preference Support Library
-
v17 Preference Support Library for TV
-
v17 Leanback Library
-
Annotations Support Library
-
Design Support Library
-
Custom Tabs Support Library
-
Percent Support Library
-
App Recommendation Support Library for TV
由于v4 Support Library和v7 Support Librarys主要涉及程序組件,新的用戶界面特效,網絡連接等比較基礎的變動,因此我們平時比較常用到。
3. Support Library的安裝
如果你使用的是Android Studio(像我一樣的菜鳥肯定選AS了,用過eclipse開發Android的老鳥請飛過這一節),Support Library的安裝和使用非常簡單。只需要打開SDK Manager,點幾下鼠標,再加幾行代碼就行了。不信請看:
3.1 下載
打開SDK Manager:
官網專門指出,如果你使用Android Studio,選擇并安裝 Android Support Repository ,不需要選擇Android Support Library。
3.2 在程序中加入Support Librarys
在官網介紹中,根據帶資源和不帶資源兩種庫分別介紹了不同的使用方法,實際上只是針對eclipse而言。如果使用Android Studio,使用方法是一樣的:只需要打開build.gradle文件,增加下面的代碼(以v4庫為例):
dependencies { ... compile "com.android.support:support-v4:18.0.+" }
剩下的事,就是在代碼中使用你需要的類了。
官方提醒:在應用程序中包含了Support Library后,強烈建議在發布程序前,使用ProGuard工具對發布包進行優化。這樣除了能夠保護你的源碼不被別人用反編譯工具獲取,同時它把你程序所引用的第三方庫中并未使用的類都去掉了,讓你的應用程序保持盡可能的小,別忘了,手機上的存儲可是寸土寸金啊!
3.3 修改Manifest文件
既然你已經使用了Support Library,現在你的應用程序只差一步就能橫行天下,兼容更多的系統版本了。那就是修改Manifest文件中的版本聲明。打開Manifest.xml文件,找到android:minSdkVersion一項,把它修改的足夠的低。
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17" />
你也許會問:“我改了Manifest.xml給誰看?”。是的,它還真不是給人看的。上面的Manifest.xml告訴Google Play(谷歌官方應用商店),你的程序可以安裝在Android 2.1(API 7)版本之上的設備上,低于這個版本的,我猜應該就不給裝了。因為我還沒用過Google Play(暗自一陣臉紅),國內的軟件應用商店好象沒有版本提示,我只見過Apple的應用商店是進行版本判斷的。
4. 結束語
在企業應用中,除了專業化較強的原生桌面應用程序,大多數業務系統已經遷移到了B/S架構的Web方式,隨著移動互聯網的普及,大量的應用程序將向手機遷移,這里面也會包括原有少量的桌面應用程序。原生桌面應用程序的生存空間越來越小,反之則出現了大量新的移動應用需求,新的機會慢慢來臨。原生桌面程序開發人員,為了不被這個時代所淘汰,盡快掌握Android開發吧。路漫漫其修遠兮,吾只能不停的上下折騰。
來自:http://my.oschina.net/u/725054/blog/499979