この記事は Alan Viverette(/u/alanviverette)、Kathy Kam(@kathykam)、Lukas Bergstrom(@lukasb) による Android Developers Blog の記事 "Hello World, AndroidX" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

今月、Support Library の新時代の幕開けとなる、新しい Android 拡張機能ライブラリ(AndroidX)の初期プレビューをリリースしました。変更点をプレビューして、フィードバックをお寄せください。このライブラリは初期プレビューであり、既知の問題がいくつかあるため、本番プロジェクトで試用することはおすすめしません。

Support Library は、フレームワーク API に下位互換性を提供するために 7 年以上前に開始されました。これまでこのライブラリには、端末固有の UX、デバッグ、テスト、その他のユーティリティが含まれるようになりました。Support Library の導入状況は驚異的で、現在、ほとんどの Android アプリで Support Library が使用されています。Google はこの領域への投資を拡大したいと考えており、強固な基盤を築くことがきわめて重要になります。

その取り組みの一環として、一歩離れて、多くのデベロッパーと意見を交わしてきました。その際に一貫して同じフィードバックが寄せられました。つまり、このライブラリの成長が混乱をもたらしているということです。現在、サポートされる最小 SDK レベルは 14 ですが、「v7」という名前が付いたコンポーネントやパッケージが引き続き存在しています。どれがプラットフォームにバンドルされている API で、どれが Android のさまざまなバージョンで動作するアプリ デベロッパー用静的ライブラリなのかを明確に区別できるようにしたいと考えています。

上記のことを念頭に置いて、「AndroidX」を紹介します。以前、Android KTX を発表したときに説明したように、このパッケージには新たな機能が追加されているほか、既存のいくつかの機能がアップデートされています。

android.*androidx.* の名前空間

Android アプリを作成する場合、次の 2 種類のクラスに依存する必要があります。
  • PackageManager などのクラス。これらのクラスは、オペレーティング システムに バンドル されており、Android バージョンごとに API や動作が異なる場合があります。
  • AppCompatActivityViewModel などのクラス。これらのクラスは、オペレーティング システムに バンドルされておらず 、APK に含まれています。これらのライブラリは、すべての Android バージョンで可能な限り一貫して動作する単一の API サーフェスを提供するように記述されています。

多くの場合、バンドルされていないライブラリは、さまざまな Android バージョンに単一の API サーフェスを提供するため、より適切な選択になることがあります。このリファクタリングにより、すべての Support Library および Architecture Components を含む、バンドルされていないライブラリが AndroidX パッケージに移行されるため、含める依存関係を明確に区別できるようになります。

パッケージと Maven アーティファクトの命名規則の変更

パッケージの構造を再設計して、Proguard や Multidex を使用しないアプリおよびテストへの負荷を軽減する、小さく、焦点を絞ったライブラリを推奨しています。Maven の groupId と artifactId がアップデートされ、ライブラリ コンテンツをより適切に反映するようになっています。また、ライブラリ パッケージにプレフィックスとして groupId を付けて、使用しているクラスと Maven アーティファクト(クラスの派生元)の間に明確なリンクを作成しています。

一般的に、古いパッケージから新しいパッケージへのマッピングは次のようになる予定です。
android.support.** androidx.@
android.databinding.** androidx.databinding.@
android.design.** com.google.android.material.@
android.support.test.** (将来のリリース)androidx.test.@

Architecture Components ライブラリも androidx の下に移動され、ライブラリのパッケージ名が簡素化されて、コアライブラリとの統合が反映されました。これらのライブラリの変更サンプルは次のとおりです。
android.arch.** androidx.@
android.arch.persistence.room.** androidx.room.@
android.arch.persistence.** androidx.sqlite.@

さらに、Android のマテリアル コンポーネントの 28.0.0-alpha1 では、Design ライブラリを簡単に代替できる Design パッケージが導入されましたが、その後、新しい方向性を反映するように Design パッケージをリファクタリングしています。

28.0.0-alpha1(android.support)から 1.0.0-alpha1(androidx)へのマッピングの全リストについては、完全な AndroidX リファクタリング マップをご覧ください。アルファ版の段階で、このマップに若干の変更が加えられる可能性がありますので、ご注意ください。

アーティファクトごとの厳密なセマンティック バージョニング

AndroidX リファクタリング以降では、ライブラリ バージョンが 28.0.0 から 1.0.0 にリセットされています。今後のアップデートは、メジャー バージョンによってバイナリの互換性が示される厳密なセマンティック バージョニング ルールに従って、ライブラリごとにバージョニングされます。したがって、たとえば RecyclerView に機能が追加され、それをアプリで使用する場合、アプリで使用されている他のすべてのライブラリをアップデートする必要はありません。また、androidx に依存しているライブラリは、AndroidX の将来のリリースとのバイナリ互換性について妥当な保証を提供できます。つまり、1.5.0 リビジョンの依存関係は、1.7.0 に対して実行する場合は引き続き機能しますが、2.0.0 に対しては機能しない可能性が高くなります。

28.0.0-alpha1 からの移行

アプリを android.support から androidx のパッケージ化された依存関係に移行するには、主に、ソースのリファクタリングと依存関係の変換という 2 つの対応が必要です。


ソースのリファクタリングにより、Java コード、XML リソース、Gradle 設定がアップデートされ、リファクタリングされたクラスと Maven アーティファクトを参照するようになります。この機能は、Android P を対象とするアプリ向けの Android Studio Canary 14 で利用できます。

古い Support Library を参照するライブラリに依存している場合、Android Studio を使用すると、依存関係の変換を介して、ライブラリが androidx を参照するようにアップデートすることができます。依存関係の変換は、Android Gradle プラグイン 3.2.0-alpha14 によって自動的に適用されます。このプラグインにより、androidx にパッケージ化された新しいクラスとアーティファクトを参照するように JAR と AAR の依存関係(および、推移的な依存関係)のバイトコードとリソースが書き換えられます。また、スタンドアロンの変換ツールを JAR 形式で提供する予定です。

次のステップ

AndroidX の導入は、既存のプロジェクトとコードベースに対する大きな変更であることを理解しています。Google の目的は、持続可能な成長、より高いモジュール性、より小さなコードサイズの実現に向けて Android ライブラリ プロジェクトをセットアップするための強固な基盤を提供することです。

これらの変更により、デベロッパーの皆さんが簡単に機能を見つけて、高品質のアプリをより短時間で実装できるようになることを願っていますが、移行には時間がかかり、すべてのデベロッパーの作成スケジュールに適合しない場合があることも理解しています。そのため、P Preview SDK の期間中は、android.support にパッケージ化されたライブラリ セットへのアップデートを引き続き並行して提供します。これらのアップデートでは、2018 年 3 月にリリースされた 28.0.0-alpha1 以降の 28.0.0 バージョニング スキームが継続されるとともに、android.support パッケージに依存している既存のプロジェクトとのソース互換性が引き続き確保されます。

28.0.0 の安定版リリースは、android.support としてパッケージされた最終版の機能リリースになる予定です。以降のすべての機能リリースは、androidx にパッケージ化されたアーティファクトとしてのみ利用可能になります。

このすばらしい未来に向けた取り組みを繰り返す中で、皆さんからご意見をお待ちしております。以下にコメントを入力して、フィードバックをお寄せください。また、AOSP で遭遇したバグについてもお知らせください

Android ライブラリの新時代を楽しみにしています。


Reviewed by Yuichi Araki - Developer Relations Team