Monaca で Cordova プラグインを組み込む場合、Zip
、 URL
、パッケージ名
で組み込むことができます。
Cordova プラグインを URL
、パッケージ名
で組み込む場合、バージョン指定をしない場合は、ビルド時に最新版の Cordova プラグインが組み込まれます。
そのため、対象の Cordova プラグインのバージョンが更新されている場合は、前回ビルドした際に組み込まれた Cordova プラグインとは異なるバージョンのものが組み込まれるため、ビルドが失敗したり、ビルドが成功しても正常にアプリが動作しない場合があります。
また、Cordova プラグインが更新されていない場合でも、設定ファイルの内容によって、ビルド時に異なるバージョンのフレームワークが組み込まれる場合があるため、このような場合もビルドが失敗したり、ビルドが成功しても正常にアプリが動作しない場合があります。
plugin.xml
Cordova プラグインの設定は、通常 plugin.xml
に設定されています。
下記は、cordova-admob-pro プラグインの plugin.xml の抜粋です。
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-admobpro"
version="2.31.6">
<name>AdMob Plugin Pro</name>
<dependency id="cordova-plugin-extension" />
<!-- android, now build with gradle instead of ant -->
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:name="com.google.android.gms.ads.AdActivity"
android:theme="@android:style/Theme.Translucent" />
</config-file>
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
</config-file>
<config-file target="res/xml/config.xml" parent="/*">
<feature name="AdMob">
<param name="android-package" value="com.rjfun.cordova.admob.AdMobPlugin"/>
<param name="onload" value="true" />
</feature>
</config-file>
<source-file src="src/android/AdMobMediation.java" target-dir="src/com/rjfun/cordova/admob" />
<source-file src="src/android/AdMobPlugin.java" target-dir="src/com/rjfun/cordova/admob" />
<!-- cordova CLI using gradle and it working well -->
<framework src="com.google.android.gms:play-services-ads:+" />
<!-- but unfortunately, build.phonegap.com, Intel XDK, and some other tools still use ant -->
<!-- dependency id="cordova-plugin-googleplayservices"/ -->
</platform>
</plugin>
framework タグ
framework
タグでは、Cordova プラグインで利用するフレームワークを指定します。
Androidの場合、この framework
タグでバージョンが指定されています。
<framework src="com.google.android.gms:play-services-ads:+" />
<framework src="com.android.support:support-v4:26.+"/>
上の例のように、バージョン指定に +
が指定されている場合は、ビルド時に最新版のフレームワークが組み込まれます。
新しいフレームワークが公開された場合は、前回のビルド時に組み込まれたバージョンと異なるバージョンのフレームワークが組み込まれるため、ビルドが失敗したり、ビルドが成功しても正常にアプリが動作しない場合があります。
また、下の例のように gradle
ファイルにフレームワークの指定が行われている場合もあります。
この gradle
ファイルに指定されているフレームワークのバージョンが +
指定されている場合も、同様の動きになります。
<framework src="sample.gradle" custom="true" type="gradleReference"/>
dependencies {
implementation 'com.android.support:support-v4:+'
}
dependency タグ
Cordova プラグインでは、指定した Cordova プラグインだけではなく、他の Cordova プラグインに依存している場合があります。
他の Cordova プラグインに依存している場合は、dependency
タグが指定されています。
<dependency id="cordova-plugin-extension" />
この dependency
タグで指定されている Cordova プラグインもビルド時に一緒に組み込まれます。
依存先の Cordova プラグインで指定されている framework
タグの設定によっても、ビルドが失敗したり、ビルドが成功しても正常にアプリが動作しない場合があります。
バージョンを指定する
framework
タグのバージョンに +
が設定されていることによってビルドが失敗したり、ビルドが成功しても正常にアプリが動作しない場合は、下の例のようにバージョンを指定することで、動作するようになる場合があります。
対象の Cordova プラグインをダウンロードして、設定を変更した Cordova プラグインを Zip
ファイルにすることで、Monaca にインポートすることができます。
<framework src="com.google.android.gms:play-services-ads:11.6.2" />
元の設定を変更しているため、必ずしも正常に動作するとは限りません。
設定を変更して使用する場合は、自己責任で行ってください。
おわりに
Android の場合、新しいバージョンの OS の公開や、Android Studio の新しいバージョンの公開のタイミングで、フレームワークのバージョンが更新される傾向にあります。
これまで利用できていた Cordova プラグインが利用できなくなった場合は、framework
タグや dependency
タグを確認し、バージョン指定に +
が設定されていないか確認してみてください。