Android Gradle adicionar biblioteca externa e aninhados bibliotecas externas para um projeto
-
20-12-2019 - |
Pergunta
Como posso adicionar uma biblioteca externa e aninhados bibliotecas externas para um projeto android?
Meu projeto de estrutura (Não é permitido alterar)
- Apps/
- App1/
- construir.gradle
- configurações.gradle
- bibliotecas/
- library1/
- construir.grau
- configurações.gradle
- library2/
- construir.grau
- configurações.gradle
- library3/
- construir.grau
- configurações.gradle
- library4/
- construir.grau
- configurações.gradle
- library1/
- App1/
App1
App1/construir.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 não depende diretamente library3
ou library4
, no entanto , ele vai reclamar se eu não incluí-los nas dependências da build.gradle
arquivo e o settings.gradle
arquivo.Então, eu tê-los incluído apenas para parar de reclamar.
App1/configurações.gradle
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
library1
library1/construir.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':..:library3')
compile project(':..:library4')
}
android {
...
}
library1/configurações.gradle
include ':'
include '..:library3'
include '..:library4'
library2..4
library2..4/construir.gradle
buildscript {
...
}
apply plugin: 'android-library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
...
}
library2..4/configurações.gradle
include ':'
Quando tentar gradlew clean build
no App1
eu recebo o seguinte erro:
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'.
Linha 15 é compile project(':..:library3')
no library1/build.gradle
arquivo.
Como posso adicionar uma biblioteca externa e aninhados bibliotecas externas para um projeto android?
Solução
Em suas configurações de nível superior.gradle (App1/configurações.gradle) arquivo de fazer algo assim, para cada biblioteca
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')
Remover a outras configurações.gradle arquivos, você não precisa deles
em seguida, em cada script de compilação, você só precisa usar
compile project (':library1')
compile project (':library2')
etc....
como dito acima, é só usar um único configurações.gradle arquivo na raiz do projeto (App1).
Em seguida, a partir do seu App1 executar pasta gradlew clean :library1:build
para validar que library1 está construindo correctamente.
Como para a questão sobre App1 reclamando sobre a falta de bibliotecas 3 e 4, você tem certeza que você não tem nenhum código no aplicativo diretamente referentes a essas bibliotecas, ou seja, as bibliotecas não estão sendo encontrados ao compilar library1.Construir cada biblioteca individualmente para validar todos eles construir ok.
Outras dicas
Uma pergunta.Você precisa deste árvore de dependência?
--- App
|--- Library 2
|--- Library 1
|--- Library 3
|--- Library 4
Se sim, seu Aplicativo não precisa importar as bibliotecas 3 e 4.Estas dependências são disponíveis na Biblioteca 1.
Sobre as definições.gradle arquivos.Por que um em cada módulo?Este arquivo é usado apenas na raiz do projeto (como o Eclipse área de trabalho) para fazer referência a seus módulos (App, Biblioteca, 1 Biblioteca, 2, etc...)
Isso ajuda você?
Eu estou fazendo isso para caminhos relativos:
include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'
include ':odb2'
include ':azure'
include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'