Android Grayleは、外部ライブラリとプロジェクトへのネストされた外部ライブラリを追加する
-
20-12-2019 - |
質問
Androidプロジェクトに外部ライブラリとネストされた外部ライブラリを追加する方法は?
私のプロジェクト構造(変更できません)
- アプリ/
- app1 /
- build.gradle
- settings.gradle
- app1 /
- ライブラリ/
- library1 /
- build.grade
- settings.gradle
- library1 /
- library2 /
- build.grade
- settings.gradle
- build.grade
- build.grade
APP1
app1 / build.gradle
buildscript {
...
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:libraries:library1')
compile project(':..:libraries:library2')
compile project(':..:libraries:library3')
compile project(':..:libraries:library4')
}
android {
...
}
.
app1は、library3
またはlibrary4
に直接依存しませんが、build.gradle
ファイルとsettings.gradle
ファイルの依存関係に含めていない場合はコンパルします。だから、私は彼らが文句を言うのを止めるためだけに含まれています。
app1 / settings.gradle
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
.
ライブラリー1
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:library3')
compile project(':..:library4')
}
android {
...
}
.
library1 / settings.gradle
include ':'
include '..:library3'
include '..:library4'
.
ライブラリー2..4
library2..4 / build.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
...
}
.
library2..4 / settings.gradle
include ':'
.
gradlew clean build
でApp1
を作成しようとすると、次のエラーが発生します。
FAILURE: Build failed with an exception.
* Where:
Build file '/home/user/projects/branches/branch1/Apps/libraries/library1/build.gradle' line: 15
* What went wrong:
A problem occurred evaluating project ':..:library:library1'.
> Project with path ':..:library3' could not be found in project ':..:library:library1'.
.
行15はcompile project(':..:library3')
ファイルのlibrary1/build.gradle
です。
Androidプロジェクトに外部ライブラリとネストされた外部ライブラリを追加する方法は?
解決
最上位設定。グラードル(app1 / settions.gradle)ファイルライブラリごとにこのようなものをしてください
include ':library1'
include ':library2'
include ':library3'
include ':library4'
project(':library1').projectDir = new File(rootProject.projectDir, '../libraries/library1')
project(':library2').projectDir = new File(rootProject.projectDir, '../libraries/library2')
project(':library3').projectDir = new File(rootProject.projectDir, '../libraries/library3')
project(':library4').projectDir = new File(rootProject.projectDir, '../libraries/library4')
.
他の設定。グラードルファイルを削除する必要はありません
各ビルドスクリプトでは、
を使用する必要があります。compile project (':library1')
compile project (':library2')
etc....
.
上記のように、ルートプロジェクトで単一の設定。
あなたのApp1フォルダからgradlew clean :library1:build
を実行して、ライブラリ1が正しく構築されていることを検証します。
App1についての問題は欠けているライブラリ3と4を不満に適用する3&4に、これらのライブラリを直接参照しているアプリにコードがないことを確認してください。すべてのライブラリを個別に構築して、それらすべてをビルドしてください。
他のヒント
1つの質問。 あなたはこの依存関係の木が必要ですか?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
.
YESの場合、アプリはライブラリ3と4のインポートは不要です。これらの依存関係はライブラリー1を介して入手できます。
settings.gradleファイルについて。それぞれのモジュールの中の理由このファイルは、モジュールを参照するためにルートプロジェクト(Eclipseワークスペースのような)でのみ使用されます(アプリ、ライブラリ1、ライブラリ2など)
これはあなたを助けますか?
相対パスにこれをやっています:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'
.