新聞動態(tài)
谷歌強(qiáng)推 AndroidX ,還在用 android.support?
行業(yè)資訊 發(fā)布者:cya 2019-11-23 08:40 訪問量:390
前言
AndroidX 是 Google 2018 IO 大會推出的新擴(kuò)展庫,主要是對 Android支持庫做了重大改進(jìn)。與支持庫一樣,AndroidX 與 Android 操作系統(tǒng)分開提供,并與各個 Android 版本向后兼容,可以說 AndroidX 就是為了替換 Android 支持庫而設(shè)計(jì)的。
1. AndroidX 是什么?
AndroidX 是 Android 團(tuán)隊(duì)用于在Jetpack中開發(fā)、測試、打包和發(fā)布庫以及對其進(jìn)行版本控制的開源項(xiàng)目。[摘自官方]
AndroidX 完全取代了支持庫,不僅提供同等的功能,而且提供了新的庫。
AndroidX 會將原始支持庫 API 軟件包映射到 androidx 命名空間。只有軟件包和 Maven 工件名稱發(fā)生了變化;類、方法和字段名稱沒有改變。
與支持庫不同,AndroidX 軟件包會單獨(dú)維護(hù)和更新。androidx 軟件包使用嚴(yán)格的語義版本控制,從版本 1.0.0 開始,可以單獨(dú)更新項(xiàng)目中的 AndroidX 庫。
所有新支持庫的開發(fā)工作都將在 AndroidX 庫中進(jìn)行,這包括維護(hù)原始支持庫工件和引入新的 Jetpack 組件。
1. 常見依賴庫映射
舊編譯工件 | AndroidX 編譯工件 |
---|---|
com.android.support.constraint:constraint-layout | androidx.constraintlayout:constraintlayout:1.1.2 |
com.android.support:appcompat-v7 | androidx.appcompat:appcompat:1.0.0 |
com.android.support:cardview-v7 | androidx.cardview:cardview:1.0.0 |
com.android.support:coordinatorlayout | androidx.coordinatorlayout:coordinatorlayout:1.0.0 |
com.android.support:design | com.google.android.material:material:1.0.0-rc01 |
com.android.support:drawerlayout | androidx.drawerlayout:drawerlayout:1.0.0 |
com.android.support:gridlayout-v7 | androidx.gridlayout:gridlayout:1.0.0 |
com.android.support:media2 | androidx.media2:media2:1.0.0-alpha03 |
com.android.support:multidex | androidx.multidex:multidex:2.0.0 |
com.android.support:percent | androidx.percentlayout:percentlayout:1.0.0 |
com.android.support:recyclerview-v7 | androidx.recyclerview:recyclerview:1.0.0 |
com.android.support:support-annotations | androidx.annotation:annotation:1.0.0 |
com.android.support:support-compat | androidx.core:core:1.0.0 |
com.android.support:support-fragment | androidx.fragment:fragment:1.0.0 |
com.android.support:support-v4 | androidx.legacy:legacy-support-v4:1.0.0 |
com.android.support:viewpager | androidx.viewpager:viewpager:1.0.0 |
com.android.support:swiperefreshlayout | androidx.swiperefreshlayout:swiperefreshlayout:1.0.0 |
更多詳細(xì)依賴庫變化,可查閱官方文檔(https://developer.android.com/jetpack/androidx/migrate#artifact_mappings)或下載這些映射的 CSV 格式(https://developer.android.com/topic/libraries/support-library/downloads/androidx-artifact-mapping.csv)文件。
2.常見類映射
支持庫類 | AndroidX 類 |
---|---|
android.arch.lifecycle.Lifecycle | androidx.lifecycle.Lifecycle |
android.support.v4.app.Fragment | androidx.fragment.app.Fragment |
android.support.v4.app.FragmentActivity | androidx.fragment.app.FragmentActivity |
android.support.v7.app.AppCompatActivity | androidx.appcompat.app.AppCompatActivity |
android.support.v7.app.ActionBar | androidx.appcompat.app.ActionBar |
android.support.v7.widget.RecyclerView | androidx.recyclerview.widget.RecyclerView |
android.support.design.card.MaterialCardView | com.google.android.material.card.MaterialCardView |
android.support.design.ripple.RippleUtils | com.google.android.material.ripple.RippleUtils |
android.support.design.widget.CoordinatorLayout | androidx.coordinatorlayout.widget.CoordinatorLayout |
android.support.design.widget.NavigationView | com.google.android.material.navigation.NavigationView |
android.support.percent.PercentFrameLayout | androidx.percentlayout.widget.PercentFrameLayout |
更多詳細(xì)支持類映射變化,可查閱官方文檔(https://developer.android.com/jetpack/androidx/migrate#artifact_mappings)或下載這些映射的CSV 格式(https://developer.android.com/topic/libraries/support-library/downloads/androidx-class-mapping.csv)文件。
2. 為什么要遷移 AndroidX?
下面是 Google 官方描述
Existing packages, such as the Android Support Library, are being refactored into AndroidX.
Although Support Library versions 27 and lower are still available on Google Maven,
all new development will be included in only AndroidX versions 1.0.0 and higher.
大致意思是:現(xiàn)有的軟件包,如 Android 支持庫,正在被重構(gòu)為 Androidx。盡管在 Google Maven 上仍然提供支持庫版本 27 及更低版本,但所有新開發(fā)將只包含在 Androidx 1.0.0 及更高版本中。
3. AndroidX 遷移步驟?
1. 更新 Android Studio 與 Gradle 版本
將 Android studio 升級到 3.2 及以上;
Gradle 插件版本改為 4.6 及以上;
compileSdkVersion 版本升級到 28 及以上;
buildToolsVersion 版本改為 28.0.2 及以上。
2. 遷移 AndroidX 配置
在項(xiàng)目的gradle.properties文件里添加如下配置:
android.useAndroidX=true
android.enableJetifier=true
配置 | 說明 |
---|---|
android.useAndroidX=true | 表示當(dāng)前項(xiàng)目啟用 androidx |
android.enableJetifier=true | 表示將依賴包也遷移到androidx |
備注:enableJetifier 如果取值為 false, 表示不遷移依賴包到 androidx,但在使用依賴包中的內(nèi)容時可能會出現(xiàn)問題,當(dāng)然了,如果你的項(xiàng)目中沒有使用任何三方依賴,那么,此項(xiàng)可以設(shè)置為 false。
3. 修改依賴庫
修改項(xiàng)目 app 目錄下的 build.gradle 依賴庫,具體可以參照 AndroidX 變化中的依賴庫映射。
修改前 | 修改后 |
---|---|
implementation 'com.android.support:appcompat-v7:28.0.2' | implementation 'androidx.appcompat:appcompat:1.0.0' |
implementation 'com.android.support:design:28.0.2' | implementation 'com.google.android.material:material:1.0.0' |
implementation 'com.android.support.constraint:constraint-layout:1.1.2' | implementation 'androidx.constraintlayout:constraintlayout:1.1.2' |
... | ... |
4. 依賴類重新導(dǎo)包
將原來 import 的 android.** 包刪除,重新 import 新的 androidx.** 包
import android.support.v7.app.AppCompatActivity; → import androidx.appcompat.app.AppCompatActivity;
5. 一鍵遷移 AndroidX 庫
AS 3.2 及以上版本提供了更加方便快捷的方法一鍵遷移到 AndroidX。選擇菜單上的 ReFactor —— Migrate to AndroidX... 即可。(如果遷移失敗,就需要重復(fù)上面 1,2,3,4 步手動去修改遷移)
備注:如果你的項(xiàng)目 compileSdkVersion 低于 28,點(diǎn)擊 Refactor to AndroidX... 會提示:
Q&A
同一個項(xiàng)目中 Android Support 和 AndroidX 可以共存嗎?
不可以共存。需要將依賴修改為Android Suppor或AndroidX中任一種。
執(zhí)行 Migrate to AndroidX 之后就完成 AndroidX 遷移了?
不一定。部分控件的包名/路徑名轉(zhuǎn)換的有問題,所以還需要我們手動調(diào)整(包括修改xml布局文件和.java/.kt 文件)。
DataBinding 中的錯誤(重名 id 錯誤)?
在 AndroidStudio3.2 + androidx 環(huán)境下,對錯誤的檢查和處理更為嚴(yán)格。如果同一個xml布局文件中存在同名id,
在之前的版本中,我們可以正常編譯和運(yùn)行,但是,在新的環(huán)境下, 必然會報錯,錯誤信息如下:
attr.xml 中重復(fù)的屬性名稱會報錯?
在遷移到 androidX 之前,我們?yōu)樽远x控件編寫自定義屬性時,可以與android已有的屬性重名,
但是,在AndroidX環(huán)境下不行了,如果存在重名的情況,必然會報錯——會提示你重復(fù)定義(詳細(xì)錯
誤信息沒截圖,但翻譯過來就是重復(fù)定義了attr/xxx)。
錯誤示例
<declare-styleable name="RoundImageView">
...
<!-在遷移到androidx之前,這樣寫雖然不規(guī)范,但是能用,不報錯->
<attr name="textSize" format="Integer" />
...
</declare-styleable>
正確示例
<declare-styleable name="RoundImageView">
...
<!-遷移到androidX之后,必須使用android:xxx 屬性,不能定義android已有的屬性->
<attr name="android:textSize" />
...
</declare-styleable>
Glide 中的注解不兼容 androidX?
遷移到 androidX 之后,Glide 中使用的 android.support.annotation.CheckResult 和 android.support.annotation.NonNull 這兩個注解無法遷移。之前有用戶在 Glide 中提過 issue: https://github.com/bumptech/glide/issues/3185
在上述 issue 中有用戶表示,將 Glide 升級到 4.8.0 之后,可以正常遷移。但是,我這邊并不行。然后,我先升級了 Glide , 又在 gralde 文件中增加了 support.annotation ,這樣才能正常編譯通過。貌似在后續(xù) Glide 5.x 版本中會完成對 androidx 的完全兼容。
規(guī)范包名(即文件夾名)?
這里所說的包名,指的是項(xiàng)目中的文件夾名稱。在之前版本中,我們命名包名時可能會出現(xiàn)大寫字母,雖然這并不符合 Java 命名規(guī)范,但起碼能正常編譯和運(yùn)行。然而,升級到 AndroidStudio3.2 + androidX 環(huán)境后,必須嚴(yán)格遵守命名規(guī)范,否則,可能報錯,從而導(dǎo)致不能正常編譯和運(yùn)行。
【推薦閱讀】
新聞動態(tài)動態(tài)交互設(shè)計(jì)的不確定性
公司2019中秋節(jié)放假通知(每逢佳節(jié)倍思親)
關(guān)鍵字: Android 晨展科技 IT行業(yè)資訊
文章連接: http://www.hsjyfc.com.cn/hyzx/615.html
版權(quán)聲明:文章由 晨展科技 整理收集,來源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請聯(lián)系我們,我們會立即刪除。如轉(zhuǎn)載請保留