外部ライブラリとネストされた外部ライブラリをAndroidプロジェクトに追加するにはどうすればよいですか?
私のプロジェクト構造(変更は許可されていません)
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'
_
library1/build.gradle
_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'
_
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行目は_library1/build.gradle
_ファイルのcompile project(':..:library3')
です。
外部ライブラリとネストされた外部ライブラリをAndroidプロジェクトに追加するにはどうすればよいですか?
トップレベルのsettings.gradle(App1/settings.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')
他のsettings.gradleファイルを削除します。不要です。
次に、各ビルドスクリプトで使用する必要があるのは
compile project (':library1')
compile project (':library2')
etc....
上記のように、ルートプロジェクト(App1)で単一のsettings.gradleファイルを使用するだけです。
次に、App1フォルダーからgradlew clean :library1:build
を実行して、library1が正しく構築されていることを確認します。
ライブラリ3と4の欠落について不平を言うApp1に関する問題については、これらのライブラリを直接参照するコードがアプリにないか、library1のコンパイル時にライブラリが見つからないかを確認してください。各ライブラリを個別にビルドして、すべて正常にビルドされることを検証します。
一つの質問。この依存関係ツリーが必要ですか?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
はいの場合、アプリはライブラリ3と4をインポートする必要はありません。これらの依存関係はライブラリ1で利用できます。
Settings.gradleファイルについて。なぜ各モジュールに1つですか?このファイルは、モジュール(アプリ、ライブラリ1、ライブラリ2など)を参照するためにルートプロジェクト(Eclipseワークスペースなど)でのみ使用されます。
これはあなたを助けますか?
私は相対パスに対してこれを行っています:
include '..:ambilWarna'
include '..:Excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':Azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'