AndroidXサポートライブラリへの移行について
Monacaチームの小田川です。
Androidでは、アプリを複数のAPIバージョンに対応させる場合、以前のバージョンでも新しい機能を利用できるようにサポートライブラリが用意されています。サポートライブラリについては、こちらを参照してください。
Android 8.0(APIレベル 27)までは、android.support.*
でパッケージされているサポートライブラリが利用されていましたが、Android 9.0(APIレベル 28)以降からは、AndroidX
という新しいバージョンのサポートライブラリが導入されています。
AndroidXサポートライブラリ
AndroidXサポートライブラリでは、従来のサポートライブラリで提供されていた機能を利用することができますが、アプリ内に従来のサポートライブラリとAndroidXサポートリブラリーを共存させることはできません。
そのため、アプリ内でAndroidXサポートライブラリを使用する場合は、従来のサポートライブラリをAndroidXサポートライブラリへ移行させる必要があります。
AndroidXサポートライブラリへの移行
ネイティブアプリ開発の場合は、Android Studioが提供している移行ツールを利用することができます。AndroidXサポートライブラリへの移行については、こちらを参照していください。
Cordovaで開発しているアプリの場合は、Android Studioが提供している移行ツールを利用することができないため、従来のサポートライブラリからAndroidXサポートライブラリへ移行させる場合は、以下の手順が必要になります。
- gradle.propertie に下記の設定を追加する。
- アプリ内の Mavenアーティファクトのマッピングとクラスのマッピング を行い、従来のサポートライブラ設定をAndroidX用に変更する。
android.useAndroidX=true android.enableJetifier=true
CordovaでAndroidXサポートライブラリを利用する
Cordovaの場合、フックスクリプトを使用することで、ビルド時に使用される gradle.propertieに設定を追加することは可能ですが、Mavenアーティファクトやクラスのマッピングや設定の変更はチェック対象が多いため、かなり大変な作業になります。
幸い、下記のCordovaプラグインを利用することで、CordovaでもAndroidXサポートライブラリへの移行を行うことができます。
- cordova-plugin-androidx gradle.propertieへの設定を行うCordovaプラグインです。
- cordova-plugin-androidx-adapter アプリ内のMavenアーティファクトのマッピングとクラスのマッピングを行い、従来のサポートライブラリの設定をAndroidX用に変更するCordovaプラグインです。
ビルドエラーについて
Cordovaで開発するアプリで従来のサポートライブラリとAndroidXサポートライブラリが使用されている場合、ビルドを実行すると以下のようなエラーが出力されます。
/tmp/download/platforms/android/app/src/main/AndroidManifest.xml:22:18-91 Error: Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
このような、android.support.*
とandroidx.*
が混在するビルドエラーが発生した場合、多くの場合は、cordova-plugin-androidxとcordova-plugin-androidx-adapterを利用することで対応することができます。
Cordova Android 9.0.0以降に ついて
Cordova Android 9.0.0からは、config.xmlにAndroidXEnabled
設定を行うことで、cordova-plugin-androidxと同じ設定を行うことができるようになっています。
<preference name="AndroidXEnabled" value="true" />
詳しくは、こちらを参照してください。
残念ながら、この記事の執筆時現在では、MonacaでCordova Android 9.0.0を利用することができません。
MonacaでCordova Android 9.0.0が利用可能 になった際に、config.xmlにAndroidXEnabledを設定した場合は、cordova-plugin-androidxを無効にしても問題ありません。
AndroidXEnabledの設定を行なった場合でも、cordova-plugin-androidx-adapterを利用して従来のサポートライブラリの設定をAndroidX用に変更する必要があります。
おわりに
今後は、AndroidXサポートライブラリに対応したCordovaプラグインが増えてくることが予想されます。Cordovaで開発するアプリやMonacaで開発するアプリで、android.support.*
とandroidx.*
が混在するビルドエラーが発生した場合は、一度、対象のプロジェクトにcordova-plugin-androidxとcordova-plugin-androidx-adapterを追加してビルドを試してみてください。