AndroidX関係のビルドエラーについて

Monacaチームの小田川です。

以前、AndroidXサポートライブラリへの移行についてに投稿しましたが、Androidでは、android.support.*でパッケージされている従来のサポートライブラリとAndroidXサポートライブラリーの2種類が存在します。

これらのサポートライブラリーは、アプリ内で同時に使用することができないため、アプリでサポートライブラリーを使用する場合は、どちらかに統一する必要があります。

Android 9.0(APIレベル 28)以降からは、AndroidXが導入され、従来のサポートライブラリーは更新されなくなったため、今後は、AndroidXが主流になっていきます。

現在、Cordova 10のMonacaプロジェクトで使用されているAndroidプラットフォーム v9.0.0からは、AndroidXを有効にする設定が追加されたこともあり、AndroidXを採用するCordovaプラグインが増えてきています。

Cordova10のMonacaプロジェクトでAndroidXを有効にする

Cordova 10のMonacaプロジェクトでは、AndroidXを有効にすることができます。AndroidXを有効にする場合は、MonacaクラウドIDEのメニュー、

設定 > Androidアプリ設定 > AndroidXを有効にする

から行うことができます。

AndroidXを有効にする

この設定は、config.xmlに以下のように設定されます。

<platform name="android">
  <preference name="AndroidXEnabled" value="true"/>
</platform>

cordova-plugin-cameraの場合

Cordova 10のMonacaプロジェクトで従来のサポートライブラリーが使用されているCordovaプラグインを利用している場合、AndroidXを有効にするとビルドエラーになります。

cordova-plugin-cameraでは、従来のサポートライブラリーが使用されているため、Cordova 10のMonacaプロジェクトでAndroidXを有効にした場合、下記のようなビルドエラーが発生します。

ビルドエラーの抜粋:
/tmp/download/platforms/android/app/src/main/java/org/apache/cordova/camera/FileProvider.java:21: error: package android.support.v4.content does not exist
public class FileProvider extends android.support.v4.content.FileProvider {}
                                                            ^
/tmp/download/platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java:42: error: package android.support.v4.content does not exist
import android.support.v4.content.FileProvider;

cordova-plugin-androidx-adapter

AndroidXを有効にしてcordova-plugin-cameraのような従来のサポートライブラリーを使用しているCordovaプラグインをビルドする場合は、従来のサポートライブラリーをAndroidXに変換する必要があります。

従来のサポートライブラリーをAndroidXに変換するCordovaプラグインとして、cordova-plugin-androidx-adapter が多く利用されています。

Monacaプロジェクトにcordova-plugin-androidx-adapterをインポートすることで、ビルド時にcordova-plugin-cameraで使用されている従来のサポートライブラリーがAndroidXに変換され、ビルドすることができるようになります。

このcordova-plugin-androidx-adapterについては、Cordova Android 9.0.0 Released!でも従来のサポートライブラリーをAndroidXに変換するCordovaプラグインとして紹介されています。

おわりに

AndroidXが有効になっている場合、今回のcordova-plugin-cameraに限らず、android.support.*のビルドエラーが発生した場合は、cordova-plugin-androidx-adapter のような従来のサポートライブラリーをAndroidXに変換するCordovaプラグインを試してみてください。