質問: LatLngBounds.builder(); これが原因なのかと思うのですが・・・ その場合はこれをどうすれば良いのでしょうか? また他に何か原因があるのでしょうか? 分かる方がいましたら、ぜひお願いします。 初心者でも分かるようご教授くださいませm(__)m
回答: 本家StackOverflowに類似の質問がありました。 `/platforms/android/project.properties`を以下のように書き換えることで解決するようです。 こちらの環境で試したところビルドエラーは発生しなくなりました。 ・9.8.0の指定を+に変更する ``` #cordova.system.library.4=com.google.android.gms:play-services-maps:9.8.0 #cordova.system.library.5=com.google.android.gms:play-services-location:9.8.0 cordova.system.library.4=com.google.android.gms:play-services-maps:+ cordova.system.library.5=com.google.android.gms:play-services-location:+ ``` エラーが出ている原因を説明すると`cordova-plugin-googlemaps`は依存するライブラリとして`play-services-maps`と`play-services-location`がありますが、それらのバージョンを9.8.0と固定で指定しています。 一方`cordova-plugin-admobpro`は`com.google.android.gms:play-services-ads:+`の様に依存するライブラリにバージョンは指定していません。 これらのライブラリの利用しているバージョンの差異があるため、ライブラリ内で利用しているクラスがバージョンによっては実装されていたりいなかったりし、以下の様なクラスが見つからないというエラーが発生しています。 ``` class file for com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable not found ``` 但し、この解決方法は強引な手法でもあります。 `cordova-plugin-googlemaps`のプラグインは依存するライブラリのバージョンを9.8.0と指定しています。 これは9.8.0ではある程度問題なく動作することがわかっているが、それ以降のバージョンで動作するかはわからないためです。 よってこの解決方法を用いた場合は、バージョン指定を削除した`cordova-plugin-googlemaps`のAPIが正しく動作しない可能性があります。 (問題なく動作する可能性もあるので、利用してみて問題が発生しなければそのままでも良いでしょう) またこの問題はいずれプラグイン側が修正されて解決すると思われます。 追記 個人的な意見になるかもしれませんが、`/platforms/android/project.properties`を手動で修正することは避けるべきです。 なぜなら/platforms/配下はcordovaによって管理されており、ファイルの生成/変更/削除が様々なタイミングで自動的に行われるからです。 今回の例でいうならば`cordova-plugin-googlemaps`のプラグインをインストールしたタイミングで`/platforms/android/project.properties`が自動で変更されています。 なのでプラグインのライブラリバージョンの指定を変更して適用するには 1. 元のプラグインをforkして新しいリポジトリを作る 2. 問題のある箇所を修正する 今回の場合:`cordova-plugin-googlemaps/plugin.xml`を修正する ``` ``` 3. forkしたリポジトリのプラグインを適用する ``` cordova plugin install https://github.com/fork-my-plugin/cordova-plugin-googlemaps --variable API_KEY_FOR_ANDROID="YOUR_ANDROID_API_KEY_IS_HERE" --variable API_KEY_FOR_IOS="YOUR_IOS_API_KEY_IS_HERE" ``` のように適用した方が良いでしょう。 1.についてはローカルにcloneで落としてきてそれを修正するのもありかと思います。 その場合はソース管理の仕方を少し考える必要がありそうですが。