Androidプラットフォーム 10系特有のビルドエラーについて

Monacaチームの小田川です。

2021年9月10日に、CordovaのAndroidプラットフォーム 10系の注意点について記事を掲載しました。記事を公開した時点では、まだMonacaではAndroidプラットフォーム 10系に対応していませんでしたが、現在は、Androidプラットフォーム 10.1.1に対応しています。

Androidプラットフォーム 10.1.1の設定方法や注意点については、以下を参照していください。

MonacaでもAndroidプラットフォーム 10.1.1に対応したことで、Androidプラットフォーム 10系特有のビルドエラーも目立ち始めてきました。今回は、Androidプラットフォーム 10系特有のビルドエラーについて紹介していきたいと思います。

cordova-plugin-whitelist

Androidプラットフォーム 10系未満のMonacaプロジェクトには、cordova-plugin-whitelistが、標準で有効になっています。

Androidプラットフォーム 10系からは、Androidプラットフォームにcordova-plugin-whitelistの機能が組み込まれたため、cordova-plugin-whitelistは、不要になります。cordova-plugin-whitelist@1.3.5未満のcordova-plugin-whitelistが有効になっている場合は、以下のようなビルドエラーが発生します。

ビルドエラーの抜粋:
/tmp/download/platforms/android/app/src/main/java/org/apache/cordova/whitelist/WhitelistPlugin.java:25: error: cannot find symbol
import org.apache.cordova.Whitelist;
                         ^
  symbol:   class Whitelist
  location: package org.apache.cordova

cordova-plugin-whitelist@1.3.5では、Androidプラットフォーム 10系以降で使用されている場合は、ビルド時にインストールしない設定になっているため、Androidプラットフォーム 10.1.1を使用する場合は、cordova-plugin-whitelist@1.3.5以降に更新する必要があります。

cordova-plugin-camera

Androidプラットフォーム 10系からは、AndroidXが標準設定になっています。そのため、Cordovaプラグインで従来のAndroidサポートライブラリーが利用されている場合は、ビルドエラーになります。

cordova-plugin-camera@6.0.0未満のバージョンでは、従来のAndroidサポートライブラリーが使用されているため、cordova-plugin-camera@6.0.0未満のcordova-plugin-cameraが有効になっている場合は、以下のようなビルドエラーが発生します。

ビルドエラーの抜粋:
/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-camera@6.0.0からは、AndroidXに対応しているため、Androidプラットフォーム 10.1.1を使用する場合は、cordova-plugin-camera@6.0.0以降に更新する必要があります。

cordova-plugin-file-transfer

Cordova 9.0以降、cordova-plugin-file-transferは、非推奨になっています。そのため、MonacaクラウドIDEで提供されているCordova 9.0以降のMonacaテンプレートプロジェクトでは、cordova-plugin-file-transferは、削除されています。

Cordova 9.0未満のMonacaプロジェクトからcordova-plugin-file-transferを利用している場合は、MonacaプロジェクトのCordovaのバージョンアップを行うことでCordova 9.0以降もcordova-plugin-file-transferを利用しているケースがあります。

cordova-plugin-file-transferでは、内部でcordova-plugin-whitelistの機能を利用しています。Androidプラットフォーム 10系では、cordova-plugin-whitelistが不要になったことにより、Androidプラットフォーム 10系でcordova-plugin-file-transferが有効になっている場合は、以下のようなビルドエラーが発生します。

ビルドエラーの抜粋:
/tmp/download/platforms/android/app/src/main/java/org/apache/cordova/filetransfer/FileTransfer.java:48: error: cannot find symbol
import org.apache.cordova.Whitelist;
                         ^
  symbol:   class Whitelist
  location: package org.apache.cordova

cordova-plugin-file-transferを利用している場合は、XMLHttpRequestへの移行を検討する必要があります。XMLHttpRequestへの移行については、Transition off of cordova-plugin-file-transferを参照してください。

おわりに

Androidプラットフォーム10系は、アプリの動作に影響のある変更が含まれているバージョンになります。今回紹介したビルドエラー以外にも、これまでリソースにアクセスする際に使用されていたfile://スキームがhttps://スキームに変更されています。

Androidプラットフォーム 10.1.1を使用する際には、動作確認を忘れずに行うようにしてください。