最近(2018年10月)、Ionic3でAndroidアプリを作って、Play Storeで公開しました。
そこに至るにはいろいろと罠がありましたので、その記録を思い出せるうちに書いて残しておこうと思います。
困ったり解決したりする度にツイートしてたからいけるはず……!!
いくつかの記事にわけて、シリーズとしてまとめておきます。
なお、なんとかリリースできたアプリはこちら。あなたの日本語入力速度を測定します。→フリックとローマジ 〜日本語入力スピード測定〜
#シリーズ一覧
-
小さめの奴をまとめて
- Ionicアプリにおける、色の指定のしかた
- アプリのIDを初期値にしたまま端末に複数インストールすると上書きされる
- iconとsplashの生成
- android実機デバッグでエラーメッセージを見る
- chromeでinspectタブを開いていると、端末ビルド時にno device error
- play-services-ads v17 でAndroidManifest.xmlのmeta-data強制
-
複数のファイルにまたがるPromiseの使い方
- IonicのNavControllerはProviderからは使えない
- プライバシーポリシー
- admob-freeプラグインでのeventsオブジェクトの扱い
- firebaseプラグイン導入時のGoogle Play Services libraryのバージョン調整(この記事)
-
Lazy Loading への対応
- ngIf、ngForが動かない時
#cordova-plugin-firebase
IonicアプリでFirebaseを使おうと思ったら、こちらのプラグインを使うことになると思います。
https://ionicframework.com/docs/native/firebase/
https://github.com/arnesson/cordova-plugin-firebase
リンクを2つ貼りましたが、Ionicのページとgithubのページを貼っただけで同じプラグインの話です。
#生じていた問題
##依存バージョンの不一致
上記のプラグインをインストールしたアプリをbuildしようとすると、下記のエラーが出ました。
The library com.google.android.gms:play-services-measurement-base is being requested by various other libraries at [[11.0.4,11.0.4], [16.0.0,16.0.0]], but resolves to 16.0.0. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
基本的には、こちらの方が記事に書いて下さっている内容そのものです。
ということで、エラーメッセージやこちらの記事に書いてあるのと同じように./gradlew
を実行して依存関係を調べ、解決していこうと思ったのですが……。
##gradlewコマンド単体で実行できない
僕が実行するbuildコマンドってionic cordova run android --device
とかであって、どうも./gradlew
はこの中で自動的に実行されているようなんですよね。
だから、依存関係を調べるために自力で./gradlew :app:dependencies
を実行しようにも、この引数を与えて実行する方法がわからない!!
platforms/android
の中にgradlew
があったのでこれを実行してみてもエラーになります。カレントディレクトリを変えて実行してもだめ。やっぱりionic cordova run
とかじゃないと駄目みたい。
結局、依存関係を調べて自力で解決する方法は頓挫しました。
#解決策
本家githubのプラグインの説明に書いてあることをしっかり実行すればちゃんと動きました。最初からよく読めって話ですね…。引用しておきます。
Google Play Services
Your build may fail if you are installing multiple plugins that use Google Play Services. This is caused by the plugins installing different versions of the Google Play Services library. This can be resolved by installing cordova-android-play-services-gradle-release.
If your build is still failing, you can try installing cordova-android-firebase-gradle-release. For more info, read the following comment about locking down the specific versions for play services and firebase. It is suggested to use + instead of 15.+ to ensure the correct versions are used.
要するに
cordova-android-play-services-gradle-release
とcordova-android-firebase-gradle-release
を追加でインストールすると良いということ。
さらに、僕の場合、どちらも--variable PLAY_SERVICES_VERSION=+
というオプションをつけてインストールして初めてうまくいきました。
コマンドとしてはこうなります。
$ cordova plugin add cordova-android-play-services-gradle-release --variable PLAY_SERVICES_VERSION=+
$ cordova plugin add cordova-android-firebase-gradle-release --variable FIREBASE_VERSION=+
この2つのプラグインは兄弟みたいなもんですが、この兄弟はもう一人いて、cordova-android-support-gradle-release
も必要になるケースがあるかもしれません。僕の場合は不要でした。
これらをインストールした上で、あらためて`ionic cordova run android --device``などを実行してアプリをビルドしたらうまくいきました。
#プラグインがわけわかんなくなっちゃった時の対策
解決策を探していろいろ依存関係の数字をいじったりしてる時にですね、あれこれいじりすぎてプラグインがしっちゃかめっちゃかになってしまい、
一旦cordova-plugin-firebase
を外して元の状態に戻そうとしても、もともとできていたビルドすらできなくなってしまいました。
この時はかなり焦ったんですが…
##解決策
plugins
フォルダとplatforms
フォルダを思い切って消してしまって(不安なら念の為どこかに避けておいて)、
必要ならgitで特定のコミットまで戻して、
改めてionic cordova run android --device
を実行すると、
一通りのプラグインを改めてインストールし直してくれるので復活できます。
実はplugins
フォルダとplatforms
フォルダは、.gitignore
でgitの管理対象外にデフォルトで設定されています。
後から再インストールして復活できるから、管理に含めておく必要がないんですね。