wake-up-neo.com

Externes AAR-Paket mit dem neuen Gradle Android Build System manuell einbinden

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 

338
Miguel Lavigne

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.

597
Vipul Shah
  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Open Module Settings".

 Open module settings

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

 Add new module

  1. Wählen Sie "Import .JAR oder .AAR Package" aus und klicken Sie auf die Schaltfläche "Next".

 Import AAR

  1. Suchen Sie die AAR-Datei mit der Ellipsis-Schaltfläche "..." neben dem Feld "Dateiname".

 Find AAR file

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

 Dependencies pane

  1. Verwenden Sie die Schaltfläche "+" des Bildschirms "Abhängigkeiten" und wählen Sie "Modulabhängigkeit".

 Add module dependency

  1. Wählen Sie das Modul aus und klicken Sie auf "OK".

 Choose module

207
Oliver Kranz

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.

99
Ran Wakshlak

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

41
ashoke

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

20
Artiom Chilaru

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')
19
susemi99

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'])
}
17
mixel

Ich habe es gerade geschafft!

  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 sein, nicht Projekt):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:[email protected]'
    }
    
  3. 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.

16
Orhun D.

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

13
Nonos

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

6
user937783

Es gibt zwei Möglichkeiten:

  • Erster Weg

1: Öffnen Sie Ihr Android Studio und navigieren Sie über Datei-> Neu-> Neues Modul zum Fenster "Neues Modul erstellen". 

enter image description here

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.

  • zweiter Weg

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.

6
shusheng007

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

enter image description here

3
GMsoF

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

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.

3
garnet

UPDATE Android STUDIO 3.4

  1. Gehe zu Datei -> Projektstruktur

enter image description here

  1. Module und klicken Sie auf +

enter image description here

  1. Wählen Sie .aar-Paket importieren

enter image description here

  1. Finden Sie die .aar-Route

enter image description here

  1. Beenden Sie und Übernehmen und überprüfen Sie, ob das Paket hinzugefügt wurde

enter image description here

  1. Klicken Sie nun im App-Modul auf + und Modulabhängigkeit

enter image description here

  1. Überprüfen Sie das Bibliothekspaket und Ok

enter image description here

  1. Überprüfen Sie die hinzugefügte Abhängigkeit

enter image description here

  1. Und die Projektstruktur so

enter image description here

2
Álvaro Agüero

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

2
jiparis

Nur um die Antwort zu vereinfachen

Wenn die .aar-Datei lokal vorhanden ist, dann include
compile 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.

2
anupam_kamble

Mit Android Studio 3.4 und Gradle 5 können Sie das einfach so machen

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}
1
m0skit0

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')
}
0
josedlujan

sie können so etwas tun:

  1. Legen Sie Ihre lokalen Bibliotheken (mit der Erweiterung: .jar, .aar, ...) in den 'libs'-Ordner (oder einen anderen, wenn Sie möchten).

  2. Fügen Sie diese Zeile in build.gradle (App-Ebene) den Abhängigkeiten hinzu

    ImplementierungsdateiBaum (enthalten: ['* .jar', '* .aar'], Verzeichnis: 'libs')

0
nguyencse