3

私はアンドロイドライブラリを開発します。ライブラリはappcompat-v7に依存しています。私の消費者もappcompat-v7に依存しています。 Mavenリポジトリに公開するときに、ライブラリとの依存関係を正しく表示する方法を教えてください。android-gradle 3を使用してAndroidライブラリのサポートライブラリの依存関係を公開する正しい方法は何ですか?

私は依存関係が 範囲「ランタイム」と記載されていることになりPOMファイルを公開するandroid-maven-publishを使用してライブラリー

  • implementation依存関係としてappcompat-v7依存関係をリスト今

    • やっています

    この設定では、ライブラリのバージョン設定がコンシューマに流出します。ここでは、ライブラリのバージョンが使用されv27.0.0および消費者は、26.1.0に設定されている消費者のプロジェクトビューからのスクリーンショットさ:

    enter image description here

    v27.0.0は、コンパイラを引き起こし、v26.1.0上presedenceを取りますエラー(フラグメントシグネチャが変更されたため)。

    これを避ける方法はありますか?になりますか?私は間違ってappcompat libの異なるバージョンがライブラリと消費アプリで許可されるべきであると仮定していますか?代わりに、複数のバイナリを公開する必要があります。複数のバイナリは、それぞれのコンシューマ設定を満たすためにサポートライブラリの異なるバージョンに対してコンパイルされますか?

  • 答えて

    1

    これを避ける方法はありますか?ライブラリを別に設定すると、 か、これが結果になるはずですか?

    残念ながら、これは期待された結果です。この問題の理由は、JVMは同じパッケージと名前のクラスを複数回持つことができないためです。

    異なるバージョンのアプリケーションコンパイルライブラリ は、ライブラリとコンシューマアプリケーションで使用できますか?

    私が言ったように、これはJVMという制限です。

    私の代わりに、複数のバイナリ、任意の消費者 セットアップを満たすためにサポートライブラリの 異なるバージョンに対してコンパイルされ、それぞれを公開すべきか?

    これは唯一の解決策ですが、非常に苦痛です。

    +0

    私は、同じパッケージと名前で複数のクラスを持つことができないことに気づいています。私の考えは、クライアントが自分のバージョンだけを使用していたということでした。それはおそらくResolutionStrategyで解決できますか?とにかく、ライブラリの設定が正しいことを意味しますか?https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html – Nilzor

    +0

    いいえ、残念ながら、Gradleにライブラリの要件をそのバージョンで満たすように指示することはできません(少なくとも私はどのようにわかりませんか)。Gradleはまずあなたのライブラリを探し、ライブラリの要件を満たし、後で同じライブラリの複数のバージョンを持ち、最新バージョンを使用していることがわかります。 – JoseF

    関連する問題