Wie man externes aar-Paket mit dem neuen Gradle Android Build System manuell einbindet

Ich habe mit dem neuen Android-Build-System experimentiert und bin auf ein kleines Problem gestoßen. Ich habe mein eigenes aar-Paket von ActionBarSherlock zusammengestellt, das ich ‘actionbarsherlock.aar’ genannt habe. Was ich versuche, ist, dieses AAR zu benutzen, um meine letzte APK zu erstellen. Wenn ich die gesamte ActionBarSherlock-Bibliothek als android-Bibliotheksmodul mit compile project (‘: actionbarsherlock’) in mein Hauptprojekt einbinde, kann ich erfolgreich ohne Probleme bauen.

Aber mein Problem ist, dass ich diese Abhängigkeit als aar-Dateipaket MANUELL bereitstellen möchte, nur wenn ich ein JAR wäre, dann kann ich nicht herausfinden, wie ich es richtig in mein Projekt aufnehmen kann. Ich habe versucht, die Kompilierungskonfiguration zu verwenden, aber das scheint nicht zu funktionieren. Ich bekomme weiterhin kein Symbol während der Kompilierung, was mir sagt, dass die classes.jar aus dem aar-Paket nicht in den classnpfad aufgenommen wird.

Kennt jemand die Syntax, um ein aar-Paket manuell als Datei einzuschließen?

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" } 

Bearbeiten: Also die Antwort ist, dass es derzeit nicht unterstützt wird, hier ist das Problem, wenn Sie es verfolgen möchten.

EDIT: Derzeit, da dies immer noch nicht direkt unterstützt wird, scheint die beste Lösung die von @RanWakshlak vorgeschlagene Lösung zu sein

BEARBEITEN: Auch einfacher, indem Sie die von @VipulShah vorgeschlagene Syntax verwenden

Bitte folgen Sie den nachstehenden Schritten, um es zum Laufen zu bringen (Ich habe es bis Android Studio 2.2 getestet)

Nehmen wir an, Sie haben die aar-Datei im libs-Ordner gespeichert. (angenommen Dateiname ist cards.aar )

Dann geben Sie in App build.gradle Folgendes an und klicken Sie auf Sync-Projekt mit Gradle-Dateien. Öffnen Sie die Projektebene build.gradle und fügen Sie flatDir{dirs 'libs'} wie unten hinzu

 allprojects { repositories { jcenter() flatDir { dirs 'libs' } } } 

Öffnen Sie jetzt die Datei .aar App-Ebene und fügen Sie die .aar Datei hinzu

  dependencies { compile(name:'cards', ext:'aar') } 

Wenn alles gut geht, sehen Sie, dass der Bibliothekseintrag in build -> exploded-aar erfolgt

Beachten Sie außerdem Folgendes: Wenn Sie eine .aar-Datei aus einem anderen Projekt mit Abhängigkeiten importieren, müssen Sie diese ebenfalls in Ihre build.gradle-Datei aufnehmen.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie “Moduleinstellungen öffnen” .

Öffnen Sie die Moduleinstellungen

  1. Klicken Sie auf die Schaltfläche “+” in der oberen linken Ecke des Fensters, um ein neues Modul hinzuzufügen.

Neues Modul hinzufügen

  1. Wählen Sie “Import .JAR oder .AAR Package” und klicken Sie auf “Next” .

Importieren Sie AAR

  1. Suchen Sie die AAR-Datei mit dem Auslassungssymbol “…” neben dem Feld “Dateiname”.

Finde die AAR-Datei

  1. Lassen Sie das Modul der App ausgewählt und klicken Sie auf den Bereich Abhängigkeiten , um das neue Modul als Abhängigkeit hinzuzufügen.

Bereich Abhängigkeiten

  1. Verwenden Sie die Schaltfläche “+” des Beziehungsfensters und wählen Sie “Modulabhängigkeit” .

Fügen Sie eine Modulabhängigkeit hinzu

  1. Wählen Sie das Modul und klicken Sie auf “OK” .

Wählen Sie ein Modul

Sie können auf eine AAR-Datei aus einem Repository verweisen. Maven ist eine Option, aber es gibt eine einfachere Lösung: Legen Sie die aar-Datei in Ihr libs-Verzeichnis und fügen Sie ein Verzeichnis-Repository hinzu.

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

Dann referenziere die Bibliothek im Abhängigkeitsbereich:

 dependencies { compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' } 

Sie können Min’an Blog Post für weitere Informationen besuchen.

Der folgende Ansatz funktioniert mit dem neuesten Android-Studio (> v0.8.x):

  • Speichern Sie die aar Datei im libs Ordner des App-Moduls (zB: //libs/myaar.aar )

  • Fügen Sie den folgenden Code zu build.gradle Ihres “app” Modulordners hinzu (nicht Ihr Projekt root build.gradle). Beachten Sie den Namen in der Kompilierzeile, es ist myaar @ aar nicht myaar.aar.

     dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatDir{ dirs 'libs' } } 
  • Klicken Sie auf Tools -> Android -> Sync Project with Gradle Files

Der Verweis auf eine lokale .aar-Datei wird derzeit nicht unterstützt (wie von Xavier Ducrochet bestätigt).

Stattdessen können Sie ein lokales Maven-Repository einrichten (viel einfacher als es klingt) und von dort auf das .aar verweisen.

Ich habe einen Blogpost geschrieben, in dem beschrieben wird, wie es hier funktioniert:

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

Sie können mehrere aar Abhängigkeiten mit nur wenigen Codezeilen hinzufügen.

Fügen Sie das lokale flatDir Repository hinzu:

 repositories { flatDir { dirs 'libs' } } 

Fügen Sie jedes aar im libs Verzeichnis hinzu, compile Abhängigkeitskonfiguration zu compile :

 fileTree(dir: 'libs', include: '**/*.aar') .each { File file -> dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0.. 

Ich bin gerade erfolgreich!

  1. Kopieren Sie die Datei mylib-0.1.aar in den Ordner libs /

  2. Fügen Sie diese Zeilen am Ende von build.gradle hinzu (sollte App, nicht Projekt sein):

     repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' } 
  3. So weit, ist es gut. Hier kommt der wichtigste Punkt:

Gradle muss für Abhängigkeiten auf das Netzwerk zugreifen, sofern der Offline-Modus nicht aktiviert ist.

Stellen Sie sicher, dass Sie Offline arbeiten über das Kontrollkästchen in Projektstrukturen / Gradle aktiviert haben

— ODER —

Konfigurieren Sie die Proxy-Einstellungen, um auf das Netzwerk zuzugreifen.

Um die Proxy-Einstellungen zu konfigurieren, müssen Sie die Datei gradle.properties des Projekts ändern, indem Sie http und https wie folgt separat konfigurieren:

 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  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  

Hoffe, das funktioniert.

Leider hat keine der Lösungen hier für mich funktioniert (ich bekomme ungetriggerse Abhängigkeiten). Was schließlich funktioniert und ist der einfachste Weg IMHO ist: Markieren Sie den Projektnamen aus Android Studio, dann Datei -> Neues Modul -> JAR oder AAR-Paket importieren. Kredit geht an die Lösung in diesem Post

vorher (Standard)

 implementation fileTree(include: ['*.jar'], dir: 'libs') 

'*.aar' einfach '*.aar' im include Array hinzu.

 implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') 

Es funktioniert gut in Android Studio 3.x.

Ich hatte auch dieses Problem. Dieser Problembericht: https://code.google.com/p/android/issues/detail?id=55863 scheint darauf hinzuweisen, dass die direkte Bezugnahme auf die .AAR-Datei nicht unterstützt wird.

Vielleicht ist die Alternative jetzt, die actionbarsherlock-Bibliothek als Gradle-Bibliothek im übergeordneten Verzeichnis Ihres Projekts zu definieren und entsprechend darauf zu verweisen.

Die Syntax ist hier definiert http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-Alibrary

In meinem Fall habe ich einige Abhängigkeiten in meiner Bibliothek und wenn ich ein aar daraus erstelle, scheiterte ich wegen verpasster Abhängigkeiten, also ist meine Lösung, alle Abhängigkeiten von meiner lib mit einer arr Datei hinzuzufügen.

Also meine Projektebene build.gradle sieht so aus:

 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) also:

 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 ... } 

und Bibliothek 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 ... } 

Ich habe versucht alle Lösung hier, aber keine funktioniert, dann .aar ich, dass ich einen Fehler gemacht habe, legte ich die .aar in falschen Ordner, wie Sie unten sehen können, ich dachte, ich sollte in Root-Ordner, so dass ich einen libs Ordner dort ( 1 im Bild), aber innerhalb des App-Ordners gibt es bereits eine libs , du solltest zweite libs , hoffe diese hilft denen, die dasselbe Problem haben wie ich:

Bildbeschreibung hier eingeben

Die Standardmethode zum Importieren einer AAR-Datei in eine Anwendung finden Sie unter https://developer.android.com/studio/projects/android-library.html#AddDependency

Klicken Sie auf Datei> Neu> Neues Modul. Klicken Sie auf Import .JAR / .AAR Package und dann auf Weiter. Geben Sie den Speicherort der kompilierten AAR- oder JAR-Datei ein und klicken Sie auf Fertig stellen.

Bitte beachten Sie den obigen Link für die nächsten Schritte.

Es gibt 2 Möglichkeiten:

  • Erster Weg

1: Öffnen Sie Ihr Android Studio und navigieren Sie zum Fenster “Create New Module” über Datei-> New-> New Module …

Bildbeschreibung hier eingeben

2: Wählen Sie den Punkt “Import .JAR / .AAR Package” und klicken Sie auf Next

3: Fügen Sie Abhängigkeit in build.gradle Datei hinzu, die zu Ihrer app gehören.

 dependencies { ... implementation project(path: ':your aar lib name') } 

das alles.

  • zweiter Weg

1 Erstellen Sie einen Ordner im Verzeichnis libs , z. B. aars .

2 Setzen Sie Ihre AAR-Lib in den AARS-Ordner.

3 Fügen Sie das Code-Snippet hinzu

repositories { flatDir { dirs 'libs/aars' } }

in Ihre build.gradle Datei gehören zum App-Modul.

4 Fügen Sie Abhängigkeit in build.gradle Datei, die zu Ihrer app gehören, hinzu.

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

das alles

Wenn Sie Chinesisch lesen können, können Sie den Blog 什么 是 AAR 文件 以及 如何 在 Android 开发 中 使用 überprüfen

Ich habe diese Problemumgehung im Android Issue Tracker gefunden: https://code.google.com/p/android/issues/detail?id=55863#c21

Der Trick (keine Lösung) besteht darin, Ihre .aar-Dateien in ein Unterprojekt zu isolieren und Ihre Bibliotheken als Artefakte hinzuzufügen:

 configurations.create("default") artifacts.add("default", file('somelib.jar')) artifacts.add("default", file('someaar.aar')) 

Weitere Informationen: Handling-transitive-Abhängigkeiten-für-lokale-Artefakte-jars-and-aar

Nur um die Antwort zu vereinfachen

Wenn die .aar-Datei lokal vorhanden ist, schließen Sie sie ein
compile project(':project_directory') in Abhängigkeiten von build.gradle deines Projekts.

Wenn die .aar-Datei auf der Remote vorhanden ist, fügen Sie compile 'com.*********.sdk:project_directory:0.0.1@aar' in die Abhängigkeiten von build.gradle Ihres Projekts ein.

In meinem Fall arbeite ich nur, wenn ich “Projekt” hinzufüge, um zu kompilieren:

 repositories { mavenCentral() flatDir { dirs 'libs' } } dependencies { compile project('com.xx:x:1.0.0') }