コードワには多くのプラグインがあり、その多くはGoogle Playサービスを使用しています。そして、各プラグインはいくつかの特別なバージョンのプレイサービスを使いたいと思っています。それは本当に面倒です。Gradle。コンパイル(x.x.x)とパッケージ化(y.y.y)の解決版は異なる
この問題を解決するために、私はgraddleで単純な依存関係のバージョンリゾルバを作成しようとしています。それはいくつかのプラグインの依存関係(私はサービスのバージョンを再生することを意味する)から必要なバージョンを取得し、他のプラグインの依存関係と同じバージョンを設定する必要があります。
は、ここに私のスクリプトです:
def right_version = "9+";
configurations.all{
resolutionStrategy{
eachDependency { DependencyResolveDetails details ->
if (details.requested.name.contains('play-services') && details.requested.version != '9+') {
right_version = details.requested.version
}
}
eachDependency { DependencyResolveDetails details ->
if (details.requested.name.contains('play-services')){
details.useVersion right_version
}
}
}
}
それは正常に動作しますが、少し問題があります。次のようなエラーが表示されました。
Conflict with dependency 'com.google.android.gms:play-services-ads'. Resolved versions for compilation (10.2.0) and packaging (9.8.0) differ. This can generate runtime errors due to mismatched resources.
何故ですか?あるいは、あなたは依存関係の競合を解決する良い方法を知っていますか?
ポイントは、何人かの人々が(プレイサービスの最後ではないバージョンで)いくつかの他のコルドバのプラグインで(Googleがサービスを再生使用)私のコルドバのプラグインを使用することができるということです。だから、私はすべてのプラグインで再生サービスのバージョンを更新することでその問題を解決することはできません。 そして私はこのスクリプトのためにアンドロイドスタジオを使用しません。私はcordova CLIを介してプロセスを構築する。 – Tamplier
** Gradle IntelliJ **は最新バージョンのcordovaのプラグインで使用されているモジュール/ライブラリでGoogleサービスのバージョンを注文できるラッパーとして機能します。Android/cordovaアプリケーションのアプリケーションモジュールは最新バージョンのプレイに更新することを強くお勧めしますライブラリ/モジュールの古いバージョンのサポート、アプリケーションのアプリケーションモジュールの新しいバージョンのサポートは、Gradle自身によって自動的に管理されます。 – taranjeetsapra
最後のバージョンを使用することが最善の解決策であるかどうかはわかりません。 APIのいくつかの変更によりプラグインが削除される可能性があるため、テストされたメジャーバージョンのライブラリを使用することをお勧めします。 とにかく、それは良いアイデアでも、現実世界では機能しません。私は古いプレイサービスを持つプラグインを知っています(実際に私のユーザーは、異なるバージョンの問題について私に書きます)。 – Tamplier