web-dev-qa-db-ja.com

Android Gradleが外部ライブラリとネストされた外部ライブラリをプロジェクトに追加

外部ライブラリとネストされた外部ライブラリをAndroidプロジェクトに追加するにはどうすればよいですか?


私のプロジェクト構造(変更は許可されていません)

  • アプリ/
    • App1 /
      • build.gradle
      • settings.gradle
    • ライブラリ/
      • library1 /
        • build.grade
        • settings.gradle
      • library2 /
        • build.grade
        • settings.gradle
      • library3 /
        • build.grade
        • settings.gradle
      • library4 /
        • build.grade
        • settings.gradle

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

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'
_

ライブラリ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行目は_library1/build.gradle_ファイルのcompile project(':..:library3')です。

外部ライブラリとネストされた外部ライブラリをAndroidプロジェクトに追加するにはどうすればよいですか?

14
prolink007

トップレベルの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のコンパイル時にライブラリが見つからないかを確認してください。各ライブラリを個別にビルドして、すべて正常にビルドされることを検証します。

16
Phil H

一つの質問。この依存関係ツリーが必要ですか?

--- App
   |--- Library 2
   |--- Library 1
       |--- Library 3
       |--- Library 4

はいの場合、アプリはライブラリ3と4をインポートする必要はありません。これらの依存関係はライブラリ1で利用できます。

Settings.gradleファイルについて。なぜ各モジュールに1つですか?このファイルは、モジュール(アプリ、ライブラリ1、ライブラリ2など)を参照するためにルートプロジェクト(Eclipseワークスペースなど)でのみ使用されます。

これはあなたを助けますか?

2

私は相対パスに対してこれを行っています:

include '..:ambilWarna'
include '..:Excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'


include  ':odb2'
include  ':Azure'

include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'
0
stefan