2

私は、ローカルの Maven リポジトリでリリースされた aar を使用していました。推移的な依存関係を含めたかったので、transitive属性を依存関係に追加しました。

compile ('com.mycompany.domain:artifact:1.0.0@aar') {
    transitive = true
}

ここで、このプロジェクトが cardView サポート ライブラリ v23 への依存関係を追加するとします。

compile "com.android.support:cardview-v7:23.4.0"

v24 cardView ライブラリへの依存関係も追加すると、apk リリース ファイルはどうなりますか。

compile "com.android.support:cardview-v7:24.0.0"

Gradle はこの二重の依存関係を管理し、競合を発生させずに最新の依存関係を取得できますか? transitiveまたは、属性を使用せずに依存関係を手動で指定する方が安全ですか。

また、transitive属性は、aar が設定できた proGuard ルールもインポートしますか?

ご協力ありがとうございました、

4

2 に答える 2

3

いくつかの詳細を追加するだけです。

@aarという表記を使用しています。
これは、aar アーティファクトのみをダウンロードし、依存関係をダウンロードしないことを意味します。
[ドキュメント][1] のこの部分を確認できます:セクションを
確認してください1.4.1.2. Artifact only notation:

アーティファクトのみの表記は、指定された拡張子を持つアーティファクト ファイルのみをダウンロードするモジュールの依存関係を作成します。既存のモジュール記述子は無視されます。

@aar依存関係をダウンロードする場合は、表記を使用してを追加する必要transitive=trueがあります。それ以外の場合は @aar を省略でき、推移的な属性を追加しなくても機能します。

依存関係について。
Gradle は依存関係を自動的に管理します。
デフォルトの構成では、gradle は最新バージョンをダウンロードします。

いずれにせよ、 .xmlで依存関係を除外build.gradleすることもできます。

 compile('mylibrary:1.0.0') {
     //excluding a particular transitive dependency:
     exclude module: 'xxx' //by artifact name
     exclude group: 'xxx.xxx' //by group
     exclude group: 'xxx.xxxx', module: 'xxxx' //by both name and group

     //disabling all transitive dependencies of this dependency
     transitive = false
 }
于 2016-06-21T07:59:06.660 に答える
0

Gradle Official Documentation: Gradle Depedency Management リンクで答えを見つけました

Gradle 依存関係ソルバーはそれを自動的に行います。Gradle が提供する 2 つの主要な競合解決戦略は次のとおりです。

最新:依存関係の最新バージョンが使用されます。これは Gradle のデフォルトの戦略であり、バージョンが下位互換性がある限り、多くの場合適切な選択です。

失敗:バージョンの競合により、ビルドが失敗します。この戦略では、すべてのバージョンの競合をビルド スクリプトで明示的に解決する必要があります。特定のバージョンを明示的に選択する方法の詳細については、ResolutionStrategy を参照してください。

また、ProGuard に関しては、次の宣言を使用してライブラリで宣言されている場合、ルールをエクスポートする必要があります (詳細については、この回答を参照してください)。

defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}
于 2016-06-20T18:10:13.483 に答える