J'ai expérimenté le nouveau système de construction Android et je suis tombé sur un petit problème. J'ai compilé mon propre paquet aar d'ActionBarSherlock que j'ai appelé 'actionbarsherlock.aar'. Ce que j'essaie de faire est en fait d'utiliser cet aar pour construire mon APK final. Si j'inclut toute la bibliothèque ActionBarSherlock en tant que module de bibliothèque Android dans mon projet principal à l'aide du projet de compilation (': actionbarsherlock'), je parviens à construire sans problèmes.
Mais mon problème est que je souhaite fournir cette dépendance sous forme de package de fichier aar MANUELLEMENT, si je voulais un fichier JAR, je n'arrive pas à comprendre comment l'inclure correctement dans mon projet. J'ai essayé d'utiliser la configuration de compilation mais cela ne semble pas fonctionner. Je n'arrive pas à trouver pendant la compilation le symbole introuvable qui m'indique que le fichier classes.jar du paquet aar n'est pas inclus dans le chemin de classe.
Est-ce que quelqu'un connaît la syntaxe pour inclure manuellement un paquet aar dans un fichier?
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.4'
}
}
apply plugin: 'Android'
repositories {
mavenCentral()
}
dependencies {
compile files('libs/actionbarsherlock.aar')
}
Android {
compileSdkVersion 15
buildToolsVersion "17.0"
}
EDIT: Donc, la réponse est qu’elle n’est pas prise en charge pour l’instant, voici la question issue si vous voulez la suivre.
EDIT: Actuellement, comme cela n’est toujours pas supporté directement, la meilleure alternative semble être la solution proposée par @RanWakshlak
EDIT: Également plus simple en utilisant la syntaxe proposée par @VipulShah
Veuillez suivre les étapes ci-dessous pour le faire fonctionner (je l'ai testé jusqu'à Android Studio 2.2)
Disons que vous avez conservé un fichier AAR dans le dossier libs. (supposons que le nom du fichier est cards.aar
)
puis dans l'application build.gradle
, indiquez ce qui suit et cliquez sur le projet de synchronisation avec les fichiers Gradle . Ouvrez le niveau de projet build.gradle et ajoutez flatDir{dirs 'libs'}
comme ci-dessous
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
et ouvrez maintenant le fichier build.grdle au niveau de l'application et ajoutez le fichier .aar
dependencies {
compile(name:'cards', ext:'aar')
}
Si tout se passe bien, vous verrez que l’entrée de la bibliothèque est faite dans la version -> explosée
Notez également que si vous importez un fichier .aar à partir d'un autre projet comportant des dépendances, vous devez également les inclure dans votre build.gradle.
Vous pouvez référencer un fichier aar depuis un référentiel . Maven est une option, mais il existe une solution plus simple: placez le fichier aar dans votre répertoire libs et ajoutez un référentiel de répertoires.
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
Ensuite, référencez la bibliothèque dans la section de dépendance:
dependencies {
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
Vous pouvez consulter le blog de Min'an pour plus d'informations.
L'approche ci-dessous fonctionne avec le dernier studio Android (> v0.8.x):
Enregistrez le fichier aar
sous le dossier libs
du module de l'application (par exemple: <project>/<app>/libs/myaar.aar
)
Ajoutez ce qui suit à build.gradle de votre dossier de module "app" (pas à votre racine build.gradle de projet). Notez le nom en ligne de compilation, c’est myaar @ aar pas myaar.aar.
dependencies {
compile 'package.name.of.your.aar:myaar@aar'
}
repositories{
flatDir{
dirs 'libs'
}
}
Cliquez sur Tools -> Android -> Sync Project with Gradle Files
Actuellement, le référencement d'un fichier .aar local n'est pas pris en charge (comme l'a confirmé Xavier Ducrochet)
Vous pouvez plutôt configurer un référentiel Maven local (beaucoup plus simple qu'il n'y paraît) et référencer le fichier .aar à partir de là.
J'ai écrit un article de blog détaillant comment le faire fonctionner ici:
http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-gradle-builds
avant (par défaut)
implementation fileTree(include: ['*.jar'], dir: 'libs')
ajoutez simplement '*.aar'
dans le tableau include
.
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
cela fonctionne bien sur Android Studio 3.x.
si vous voulez ignorer une bibliothèque? fait comme ça.
implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
Vous pouvez ajouter plusieurs dépendances aar
avec seulement quelques lignes de code.
Ajouter un référentiel flatDir
local:
repositories {
flatDir {
dirs 'libs'
}
}
Ajoutez chaque aar
dans le répertoire libs
à la configuration de dépendance compile
:
fileTree(dir: 'libs', include: '**/*.aar')
.each { File file ->
dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}
Je viens de réussir!
Copiez le fichier mylib-0.1.aar dans le dossier libs/.
Ajoutez ces lignes au bas de build.gradle (devrait être app, pas projet):
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.example.lib:mylib:0.1@aar'
}
Jusqu'ici tout va bien. Voici le point le plus important:
Gradle doit accéder au réseau pour les dépendances, sauf si le mode hors connexion est activé.
Assurez-vous que vous avez activé le travail hors ligne à l'aide de la case à cocher dans Project Structures/Gradle.
- OR -
Configurez les paramètres proxy afin d'accéder au réseau.
Pour configurer les paramètres de proxy, vous devez modifier le fichier gradle.properties du projet, en configurant séparément http et https comme suit:
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>
J'espère que ça marche.
Malheureusement, aucune des solutions ici ne fonctionnait pour moi (j'ai des dépendances non résolues). Ce qui a finalement fonctionné et qui est le moyen le plus simple à mon humble avis est: Mettez en surbrillance le nom du projet depuis Android Studio, puis Fichier -> Nouveau module -> Importer le package JAR ou AAR. Le crédit va à la solution dans ce post
J'ai aussi eu ce problème. Ce numéro de rapport: https://code.google.com/p/Android/issues/detail?id=55863 semble suggérer que la référence directe au fichier .AAR n'est pas prise en charge.
Peut-être que l'alternative pour l'instant est de définir la bibliothèque actionbarsherlock en tant que bibliothèque Gradle dans le répertoire parent de votre projet et de la référencer en conséquence.
La syntaxe est définie ici http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library
Il y a 2 façons:
1: Ouvrez votre Android Studio et accédez à la fenêtre "Créer un nouveau module" par Fichier-> Nouveau-> Nouveau module ...
2: Sélectionnez l’item "Importer .JAR/.AAR Package" et cliquez sur le bouton Suivant
3: Ajoutez une dépendance dans le fichier build.gradle
appartenant à votre app
Modlue.
dependencies {
...
implementation project(path: ':your aar lib name')
}
que tout.
1 Créez un dossier dans le répertoire libs
, tel que aars
.
2 Placez votre aar lib dans le dossier aars.
3 Ajoutez l'extrait de code
repositories {
flatDir {
dirs 'libs/aars'
}
}
dans votre fichier build.gradle
appartiennent au module d'application.
4 Ajoutez une dépendance dans le fichier build.gradle
appartenant à votre app
Modlue.
dependencies {
...
compile(name:'your aar lib name', ext:'aar')
}
que tout
si vous savez lire le chinois, vous pouvez consulter le blog 是 AAR 文件 以及 如何 Android 中 使用
Dans mon cas, il y a des dépendances dans ma bibliothèque et lorsque je crée une variable aar
, j'ai échoué à cause des dépendances manquantes. Ma solution consiste donc à ajouter toutes les dépendances de ma bibliothèque avec un fichier arr
.
Donc, mon niveau de projet build.gradle
a l'air si:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.1.2'
}
}
allprojects {
repositories {
mavenCentral()
//add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
build.gradle(modile app)
so:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.sampleapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//your project depencies
...
//add lib via aar-depency
compile(name: 'aarLibFileNameHere', ext: 'aar')
//add all its internal depencies, as arr don't have it
...
}
et bibliothèque build.gradle
:
apply plugin: 'com.Android.library'
Android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//here goes library projects dependencies, which you must include
//in yours build.gradle(modile app) too
...
}
La méthode standard pour importer un fichier AAR dans une application est donnée dans https://developer.Android.com/studio/projects/Android-library.html#AddDependency
Cliquez sur Fichier> Nouveau> Nouveau module . Cliquez sur Importer le package .JAR/.AAR, puis cliquez sur Suivant . Entrez l'emplacement du fichier AAR ou JAR compilé, puis cliquez sur Terminer.
Veuillez vous référer au lien ci-dessus pour les prochaines étapes.
UPDATE Android STUDIO 3.4
J'ai trouvé cette solution de contournement dans le suivi des problèmes d'Android: https://code.google.com/p/Android/issues/detail?id=55863#c21
L'astuce (pas une solution) consiste à isoler vos fichiers .aar dans un sous-projet et à ajouter vos bibliothèques en tant qu'artefacts:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))
Plus d'infos: Gestion des dépendances transitives-pour-artefacts-locaux-jars-and-aar
Juste pour simplifier la réponse
Si le fichier .aar est présent localement, incluezcompile project(':project_directory')
dans les dépendances de build.gradle de votre projet.
Si le fichier .aar est présent à distance, incluez compile 'com.*********.sdk:project_directory:0.0.1@aar'
dans les dépendances de build.gradle de votre projet.
Avec Android Studio 3.4 et Gradle 5, vous pouvez simplement le faire comme ceci
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
Dans mon cas, juste travailler quand j'ajoute "projet" pour compiler:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
vous pouvez faire quelque chose comme ça:
Placez vos bibliothèques locales (avec l'extension: .jar, .aar, ...) dans le dossier 'libs' (ou un autre si vous le souhaitez).
Dans build.gradle (niveau de l'application), ajoutez cette ligne dans les dépendances
implémentation fileTree (inclure: ['* .jar', '* .aar'], dir: 'libs')