目的

あるライブラリをインストールして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.v4android.support.v7などのサポートライブラリが無くなった(という表現が合っているのか不明)
なので、これらをインポートしている箇所を更新してやる必要がありました。

私のアプリではAppCompatActivityFragmentで上記のライブラリを多様していて、
ほぼすべてのファイルで対応が必要でした。

主な対応は以下で、下が新方式です。
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変えだけだったので、まだマシですが、対象ファイルが多い。