2018からAndroidXが発表されていました。Android Studioには「Migrate」する機能やプロジェクト作成で選択できるようになっていましたが、いよいよ本格的に使わないといけない状況になったようです。
API 29
AndroidX
AndroidXはSupport Libraryの後継です。
AndroidはSDKと付随するSupport Libraryによって機能が提供されています。Support Libraryは、Support Library の機能ガイドによると、
- SDKがバージョンアップすると古いバージョンが動かなくなるのをサポート、下位互換を保持する
- 特定の機能については、SDKに入れずにSupport Libraryに入れる
それぞれバージョンアップで機能追加やバグ修正がありますが、SDKはある程度の長い期間(といっても半年1年)変更がありませんが、Suport Libraryは随時バージョンアップされます。
Support Libraryの問題
例えばimportでv4とv7のライブラリを呼ぶことがあります。
1 2 |
import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; |
また、build.gradeの設定にもありそれぞれ他のライブラリーに合ったバージョンにしないとワーニングがでることが多々あります。
1 |
implementation 'com.android.support:appcompat-v7:28.0.0' |
そのようなSupport Libraryがバージョンアップを繰り返した結果として、
このライブラリの成長が混乱をもたらしているということです。
Reference: AndroidX の紹介 – Google Developers Japan
AndroidXの登場
以上のような問題点を考慮して新しくしたものがAndroidXになります。
またこれはGoogleが推奨しています。
すべての新しいプロジェクトで AndroidX ライブラリを使用することをおすすめします。また、既存のプロジェクトを AndroidX に移行することもご検討ください。
reference: Support Library
実際のところAndroid SDK Platform 29 あるいはAndroid 9.+の環境では強制されています。
前のバージョンでは「Use androidx.* artifacts」が選択できましたが、チェックを外すことはできなくなりました。
AndroidXによる変更点
新規プロジェクトはそのままで、あるいは「Use androidx.* artifacts」いいのですが、既存のSupport Libraryと AndroidX の違いは何でしょうか
AppCompatActivity:
Support Library
1 |
import android.support.v7.app.AppCompatActivity; |
AndroidX
1 |
import androidx.appcompat.app.AppCompatActivity; |
constraintlayout:
1 2 3 4 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout ... </androidx.constraintlayout.widget.ConstraintLayout> |
build.gradle:(Module: app)
Support Library
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apply plugin: 'com.android.application' android { ... defaultConfig { ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } ... } dependencies { ... implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' ... androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } |
AndroidX
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apply plugin: 'com.android.application' android { ... defaultConfig { ... testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } ... } dependencies { ... implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' ... androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' } |
gradle.properties:
これはAndroidXに追加です
1 2 3 4 5 6 7 |
... # AndroidX package structure to make it clearer which packages are bundled with the # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true |
因みに、「Migrate to AndroidX…」というのが「Refactor」にあるのですがうまく機能しなかったのでプロジェクトを作り直すのが早いのかもしれません
その他、変更されたリストはこちら
AndroidX への移行 | Android Developers
References:
AndroidX の概要 | Android Developers
Support Library の機能ガイド | Android Developers
AndroidX の紹介 – Google Developers Japan
AndroidX への移行 | Android Developers
Jetpack – Android Developers
Support Library – Android Developers