更多原創文章和優質資源請關注公眾號:
網上對Android Support Library中各個依賴包介紹的中文資料太少了,結合官方文檔和有限的參考資料做了一次總結,有描述得不對的地方還請指正。
一、主工程、依賴包、jar包、android.jar、Android Support Library的關系
一個Android工程通常包括主工程和依賴包,依賴包又有兩種形式:
一種是單獨的工程或者aar:在主工程的配置文件中指明主工程和依賴包的依賴關系之后,就可以在主工程中正常使用依賴包的類和接口了,這種適合于依賴包中有圖片資源、so等不能打包到jar包中或者依賴包需要頻繁改動的情況,比如Nine Old Androids、PullToRefresh、FancyCoverFlow等;
另一種是jar包:放在主工程的libs文件夾下,這種通常是依賴包中只有代碼,比如Fastjson.jar、Volley.jar、Gson.jar等。
為了程序能夠編譯通過并在設備中正常運行,主工程除了依賴第三方的工程和jar包之外,還需要依賴安卓系統本身的代碼,也就是我們在sdk的每個版本中看到的android.jar,這里面集成了android的所有API,隨著android sdk的升級,高版本的sdk中會增加很多新的API,比如ActionBar、Fragment、RecyclerView等,如果在低版本的sdk中需要使用高版本新增的API怎么辦?不可能去更新移動設備中的android.jar吧,因為硬件設備集成的sdk版本是固定的,android.jar也是固定的,所以最好的方式是將新增的API以依賴包的形式集成到需要使用高版本API的應用程序中。
谷歌早已經考慮到了向后兼容的問題,所以推出了一系列脫離于android.jar的依賴包,比如常見的android-support-v4、appcompat-v7等。這些依賴包可以直接集成到應用程序中,依賴包有的是jar包,有的是獨立的工程。如果你用的IDE是Android Studio,這些庫已經上傳到了maven倉庫,在build.gradle中直接依賴即可。
Android Support Library除了向后兼容的作用外,還有其它方面的好處:
提供不適合打包進framework的功能:Android官方對App開發提供了推薦設計,希望Android應用都有相對一致的交互設計來減少用戶的使用成本,希望三方App類似系統應用從而完美融入到Android生態系統中。但是這都僅僅是推薦,不要求開發者一定要這樣,如果有這種需求就可以使用官方支持包提供的這些功能,避免重復造輪子。如支持包中的DrawerLayout、Snackbar等類都是這種情況。
為了支持不同形態的設備:通過使用支持包來在不同形態設備上提供功能,如手機、電視、可穿戴設備等。
各個依賴包可以在“<sdk>/extras/android/support/”文件夾下查看,如果該路徑下沒有,打開SDK Tools更新SDK即可。
二、各個版本的Android Support Library介紹
Android 各個Support Library支持的最低版本如下:
目前為止Android Support Library包含的依賴包有:
1、V4 Support Libraries
這個包是為Android 2.3(API版本為9)及以上的版本設計的(Support V4首次發布是在2011年,它支持的最低版本是Android 1.6即API Level 4,V4的名字也是根據其支持的最低API版本來的,隨著系統的迭代Android 1.6的設備已經很少了,官方在Support Library 24.2.0版本的時候移除了對Android 2.2(API Level 8)及以下版本的支持,所以從Android Support Library 24.2.0開始,V4包支持的最低版本是Android 2.3即API Level 9),它包含大部分高版本中有而低版本中沒有的API,包括application components、user interface features、accessibility、data handling、network connectivity、programming utilities,下面是對V4中的一些關鍵API的介紹:
App Components:
Fragment:一個專為解決Android碎片化的類,通過它可以讓同一個程序適配不同的屏幕。
NotificationCompat:支持更豐富的通知形式;
LocalBroadcastManager:適合于應用內的消息傳遞。
User Interface:
ViewPager:一個可以管理子view的viewgroup,用戶可以在各個view之間自由切換,這個在很多應用中都有使用到;
PagerTitleStrip:一個關于當前頁面、上一個頁面和下一個頁面的一個非交互的指示器。它經常作為ViewPager控件的一個子控件被被添加在XML布局文件中。
PagerTabStrip:一個關于當前頁面、上一個頁面和下一個頁面的一個可交互的指示器。它經常作為ViewPager控件的一個子控件被被添加在XML布局文件中。
DrawerLayout:抽屜
SlidingPaneLayout:用于實現兩列面板的切換,在UI最上層的使用提供了一個水平的,多個面板的布局。左邊的面板可以看作是一個內容列表或者是瀏覽,右邊的面板的任務是顯示詳細的內容。
Accessibility:
ExploreByTouchHelper:幫助自定義View實現accessibility的幫助類;
AccessibilityEventCompat、AccessibilityNodeInfoCompat、AccessibilityNodeProviderCompat、AccessibilityDelegateCompat:Accessibility的適配類
Content:
Loader:異步加載數據;
FileProvider:應用間的私有文件共享。
關于V4的更多API介紹可以參見:Support V4 Libraries API References
在Android Support Library 24.2.0及之后的版本中,為了增強效率和減小APK的大小起見,Android將V4包從一個獨立的依賴包拆分成v4 compat library、v4 core-utils library、v4 core-ui library、v4 media-compat library和v4 fragment library這5個包,考慮到V4的向后兼容,你在工程中依賴V4這個依賴包時默認是包含拆分后的5個包的,但為了節省APK大小,建議在開發過程中根據實際情況依賴對應的V4包,移除不必要的V4包。
拆分后的5個V4包如下:
v4 compat library
兼容一些 Framework API,如 Context.getDrawable() 和 View.performAccessibilityAction(),大小為 602k,在AS中的依賴方式如下:
compile 'com.android.support:support-compat:24.2.1'
v4 core-utils library
提供一系列核心的工具類,如 AsyncTaskLoader 和 PermissionChecker,大小為 90k,在AS中的依賴方式如下:
compile 'com.android.support:support-core-utils:24.2.1'
v4 core-ui library
提供一系列核心的 UI,如 ViewPager、 NestedScrollView,大小為 240k,在AS中的依賴方式如下:
compile 'com.android.support:support-core-ui:24.2.1'
v4 media-compat library
android.media 兼容庫,包括 MediaBrowser 和 MediaSession,大小為 248k,在AS中的依賴方式如下:
compile 'com.android.support:support-media-compat:24.2.1'
v4 fragment library
跟fragment相關部分,大小為 136k。V4這個子庫依賴了其他4個子庫,所以我們一旦依賴這個庫就會自動導入其他4個子庫,這跟直接依賴整個support-v4效果類似,在AS中的依賴方式如下:
compile 'com.android.support:support-fragment:24.2.1'
拆包并不一定代表能夠真的解決問題,V4各子包的依賴關系如下,可見即使拆包之后,要用到V4中的某個API時,依賴包并沒有減小多少:
2、V7 Support Libraries
&emsp;V7和V4一樣,同樣包含多個依賴包,但和V4不同的是,V7下的多個子包并不是后面拆分開來的,而是最初發布時就以各個獨立庫的形式發布的。它是針對Android 2.3(API Level 9)及以上的版本谷歌提供了一系列的support包(和V4包的命名一樣,V7最初支持的最低版本是Android 2.1即API Level 7,所以稱其為V7,同樣在Android Support Library 24.2.0將V7支持的最低版本改為Android 2.3即API Level 9了),這些support包各自對應著特定的功能,每一個都可以單獨地被引用。
v7 appcompat library
這個包支持對Action Bar接口的設計模式、Material Design接口的實現等,核心類有ActionBar、AppCompatActivity、AppCompatDialog、ShareActionProvider等,在AS中的依賴方式如下:
compile 'com.android.support:appcompat-v7:24.2.1'
注意:這個包需要依賴android-support-v4。
v7 cardview library
支持cardview控件,使用Material Design語言設計,卡片式的信息展示,在電視App中有廣泛的使用,在AS中的依賴方式如下:
compile 'com.android.support:cardview-v7:24.2.1'
v7 gridlayout library
一個支持GridLayout布局的support包,在AS中的依賴方式如下:
com.android.support:gridlayout-v7:24.2.1
v7 mediarouter library
一個用于設備間音頻、視頻交換顯示的support包,在AS中的依賴方式如下:
com.android.support:mediarouter-v7:24.2.1
v7 palette library
該庫提供了palette類,使用這個類可以很方便提取出圖片中主題色。比如在音樂App中,從音樂專輯封面圖片中提取出專輯封面圖片的主題色,然后將播放界面的背景色設置為封面的主題色,隨著播放音樂的改變,播放界面的背景色也會巧妙的跟著改變,從而提供更好的用戶體驗。,在AS中的依賴方式如下:
com.android.support:palette-v7:24.2.1
v7 recyclerview library
核心類是RecyclerView,用于替換ListView、GridView,具體可以查閱RecyclerView方面的資料,在AS中的依賴方式如下:
com.android.support:recyclerview-v7:24.2.1
v7 Preference Support Library
一個用于支持各種控件存儲配置數據的support包,比如CheckBoxPreference和ListPreference,在AS中的依賴方式如下:
com.android.support:preference-v7:24.2.1
3、V8 Support Library
&emsp;V8 Support Library支持的最低SDK版本是Android 2.3即API Level 9。
v8 renderscript library
一個用于渲染腳本的support包,在AS中按照如下方式配置即可正常使用:
defaultConfig {
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
}
4、V13 Support Library
這個包的作用主要是為Android3.2(API Level 13)及以上的系統提供更多地Framgnet特性支持,使用它的原因在于,android-support-v4中雖然也對Fragment做了支持,由于要兼容低版本,導致他是自行實現的 Fragment 效果,在高版本的 Fragment 的一些特性丟失了,而對于 v13以上的 sdk 版本,我們可以使用更加有效,特性更多的代碼,在AS中的依賴方式如下:
com.android.support:support-v13:24.2.1
5、Multidex Support Library
該support包用于使用多dex技術編譯APP,當一個應用的方法數超過65536個時需要使用multidex配置,關于multidex的更多信息,可以參見如何編譯超過65K方法數的應用,在AS中的依賴方式如下:
compile 'com.android.support:multidex:1.0.0'
6、Annotations Support Library
一個支持注解的support包,在AS中的依賴方式如下:
compile 'com.android.support:support-annotations:24.2.1'
7、Design Support Library
一個用于支持Design Patterns的support包,它提供了Material Desgin設計風格的控件,在AS中的依賴方式如下:
com.android.support:design:24.2.1
8、Custom Tabs Support Library
一個提供了在應用中添加和管理custom tabs的support包,在Google IO 2015中有介紹,在AS中的依賴方式如下:
compile 'com.android.support:customtabs:24.2.1'
9、Percent Support Library
一個提供了百分比布局的support包,通過這個包可以實現百分比布局,在AS中的依賴方式如下:
com.android.support:percent:24.2.1