Androidプラットフォーム 11.0.0特有のビルドエラーについて
Monacaチームの小田川です。
MonacaでAndroidプラットフォーム 11.0.0
がサポートされてから1ヶ月以上が経ちました。Androidプラットフォーム 11.0.0については、以下を参照してくだ さい。
Androidプラットフォーム 11.0.0では、Androidビルドの際に使用されるAndroid Gradle Pluginのバージョンが、7.2.1
に更新されました。このバージョン更新の影響により、ビルドエラーが発生するケースが増えてきました。
今回は、Android Gradle Plugin 7.2.1の影響について説明していきたいと思います。
非推奨の機能について
Gradle 4.7以降、gradleファイルに設定するdependenciesで使用する以下の機能が非推奨になりました。
- compile
- runtime
- testCompile
- testRuntime
詳しくは、Dependency managementを参照してください。
Gradle 7.0以降からは、上記の機能は、非推奨ではなく廃止
されました。
Androidプラットフォーム 10系で使用されているAndroid Gradle Pluginのバージョンは、4.2.2
になります。Android Gradle Plugin 4.2.2では、Gradle 6.7.1以降の6系が使用されています。Androidプラットフォーム 11系で使用されているAndroid Gradle Plugin 7.2.1では、Gradle 7.0以降が使用されるため、上記の非推奨の機能は使用できません。
そのため、Androidプラットフォーム 11.0.0でビルドを実行した際に、Cordovaプラグインが上記の廃止された機能を使用している場合は、ビルドエラーが発生します。
ビルドエラーの例
定期的に更新されていないCordovaプラグインでは、上記の廃止された機能に対しての対応が行われていないケースが多く見られます。
例として、下記のCordovaプラグインは、開発が終了しているため、更新が行われていません。
phonegap-plugin-barcodescannerでは、gradleファイルのdependenciesに、下記のようにcompile
が設定されています。
repositories{
jcenter()
flatDir{
dirs 'libs'
}
}
dependencies {
compile(name:'barcodescanner-release-2.1.5', ext:'aar')
}
android {
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
この状態でAndroidプラットフォーム 11.0.0を使用してビルドを実行すると、下記のビルドエラーが発生します。
A problem occurred evaluating script.
>
Could not find method compile() for arguments [{name=barcodescanner-release-2.1.5, ext=aar}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
ビルドエラーの対応方法
廃止になった機能は、下記のように変更することで対応することができます。
変更前 | 変更後 |
compile | implementation |
runtime | runtimeOnly |
testCompile | testImplementation |
testRuntime | testRuntimeOnly |
phonegap-plugin-barcodescannerの場合も、下記のようにcompileをimplementation
に変更することでビルドエラーを回避することができます。
dependencies {
implementation(name:'barcodescanner-release-2.1.5', ext:'aar')
}
廃止された機能を使用しているCordovaプラグインを利用する必要がある場合は、上記のように対応を行ったカスタム版のCordovaプラグインを作成して利用する必要があります。
おわりに
Monacaでは、旧CordovaバージョンのMonacaプロジェクトの互換性のためにphonegap-plugin-barcodescannerの提供を行っていましたが、Androidプラットフォーム 11.0.0以降からは、phonegap-plugin-barcodescannerを使用することができなくなります。
現在、Monacaでは、バーコードスキャナープラグインの提供を行なっています。廃止された機能の対応を行なったphonegap-plugin-barcodescannerの作成が難しい場合は、バーコードスキャナープラグインへの移行を検討してみてください。