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" nannte. Was ich versuche zu tun, ist, diese Aar tatsächlich zu benutzen, um meine endgültige APK zu erstellen. Wenn ich die gesamte ActionBarSherlock-Bibliothek als Android-Bibliotheksmodul mit Compile-Projekt (': actionbarsherlock') in mein Hauptprojekt einbeziehen, kann ich erfolgreich ohne Probleme bauen.
Aber mein Problem ist, dass ich diese Abhängigkeit als aar-Dateipaket bereitstellen möchte. Nur wenn ich ein JAR machen würde, kann ich nicht herausfinden, wie ich es richtig in mein Projekt einbeziehen kann. Ich habe versucht, die Kompilierungskonfiguration zu verwenden, aber das scheint nicht zu funktionieren. Ich kann während des Kompilierens kein Symbol finden, das besagt, dass die Datei classes.jar aus dem aar-Paket nicht in den Klassenpfad aufgenommen wird.
Kennt jemand die Syntax zum manuellen Einfügen eines AAR-Pakets als Datei?
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: Die Antwort ist also, dass es derzeit nicht unterstützt wird. Hier ist das Problem , wenn Sie es verfolgen möchten.
BEARBEITEN: Da dies immer noch nicht direkt unterstützt wird, scheint die von @RanWakshlak vorgeschlagene Lösung die beste Alternative zu sein
BEARBEITEN: Auch einfacher mit der von @VipulShah vorgeschlagenen Syntax
Bitte folgen Sie den unten stehenden Schritten, damit es funktioniert (Ich habe es bis zu Android Studio 2.2 getestet)
Nehmen wir an, Sie haben eine aar-Datei im libs-Ordner gespeichert. (Angenommen, der Dateiname ist cards.aar
)
dann in app build.gradle
geben Sie Folgendes an und klicken Sie auf Projekt mit den Gradle-Dateien synchronisieren . Öffnen Sie die Projektebene build.gradle und fügen Sie flatDir{dirs 'libs'}
wie folgt hinzu
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
Öffnen Sie jetzt die build.grdle-Datei auf App-Ebene und fügen Sie die .aar
-Datei hinzu
dependencies {
compile(name:'cards', ext:'aar')
}
Wenn alles gut geht, sehen Sie, dass der Eintrag der Bibliothek in build -> exploded-aar gemacht wird
Beachten Sie außerdem, dass Sie beim Importieren einer .aar-Datei aus einem anderen Projekt, das Abhängigkeiten hat, diese auch in Ihr build.gradle aufnehmen müssen.
Sie können auf eine AAR-Datei aus einem Repository verweisen. Maven ist eine Option, es gibt jedoch 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'
}
}
Verweisen Sie dann auf die Bibliothek im Abhängigkeitsbereich:
dependencies {
compile 'com.actionbarsherlock:actionbarsherlock:[email protected]'
}
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 Datei aar
im Ordner libs
des App-Moduls (zB: <project>/<app>/libs/myaar.aar
).
Fügen Sie unten im build.gradle Ihres "app" -Modulordners Folgendes hinzu (nicht im Projektstammbuild.gradle). Beachten Sie den Namen in der Kompilierzeile. Es ist myaar @ aar und nicht myaar.aar.
dependencies {
compile 'package.name.of.your.aar:[email protected]'
}
repositories{
flatDir{
dirs 'libs'
}
}
Klicken Sie auf Tools -> Android -> Sync Project with Gradle Files
Derzeit wird der Verweis auf eine lokale .aar-Datei 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 aus auf das .aar verweisen.
Ich habe einen Blogpost geschrieben, der beschreibt, wie man es hier zum Laufen bringt:
http://www.flexlabs.org/2013/06/gebrauchs-local-aar-Android-library-packages-in-gradle-builds
vorher (Standard)
implementation fileTree(include: ['*.jar'], dir: 'libs')
fügen Sie einfach '*.aar'
im include
-Array hinzu.
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
es funktioniert gut auf Android Studio 3.x.
wenn Sie eine Bibliothek ignorieren möchten? mach das so.
implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
Sie können mehrere aar
-Abhängigkeiten mit nur wenigen Codezeilen hinzufügen.
Lokales flatDir
-Repository hinzufügen:
repositories {
flatDir {
dirs 'libs'
}
}
Fügen Sie alle aar
im libs
-Verzeichnis der compile
-Abhängigkeitskonfiguration hinzu:
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'])
}
Ich habe es gerade geschafft!
Kopieren Sie die Datei mylib-0.1.aar in den Ordner libs/
Fügen Sie diese Zeilen am Ende von build.gradle hinzu (sollte app sein, nicht Projekt):
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.example.lib:mylib:[email protected]'
}
So weit, ist es gut. Hier kommt der wichtigste Punkt:
Gradle muss für Abhängigkeiten auf das Netzwerk zugreifen, es sei denn, der Offline-Modus ist aktiviert.
Stellen Sie sicher, dass Sie Offline-Arbeit über die Checkbox in Projektstrukturen/Gradle aktiviert haben.
- OR -
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 und http und https getrennt wie folgt 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 <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>
Hoffe das klappt.
Leider hat keine der Lösungen hier für mich funktioniert (ich bekomme ungelöste Abhängigkeiten). Was letztendlich funktionierte und der einfachste Weg ist, ist IMHO: Markieren Sie den Projektnamen aus Android Studio und wählen Sie dann Datei -> Neues Modul -> Import JAR oder AAR Package. Gutschrift geht an die Lösung in dieser Beitrag
Ich hatte auch dieses Problem. Dieser Problembericht: https://code.google.com/p/Android/issues/detail?id=55863 scheint zu vermuten, dass das direkte Verweisen auf die .AAR-Datei nicht unterstützt wird.
Vielleicht ist die Alternative jetzt, die actionbarsherlock-Bibliothek als Gradle-Bibliothek unter dem übergeordneten Verzeichnis Ihres Projekts zu definieren und entsprechend zu referenzieren.
Die Syntax wird hier definiert http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library
Es gibt zwei Möglichkeiten:
1: Öffnen Sie Ihr Android Studio und navigieren Sie über Datei-> Neu-> Neues Modul zum Fenster "Neues Modul erstellen".
2: Wählen Sie den Punkt "Import .JAR/.AAR-Paket" aus und klicken Sie auf die Schaltfläche "Weiter"
3: Fügen Sie in build.gradle
-Datei eine Abhängigkeit hinzu, die zu Ihrer app
Modlue gehört.
dependencies {
...
implementation project(path: ':your aar lib name')
}
das alles.
1 Erstellen Sie einen Ordner im libs
-Verzeichnis , wie aars
.
2 Legen 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 in build.gradle
-Datei eine Abhängigkeit hinzu, die zu Ihrer app
Modlue gehört.
dependencies {
...
compile(name:'your aar lib name', ext:'aar')
}
das alles
wenn Sie Chinesisch lesen können ,, können Sie den Blog 是 是 AAR 文件 以及 如何 在 Android 开发 中 使用 lesen.
Ich habe hier alle Lösungen ausprobiert, aber keine funktioniert. Dann ist mir klar, dass ich einen Fehler gemacht habe. Ich habe das .aar
im falschen Ordner, wie Sie unten sehen können, dachte ich, ich sollte im Stammordner ablegen, also habe ich dort einen libs
-Ordner erstellt (1 im Bild), aber innerhalb des App-Ordners gibt es bereits einen libs
, du solltest den zweiten libs
eingeben, hoffe das hilft denen, die das gleiche Problem haben wie ich
In meinem Fall habe ich einige Abteilungen in meiner Bibliothek, und wenn ich eine aar
von ihr erstellt habe, bin ich wegen fehlender Ablagen fehlgeschlagen. Daher besteht meine Lösung darin, alle Abteilungen aus meiner Bibliothek mit einer arr
-Datei hinzuzufügen.
So sieht mein Projektlevel build.gradle
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)
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
...
}
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
...
}
Die Standardmethode zum Importieren von AAR-Dateien in einer Anwendung finden Sie unter https://developer.Android.com/studio/projects/Android-library.html#AddDependency
Klicken Sie auf Datei> Neu> Neues Modul . Klicken Sie auf Importieren .JAR/.AAR-Paket 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 Link oben für die nächsten Schritte.
UPDATE Android STUDIO 3.4
Ich habe diese Problemumgehung im Android-Ausgaben-Tracker gefunden: https://code.google.com/p/Android/issues/detail?id=55863#c21
Der Trick (kein Fix) besteht darin, Ihre .aar-Dateien in einem 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: Umgang mit transitiven Abhängigkeiten für lokale Artefakte-Jars-and-aar
Nur um die Antwort zu vereinfachen
Wenn die .aar-Datei lokal vorhanden ist, dann includecompile project(':project_directory')
in Abhängigkeiten von build.gradle Ihres Projekts.
Wenn die .aar-Datei bei remote vorhanden ist, fügen Sie compile 'com.*********.sdk:project_directory:[email protected]'
in die Abhängigkeiten von build.gradle Ihres Projekts ein.
Mit Android Studio 3.4 und Gradle 5 können Sie das einfach so machen
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
In meinem Fall arbeite ich einfach, wenn ich "Projekt" zum Kompilieren hinzufüge:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
sie können so etwas tun:
Legen Sie Ihre lokalen Bibliotheken (mit der Erweiterung: .jar, .aar, ...) in den 'libs'-Ordner (oder einen anderen, wenn Sie möchten).
Fügen Sie diese Zeile in build.gradle (App-Ebene) den Abhängigkeiten hinzu
ImplementierungsdateiBaum (enthalten: ['* .jar', '* .aar'], Verzeichnis: 'libs')