ionicでFirebase関連のビルドエラーが多発!
ionicでは通知の処理などでFirebaseを使うことが多いのですが、4月頃からFirebaseがアップデートを繰り返しており、それによってビルドエラーが多発しています。
僕もアプリをアップデートしようとした所、Firebaseのエラーでどっぷりハマってしまい時間を浪費してしまいました。
同じような人がいると思いますので、自分なりの解決策を紹介します。
プラグインはcordova-plugin-firebase-libを使用
今までは"cordova-plugin-firebase"や"cordova-plugin-fcm"といったプラグインが使われてきましたが、これらは対応する更新がされていません。
そこで有志の方が作ったのがこちらのプラグインです。
cordova-plugin-firebase-lib github.com
このプラグインは迅速にアップデートされており、Firebaseの仕様変更に対応しています。
導入方法
導入方法はGitHubのページに書かれている通りなのですが、いくつか注意事項もあります。
まず、既存のFirebaseのプラグインを削除します。下記は"cordova-plugin-firebase"を使っていた場合。
ionic cordova platform remove android ionic cordova plugin remove cordova-plugin-firebase ionic cordova plugin add cordova-plugin-firebase-lib
仕様変更でAndroidXというプラグインが必要になったそうなので、そちらも入れます。
cordova plugin add cordova-plugin-androidx cordova plugin add cordova-plugin-androidx-adapter
Githubに書かれている通り、cordova-android,cordova-iosのサポート対象のバージョンが決まっています。普通にplatform addすると僕の場合androidのバージョンが下位になってしまいます。そこでバージョンを8.0.0で指定するため、下記のように追加します。
ionic cordova platform add android@8.0.0
事後処理
これでビルドしてみると、gradleのバージョンが合わないというエラーが発生しました。
> Minimum supported Gradle version is 4.10.1. Current version is 4.4. If using the gradle wrapper, try editing the distributionUrl in /Users/maruse/dev/native/foot4/gradle/wrapper/gradle-wrapper.properties to gradle-4.10.1-all.zip
そこで、~/.bashrcに記載していたCORDOVA_ANDROID_GRADLE_DISTRIBUTION_URLのバージョンをandroid/app/build.gradleのgradleVersion にある4.10.3に変更します。
ちなみにCORDOVA_ANDROID_GRADLE_DISTRIBUTION_URLを宣言していない場合は、android/gradle/wrapper/gradle-wrapper.propertiesのdistributionUrlを書き換えると解決するそうです。
gradleをアップデートしたためプラグインもアップデートしないといけませんので、Android/build.gradleとandroid/app/build.gradleを下記のように修正します。ちなみにgradleプラグインの対応バージョンはこちらに書かれています。
dependencies { // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath 'com.android.tools.build:gradle:3.3.2'
さらに"The minSdk version should not be declared in the android manifest file"なるエラーがでましたので、android/app/src/main/AndroidManifest.xmlとandroid/CordovaLib/AndroidManifest.xmlにある、minSdKを宣言している行を削除しました。
感想
これだけアップデートを繰り返されてしまうと、プラグイン側の対応が間に合いませんね。Googleが作ったアプリフレームワークのFlutterはFirebaseへの対応が良いという噂を聞いていますので、そちらの利用も検討してみようかな。(それがGoogleの狙いか?)