hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

読書尚友 AndroidX対応

Android ではOSバージョンの下位互換性を確保するためにサポートライブラリというものがある。例えばFragmentはAndroid OS3.0から導入された機能だが、それより以前のAndroidの利用者はFragmentを使ったアプリを実行できない。そこで、標準ライブラリ版のFragmentとは別にサポートライブラリ版のFragmentがあり、サポートライブラリを使うと過去のAndroid OSでも実行することができる。サポートライブラリは便利なので、新機能の追加はほとんどサポートライブラリで提供されてきた。
ところがAndroid OSもバージョンを重ねる毎に、サポートライブラリも肥大し続け、複雑になりすぎたため、Googleはサポートライブラリのメンテナンスを28.0で打ち切り、AndroidX( Android Jetpack )という新しいライブラリを導入した。今でもサポートライブラリを使用することはできるが、なるべくAndroidXに移行することが望ましいとされている。(Android Jetpack はkotlin言語からも利用できるように設計されている)

今回、読書尚友をAndroidXへ移行させたので、防備録として手順を記録しておく。といってもほとんどGoogleの推奨の手順通りで移行できた。

developer.android.com

  1. 移行する前に、サポートライブラリの最終版であるバージョン 28.0.0 まで上げる。
  2. Android Studio 3.2以上では、AndroidXへマイグレーションするツールがあるので、これを使用する。
    メニューバーから [Refactor] -> [Migrate to AndroidX] を選択する。変換候補が表示されるので、 [Do Refactor]を押して実行する。大体はこれだけで変換できる。
  3. 変換漏れがあった場合、.java と .xml 内のパッケージ名を、個別にサポートライブラリのパッケージ名から対応するAndroidXのパッケージ名に修正していく。(クラス名は共通なので変更の必要は無い。)

読書尚友の場合、android.support.v4.*は変換できたが、なぜかandroid.support.v7.*が変換されずに残ったので、手作業で修正が必要だった。全体的にはスムーズにAndroidX化ができた。

なお、AndroidXとサポートライブラリのパッケージ名の対応は以下の通り。

developer.android.com

AndroidXを利用するメリットとして、Android Jetpackの新しい機能が利用できるようになることがある。たとえば、Jetpack Composeという新しいUIツールキットがある。これはSwiftUIのような宣言型のフレームワークであり、より簡単にUIが書けるようになることが期待されている。
もっともCompose自体がまだ頻繁にアップデートされている状態だが、部分的に導入できればいいと思っている。