總是聽到有人說AndroidX,到底什麼是AndroidX?
本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每個工作日都有文章更新。
Android技術迭代更新很快,各種新出的技術和名詞也是層出不窮。不知從什麼時候開始,總是會時不時聽到AndroidX這個名詞,這難道又是什麼新出技術嗎?相信有很多朋友也會存在這樣的疑惑,那麼今天我就來寫一篇科普文章,向大家介紹AndroidX的前世今生。
Android系統在剛剛面世的時候,可能連它的設計者也沒有想到它會如此成功,因此也不可能在一開始的時候就將它的API考慮的非常周全。隨著Android系統版本不斷地迭代更新,每個版本中都會加入很多新的API進去,但是新增的API在老版系統中並不存在,因此這就出現了一個向下相容的問題。
舉個例子,當Android系統釋出到3.0版本的時候,突然意識到了平板電腦的重要性,因此為了讓Android可以更好地相容平板,Android團隊在3.0系統(API 11)中加入了Fragment功能。但是Fragment的作用並不只侷限於平板,以前的老系統中也想使用這個功能該怎麼辦?於是Android團隊推出了一個鼎鼎大名的Android Support Library,用於提供向下相容的功能。比如我們每個人都熟知的support-v4庫,appcompat-v7庫都是屬於Android Support Library的,這兩個庫相信任何做過Android開發的人都使用過。
但是可能很多人並沒有考慮過support-v4庫的名字到底是什麼意思,這裡跟大家解釋一下。4在這裡指的是Android API版本號,對應的系統版本是1.6。那麼support-v4的意思就是這個庫中提供的API會向下相容到Android 1.6系統。它對應的包名如下:
類似地,appcompat-v7指的是將庫中提供的API向下相容至API 7,也就是Android 2.1系統。它對應的包名如下:
可以發現,Android Support Library中提供的庫,它們的包名都是以android.support.*開頭的。
但是慢慢隨著時間的推移,什麼1.6、2.1系統早就已經被淘汰了,現在Android官方支援的最低系統版本已經是4.0.1,對應的API版本號是15。support-v4、appcompat-v7庫也不再支援那麼久遠的系統了,但是它們的名字卻一直保留了下來,雖然它們現在的實際作用已經對不上當初命名的原因了。
那麼很明顯,Android團隊也意識到這種命名已經非常不合適了,於是對這些API的架構進行了一次重新的劃分,推出了AndroidX。因此,AndroidX本質上其實就是對Android Support Library進行的一次升級,升級內容主要在於以下兩個方面。
第一,包名。之前Android Support Library中的API,它們的包名都是在android.support.*下面的,而AndroidX庫中所有API的包名都變成了在androidx.*下面。這是一個很大的變化,意味著以後凡是android.*包下面的API都是隨著Android作業系統釋出的,而androidx.*包下面的API都是隨著擴充套件庫釋出的,這些API基本不會依賴於作業系統的具體版本。
第二,命名規則。吸取了之前命名規則的弊端,AndroidX所有庫的命名規則裡都不會再包含具體作業系統API的版本號了。比如,像appcompat-v7庫,在AndroidX中就變成了appcompat庫。
一個AndroidX完整的依賴庫格式如下所示:
implementation 'androidx.appcompat:appcompat:1.0.2'
瞭解了AndroidX是什麼之後,現在你應該放輕鬆了吧?它其實並不是什麼全新的東西,而是對Android Support Library的一次升級。因此,AndroidX上手起來也沒有任何困難的地方,比如之前你經常使用的RecyclerView、ViewPager等等庫,在AndroidX中都會有一個對應的版本,只要改一下包名就可以完全無縫使用,用法方面基本上都沒有任何的變化。
但是有一點需要注意,AndroidX和Android Support Library中的庫是非常不建議混合在一起使用的,因為它們可能會產生很多不相容的問題。最好的做法是,要麼全部使用AndroidX中的庫,要麼全部使用Android Support Library中的庫。
而現在Android團隊官方的態度也很明確,未來都會為AndroidX為主,Android Support Library已經不再建議使用,並會慢慢停止維護。另外,從Android Studio 3.4.2開始,我發現新建的專案已經強制勾選使用AndroidX架構了。
那麼對於老專案的遷移應該怎麼辦呢?由於涉及到了包名的改動,如果從Android Support Library升級到AndroidX需要手動去改每一個檔案的包名,那可真得要改死了。為此,Android Studio提供了一個一鍵遷移的功能,只需要對著你的專案名右擊 → Refactor → Migrate to AndroidX,就會彈出如下圖所示的視窗。
這裡點選Migrate,Android Studio就會自動檢查你專案中所有使用Android Support Library的地方,並將它們全部改成AndroidX中對應的庫。另外Android Studio還會將你原來的專案備份成一個zip檔案,這樣即使遷移之後的程式碼出現了問題你還可以隨時還原回之前的程式碼。
好了,關於AndroidX的內容就講到這裡,相信也是解決了不少朋友心中的疑惑。由於這段時間以來一直在努力趕《第一行程式碼 第3版》的進度,所以原創文章的數量偏少了一些,也請大家見諒。
關注我的技術公眾號,每個工作日都有優質技術文章推送。
微信掃一掃下方二維碼即可關注:
相關文章
- [譯] 我經常聽到的 GraphQL 到底是什麼?
- Androidx為Fragment中的按鈕設定監聽AndroidFragment
- 數棧技術分享:到底什麼是資料中臺?終於有人說清楚了!
- 為什麼總是有人說Java囉嗦,卻沒人說C++囉嗦?JavaC++
- 推廣AndroidX,人人有責。Android
- 你所聽到的技術原理、技術本質到底是什麼?
- 到底vuex是什麼?Vue
- 到底什麼是抽象?抽象
- 到底什麼是AQS?面試時你能說明白嗎!AQS面試
- 【譯】到底什麼是DOM
- 機器學習到底是什麼?機器學習
- ? babel到底是什麼❓Babel
- 為什麼有人說 Python 多執行緒是雞肋?Python執行緒
- 為什麼有人說中文是世界上最好的語言?
- 分析即服務(AaaS)到底是什麼?終於有人講明白了
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 大家都在說的分散式系統到底是什麼?分散式
- 做APP推廣時總是聽到「ASO」,它究竟能帶來什麼?APP
- 理解DOM到底是什麼
- 到底什麼是API經濟API
- Java到底是什麼呢Java
- 到底什麼是資料中臺?
- 到底什麼是@RestControllerRESTController
- Cannot access androidx.lifecycle.HasDefaultViewModelProviderFactoryAndroidViewIDE
- 用語言 (非程式碼) 說清楚 IoC 到底是什麼
- 從比特幣說起, “區塊鏈”到底是什麼比特幣區塊鏈
- 雲端計算儲存之什麼是Ceph?聽聽Ceph創始人怎麼說
- IPTV是什麼意思-2020年還有人再問IPTV是什麼
- Spring Aware 到底是什麼?Spring
- 件斷點到底是什麼?斷點
- 區塊鏈到底是什麼區塊鏈
- 到底什麼是解決方案公司?
- Spring IoC 到底是什麼Spring
- 到底什麼是協作軟體?
- 到底什麼是資料持久化持久化
- 微信將推應用號到底是什麼?張小龍是這樣說的
- 程式設計師敲程式碼時耳機裡聽的到底是什麼?程式設計師
- 聽,是版本在說話