Bibliothèque Android AAR en fonction d'une autre bibliothèque
-
21-12-2019 - |
Question
Bonjour, j'ai un projet de bibliothèque Android qui produit un AAR.
Tout va bien mais lorsque j'utilise l'AAR dans un autre projet, j'obtiens cette erreur :
java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso
L'AAR utilise Picasso, est-il possible d'exporter également les dépendances de l'AAR lors de sa génération ?
La solution
Comment peut-on créer un dépôt Maven local.
AVERTISSEMENT:la recette suivante fonctionne, mais pourrait probablement être améliorée, comme je le suis loin d'un expert Maven.J'ai élaboré cette approche l'année dernière pour l'utiliser avec mes bibliothèques CWAC.
Étape 1:Ajouter classpath 'com.github.dcendents:android-maven-plugin:1.0'
à ton buildscript
dependencies
bloc dans le projet de votre bibliothèque build.gradle
déposer.Ajoutez également version
et group
déclarations pour fournir ces informations sur votre AAR.
Étape 2:Utiliser gradle install
pour compiler l'AAR et l'installer dans le référentiel Maven local par défaut.
Étape 3:Normalement, vous ajouteriez mavenLocal()
au dependencies
bloc de votre projet d'application pour récupérer l'AAR via son ID d'artefact.Cela fonctionne peut-être à nouveau, même s'il a été un peu cassé.Utilisez plutôt maven { url "${System.env.HOME}/.m2/repository" }
comme solution de contournement à court terme.
Ainsi, par exemple, votre projet de bibliothèque build.gradle
le fichier peut contenir :
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
}
Vous utiliseriez gradle install
pour publier le JAR sur votre dépôt Maven local.Votre projet d'application contiendra alors les éléments suivants dans son 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
}
où tu remplaces :
some.likely.group.name.goes.here
avec quelque chose0.4.0
avec un numéro de version au format X.Y.Zname-of-library
sera le nom du répertoire contenant le projet de bibliothèque Android (par exemple,presentation
oufoo
)