今まで作っていたアプリを、AndroidXへ移行してみました。
その際に、いくつか詰まったことがあったので、メモしておきたいと思います。
もくじ
AndroidXの移行手順の基本
基本的な手順は、こちらに書かれています。
→ AndroidX への移行 | Android Developers(公式、日本語)
具体的には、
Android Studio > Refactor > Migrate to AndroidX
をすると、自動でAndroidXに移行してくれるようです。
その際に、状況によっては「gradle.properties」のファイル内に
android.useAndroidX=true
android.enableJetifier=true
というような文字を追加する事で、自動的に依存関係を移行してくれるようです。
(詳しくは、先ほどのAndroidX への移行 | Android Developers(公式、日本語)をご確認くださいー)
詰まったところ1:Manifest merger failed with multiple errors, see logs
途中、こんなエラーが…。
→ Manifest merger failed with multiple errors, see logs
これは、AndroidX関係で出てくるエラーかどうかはわからないのですが
(今回、他の作業もしつつ、AndroidXへの移行作業もしたので…)
もし同じようなエラーが出た方は、対処方法をメモしてみましたので、上記リンクを見てみてくださいー。
詰まったところ2:Activityなどでエラー
どうもうまく動かないので、エラーログをよく読んでみると、
今まで使っていたものがAndroidX対応になっていないために、
エラーになっている箇所が大量にある事がわかりました。
具体的には、
Activity内などの、
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar
といった箇所がエラーになっていました。
これを、先ほどのサイト(AndroidX への移行 | Android Developers(公式、日本語))内で検索をかけて調べてみると…
例えば、
「android.support.v7.app.AppCompatActivity」は
「androidx.appcompat.app.AppCompatActivity」に変更する必要があるという事が
わかりました。
私は、ほとんど全てのActivityなどのKotlinファイルで、2〜3箇所くらい変更しなくてはいけない箇所があったので、
これを地道に置き換えて変更しましたー。
詰まったところ3:XMLでエラー
そして、すべての箇所を変更したところ、やっとエミュレータが起動し、アプリが起動しました!
と思ったら、すぐにアプリが落ちてしまいました…。
どうしてだろうと調べてみると、XML内にも変更すべき箇所があると気づきました。
例えば、私は起動した直後に表示するXMLファイル内に、
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
と書いている箇所がありました。
また、他にも
<android.support.design.widget.AppBarLayout
というような感じで書いている箇所も…。
これらひとつひとつも、同じように
先ほどのサイト(AndroidX への移行 | Android Developers(公式、日本語))内で検索をかけて、AndroidXに対応したものに置き換えていきました。
これを数十箇所くりかえして、やっとアプリが動くようになりました!