2017-11-01 3 views
4

シナリオの依存関係のGradleは、私は2つのAndroidのライブラリを持っている依存

が含まれますそのbuild.gradleから。

私のAndroidアプリはライブラリBとライブラリAのいくつかの基本クラスを使用する必要があります。これを実行する際に唯一成功したのは、両方のライブラリをAndroidアプリのbuild.gradleに含め、推移をfalseに設定することです。

質問

がに私のための方法はありますのみライブラリBを追加し、私のAndroidアプリからその依存へのアクセス権を持っていますか?推移的依存関係と呼ばれています


のAndroidメーカー

Android Studio 3.1 Canary 
Build #AI-171.4415322, built on October 24, 2017 
JRE: 1.8.0_152-release-1012-b01 x86_64 
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 
Mac OS X 10.12.6 

のGradle

3.1.0-alpha01 
+0

私はそれがライブラリB自体で有効になっているべきだと思っていますが、「悪い習慣」と考えられています。したがって、両方のライブラリを含めるか、ライブラリBにその依存関係を提供するよう依頼してください。 – Entreco

+0

@Entrecoありがとう、なぜその悪い練習と考えられるのかを説明するソースがありますか? – zafrani

+0

どのようにライブラリを含めるのですか? Mavenまたはローカルで? build.gradleファイルを投稿する –

答えて

1

Gradleと他のすべての依存システムがこれを自動的に処理します。 BがAを必要とするならば、Aを得る。あなたがAを得ていなければ、それはBの依存関係が正しくないことを意味する。

依存関係で明示的にAを呼び出す必要があるかどうかは議論の対象です。私はあなたがしてはならないキャンプです。私の推論はAのどのバージョンがアプリにコンパイルし、実行時に使用されます、さて、あなたはこのようなもので終わることができ

include B(v1.0) -depends on-> A(1.0) 
include A(1.1) 

のですか? A 1.0またはA 1.1?答えはビルドシステムの実装に依存します。

  • それは1.0だ場合は、YOUは1.1に対してコンパイルするが、1.0に対して実行されています。
  • 1.1の場合、は1.0に対してコンパイルされますが、実行時に1.1を使用しています。コメントから
+0

私は 'implementation project( ':LibA')'を使ってAをBに含めている。私はそれを別々に含めるべきですか? – zafrani

+0

実行中のプラットフォームが実行時に 'A'を提供しない場合は、間違っています。 'implementation'はあなたがそれに対してコンパイルすることを意味しますが、あなたのアプリケーションにはパッケージされていません。そして、あなたはプラットフォーム(この場合はAndroidだと思います)を利用可能にすることを期待しています。 –

0

あなたがimplementation project(':LibA')を使用してBに含まあなたアプリとあなたのライブラリー内のライブラリを使用する必要がある場合、それはあなたのメインアプリに推移ではありませんが。

api,api project(':LibA')を使用してBに含める必要があります。

apiの設定は、外部モジュールにエクスポートされる依存関係(過渡的な依存関係)に使用する必要があります。コンポーネントの内部に(遷移的な依存性ではない)の依存関係の場合は、implementation構成を使用する必要があります。

+0

これはどちらの動作もしていないようです – zafrani

関連する問題