1. 
          

          1. 新聞動(dòng)態(tài)

            谷歌強推 AndroidX ,還在用 android.support?

            行業(yè)資訊 發(fā)布者:cya 2019-11-23 08:40 訪(fǎng)問(wèn)量:305

            作者: 伯兮

            原文: https://juejin.im/post/5d2b2ee3f265da1b827acb02


            前言


            AndroidX 是 Google 2018 IO 大會(huì )推出的新擴展庫,主要是對 Android支持庫做了重大改進(jìn)。與支持庫一樣,AndroidX 與 Android 操作系統分開(kāi)提供,并與各個(gè) Android 版本向后兼容,可以說(shuō) AndroidX 就是為了替換 Android 支持庫而設計的。

            1. AndroidX 是什么?


            • AndroidX 是 Android 團隊用于在Jetpack中開(kāi)發(fā)、測試、打包和發(fā)布庫以及對其進(jìn)行版本控制的開(kāi)源項目。[摘自官方]

            • AndroidX 完全取代了支持庫,不僅提供同等的功能,而且提供了新的庫。

            • AndroidX 會(huì )將原始支持庫 API 軟件包映射到 androidx 命名空間。只有軟件包和 Maven 工件名稱(chēng)發(fā)生了變化;類(lèi)、方法和字段名稱(chēng)沒(méi)有改變。

            • 與支持庫不同,AndroidX 軟件包會(huì )單獨維護和更新。androidx 軟件包使用嚴格的語(yǔ)義版本控制,從版本 1.0.0 開(kāi)始,可以單獨更新項目中的 AndroidX 庫。

            • 所有新支持庫的開(kāi)發(fā)工作都將在 AndroidX 庫中進(jìn)行,這包括維護原始支持庫工件和引入新的 Jetpack 組件。


            AndroidX 的變化

            1. 常見(jiàn)依賴(lài)庫映射


            舊編譯工件AndroidX 編譯工件
            com.android.support.constraint:constraint-layoutandroidx.constraintlayout:constraintlayout:1.1.2
            com.android.support:appcompat-v7androidx.appcompat:appcompat:1.0.0
            com.android.support:cardview-v7androidx.cardview:cardview:1.0.0
            com.android.support:coordinatorlayoutandroidx.coordinatorlayout:coordinatorlayout:1.0.0
            com.android.support:designcom.google.android.material:material:1.0.0-rc01
            com.android.support:drawerlayoutandroidx.drawerlayout:drawerlayout:1.0.0
            com.android.support:gridlayout-v7androidx.gridlayout:gridlayout:1.0.0
            com.android.support:media2androidx.media2:media2:1.0.0-alpha03
            com.android.support:multidexandroidx.multidex:multidex:2.0.0
            com.android.support:percentandroidx.percentlayout:percentlayout:1.0.0
            com.android.support:recyclerview-v7androidx.recyclerview:recyclerview:1.0.0
            com.android.support:support-annotationsandroidx.annotation:annotation:1.0.0
            com.android.support:support-compatandroidx.core:core:1.0.0
            com.android.support:support-fragmentandroidx.fragment:fragment:1.0.0
            com.android.support:support-v4androidx.legacy:legacy-support-v4:1.0.0
            com.android.support:viewpagerandroidx.viewpager:viewpager:1.0.0
            com.android.support:swiperefreshlayoutandroidx.swiperefreshlayout:swiperefreshlayout:1.0.0


            更多詳細依賴(lài)庫變化,可查閱官方文檔(https://developer.android.com/jetpack/androidx/migrate#artifact_mappings)或下載這些映射的 CSV 格式(https://developer.android.com/topic/libraries/support-library/downloads/androidx-artifact-mapping.csv)文件。


            2.見(jiàn)類(lèi)映射


            支持庫類(lèi)AndroidX 類(lèi)
            android.arch.lifecycle.Lifecycleandroidx.lifecycle.Lifecycle
            android.support.v4.app.Fragmentandroidx.fragment.app.Fragment
            android.support.v4.app.FragmentActivityandroidx.fragment.app.FragmentActivity
            android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity
            android.support.v7.app.ActionBarandroidx.appcompat.app.ActionBar
            android.support.v7.widget.RecyclerViewandroidx.recyclerview.widget.RecyclerView
            android.support.design.card.MaterialCardViewcom.google.android.material.card.MaterialCardView
            android.support.design.ripple.RippleUtilscom.google.android.material.ripple.RippleUtils
            android.support.design.widget.CoordinatorLayoutandroidx.coordinatorlayout.widget.CoordinatorLayout
            android.support.design.widget.NavigationViewcom.google.android.material.navigation.NavigationView
            android.support.percent.PercentFrameLayoutandroidx.percentlayout.widget.PercentFrameLayout


            更多詳細支持類(lèi)映射變化,可查閱官方文檔(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.
            • 大致意思是現有的軟件包,如 Android 支持庫,正在被重構為 Androidx。盡管在 Google Maven 上仍然提供支持庫版本 27 及更低版本,但所有新開(kāi)發(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 配置

            • 在項目的gradle.properties文件里添加如下配置:


            android.useAndroidX=true
            android.enableJetifier=true


            配置說(shuō)明
            android.useAndroidX=true表示當前項目啟用 androidx
            android.enableJetifier=true表示將依賴(lài)包也遷移到androidx

            備注:enableJetifier 如果取值為 false, 表示不遷移依賴(lài)包到 androidx,但在使用依賴(lài)包中的內容時(shí)可能會(huì )出現問(wèn)題,當然了,如果你的項目中沒(méi)有使用任何三方依賴(lài),那么,此項可以設置為 false。


            3. 修改依賴(lài)庫
            修改項目 app 目錄下的 build.gradle 依賴(lài)庫,具體可以參照 AndroidX 變化中的依賴(lài)庫映射。


            修改前修改后
            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. 依賴(lài)類(lèi)重新導包

            將原來(lái) 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... 即可。(如果遷移失敗,就需要重復上面 1,2,3,4 步手動(dòng)去修改遷移)



            備注如果你的項目 compileSdkVersion 低于 28,點(diǎn)擊 Refactor to AndroidX... 會(huì )提示:



            Q&A


            • 同一個(gè)項目中 Android Support 和 AndroidX 可以共存嗎?

            不可以共存。需要將依賴(lài)修改為Android Suppor或AndroidX中任一種。
            • 執行 Migrate to AndroidX 之后就完成 AndroidX 遷移了?

            不一定。部分控件的包名/路徑名轉換的有問(wèn)題,所以還需要我們手動(dòng)調整(包括修改xml布局文件和.java/.kt 文件)。
            • DataBinding 中的錯誤(重名 id 錯誤)?

            在 AndroidStudio3.2 + androidx 環(huán)境下,對錯誤的檢查和處理更為嚴格。如果同一個(gè)xml布局文件中存在同名id,
            在之前的版本中,我們可以正常編譯和運行,但是,在新的環(huán)境下, 必然會(huì )報錯,錯誤信息如下:



            • attr.xml 中重復的屬性名稱(chēng)會(huì )報錯?

            在遷移到 androidX 之前,我們?yōu)樽远x控件編寫(xiě)自定義屬性時(shí),可以與android已有的屬性重名,
            但是,在A(yíng)ndroidX環(huán)境下不行了,如果存在重名的情況,必然會(huì )報錯——會(huì )提示你重復定義(詳細錯
            誤信息沒(méi)截圖,但翻譯過(guò)來(lái)就是重復定義了attr/xxx)。
            • 錯誤示例

            <declare-styleable name="RoundImageView">
                ...
                <!-在遷移到androidx之前,這樣寫(xiě)雖然不規范,但是能用,不報錯->
                <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 這兩個(gè)注解無(wú)法遷移。之前有用戶(hù)在 Glide 中提過(guò) issue: https://github.com/bumptech/glide/issues/3185
              在上述 issue 中有用戶(hù)表示,將 Glide 升級到 4.8.0 之后,可以正常遷移。但是,我這邊并不行。然后,我先升級了 Glide , 又在 gralde 文件中增加了 support.annotation ,這樣才能正常編譯通過(guò)。貌似在后續 Glide 5.x 版本中會(huì )完成對 androidx 的完全兼容。

            • 規范包名(即文件夾名)?
              這里所說(shuō)的包名,指的是項目中的文件夾名稱(chēng)。在之前版本中,我們命名包名時(shí)可能會(huì )出現大寫(xiě)字母,雖然這并不符合 Java 命名規范,但起碼能正常編譯和運行。然而,升級到 AndroidStudio3.2 + androidX 環(huán)境后,必須嚴格遵守命名規范,否則,可能報錯,從而導致不能正常編譯和運行。



            關(guān)鍵字: Android 晨展科技 IT行業(yè)資訊

            文章連接: http://www.gostscript.com/hyzx/615.html

            版權聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶(hù)投稿,如有侵權,請聯(lián)系我們,我們會(huì )立即刪除。如轉載請保留

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.