web-dev-qa-db-fra.com

Dépendances transitives pour la bibliothèque AAR locale

Nous créons une bibliothèque, fondamentalement pour notre API, qui faciliterait la vie de nos développeurs externes.

Nous avons donc créé un nouveau projet de bibliothèque et mis Retrofit et quelques autres bibliothèques comme dépendances.

dependencies {
    compile 'com.Android.support:appcompat-v7:23.3.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
}

Maintenant, quand nous le construisons, il produit un fichier aar.

Mais maintenant, lorsque nous plaçons le fichier aar dans le répertoire libs et le définissons comme dépendance, nous devons toujours mettre la même dépendance dans le fichier build.gradle De l'utilisateur, ce qui est nul. Il devrait être retiré de la bibliothèque, non?

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile(name: 'ourlibrary', ext: 'aar') {
        transitive = true;
    }
}

Comment faire fonctionner transitive = true?

37
Pitel

Le fichier aar ne contient pas les dépendances imbriquées (ou transitive ) et n'a pas de fichier pom qui décrit les dépendances utilisées par la bibliothèque.

Cela signifie que, si vous importez un fichier aar à l'aide d'un référentiel flatDir, vous devez également spécifier les dépendances dans votre projet.

Dans votre cas, ajouter transitive=true ne résout pas votre problème pour la raison décrite ci-dessus.

Vous devez utiliser un référentiel maven (vous devez publier la bibliothèque dans un référentiel maven privé ou public), vous n'aurez pas le même problème.
Dans ce cas, gradle télécharge les dépendances en utilisant le fichier pom qui contiendra la liste des dépendances.

61
Gabriele Mariotti