541 Stimmen

Wie man manuell ein externes AAR-Paket unter Verwendung von Gradle für Android 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 kompiliert, das ich 'actionbarsherlock.aar' genannt habe. Was ich versuche zu tun, ist eigentlich, dieses aar zu verwenden, um meine endgültige APK zu erstellen. Wenn ich die gesamte ActionBarSherlock-Bibliothek als Android-Bibliotheksmodul zu meinem Hauptprojekt hinzufüge, indem ich 'compile project (':actionbarsherlock')' verwende, kann ich erfolgreich ohne Probleme kompilieren.

Aber mein Problem ist, dass ich diese Abhängigkeit als aar-Paket MANUELL bereitstellen möchte, genauso wie bei einem JAR, dann kann ich anscheinend 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 erhalte während der Kompilierung immer "cannot find symbol", was mir sagt, dass die classes.jar aus dem aar-Paket nicht in den Klassenpfad einbezogen wird.

Weiß jemand, wie die Syntax ist, um ein aar-Paket manuell als Datei einzubinden?

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: Die Antwort lautet, dass dies 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 Alternative die vorgeschlagene Lösung von @RanWakshlak zu sein

EDIT: Auch einfacher durch die Verwendung der Syntax, die von @VipulShah vorgeschlagen wurde

7voto

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

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

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

4voto

garnet Punkte 531

Der Standardweg, um eine AAR-Datei in einer Anwendung zu importieren, ist unter https://developer.android.com/studio/projects/android-library.html#AddDependency gegeben

Klicken Sie auf Datei > Neu > Neues Modul. Klicken Sie auf Import .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 befolgen Sie den oben genannten Link für die nächsten Schritte.

4voto

Sam YC Punkte 9375

Ich habe alle Lösungen hier ausprobiert, aber keine funktioniert, dann ist mir aufgefallen, dass ich einen Fehler gemacht habe, ich habe die .aar in den falschen Ordner gelegt, wie Sie unten sehen können, ich dachte, ich sollte sie im Stammordner ablegen, also habe ich dort einen libs-Ordner erstellt (1 im Bild), aber im App-Ordner gibt es bereits einen libs-Ordner, Sie sollten sie in den zweiten libs-Ordner legen, ich hoffe, das hilft denen, die dasselbe Problem haben wie ich:

Bildbeschreibung hier eingeben

4voto

mohax Punkte 4305

In meinem Fall habe ich einige Abhängigkeiten in meiner Bibliothek, und wenn ich ein aar daraus erstelle, schlägt es fehl, wegen fehlender Abhängigkeiten. Meine Lösung ist also, alle Abhängigkeiten aus meiner Bibliothek mit einer arr-Datei hinzuzufügen.

Also sieht mein Projekt-Level build.gradle so aus:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //Fügen Sie dies hinzu, um Abhängigkeiten zu aar-Dateien aus dem libs-Ordner in build.gradle(yoursAppModule) hinzufügen zu können
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(module 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 {
    //Ihre Projekt-Abhängigkeiten
    ...
    //Fügen Sie die Bibliothek über die aar-Abhängigkeit hinzu
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //Fügen Sie alle internen Abhängigkeiten hinzu, da arr sie nicht hat
    ...
}

Und die 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')
    //Hier kommen die Bibliotheksabhängigkeiten der Projekte hin, die Sie auch in Ihrem build.gradle(module app) hinzufügen müssen
    ...
}

4voto

jiparis Punkte 51

Ich habe diesen Workaround 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 libs als Artefakte hinzuzufügen:

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

Weitere Informationen: Handling-transitive-dependencies-for-local-artifacts-jars-and-aar

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X