Android Gradle добавление внешней библиотеки и вложенных внешних библиотек в проект
Как добавить внешнюю библиотеку и вложенные внешние библиотеки в проект андроида?
Моя структура проекта (не разрешено изменять)
- Приложения /
- 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'
Library1
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
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
on 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
.
Как добавить внешнюю библиотеку и вложенные внешние библиотеки в проект андроида?
Ответы
Ответ 1
В вашем файле верхнего уровня .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, вам они не нужны.
то в каждой сборке script вам нужно использовать
compile project (':library1')
compile project (':library2')
etc....
как указано выше, просто используйте один файл settings.gradle в корневом проекте (App1).
Затем из вашей папки App1 запустите gradlew clean :library1:build
, чтобы проверить правильность построения библиотеки.
Что касается вопроса о том, что App1 жалуется на отсутствие библиотек 3 и 4, вы уверены, что у вас нет кода в приложении, напрямую ссылающегося на эти библиотеки, либо это, либо библиотеки не найдены при компиляции библиотеки1. Создайте каждую библиотеку отдельно, чтобы проверить, все ли они построены нормально.
Ответ 2
Один вопрос.
Вам нужно это дерево зависимостей?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
Если да, ваше приложение не нуждается в импорте библиотек 3 и 4. Эти зависимости доступны через Библиотеку 1.
О settings.gradle файлах. Почему по одному в каждом модуле? Этот файл используется только в корневом проекте (например, в рабочей области Eclipse) для ссылки на ваши модули (приложение, библиотека 1, библиотека 2 и т.д.)
Это поможет вам?
Ответ 3
Я делаю это для относительных путей:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'