Android Gradle добавляет в проект внешнюю библиотеку и вложенные внешние библиотеки

StackOverflow https://stackoverflow.com//questions/21001232

Вопрос

Как добавить внешнюю библиотеку и вложенные внешние библиотеки в проект Android?


Структура моего проекта (изменение запрещено)

  • Программы/
    • Приложение1/
      • build.gradle
      • настройки.gradle
    • библиотеки/
      • библиотека1/
        • build.grade
        • настройки.gradle
      • библиотека2/
        • build.grade
        • настройки.gradle
      • библиотека3/
        • build.grade
        • настройки.gradle
      • библиотека4/
        • build.grade
        • настройки.gradle

Приложение1

Приложение1/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 файл.Итак, я включил их просто для того, чтобы он не жаловался.

Приложение1/settings.gradle

include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'

библиотека1

библиотека1/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}

библиотека1/settings.gradle

include ':'
include '..:library3'
include '..:library4'

библиотека2..4

библиотека2..4/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}

библиотека2..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?

Это было полезно?

Решение

В файле 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....

как указано выше, просто используйте один файл settings.gradle в корневом проекте (App1).

Затем из папки App1 запустите gradlew clean :library1:build чтобы убедиться, что библиотека1 строится правильно.

Что касается проблемы с жалобами приложения App1 на отсутствие библиотек 3 и 4, уверены ли вы, что в приложении нет кода, напрямую ссылающегося на эти библиотеки, либо это, либо библиотеки не обнаруживаются при компиляции библиотеки 1.Соберите каждую библиотеку отдельно, чтобы убедиться, что все они работают нормально.

Другие советы

Один вопрос.Вам нужно это дерево зависимостей?

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

Если да, вашему приложению не нужно импортировать библиотеки 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'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top