29 votes

Gradle pour Android AAR en Fonction de l'AAR, à la Fois Dans Le Même Référentiel Distant?

Il y a quelques questions qui circulent concernant les dépendances transitives avec de l'AAR fichiers dans Gradle:

Moi aussi, j'ai couru dans des problèmes similaires en essayant de définir des dépendances transitives sur l'AAR fichiers dans un dépôt distant. J'ai Une Application, en fonction de la Bibliothèque B, qui à son tour dépend lors de la Bibliothèque C. de la Bibliothèque C est dans un repo Maven. Bibliothèque de B est dans le même dépôt, avec une POM que contient la dépendance à l'égard de la Bibliothèque C. App a Bibliothèque B dans ses dépendances. Toutefois, l'exécution d' gradle clean assembleDebug résultats en: "la version de Module [Bibliothèque B] dépend des bibliothèques, mais n'est pas une bibliothèque elle-même".

J'ai essayé de mettre une prime sur l'une de ces questions, en espérant pour plus de clarté, avec pas de chance.

Ma conjecture est qu'il y a deux sources possibles de la difficulté que j'ai et ceux de celle-ci DONC, la question sont à voir:

  1. Transitive de l'AAR dépendances à distance à partir d'un référentiel sont tout simplement cassé

  2. Transitive de l'AAR dépendances à distance à partir d'un référentiel de travail, mais il y a quelque chose dans nos POM fichiers, build.gradle fichiers, ou quelque chose qui est de briser les dépendances

La Question: Est-ce que quelqu'un sait de l'AAR, artefact dans certains référentiel public (par exemple, Maven Central), qui dépend d'un autre AAR artefact, également dans le même dépôt public?

Je ne suis pas intéressé par l'AAR, qui dépend de quelque chose dans un référentiel local, à l'instar de l'AAR, dans Maven Central qui dépend com.android.support:support-v4. Dans mon cas, si la Bibliothèque de B et de la Bibliothèque C sont tous les deux dans mon local repository Maven (~/.m2), tout fonctionne bien.

Selon Xav, ce que je fais doit travailler. Donc, je suis en espérant que quelqu'un peut m'indiquer un exemple de travail, de sorte que je peux l'utiliser pour déterminer où le reste d'entre nous peuvent mal se passer.

NOTE: je sais que le fait de poser pour des ressources hors site est verboten. Dans ce cas, je ne suis pas à la recherche de la ressource dans son propre droit, mais comme un exemple d'une configuration de travail, pour vous aider à déboguer un non-configuration de travail. Si vous avez une autre façon d'écrire une réponse indiquant une configuration de travail, ce serait génial!

Merci!

6voto

Matt Accola Points 1163

Je n'ai pas un exemple public, mais j'ai ce scénario avec succès le programme d'installation en interne hébergé Nexus référentiel. Voici la configuration:

App - Android application project LibraryB - Android projet de bibliothèque picasso - bibliothèque Open source de Carré (disponible sur Maven Central) LibraryA - Android projet de bibliothèque

Application dépend LibraryB et picasso LibraryB dépend LibraryA

Voici le POM pour LibraryB (téléchargé à partir de Nexus)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example</groupId>
   <artifactId>LibraryB</artifactId>
   <version>0.1</version>
   <packaging>aar</packaging>
   <dependencies>
      <dependency>
         <groupId>com.example</groupId>
         <artifactId>LibraryA</artifactId>
         <version>3.0.1</version>
         <scope>compile</scope>
      </dependency>
      <dependency>
         <groupId>com.squareup.picasso</groupId>
         <artifactId>picasso</artifactId>
         <version>2.1.1</version>
         <scope>compile</scope>
      </dependency>
   </dependencies>
</project>

Voici le build.gradle pour LibraryB

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'
apply plugin: 'maven'

version versionProp
group 'com.example'

repositories {
    mavenCentral()
    maven {
        url(exampleReleaseRepoUrl)
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
    }
    release {
        runProguard false
        proguardFile 'proguard-rules.txt'
        proguardFile getDefaultProguardFile('proguard-android.txt')
    }
}

dependencies {
    compile 'com.example:LibraryA:3.0.1'
    compile 'com.squareup.picasso:picasso:2.1.1'
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri(exampleReleaseRepoUrl)) {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
            snapshotRepository(url: uri(exampleSnapshotRepoUrl)) {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
        }
    }
}

Voici le POM pour LibraryA (téléchargé à partir de Nexus)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example</groupId>
   <artifactId>LibraryA</artifactId>
   <version>3.0.1</version>
   <packaging>aar</packaging>
   <dependencies>
      <dependency>
         <groupId>com.android.support</groupId>
         <artifactId>support-v4</artifactId>
         <version>19.0.0</version>
         <scope>compile</scope>
      </dependency>
   </dependencies>
</project>

La construction.gradle pour LibraryA est très similaire à celui de la LibraryB ci-dessus.

Les artefacts et les POM pour LibraryA et LibraryB ont été chargés par la suite de Gradle commande

gradle uploadArchives

La construction.gradle pour l'Application ressemble à ceci

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

repositories {
    mavenCentral()
    maven {
        url(exampleReleaseRepoUrl)
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard false
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.0'
    compile 'com.android.support:appcompat-v7:19.0.0'
    compile 'com.example:LibraryB:0.1'
}

Si vous avez besoin de plus d'information laissez-moi savoir.

2voto

CommonsWare Points 402670

Il semble que mon problème a disparu avec Gradle 1,9 et com.android.tools.build:gradle:0.7.+. Leastways, je n'arrive plus à reproduire le problème.

2voto

riwnodennyk Points 1181

À partir de Android Studio 0.4.4 à l'aide .AAR dépendances est aussi simple que l'utilisation .POT de dépendances. En \libs répertoire et de référence en build.gradle:

compile files('libs/YOUR_LIBRARY_NAME.aar')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X