Biblioteca Android AAR a seconda di un'altra libreria
-
21-12-2019 - |
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?
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.gradle
Gode 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 esempiopresentation
ofoo
)