今まで作っていたアプリを、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に対応したものに置き換えていきました。

これを数十箇所くりかえして、やっとアプリが動くようになりました!

スポンサーリンク