AndroidXに対応しようとしてハマった話

のえる のえる
2020.07.07

Android Xは通常アップデートと異なり、かなり大掛かりなアップデートとなっていました。

 

今回はちょっとだけですが、対応した内容の話を記載しておきます。

 

公式アナウンス

いつものことですが、Googleから公式のMigrateに関する記事が記載されていました。

 

AndroidX への移行 / Android Developers

 

この内容に従い gradle.properties ファイルに下記の記載を追加しましょう。

 

 

これで右上に出てくる Sync Now を押すと、大体エラーが出てきますので、Migrateをしていきましょう。

 

また、公式アナウンス内で記載されていますが Android Studio 3.2 以上 で実行する必要がありますので、古いAndroid Studioを使用されている方はまず、バージョンをアップしてからにしましょう。

 

補足

余談ですが、公式アナウンスにある [Refactor] > [Migrate to AndroidX] でMigrateできる場合は特に必要ないかと思います。
経験上、自動Migrateでうまくいった試しがありませんが・・・。

プログラム・レイアウトを修正

今回対応しなければならなかったのは下記の内容です。

 

  • 古いライブラリの削除
  • AndroidXライブラリへの移行

 

順を追って説明していきます。

古いライブラリの削除

今回対応したアプリでは、下記のライブラリでエラーが発生していました。

 

  • android.support.v7.app.AppCompatActivity
  • android.support.v7.widget.RecyclerView
  • android.support.v7.widget.Toolbar
  • android.support.v7.widget.helper.ItemTouchHelper
  • android.support.v7.widget.LinearLayoutManager
  • android.support.constraint.ConstraintLayout
  • android.support.design.widget.FloatingActionButton
  • android.support.design.widget.Snackbar
  • android.support.v4.app.ActivityCompat
  • android.support.v4.app.DialogFragment
  • android.support.v4.content.ContextCompat
  • android.support.v4.content.ContextCompat.startActivity
  • android.support.v4.content.PermissionChecker
  • android.support.v4.widget.SwipeRefreshLayout
  • android.content.pm.PackageManager

 

見るだけで頭が痛くなりますね・・・。

 

ではそれぞれの対応方法で説明します。

削除するだけで良いもの

  • android.support.v4.content.ContextCompat.startActivity
  • android.content.pm.PackageManager

 

後者の android.content.pm.PackageManager は、PermissionCheckerで使用していましたが、AndroidXでは別の場所でチェックを行うことになるので不要です。

ライブラリの場所が変わったもの

残ったものはすべてライブラリの場所が変わっていますので、順次対応していきましょう。

 

android.support.v7.app.AppCompatActivity →
androidx.appcompat.app.AppCompatActivity

 

android.support.constraint.ConstraintLayout →
androidx.constraintlayout.widget.ConstraintLayout

 

android.support.v7.widget.Toolbar →
androidx.appcompat.widget.Toolbar

 

android.support.v4.content.PermissionChecker →
androidx.core.content.PermissionChecker

 

android.support.v7.widget.LinearLayoutManager →
androidx.recyclerview.widget.LinearLayoutManager

 

android.support.v7.widget.RecyclerView →
androidx.recyclerview.widget.RecyclerView

 

android.support.v7.widget.helper.ItemTouchHelper →
androidx.recyclerview.widget.ItemTouchHelper

 

android.support.design.widget.FloatingActionButton →
com.google.android.material.floatingactionbutton.FloatingActionButton

 

android.support.design.widget.Snackbar →
com.google.android.material.snackbar.Snackbar

 

android.support.v4.app.ActivityCompat →
androidx.core.app.ActivityCompat

 

android.support.v4.content.ContextCompat →
androidx.core.content.ContextCompat

 

android.support.v4.widget.SwipeRefreshLayout →
androidx.swiperefreshlayout.widget.SwipeRefreshLayout

 

android.support.v4.app.DialogFragment →
androidx.fragment.app.DialogFragment

 

これらの対応ですが 使用しているレイアウトファイル内に記載されているものも変更する必要がある ので気をつけましょう。

プログラムを直す

基本的に互換をもって実装されていますが、プログラムを一部治す必要がありましたので、その内容を記載します。

 

 

レイアウトが綺麗に表示されない場合

今回対応したアプリでは、変更前まできれいに表示されていたはずが、何も表示されないという問題が発生しました。

 

原因は Constraintの指定を暗黙の了解にしていた です。

 

以前までは自動でレイアウトを判断して表示してくれていた機能で作成していたため、明示的に記載する必要がありましたので、その対応がありました。

 

これに気づくまで、かなりの時間がかかってしまいましたが、無事対応することができました。

さいごに

アプリのバージョンアップは時に大きな改修と時間を伴います。

 

発表当時は情報もなく、手探りで探すしかなく、そのOSのデバイスも無いことが多いですので、実は結構時間がかかります。

 

なんとか対応していきたいものですね。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer