Monaca
テクノロジー
ノウハウ・TIPS

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サポートライブラリへ移行させる場合は、以下の手順が必要になります。

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を追加してビルドを試してみてください。

author img for keiji_asial

keiji_asial

前の記事へ

次の記事へ

一覧へ戻る
PAGE TOP