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を有効にする
から行うことができます。
この設定は、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プラグインを試してみてください。