android support v4支持包要點(diǎn)分析,api介紹

***轉(zhuǎn)載、引用請標(biāo)明出處***

http://www.itdecent.cn/p/d36a1e5bf246

本文出自zhh_happig的簡書博客http://www.itdecent.cn/u/d82bd37b1d29,謝謝


一 ?Android support v4如何支持低版本

Android support v4這個(gè)包是為Android 1.6(API版本為4)及以上的版本設(shè)計(jì)的(從android-support-v4-24.2.0開始,V4包支持的最低版本是Android 2.3即API Level 9),該支持庫可以讓在舊版本 Android 平臺上運(yùn)行的應(yīng)用,支持新版本平臺推出的功能。

舉個(gè)Fragment的例子說明一下,假設(shè)我們某個(gè)應(yīng)用支持的最低版本是:minSdkVersion=8,但是應(yīng)用中用到了android.app.Fragment類,而Fragment類是在Android 11的時(shí)候才開始加入的,那么當(dāng)我們的應(yīng)用運(yùn)行在Android 11以下的手機(jī)就會(huì)出現(xiàn)問題,那么如何能讓Fragment在低于11的手機(jī)上也能正常使用呢?我們需要引入android.support.v4包中android.support.v4.app.Fragment來替換掉原來用到的android.app.Fragment類,android.support.v4.app.Fragment和android.app.Fragment有一樣的效果,但是它能在低于11的手機(jī)上正常使用,這就是support支持庫提供的功能,能兼容低版本的Android平臺。

android.support.v4包支持的最低版本是Android 4,v4的意思是就是支持最低版本是4,如果你要使用Fragment,最低版本只兼容到4了。

拿上面的例子來說:應(yīng)用中的minSdkVersion=8,為了兼容低版本的手機(jī),引入了android.support.v4包中android.support.v4.app.Fragment。當(dāng)應(yīng)用在不同版本手機(jī)運(yùn)行,android.support.v4是怎樣工作的呢?

a.當(dāng)運(yùn)行在Android版本是4-10手機(jī)上,手機(jī)Android框架沒有提供Fragmeng提供的功能:則android.support.v4支持庫會(huì)調(diào)用自身android.support.v4.app.Fragment;

b.當(dāng)運(yùn)行在Android版本是11及以上的手機(jī)上,手機(jī)Android框架提供了Fragmeng提供的功能:則android.support.v4支持庫會(huì)調(diào)用手機(jī)Android框架android.app.Fragment。

也就是說,如果應(yīng)用調(diào)用其中一個(gè)支持類的方法,則支持庫的行為將取決于運(yùn)行應(yīng)用的手機(jī)的Android 版本。如果手機(jī)Android框架提供必要的功能,則支持庫將通過調(diào)用手機(jī)Android框架執(zhí)行任務(wù)。如果應(yīng)用在舊版本的 Android 上運(yùn)行,且手機(jī)Android框架未提供所需的功能,則支持庫自身可能會(huì)嘗試提供相應(yīng)的功能或什么都不做。無論是哪一種情形,應(yīng)用通常都不需要檢查其在哪一版本的 Android 上運(yùn)行,而是通過支持庫執(zhí)行檢查并選擇適當(dāng)?shù)男袨椤?/p>

還有一些android.support.v4中類,比如ViewPager等,不管在Android那個(gè)版本,都沒有這個(gè)類,所以要用到ViewPager,就必須引用android.support.v4包了。

二 ?Android support v4版本介紹

注:隨著系統(tǒng)的迭代Android 1.6的設(shè)備已經(jīng)很少了,官方在Support Library 24.2.0版本的時(shí)候移除了對Android 2.2(API Level 8)及以下版本的支持,所以從Android Support v4 24.2.0開始,V4包支持的最低版本是Android 2.3即API Level 9

我們可以發(fā)現(xiàn)android-support-v4后面都跟著版本號:比如android-support-v4-23.0.0 (對應(yīng)Android Api Level 23),如果不清楚這個(gè)版本號,在開發(fā)中也會(huì)帶來很多問題。

最常見的問題就是已經(jīng)引入了android-support-v4包,但是某個(gè)類或者某個(gè)方法卻找不到,這個(gè)原因應(yīng)該就是版本號不對了。

比如我們在targetSdkVersion < 23的時(shí),用到android.support.v4.content.PermissionChecker這個(gè)類來檢查權(quán)限,但是引入了android-support-v4-22.2.1.jar后,卻找不到PermissionChecker類,原因就是PermissionChecker是23.0.0版本才加入的,所以引入android-support-v4-23.0.0.jar就行了。

遇到這種問題,可以去Android官方中文網(wǎng)站找到對應(yīng)的類或方法,看看它們加入的版本:added in version,然后在引入對應(yīng)的support包

注:在android-support-v4-24.2.0及之后的版本中,為了增強(qiáng)效率和減小APK的大小起見,Android將android-support-v4包從一個(gè)獨(dú)立的依賴包拆分成v4 compat library、v4 core-utils library、v4 core-ui library、v4 media-compat library和v4 fragment library這5個(gè)包,考慮到V4的向后兼容,你在工程中依賴V4這個(gè)依賴包時(shí)默認(rèn)是包含拆分后的5個(gè)包的,但為了節(jié)省APK大小,建議在開發(fā)過程中根據(jù)實(shí)際情況依賴對應(yīng)的V4包,移除不必要的V4包。

三 ?Android support v4關(guān)鍵api

v4 compat library?

兼容一些 Framework API,如 Context.getDrawable() 和 View.performAccessibilityAction()等,在AS中的依賴方式如下:

compile 'com.android.support:support-compat:24.2.1'

v4 core-utils library

提供一系列核心的工具類,如 AsyncTaskLoader 和 PermissionChecker,在AS中的依賴方式如下,按自己需求選擇合適版本:

compile 'com.android.support:support-core-utils:24.2.1'

core-ui library

提供一系列核心的 UI,如 ViewPager、 NestedScrollView,在AS中的依賴方式如下:

compile 'com.android.support:support-core-ui:24.2.1'

v4 media-compat library

android.media 兼容庫,包括 MediaBrowser 和 MediaSession,在AS中的依賴方式如下:

compile 'com.android.support:support-media-compat:24.2.1'

v4 fragment library

跟fragment相關(guān)部分,v4 fragment library這個(gè)子庫依賴了其他4個(gè)子庫,所以我們一旦依賴這個(gè)庫就會(huì)自動(dòng)導(dǎo)入其他4個(gè)子庫,這跟直接依賴整個(gè)support-v4效果類似,在AS中的依賴方式如下:

compile 'com.android.support:support-fragment:24.2.1'

拆包并不一定代表能夠真的解決效率和減小APK的大小問題,V4包拆分后的5個(gè)子包有依賴關(guān)系。即拆包之后,要用到某個(gè)子包的API時(shí),可能還得依賴其它的子包,這也是有坑的地方。當(dāng)我們編譯沒有問題,運(yùn)行出現(xiàn)Do not find class之類的錯(cuò)誤時(shí),一定要看看是不是子包之間的依賴關(guān)系造成的,如果是引入相應(yīng)的子包。出現(xiàn)這個(gè)依賴問題,再加上版本可能出現(xiàn)問題,對于新手來說,比較棘手,建議新手全部導(dǎo)入。

以上文章內(nèi)容,是本人工作中的總結(jié),供大家參考,有誤的地方還請指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容