AndroidX 遷移


title: androidx遷移
date: 2019-10-15 11:49:20
tags: Androidx


Androidx 遷移總結(jié)

一处硬、什么是androidx

背景

隨著android版本的不斷迭代更新,每個版本中都會有新的API加入毒费,但是新加入的API在老的版本里并不存在牺陶,因此就出現(xiàn)了向下兼容的問題伟阔。于是android團(tuán)隊就退出了大名鼎鼎的支持庫Android Support Library,用于提供向下兼容的功能。比如我們每個人都熟知的support-v4掰伸、suport-v7都是屬于Android Support Library皱炉。

隨著支持庫版本的迭代,從最初的android Support v4到后來的v7狮鸭、v13,以及在這其中又對支持庫的內(nèi)部拆分合搅,使得支持庫變得龐大而復(fù)雜多搀。同時,支持庫具體版本的最低支持的系統(tǒng)版本也在發(fā)生著變化历筝,比如android Support v4,最初的命名含義就是最低支持API 4,但是到后來最低支持9酗昼、14等。含義的變化使得開發(fā)者在引入的時候不得不慎重核實梳猪。

且支持庫為了更好地利用Android系統(tǒng)自身的一些新特性,每個版本的支持庫內(nèi)部又針對不同的編譯版本蒸痹,劃分出了對各支持庫細(xì)分版本春弥。后來,開發(fā)者引入時叠荠,需要引入與當(dāng)前項目編譯版本對應(yīng)的匿沛,且滿足當(dāng)前項目最低支持構(gòu)建版本的具體支持庫版本。比如常見的寫法:

//支持庫
            support_support_annotations       : "com.android.support:support-annotations:$versions.support",
            support_appcompat_v7              : "com.android.support:appcompat-v7:$versions.support",
            support_recyclerview_v7           : "com.android.support:recyclerview-v7:$versions.support",
            support_cardview_v7               : "com.android.support:cardview-v7:$versions.support",
            support_design                    : "com.android.support:design:$versions.support",
            support_support_v4                : "com.android.support:support-v4:$versions.support",
            support_support_core_utils        : "com.android.support:support-core-utils:$versions.support",

其中versions.support需要與項目編譯版本保持一致榛鼎,至少需要在大的Api Level上保持一致逃呼。

由于支持庫過于混亂,最終導(dǎo)致的問題就是者娱,開發(fā)者不方便使用抡笼,官方維護(hù)也困難。所以需要對支持庫做一次統(tǒng)一的梳理黄鳍。

androidx華麗登場

Android 官方于2018年Google I/O 大會發(fā)布了AndroidX推姻。

AndroidX對原始的Android支持庫做了重大的改進(jìn)。AndroidX完全取代了支持庫框沟,不僅提供同等的功能藏古,而且提供了新的庫。而且AndroidX還包括以下功能:

  • AndroidX 中的所有軟件包都使用一致的命名空間忍燥,以字符串 "androidx." 開頭(除了 Design 庫被遷移到 Android 的 Material Components)拧晕。有關(guān)所有舊類到新類以及舊編譯工件到新編譯工件的完整映射,請參閱軟件包重構(gòu)頁面梅垄。

  • 與支持庫不同厂捞,AndroidX 對各個Libray分開設(shè)立單獨的版本管理,并且都嚴(yán)格遵守語義版本控制哎甲。

  • 所有支持庫新的API都在AndroidX中更新蔫敲,包括原始支持庫工件和引入新的 Jetpack 組件。

由于各個單獨Library的獨立版本管理炭玫,開發(fā)者就可以精確指定需要依賴的library,避免不必要的導(dǎo)入奈嘿,從而減小代碼體積。并且開發(fā)者在引入時吞加,只需要關(guān)注AndroidX中具體的需要引入的構(gòu)件版本即可裙犹。且大部分具體的構(gòu)件尽狠,具有一致的版本號。開發(fā)者使用起來不再需要關(guān)注項目自身的最低支持版本和編譯版本了叶圃,只需要像引入其他的第三方庫一樣袄膏,v1.0、v2.0掺冠、v3.0這種方式引入即可沉馆。

如原有的引入寫法

com.android.support:recyclerview-v7:28.0.0

變成了

androidx.recyclerview:recyclerview:1.0.0

二、為什么遷移

AndroidX相較于原始支持庫更友好德崭,同時斥黑,官方文檔明確表示原始支持庫后續(xù)將不再維護(hù)。另外眉厨,在Android Studio新建模塊時锌奴,如果沒有遷移到AndroidX,模塊是創(chuàng)建不了的。


image

新建項目時也是默認(rèn)使用androidX庫憾股,并且是無法取消的鹿蜀。


image

說明官方已經(jīng)開始強制開發(fā)者遷移到AndroidX.

而且,主流的第三方庫如butterknife服球、glide等都已適配AndroidX茴恰。如果要用使用它們的新特性,遷移到androidX也是前提有咨。

三琐簇、怎么遷移

前提準(zhǔn)備

  • Android Studio 3.2及以上。當(dāng)前時點最新版本已經(jīng)是3.5.1穩(wěn)定版了座享。
  • AGP版本3.2.0及以上婉商,對應(yīng)的Gradle版本4.6及以上。
  • 項目編譯版本28及以上渣叛。

注意: 最好在一個版本可控的分支進(jìn)行遷移丈秩,因為涉及到變動的類或文件會非常多,避免合并代碼時沖突淳衙。
同時,分離出沒次變更蘑秽,以便于分析定位問題。

遷移過程

Android官方提供了具體的遷移文檔:
https://developer.android.com/jetpack/androidx/migrate

Android Studio一鍵遷移

Android Studio 3.2 及以上版本提供了更加方便快捷的方法一鍵遷移到 AndroidX箫攀,Refactor > Migrate to AndroidX:

image

然而肠牲,一鍵遷移并不是萬能的,有些庫還是無法很好識別并遷移靴跛,還是需要手動遷移缀雳。

四、遇到的問題

1. 部分庫不會自動替換梢睛,需要手動替換

design庫肥印,因為并不是以androidx.開頭,并沒有自動替換掉识椰,比如:

android.support.design.widget.AppBarLayout
替換成
com.google.android.material.appbar.AppBarLayout

coordinatorlayout庫
如:

android.support.design.widget.CoordinatorLayout 
替換成
androidx.coordinatorlayout.widget.CoordinatorLayout

布局文件
部分布局文件還是需要手動進(jìn)行替換深碱。

比較保險的解決方案:
全局搜索android.support腹鹉,然后一個一個找(任意文件),然后在官方遷移文檔找到原先支持庫對應(yīng)的AndroidX庫敷硅,進(jìn)行替換功咒。

注意::如果項目中用到FilProvider,會搜索到android.support.FILE_PROVIDER_PATHS,這個是不用改的。參考資料

2. Glide中使用的 android.support.annotation.CheckResultandroid.support.annotation.NonNull這兩個注解無法遷移

查看Glide倉庫發(fā)現(xiàn)有人提過issue:https://github.com/bumptech/glide/issues/3185

解決:
升級Glide版本到4.8.0或更高,問題解決绞蹦。

3. Butterknife依賴編譯無法通過航瞭。

解決:
由于Butterknife中用到android.support.v4.content包,而在AndroidX中找不到了所以報錯坦辟。

image

解決: 升級Butterknife到10.0.0或更高版本,問題解決章办。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锉走,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子藕届,更是在濱河造成了極大的恐慌挪蹭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件休偶,死亡現(xiàn)場離奇詭異梁厉,居然都是意外死亡,警方通過查閱死者的電腦和手機踏兜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門词顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碱妆,你說我怎么就攤上這事肉盹。” “怎么了疹尾?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵上忍,是天一觀的道長。 經(jīng)常有香客問我纳本,道長窍蓝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任繁成,我火速辦了婚禮吓笙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朴艰。我一直安慰自己观蓄,他們只是感情好混移,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侮穿,像睡著了一般歌径。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亲茅,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天回铛,我揣著相機與錄音,去河邊找鬼克锣。 笑死茵肃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袭祟。 我是一名探鬼主播验残,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巾乳!你這毒婦竟也來了您没?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胆绊,失蹤者是張志新(化名)和其女友劉穎氨鹏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压状,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仆抵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了种冬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镣丑。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碌廓,靈堂內(nèi)的尸體忽然破棺而出传轰,到底是詐尸還是另有隱情,我是刑警寧澤谷婆,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布慨蛙,位于F島的核電站,受9級特大地震影響纪挎,放射性物質(zhì)發(fā)生泄漏期贫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一异袄、第九天 我趴在偏房一處隱蔽的房頂上張望通砍。 院中可真熱鬧,春花似錦、人聲如沸封孙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虎忌。三九已至泡徙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膜蠢,已是汗流浹背堪藐。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挑围,地道東北人礁竞。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像杉辙,于是被迫代替她去往敵國和親模捂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容