AndroidXは、古いSupport Libraryに代わるGoogleのJetpackライブラリ群です。Google Developer Documentation、2024によると、AndroidXはすべてのAndroidバージョンに後方互換性のあるコンポーネントを提供し、現代のAndroid開発の標準となっています。AndroidXライブラリには、UI、ナビゲーション、データ処理、カメラ、バックグラウンドタスクのためのツールが含まれています。
重要ポイント
AndroidXは、Android Jetpackの一部であるオープンソースライブラリです。Googleは2018年に、2011年から古いAndroidバージョンに後方互換性のあるコンポーネントを提供していたSupport Libraryの後継としてAndroidXをリリースしました。
AndroidX以前は、各Support LibraryコンポーネントにtargetSdkVersionに紐づいた独自のバージョンがありました。開発者は同じライブラリの複数のバージョンを同時に含める必要があり、依存関係の競合やAPKサイズの増加を引き起こしていました。
AndroidXはセマンティックバージョニング(SemVer)によってこの問題を解決しました。現在では各ライブラリがMAJOR.MINOR.PATCH形式のバージョンを持つ独立したGradleアーティファクトになっています。開発者はActivity、Fragment、その他のモジュールに触れることなく、Roomを2.4.0から2.6.0に更新できます。
AndroidX 1.0.0の最初の安定版は、2018年12月にAndroid 9 Pieとともにリリースされました。GoogleはSupport Libraryがメンテナンスモードに入り、すべての新しいコンポーネント(Navigation、WorkManager、Compose)がAndroidXの一部としてのみリリースされると発表しました。Support Libraryの最終バージョン28.0.0は2019年にリリースされました。
Google I/O 2019によると、移行の主な理由はアップデートのリリースを加速する必要性でした。古いモデルでは、単一のパッケージバージョンのためにライブラリが互いを待つ必要がありました。AndroidXがこのボトルネックを解消し、Jetpackは2〜3か月ごとにメジャーおよびマイナーリリースを受け取るようになりました。
主な違いは名前空間です。Support Libraryはandroid.support.*パッケージを使用していましたが、AndroidXはandroidx.*に移行しました。この変更により、ライブラリを機能モジュールに分割できるようになりました。例えば、Support LibraryのFragmentはandroid.support.v4.app.Fragmentと呼ばれていましたが、AndroidXではandroidx.fragment.app.Fragmentです。
2番目の重要な違いはアーキテクチャです。AndroidXはJetpack(アプリアーキテクチャに関する推奨事項のセット)とともに提供されます。JetpackにはViewModel、LiveData、Room、Navigation、WorkManagerが含まれており、これらは散在するユーティリティではなく、統一されたエコシステムとして設計されています。
後方互換性も改善されました。Support LibraryがAndroid 2.3+をサポートしていたのに対し、AndroidXはAndroid 4.0(API 14)以上のデバイスでの動作を保証し、Google Play Console 2024によるとアクティブデバイスの99%以上をカバーしています。
AndroidXには、カテゴリごとにグループ化された100以上のライブラリが含まれています。各グループは、UI、データ、ナビゲーション、バックグラウンドタスク、マルチメディア、テストといった特定の領域をカバーしています。以下に主要モジュールの概要を示します。
androidx.core:coreは、システムAPIの後方互換バージョン(NotificationCompat、ActivityCompat、ContextCompat)を含む基本ライブラリです。core-ktxモジュールは、ファイル、SharedPreferences、ビュー要素を操作するためのKotlin拡張を提供します。
androidx.activity:activityライブラリは、非推奨のstartActivityForResultに代わるActivity Result API(registerForActivityResult)を導入しました。fragment:fragmentモジュールはフラグメントのライフサイクルを管理し、トランザクションとバックスタックのためのFragmentManagerをサポートします。
androidx.lifecycleはJetpackアーキテクチャの基盤です。LifecycleOwnerとLifecycleObserverにより、コンポーネントがActivityやFragmentのライフサイクル変更に反応できるようになります。ViewModelは画面回転時にデータを保持し、LiveDataはデータ変更をUIに通知します。
class MainViewModel : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
fun loadUsers() {
viewModelScope.launch {
val result = repository.getUsers()
_users.value = result
}
}
}
androidx.recyclerview:recyclerviewは、リストやグリッドを表示するための強力なコンポーネントです。RecyclerViewはLayoutManager(LinearLayoutManager、GridLayoutManager)、ItemDecoration、ItemAnimatorによるアニメーションをサポートします。AsyncListDifferを備えたListAdapterは、自動差分計算によりリスト更新を簡素化します。
androidx.navigation:navigationは、画面間のナビゲーションのためのライブラリです。Navigation ComponentはNavHostFragmentとNavControllerで動作し、型付きパラメータ渡しのSafe Argsと外部リンクのDeep Linksをサポートします。NavGraphはXMLファイルですべてのルートを記述します。
androidx.compose.uiは、Kotlinで構築された宣言型UIフレームワークJetpack Composeです。Viewシステムとは異なり、Composeは再コンポジションによって変更された要素のみを再描画します。Material Design 3コンポーネント(Button、TextField、Scaffold)はmaterial3モジュールで利用可能です。
| ライブラリ | アーティファクト | 目的 |
|---|---|---|
| Fragment | androidx.fragment | フラグメント管理とトランザクション |
| RecyclerView | androidx.recyclerview | 最適化されたリストとグリッド |
| Navigation | androidx.navigation | 画面ナビゲーション |
| Compose UI | androidx.compose.ui | Kotlinによる宣言型UI |
androidx.room:roomは、ローカルデータストレージのためのORMです。Roomはアノテーション付きのSQLiteクエリからDAOクラスを生成し、コンパイル時にSQL構文を検証し、RxJavaとKotlin Flowをサポートします。バージョン2.6では、より高速なコード生成のためのKSPサポートが含まれています。
androidx.work:workmanagerは、保証された実行を伴うバックグラウンドタスクのためのライブラリです。WorkManagerは定期的なタスク、ワークチェーン(beginWith、then)、起動基準(Constraints:ネットワーク、充電、ストレージ)をサポートします。アプリが閉じられていても、WorkManagerはデバイス再起動後にタスクを配信します。
androidx.datastore:datastoreは、SharedPreferencesの現代的な代替です。DataStoreはKotlin CoroutinesとFlowを使用し、同期的および非同期的に動作し、UIスレッドのブロッキングを防ぎます。Preferences DataStoreは単純なキーと値のペアを保存し、Proto DataStoreはProtocol Buffersを介して型付きオブジェクトを処理します。
自動移行は、Support LibraryからAndroidXに移行する際のGoogle推奨の方法です。Android Studioバージョン3.2以降には、名前空間を置き換えてbuild.gradleの依存関係を更新する組み込みツールRefactor Migrate to AndroidXが含まれています。
移行前に、compileSdkバージョンを28以上に更新する必要があります。また、すべてのサードパーティライブラリがAndroidXをサポートしていることを確認してください。依存関係がまだ移行していない場合は、gradle.propertiesでandroid.enableJetifier=trueフラグを使用します。これにより、サードパーティライブラリのバイトコードが自動的に書き換えられます。
Android Studioで、メニューからRefactor Migrate to AndroidXを選択します。IDEがプロジェクト全体をスキャンし、android.support.*パッケージからのすべてのインポートを見つけてandroidx.*に置き換えます。app/build.gradleの依存関係も更新され、Support Libraryアーティファクトが対応するAndroidXバージョンに置き換えられます。
移行後、一部の依存関係が見つからない場合、Gradle Syncでエラーが表示されることがあります。Google Mavenドキュメントで使用されているライブラリのリストを確認してください。すべてのAndroidXアーティファクトはgoogle()で公開されています。ライブラリが利用できない場合は、repositoriesにmavenCentral()を追加してください。
android {
compileSdk 34
}
dependencies {
// サポートライブラリ(非推奨)
// implementation 'com.android.support:appcompat-v7:28.0.0'
// AndroidX
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.activity:activity-ktx:1.9.3'
implementation 'androidx.fragment:fragment-ktx:1.8.5'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.room:room-runtime:2.6.1'
ksp 'androidx.room:room-compiler:2.6.1'
}
プロジェクトが大きすぎる場合やSupport LibraryのカスタムViewが含まれている場合、自動置換が不完全な可能性があります。コード内のすべての文字列を手動で置換します:インポート、XML属性(app/src/main/res)、マニフェスト参照を変更します。Support Library属性の場合、android:プレフィックスがapp:に変わります(例:android:cardCornerRadiusの代わりにapp:cardCornerRadius)。
手動移行後、R参照を確認します。Support Libraryはandroid.support.v7.appcompat.Rを介してリソースをエクスポートしていましたが、AndroidXはandroidx.appcompat.Rを使用します。プロジェクト内を検索し、古いRパスへの参照をすべて置き換えてください。プロジェクトのビルドはエラーや非推奨警告なしに完了する必要があります。
AndroidXの最初の利点はモジュール性です。実際に使用するライブラリのみを含めます。アプリにRecyclerViewとNavigationだけが必要な場合、すべてのViewコンポーネントを含むSupport Library全体を取り込む必要はありません。これによりAPKサイズが削減され、ビルド時間が短縮されます。
2番目の利点は定期的な更新です。Jetpackは1〜3か月ごとに安定版をリリースしています。2024年にリリースされたRoom 2.6.0はKSPサポートとKotlin 2.0互換性を追加しました。Navigation 2.8.0はKotlinx Serializationに基づくタイプセーフルートを導入しました。開発者は次のAndroidバージョンを待たずに新機能を利用できます。
3番目の利点はKotlin統合です。すべてのAndroidXライブラリには拡張関数を持つ-ktxモジュールがあります。viewLifecycleOwner.lifecycleScopeはフラグメントコンテキストでコルーチンを起動し、collectLatestはFlowを処理し、SharedFlowとStateFlowはライフサイクル対応コンポーネントと完全に互換性があります。これによりコードがより簡潔で安全になります。
後方互換性は、新しいプラットフォームAPIに対するAndroidXの重要な利点です。Android 4.0+でのダークテーマにAppCompatDelegate.setDefaultNightMode、Android 5.0+でのバブルにNotificationCompat.setBubble、Android 4.0+での統合位置情報にLocationRequestCompatを使用できます。最小SDKバージョンを上げることなく、デバイスカバレッジは99%に達します。
4番目の利点はテストです。AndroidXには、インストゥルメンテッドテストと単体テストを作成するためのandroidx.testライブラリが含まれています。FragmentScenarioとActivityScenarioはUIコンポーネントを分離してテストでき、TestNavHostControllerは実際のデバイスを実行せずにナビゲーションを検証できます。MockKとRobolectricがエコシステムを補完します。
よくある質問
AndroidXはandroid.support.*の代わりにandroidx.*名前空間を使用し、独立したバージョニング(SemVer)を持ち、Jetpackライブラリを含み、Kotlin -ktx拡張をサポートしています。Support Libraryは2019年にバージョン28.0.0で凍結されました。
Android Studioで、プロジェクト作成手順でUse AndroidXフラグを有効にします。既存のプロジェクトの場合は、gradle.propertiesにandroid.useAndroidX=trueとandroid.enableJetifier=trueを追加します。次に、build.gradleの依存関係をandroidxグループのアーティファクトに置き換えます。
Google Playでは、すべてのアプリとアップデートがAndroidXを使用することを要求しています。Support Libraryのメンテナンスは終了し、セキュリティパッチも提供されていません。アプリがまだ移行していない場合、Google Play Consoleでアップデートが拒否される可能性があります。
Jetpackは、Androidアプリ開発のためのGoogleのライブラリ、ツール、ガイドラインのセットです。AndroidXはJetpackの基盤です。JetpackにはArchitecture Components(Lifecycle、ViewModel、Room)、UI(Compose、Fragment、RecyclerView)、Behavior(WorkManager、Navigation、CameraX)が含まれています。
はい、Jetpack Compose自体がAndroidX(androidx.compose.ui)の一部です。ViewModel、Navigation、Room、WorkManagerライブラリはComposeと完全に互換性があります。collectAsState()とcollectAsStateWithLifecycle()関数は、Composable関数とのFlow統合を提供します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。