web-dev-qa-db-fra.com

Comment inclure des fichiers aar utilisés dans des projets de bibliothèque dans le projet principal sous Android

Mon projet inclut un projet de bibliothèque. Library utilise des fichiers aar et sa dépendance est déjà définie dans le module: fichier gradle. J'ai du mal à inclure cette bibliothèque dans mon projet. 

Si je garde les fichiers aar en double dans app-> lib et que je définit leur dépendance dans app-> fichier gradle, il n'y a pas de problème. Mais cela ne devrait pas être la bonne approche.

Veuillez trouver ci-dessous l'erreur:

Un problème est survenu lors de la configuration du projet ': app'.

Could not resolve all dependencies for configuration ':app:_qaDebugCompile'. Could not find :api-release:. Searched in the following locations:
         https://jcenter.bintray.com//api-release//api-release-.pom
         https://jcenter.bintray.com//api-release//api-release-.aar
         file:/D:/sample/sample-Android-app/app/libs/api-release-.aar
         file:/D:/sample/sample-Android-app/app/libs/api-release.aar
     Required by:
         sample-Android-app:app:unspecified > sample-Android-app:misnapworkflow:unspecified

veuillez trouver ci-dessous la structure du projet:

sample
|-- app
|-- misnapworkflow
    |
    |-- lib
        |-- api-release.aar

Dans l'application, le fichier suivant a été mentionné pour inclure le projet

dépendances {compile project (': misnapworkflow')}

Veuillez trouver ci-dessous le fichier de gradus misnapworkflow:

apply plugin: 'com.Android.library'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 23
        consumerProguardFiles 'proguard-rules.pro'
    }

    lintOptions {
        abortOnError false
    }

    // Publish both debug and release libraries
    publishNonDefault true

    buildTypes {
        debug {
            debuggable true
            jniDebuggable true
            minifyEnabled false
            shrinkResources false
            testCoverageEnabled true
        }

        release {
            signingConfig signingConfigs.debug
            debuggable false
            jniDebuggable false
            minifyEnabled true
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

task grantPermissions(type: Exec, dependsOn: 'installDebugTest') {
    logger.warn('Granting permissions...')
    commandLine "adb Shell pm grant com.miteksystems.misnap.misnapworkflow.test Android.permission.WRITE_EXTERNAL_STORAGE".split(' ')
    commandLine "adb Shell pm grant com.miteksystems.misnap.misnapworkflow.test Android.permission.CAMERA".split(' ')
    logger.warn('Permissions granted.')
}

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('connected')
            || task.name.startsWith('create')) {
        task.dependsOn grantPermissions
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.Android.support:appcompat-v7:23.0.1'

    // Add dependency for MiSnap external API
    compile(name: 'api-release', ext: 'aar')

    // Add dependency for MiSnap
    compile(name: 'misnap-release', ext: 'aar') {
        exclude module: 'appcompat-v7'
    }

    // Eventbus dependency
    compile 'de.greenrobot:eventbus:2.4.0'

    // Add OPTIONAL dependency for Manatee
    compile(name: 'manatee-release', ext: 'aar')

    compile(name: 'cardio-release', ext: 'aar')
}

repositories {
    flatDir {
        dirs 'libs'
    }
}
10
Manish

Le fichier aar _ ne contient pas le transitive dependencies et n'a pas de fichier pom décrivant les dépendances utilisées par la bibliothèque.

Cela signifie que, si vous importez un fichier aar à l’aide d’un dépôt flatDir_ vous devez également spécifier les dépendances dans votre projet}.

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.

19
Gabriele Mariotti

Pour studio Android

Suivez ces étapes:

Étape 1:

Import .aar 

Fichier ---> Nouveau ---> Nouveau module ---> (sélectionner) importer le package .JAR/.AAR ---> Suivant ---> (sélectionnez le fichier .aar puis) ​​Terminer

Maintenant votre projet existant est importé.

Étape 2:

Ajouter dependencies 

Fichier ---> Structure du projet ---> (Vous obtiendrez maintenant la liste des modules en bas à gauche.) ---> (Sélectionnez le module app) ---> onglet Sélection des dépendances ---> cliquez sur (+) bouton ---> sélectionner les dépendances de module ---> (sélectionner le module que vous avez ajouté) ---> ok ---> ok 

 To add dependencies(1)   add dependencies(2)

Note: Pour vérifier la dépendance est ajouté 

votre build.gradle ressemble à

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:23.2.1'
    compile 'com.Android.support:design:23.2.1'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile project(':ScreenSharingSDK')
}
5
Pramod Waghmare

Dans mon cas, la chose suivante a fonctionné:

Placez votre fichier .aar dans le répertoire libs (créez-le si nécessaire), puis ajoutez le code suivant dans votre build.gradle (niveau de l'application): 

    repositories { 
        flatDir { 
            dirs 'libs' 
        } 
    } 

    dependencies { 
        compile fileTree(dir: 'libs', include: ['*.jar']) 
        compile(name:'your_arr_filename', ext:'aar') 
    } 
1
Monika Moon

Vous devez inclure le référentiel jcenter. Dans le type de build.gradle de niveau application:

   repositories {
           jcenter()
    }

dependencies {
      compile 'com.package.youraarpackagename@aar'
}

Ces dépendances sont différentes des autres.

0
Rushat Rai

Si je garde les fichiers aar en double dans app-> lib et que je définit leur dépendance dans app-> fichier gradle, il n'y a pas de problème. Mais cela ne devrait pas être la bonne approche.

Vous avez raison, votre app ne devrait pas définir vos dépendances de la bibliothèque AAR dans build.gradle. C'est une pratique courante pour les bibliothèques tierces telles que OkHttp, Picasso ou RxJava. En fait, ces bibliothèques ont leurs propres dépendances, tout comme votre bibliothèque AAR. 

Alors, pourquoi OkHttp, Picasso ou RxJava ne demande-t-il pas à votre application d'inclure leurs dépendances? Parce qu'ils ont inclus leurs dépendances sur un fichier POM . Un fichier POM contient un fichier de configuration pour votre AAR, y compris votre artefact, le nom du groupe, la version et ses dépendances.

Prenons OkHttp comme exemple. OkHttp et ses dépendances sont stockés dans l'ordinateur d'autres personnes. Allez sur mvnrepository.com et recherchez OkHttp. 

Ok Http Maven

Vous trouverez OkHttp et son fichier POM.

<project>
   <modelVersion>4.0.0</modelVersion>
   <parent>...</parent>
   <artifactId>okhttp</artifactId>
   <name>OkHttp</name>
   <dependencies>
      <dependency>
         <groupId>com.squareup.okio</groupId>
         <artifactId>okio</artifactId>
      </dependency>
      <dependency>
         <groupId>com.google.Android</groupId>
         <artifactId>Android</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>com.google.code.findbugs</groupId>
         <artifactId>jsr305</artifactId>
         <scope>provided</scope>
      </dependency>
   </dependencies>
   <build>...</build>
</project>

Lorsque vous incluez une bibliothèque dans votre build.gradle(), Gradle recherchera cette bibliothèque dans les référentiels définis dans le build.gradle de niveau supérieur. Pour OkHttp, il était stocké dans mavenCentral().

repositories {
    google()
    mavenCentral()
    jcenter()
}

Gradle téléchargera automatiquement les dépendances, il n'est pas nécessaire de spécifier une dépendance de bibliothèque pour votre projet App.

Mais cela ne devrait pas être la bonne approche.

La bonne approche est:

  1. Stockez votre bibliothèque et ses dépendances dans un référentiel Maven.

Vous pouvez utiliser le référentiel Maven local, héberger votre propre dépôt Maven ou publier votre bibliothèque sur Maven Central ou Bintray. inthecheesefactory a un bon tutoriel pour cela.

  1. Créez un fichier POM pour votre bibliothèque.

Lorsque vous déployez votre AAR, vous devez inclure le fichier POM. Cela peut être fait manuellement.

mvn deploy:deploy-file \
    -DgroupId=com.example \
    -DartifactId=your-library \
    -Dversion=1.0.1 \
    -Dpackaging=aar \
    -Dfile=your-library.aar \
    -DpomFile=path-to-your-pom.xml \
    -DgeneratePom=true \
    -DupdateReleaseInfo=true \
    -Durl="https://mavenUserName:[email protected]/repository/maven-releases/"

Ou en utilisant le plugin Gradle de Android-maven-publish

gradle yourlibrary:assembleRelease yourlibrary:publishMavenReleaseAarPublicationToMavenRepository
  1. Partagez votre bibliothèque avec vos pairs:

Au niveau de l'application build.gradle, ajoutez le GAV de votre bibliothèque.

dependencies{
    implementation "com.example:yourlibrary:1.0.1"
}

Vous et vos pairs devriez pouvoir utiliser yourlibrary maintenant.

0
aldok