1. 程式人生 > >Android X 相關彙總

Android X 相關彙總

一、說明

官方原文如下:

We hope the division between android.* and androidx.* makes it more obvious which APIs are bundled with the platform, 
and which are static libraries for app developers that work across different versions of Android.

簡單地說就是新的庫可以在不同的Android版本上使用。比如之前我們如果使用support為27.1.1的相關依賴庫時。可能需要所有相關的support 庫都為27.1.1。如果其中有bug的話,可能需要所有的都去升級,存在一個繫結關係,而且正式版的釋出週期也很長。

通過AndroidX,我們可以看到實時實現的特性和bug修復。升級個別依賴,不需要對使用的所有其他庫進行更新。這就和我們使用Github上的開源庫一樣的,出了問題,我們可以提出bug和意見。作者修復後,釋出新版本,我們就可以直接替換使用了。更加的透明便捷。

二、變化

我選取了幾個常用依賴庫,我們可以看看變化:

Old build artifact    AndroidX build artifact
com.android.support:support-compat    androidx.core:core:1.0.0+
com.android.support:appcompat
-v7 androidx.appcompat:appcompat:1.0.0+ com.android.support:design com.google.android.material:material:1.0.0+ com.android.support:multidex androidx.multidex:multidex:2.0.0+ com.android.support:recyclerview-v7 androidx.legacy:legacy-support-v4:1.0.0+ com.android.support:viewpager androidx.viewpager:viewpager:
1.0.0+ com.android.support:support-fragment androidx.fragment:fragment:1.0.0+

當然涉及的不止這些庫,更詳細的變化內容可以檢視官方文件。

我們可以新增appcompat依賴對比一下:

implementation 'com.android.support:appcompat-v7:28.0.0-beta1'

implementation 'androidx.appcompat:appcompat:1.0.0-beta01'

可以看到詳細變化。同時我們看到viewpager、swiperefreshlayout、 coordinatorlayout 等一些UI元件被分離了出來,這樣也是便於更好的使用,職責分明,以減輕不使用ProGuard 或 Multidex的應用程式和測試的壓力。

三、影響

官方部落格中有說道,為了給開發者一定遷移的時間,所以28.0.0的穩定版本還是採用android.support。但是所有後續的功能版本都將採用androidx。

其實對於我們影響也不是很大,我們可以選擇不使用,畢竟不是強制的。但長遠看來還是有好處的。接受變化,擁抱變化也是我們程式猿需要有的精神,歡迎嘗試。

對於有寫一些開源專案的人,可能會有一些影響。比如你有一個關於RecyclerView的拓展庫,那麼你就需要去讓他支援AndroidX,否則你懂的。

我有去看了一下我們常用的butterknife、glide 等都已經適配了AndroidX,不得不說真是很良心。

四、遷移

如果一個一個去替換當然很麻煩了,所以在Android Studio 3.2 Canary中添加了一鍵遷移的功能Refactor -> Migrate to AndroidX。

首先你的gradle版本至少為3.2.0以上,以及compileSdkVersion為28以上。

classpath 'com.android.tools.build:gradle:3.2.0+'

如果你是一個新專案,如果使用AndroidX相關依賴,需要在gradle.properties檔案裡新增配置:

android.useAndroidX=true
android.enableJetifier=true

如果你想使用AndroidX,但是之前的不遷移,可以這樣配置:

android.useAndroidX=true
android.enableJetifier=false