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

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?

Foi útil?

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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top