Domanda

Ciao ho un progetto di biblioteca Android che produce un AAR.

Tutto è buono ma quando uso l'AAR in un altro progetto ottengo questo errore:

java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso
.

L'AAR utilizza Picasso, è possibile esportare anche le dipendenze dell'AAR quando generano una?

È stato utile?

Soluzione

.

Come si può estinguere l'impostazione di un repo MAVEN locale.

Avvertenza: la seguente ricetta funziona, ma probabilmente potrebbe usare il miglioramento, come sono FAR da un esperto di Maven. Ho martellato questo approccio l'anno scorso per l'uso con le mie librerie CWAC.

Step # 1: Aggiungi classpath 'com.github.dcendents:android-maven-plugin:1.0' al tuo blocco buildscript dependencies nel file build.gradleGode del progetto Libreria. Aggiungere anche istruzioni version e group per fornire tali informazioni sul tuo AAR.

Step # 2: Utilizzare gradle install per compilare l'AAR e installarlo nel repository MAVEN locale predefinito.

Step # 3: Normalmente, si aggiungerebbe mavenLocal() al blocco dependencies del progetto dell'applicazione per raccogliere l'AAR tramite il suo ID artefatto. Ciò potrebbe lavorare di nuovo, anche se era rotto per un po '. Invece, utilizzare maven { url "${System.env.HOME}/.m2/repository" } come una soluzione alternativa a breve termine.

Quindi, ad esempio, il file build.gradle del progetto della libreria potrebbe contenere:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

apply plugin: 'android-library'
apply plugin: 'android-maven'

version '0.4.0'
group 'some.likely.group.name.goes.here'

repositories {
    mavenCentral()
}

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

android {
  // as normal
}
.

Utilizzare gradle install per pubblicare il barattolo al tuo repo MAVEN locale. Il tuo progetto di applicazione avrebbe quindi la roba seguente nel suo build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

apply plugin: 'android'

repositories {
    mavenCentral()
    maven { url "${System.env.HOME}/.m2/repository" } // mavenLocal()
}

dependencies {
    compile 'some.likely.group.name.goes.here:name-of-library:0.4.0'
}

android {
    // as normal
}
.

dove si sostituisce:

    .
  • some.likely.group.name.goes.here con qualcosa

  • 0.4.0 con un numero di versione in formato x.y.z

  • name-of-library sarà il nome della directory che contiene il progetto della libreria Android (ad esempio presentation o foo)

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