Corodvaプラグインが原因でビルドが失敗するケースについて
こんにちは、MonacaチームでMonacaの安定運用のために、いろんな検証をしている小田川です。
Monacaでは、MonacaクラウドIDEをはじめ、たくさんのサービスが提供されています。
Monacaで開発したアプリをモバイル端末上で動作確認するためには、ビルドをしてインストール用のファイルを作成する必要があります。
そのため、Monacaが提供しているサービスの中で、リモートビルドサーバーは、非常に大きな役割を担っているサービスになります。
そんなビルドサーバーの検証の一つに、Cordovaプラグインが正常にビルドできるか
というのがあります。
アプリの開発中は、ビルドをしてもビルドが失敗してしまうケースも多いと思います。
ビルドが失敗するケースの多くは、サードパーティー製Cordovaプラグインが関係しています。そのため、ビルドが失敗する原因がビルドサーバー側にあるのか、それともサードパーティー製Cordovaプラグイン側にあるのか、というようなことも日々検証しています。
今回は、Corodvaプラグインが原因でビルドが失敗するケースについて書いてみたいと思います。
requireCordovaModuleでビルドエラー
Monacaでは、2019年6月27日から Cordova 9.0
の提供を開始しました。
サードパーティー製Cordovaプラグインの中には、定期的にメンテナンスが行われていない場合も多いので、注意が必要です。
Cordova 9.0からは、Cordovaプラグインのビルドに関係する仕様変更が行われているため、Cordovaプラグイン側がCordova 9.0に対応 していない場合は、ビルドエラーになります。
例として、下記のような requireCordovaModule
のエラーが出力される場合は、対象のCordovaプラグインはCordova 9.0に対応していません。
この場合は、対象のCorodvaプラグインがCordova 9.0に対応するのを待つか、自分でCordovaプラグイン内の package.json
や JavaScript
等を改修する必要があります。
例1:
CordovaError: Using "requireCordovaModule" to load non-cordova module "q" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
例2:
CordovaError: Using "requireCordovaModule" to load non-cordova module "path" is not supported. Instead, add this module to your dependencies and use regular "require" to load it.
メンテナンス停止でビルドエラー
多くの開発者に利用されているサードパーティー製Cordovaプラグインは、定期的にメンテナンスされている場合が多いため、比較的安心して利用できるのですが、中には、突然メンテナンスが行われなくなるケースもあります。
これまで、Firebaseのプッシュ通知を利用する場合、
が多く利用されていたのですが、2019年6月にGoogleが提供しているライブラリーが更新された影響で、Androidビルドの際にビルドエラーが発生するようになりました。
cordova-plugin-firebaseプラグインは、現在も更新されていないため、ビルドエラーになります。
利用者が多いCordovaプラグインの場合は、GitHubのIssuesに報告が寄せられ、回避策等の回答を得ることができる場合が多いため、今まで利用できていたCordovaプラグインが突然利用できなくなった場合は、一度、Issusを確認することをお勧めします。
cordova-plugin-firebaseプラグインの場合は、その後、
と
に引き継がれて開発が行われていましたが、現在は、cordova-plugin-firebasexプラグインで開発が進められています。
cordova-plugin-firebasexプラグインは、Cordova 9.0以降から利用できます。
Cordova 7.1でcordova-plugin-firebaseプラグインを利用している場合は、対象のMonacaプロジェクトをCordova 9.0にアップグレードしてcordova-plugin-firebasexプラグインを利用する必要があります。
ライブラリーのバージョン競合でビルドエラー
Monacaプロジェクトに複数のCordovaプラグインを組み込んでいる場合、それぞれのCordovaプラグインで利用されているライブラリーのバージョンが競合するケースも多く見られます。
ライブラリーのバージョン競合は、主にAndroidビルドで発生します。
ライブラリーのバージョン競合を回避するために、Cordovaプラグイン側で variable
設定が提供されている場合があります。
利用者が多いCordovaプラグインの場合は、variable
設定が提 供されている場合が多いので、ビルドの際にライブラリーのバージョン競合が発生した場合は、Cordovaプラグインのドキュメントにvariable設定の記載がないか確認することをお勧めします。
variable設定を確認してみよう
Cordovaプラグインでvariable設定ができる場合は、Cordovaプラグインのインストールパラメータとして指定することができます。
このvariable設定は、Cordovaプラグイン内にある plugin.xml
で preference
タグとして設定されています。
ドキュメントにvariable設定の記載がない場合でも、一度、plugin.xmlにpreferenceタグが設定されていないか確認してみてください。意外と設定されていたりします。
cordova-plugin-firebasexプラグインのplugin.xmlには、以下のようなpreferenceタグが設定されています。
<!-- Default versions for Gradle dependencies -->
<preference name="ANDROID_PLAY_SERVICES_TAGMANAGER_VERSION" default="17.0.0" />
<preference name="ANDROID_FIREBASE_CORE_VERSION" default="17.0.0" />
<preference name="ANDROID_FIREBASE_MESSAGING_VERSION" default="19.0.0" />
<preference name="ANDROID_FIREBASE_CONFIG_VERSION" default="18.0.0" />
<preference name="ANDROID_FIREBASE_PERF_VERSION" default="18.0.0" />
<preference name="ANDROID_FIREBASE_AUTH_VERSION" default="18.0.0" />
<preference name="ANDROID_CRASHLYTICS_VERSION" default="2.10.1" />
<preference name="ANDROID_CRASHLYTICS_NDK_VERSION" default="2.1.0" />
<preference name="ANDROID_SHORTCUTBADGER_VERSION" default="1.1.22" />
<framework src="com.google.android.gms:play-services-tagmanager:$ANDROID_PLAY_SERVICES_TAGMANAGER_VERSION" />
<framework src="com.google.firebase:firebase-core:$ANDROID_FIREBASE_CORE_VERSION" />
<framework src="com.google.firebase:firebase-messaging:$ANDROID_FIREBASE_MESSAGING_VERSION" />
<framework src="com.google.firebase:firebase-config:$ANDROID_FIREBASE_CONFIG_VERSION" />
<framework src="com.google.firebase:firebase-perf:$ANDROID_FIREBASE_PERF_VERSION" />
<framework src="com.google.firebase:firebase-auth:$ANDROID_FIREBASE_AUTH_VERSION" />
<framework src="com.crashlytics.sdk.android:crashlytics:$ANDROID_CRASHLYTICS_VERSION" />
<framework src="com.crashlytics.sdk.android:crashlytics-ndk:$ANDROID_CRASHLYTICS_NDK_VERSION" />
<framework src="me.leolin:ShortcutBadger:$ANDROID_SHORTCUTBADGER_VERSION" />
Monacaでpreferenceタグに設定されているデフォルト値以外の設定を行いたい場合は、対象のCordovaプラグインの設定画面にある インストールパラメータ
に、以下のように設定します。
上の例では、値に 17.0.+
と +
設定をしています。
17.0.1
のような固定値を指定した場合は、固定値以外のバージョンが他のCordovaプラグインで設定されていた場合に競合してしまうため、バージョン競合を回避する場合は、通常 +
設定を行います。
中には、固定値のみ動作する場合が あるため、その場合は他のCordovaプラグインでも対象の固定値に合わせる必要が出てきます。
利用するCordovaプラグインによってケースが異なるため、ライブラリーのバージョン競合が発生した場合は、利用しているCordovaプラグインに合わせて設定を行う必要があります。
インストールパラメータにvariable設定を行うことによって、ビルド時に設定を変更することができます。ライブラリーのバージョン競合が発生した場合は、一度、variable設定を確認してみてください。
variable設定ができない時は
Cordovaプラグインの中には、variable設定ができないものもあります。
その場合は、手動でplugin.xmlに設定されているバージョンの値を変更したCordovaプラグインを作成して利用することもできますが、以下のようなCordovaプラグインを利用することで、ライブラリーのバージョン指定を行うこともできます。
github.com
github.com
github.com
上記のようなCordovaプラグインを使用することで、バージョン競合を回避できるケースも多いのですが、Cordovaプラグイン側の設定によっては回避できない場合もあります。
その場合は、バージョン競合が発生しているCordovaプラグインのIssuesに回避策が報告されていないか確認してみてください。
さいごに
このような感じで、日々あちこち調べながら検証を行っています。
今回紹介したケース以外でも、Cordovaプラグインが原因でビルドが失敗するケースが色々とあります。回避策は、CordovaプラグインのドキュメントやIssuesに記載されている場合も多くありますので、Cordovaプラグインが原因でビルドが失敗する場合は、はじめにドキュメントやIssuesを確認することをお勧めします。
また、何か報告できるようなことがあれば、ブログに書いてみたいと思います。