Android support支持庫詳解及AndroidX遷移適配小記
背景
由於項目需要用到新的jetpack組件,而jetpack組件在AndroidX支持庫中提供,因此開啟了將項目中support-v13庫遷移為最新的谷歌推薦的AndroidX支持庫。
Android支持庫
Android支持庫的用途
支持庫有一些獨特的用途,而針對平台早期版本的向后兼容性類只是其中之一。下表完整列出了支持庫在應用中的用途:
新版 API 的向后兼容性 - 大量的支持庫都為較新的框架類和方法提供向后兼容性。例如,Fragment 支持類為搭載 Android 3.0(API 級別 11)之前版本的設備中的 Fragment 提供支持。
工具類和輔助類 - 支持庫提供了很多輔助類,特別是針對界面開發。例如,RecyclerView 類提供了一個界面微件,用於顯示和管理超長列表,並可在 API 級別 7 及更高版本的 Android 系統中使用。
調試和實用工具 - 很多功能可以提供您集成到應用中的代碼所不具備的實用工具,包括 support-annotations 庫,它改進了對方法輸入進行的代碼 Lint 檢查;以及多 dex 處理支持,用於通過 65536
種以上的方法配置和分發應用。
使用 Support API 與使用 Framework API
支持庫提供的類和方法與 Android 框架中的 API 非常相似。了解這點后,您可能想確定應該使用 API 的框架版本,還是使用等效的支持庫。以下指南介紹了何時應使用支持庫類代替 Framework API:
- 特定功能的兼容性 - 如果要在搭載早期版本平台的設備上支持最新的平台功能,請使用支持庫中等效的類和方法。
- 相關庫功能的兼容性 - 更復雜的支持庫類可能依賴於一個或多個其他支持庫類,因此您應該針對這些依賴項使用支持庫類。例如,ViewPager 支持類應該與 FragmentPagerAdapter 或 FragmentStatePagerAdapter 支持類一起使用。
- 常規設置兼容性 - 如果您打算以向后兼容的方式在您的應用中使用特定平台功能,但您目前沒有相應功能,也依然建議在該應用中使用支持庫類。例如,您可能想要使用 ActivityCompat 代替框架 Activity 類,以便以后可以利用更新的功能,例如集成在 Android 6.0(API 級別 23)中引入的新權限模型。
支持庫軟件包和版本
支持庫軟件包,俗稱support包,有v4、v7、v8、v13、v14、v17支持庫(包)。具體支持庫各版本變化見鏈接https://developer.android.google.cn/topic/libraries/support-library/packages?hl=zh_cn
修訂版本號,最新版本28.0.0,目前已不維護,建議建議到AndroidX支持庫,實際使用包名為com.android.support:support-v4:28.0.0、com.android.support:support-v7:28.0.0等等,詳細修訂版本號見官方發布鏈接
最近修訂版本:https://developer.android.google.cn/topic/libraries/support-library/revisions?hl=zh_cn
早期版本,修訂版歸檔: https://developer.android.google.cn/topic/libraries/support-library/rev-archive?hl=zh_cn
AndroidX支持庫
注意:Android 9.0(API 級別 28)發布后,新版支持庫 AndroidX 也隨之誕生,它屬於 Jetpack。除了現有的支持庫,AndroidX 庫還包含最新的 Jetpack 組件。
您可以繼續使用此支持庫以往的工件(這里指的是版本 27 及更早版本,且已打包為 android.support.*)在 Google Maven 中仍然可用。不過,所有新庫的開發都將在 AndroidX 庫中進行。
我們建議在所有新項目中使用 AndroidX 庫。您還應該考慮將現有項目遷移到 AndroidX。
遷移到 AndroidX
參考鏈接如下
https://developer.android.google.cn/jetpack/androidx/migrate?hl=zh_cn
使用 Android Studio 3.2 及更高版本,您只需從菜單欄中依次選擇 Refactor > Migrate to AndroidX,即可將現有項目遷移到 AndroidX。
重構命令使用兩個標記。默認情況下,這兩個標記在 gradle.properties 文件中都設為 true:
android.useAndroidX=true
Android 插件會使用對應的 AndroidX 庫而非支持庫。
android.enableJetifier=true
支持庫工件映射https://developer.android.google.cn/jetpack/androidx/migrate/artifact-mappings?hl=zh_cn
支持庫類映射https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings?hl=zh_cn#top_of_page
例子:如果我要將自己項目中的v13包改為AndroidX支持庫,則需要如下操作:
- gradle下刪除com.android.support:support-v13:28.0.0依賴
- gradle下添加androidx.legacy:legacy-support-v13:1.0.0依賴