Domanda

Come aggiungo una libreria esterna e librerie esterne annidate a un progetto Android?


.

La mia struttura del progetto (non è consentita modificare)

    .
  • apps /
      .
    • app1 /
        .
      • build.gradle
      • Impostazioni.Gradle
    • Biblioteche /
        .
      • library1 /
          .
        • build.grade
        • Impostazioni.Gradle
      • Library2 /
          .
        • build.grade
        • Impostazioni.Gradle
      • Library3 /
          .
        • build.grade
        • Impostazioni.Gradle
      • Library4 /
          .
        • build.grade
        • Impostazioni.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 non dipende direttamente da library3 o library4, tuttavia, si lamenterà se non li includerà nelle dipendenze nel file build.gradle e nel file settings.gradle. Quindi, li ho inclusi solo per fermarlo dal lamentarsi.

App1 / Impostazioni.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 / Impostazioni.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 / Impostazioni.Gradle

include ':'
.


.

Quando si tenta di generarecodicitagcode su gradlew clean build ottengo il seguente errore:

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

Linea 15 è App1 nel file compile project(':..:library3').

Come aggiungo una libreria esterna e librerie esterne annidate a un progetto Android?

È stato utile?

Soluzione

Nel tuo livello Top Levetti.Gradle (App1 / Impostazioni.Gradle) File Fai qualcosa del genere per ogni libreria

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')
.

Rimuovi gli altri file Settings.Gradle, non ne hai bisogno

Quindi in ogni script di build devi solo usare

compile project (':library1')
compile project (':library2')
etc....
.

Come indicato sopra, usa un singolo file Impostazioni.Gradle nel progetto Root (APP1).

Poi dalla cartella APP1 eseguire gradlew clean :library1:build per convalidare che la libreria1 è la costruzione corretta.

Per quanto riguarda il problema su APP1 che si lamentano delle librerie mancanti 3 e 4, sei sicuro di non avere alcun codice nell'app che fa riferimento direttamente a queste librerie, o che o le librerie non vengono trovate durante la compilazione della libreria1.Costruisci ogni biblioteca singolarmente per convalidare, costruiscono tutti ok.

Altri suggerimenti

Una domanda. Hai bisogno di questo albero di dipendenza?

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

Se sì, la tua app non ha bisogno di importare le librerie 3 e 4. Queste dipendenze sono disponibili sulla libreria 1.

Informazioni sui file Impostazioni.Gradle.Perché uno in ogni modulo?Questo file viene utilizzato solo nel progetto root (come l'area di lavoro Eclipse) per fare riferimento ai moduli (app, libreria 1, libreria 2, ecc ...)

Questo ti aiuta?

Lo sto facendo per i relativi percorsi:

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


include  ':odb2'
include  ':azure'

include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top