web-dev-qa-db-fra.com

Ajout de fichiers .aar locaux à ma génération

J'ai donc créé une bibliothèque Android et l'ai compilée avec succès dans un fichier .aar que j'ai appelé ce fichier aar: "projectx-sdk-1.0.0.aar" maintenant, je veux que mon nouveau projet dépende de cela, alors ce que j’ai fait est de suivre ce post: http://life.nimbco.us/referencing-local-aar-files-with-Android-studios -new-gradle-based-build-system /

Mais la poste me trouble car je n’obtiens pas le résultat souhaité:

Le nom du paquet aar est: com.projectx.photosdk et le module à l'intérieur s'appelle sdk

voici la structure de mon projet actuel:

|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle

Et il est mon fichier de construction de Gradle:

apply plugin: 'Android'

buildscript {
    repositories {
        mavenCentral()
        flatDir {
            dirs 'aars'
        }
    }
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.Android.support:gridlayout-v7:19.0.1'
    compile 'com.Android.support:support-v4:19.0.1'
    compile 'com.Android.support:appcompat-v7:19.0.1'


    compile 'com.projectx.photosdk:sdk:1.0.0@aar'
//    compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}

// EDIT

Les erreurs que je reçois:

Failed to refresh Gradle project 'SuperAwesomeApp'
     Could not find com.projectx.photosdk:sdk:1.0.0.
     Required by:
     SuperAwesomeApp:App:unspecified
66
sn0ep

Vous mettez votre bloc flatDir dans le mauvais bloc repostories. Le bloc repositories à l'intérieur de buildscript indique à Gradle où trouver le plug-in Android-Gradle, mais pas le reste des dépendances. Vous devez avoir un autre bloc _ de haut niveau repositories comme ceci:

repositories {
    mavenCentral()
    flatDir {
        dirs 'aars'
    }
}

J'ai testé cela et cela fonctionne bien sur ma configuration.

69
Scott Barta

Avec les versions récentes de Android Studio, testé avec la version 1.3, pour utiliser un fichier .AAR local et non extrait du référentiel maven/jcenter, accédez simplement à Fichier> Nouveau> Nouveau module et choisissez Importer le package .JAR/.AAR.

Vous allez vous retrouver avec un nouveau module dans votre projet qui contient un fichier très simple build.gradle qui ressemble plus ou moins à ceci:

configurations.create("default")
artifacts.add("default", file('this-is-yours-package-in-aar-format.aar'))

Bien entendu, d’autres projets doivent référencer ce nouveau module avec une directive régulière compile project. Donc, dans un projet qui utilise ce nouveau module qui est simple, un fichier .aar local a cela dans son build.gradle

[...]
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    ompile 'com.Android.support:appcompat-v7:23.1.0'
    compile 'com.Android.support:design:23.1.0'
    [...]

    compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
41
pelotasplus

Dans Android Studio 3.1.3 avec la version 3.0.1.
Ajouter simplement implementation fileTree(dir: 'libs', include: ['*.aar']) ou implementation files('libs/app-release.aar') sans autre flatdir fonctionne.

11
Yen

Ces jours-ci (plus d'un an après cette question) avec Android Studio> 1.0, la dépendance locale fonctionne correctement:

  • Le Android sdk recherche les dépendances dans un dépôt local par défaut de: $Android_HOME/extras/Android/m2repository/
  • Dans un projet de bibliothèque locale, vous pouvez publier le fichier aar dans ce répertoire. Voici un extrait qui peut être ajouté au fichier build.gradle De votre module (ex: sdk/build.gradle)

    apply plugin: 'maven'
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "file://localhost" + System.getenv("Android_HOME")
                    + "/extras/Android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
                pom.groupId = 'your.package'
                pom.artifactId = 'sdk-name'
            }
        }
    }
    
  • Dans votre projet de bibliothèque, exécutez ./gradlew uploadArchives Pour publier le fichier aar dans ce répertoire.
  • Dans le projet d'application dans lequel vous souhaitez utiliser la bibliothèque, ajoutez la dépendance à votre projet/app/build.gradle. compile 'your.package:sdk-name:1.0-SNAPSHOT'

Pour la dépendance locale, la prochaine génération de gradles devrait trouver l'archive précédemment déployée et c'est tout!


Dans mon cas, j’utilise ce qui précède pour le développement local, mais j’ai également un serveur d’intégration continue Bamboo pour la bibliothèque qui publie chaque version dans un référentiel d’artefacts Nexus partagé. Le code de la bibliothèque complète pour déployer l'artefact devient alors:

uploadArchives {
    repositories {
        mavenDeployer {
            if (System.getenv("BAMBOO_BUILDNUMBER") != null) {
                // Deploy to shared repository
                repository(url: "http://internal-nexus.url/path/") {
                    authentication(userName: "user", password: "****")
                }
                pom.version = System.getenv("BAMBOO_BUILDNUMBER")
            } else {
                // Deploy to local Android sdk m2repository
                repository(url: "file://localhost" + System.getenv("Android_HOME")
                        + "/extras/Android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
            }

            pom.groupId = 'your.package'
            pom.artifactId = 'sdk-name'
        }
    }
}

Afin d'indiquer aux applications de télécharger à partir de mon référentiel Nexus interne, j'ai ajouté le référentiel interne Nexus maven juste au-dessus de jcenter () dans les deux blocs "référentiels" du projet/build.gradle.

repositories {
    maven {
        url "http://internal-nexus.url/path/"
    }
    jcenter()
}

Et la dépendance des applications ressemble alors à compile 'your.package:sdk-name:45' Lorsque je mets à jour la version 45 en 46, mon projet récupérera le nouvel artefact du serveur Nexus.

5
Stan Kurdziel

Avec la dernière version de Gradle, il existe maintenant un moyen légèrement actualisé de faire ce que Stan a suggéré (voir maving publishing )

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'org.your-group-id'
            artifactId 'your-artifact-id'
            version 'x.x.x'

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
        }
    }
    repositories {
        maven {
            url("file:" + System.getenv("HOME") + "/.m2/repository")
        }
    }
}
1
mir

Il semble que l'ajout de fichiers .aar en tant que dépendance locale n'est pas encore pris en charge (prise en charge prévue dans la version 0.5.0 bêta).

https://code.google.com/p/Android/issues/detail?id=5586

Cependant, la manière dont vous utilisez votre bibliothèque en dépendance ne fonctionnera que si votre bibliothèque se trouve sur le référentiel maven central ou dans le référentiel maven local.

Reportez-vous à la section Comment utiliser le référentiel maven local pour utiliser .aar dans les dépendances de modules.

http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-gradle-builds

0
pyus13