目的
あるライブラリをインストールしてSyncしたところ、
Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
というエラーが表示されました。
AndroidManifest.xml
のエラーとなり、かなり嫌な予感。
ネットで調べるとどうやら最近リリースされたAndroid 10
対応が必要とのことです。
まだやっていない駄目人間!!
ということで対応メモです。
対応
以下を粛々と対応したのですが、対応方法が合っているか自信ありません。
一応 対応後、アプリはエラーなく起動できてます。
最初gradle.properties
を変更してますが、最初からMigrateツール
で変更を試みるべきと思われます。
gradle.properties対応
gradle.propertiesに以下の2行を追記
android.useAndroidX=true
android.enableJetifier=true
対応後、ビルドするも大量のエラー。。
ということで、Migrateツールを試みます。
Migrate実施
Android Studio
のメニューより
Refactor
- Migrate Android X...
を実施。
Refactor
ボタンが分かりづらかったですが、Migrate後サイドビルドするも
引き続き大量のエラー
Android 10対応の要約
Android 10対応により、するべきこととは
要はandroid.support.v4
やandroid.support.v7
などのサポートライブラリが無くなった(という表現が合っているのか不明)
なので、これらをインポートしている箇所を更新してやる必要がありました。
私のアプリではAppCompatActivity
やFragment
で上記のライブラリを多様していて、
ほぼすべてのファイルで対応が必要でした。
主な対応は以下で、下が新方式です。
importライブラリを消して、エラーとなる箇所で新しく該当するライブラリをインポートする対応をひたすら行いました。
怖いので、置換はせず、1つずつ対応。。
import android.support.v7.app.AppCompatActivity;
↓
import androidx.appcompat.app.AppCompatActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
↓
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.support.annotation.Nullable;
↓
import androidx.annotation.Nullable;
android.support.v7.widget.Toolbar
↓
androidx.appcompat.widget.Toolbar
androidx.core.widget.DrawerLayout
↓
androidx.drawerlayout.widget.DrawerLayout
androidx.constraintlayout.ConstraintLayout
↓
androidx.constraintlayout.widget.ConstraintLayou
所感
すごく面倒な対応でした。
当方iOSエンジニアですが、まさにSwift2対応の時を思い出しました。
今回はimport変えだけだったので、まだマシですが、対象ファイルが多い。