2014-04-13 12 views
5

Hallo Ich habe ein Android-Bibliotheksprojekt, das eine AAR produziert.Android-Bibliothek AAR abhängig von einer anderen Bibliothek

Alles ist gut, aber wenn ich das AAR in einem anderen Projekt verwenden bekomme ich diesen Fehler:

java.lang.NoClassDefFoundError: com.squareup.picasso.Picasso 

Die AAR Verwendung von picasso macht, ist es möglich, die Abhängigkeiten der AAR als auch exportiert werden, wenn ein Erzeugen ?

+0

Wie sind Sie mit der AAR im anderen Projekt? – CommonsWare

+0

So: 'Repositorys { flatDir { dirs 'libs'} mavenCentral() }' und dann mit ihnen die üblichen groupId Format – redDragonzz

+0

Dies soll das erwartete Verhalten nehme ich an sein: https: // groups.google.com/forum/#!topic/adt-dev/ZZ8AVUZVw! Ich denke, ich muss das Picasso-Glas herunterladen und dann wird Gradle es automatisch einschließen, sonst tut es nicht. Werde es versuchen und eine Antwort posten – redDragonzz

Antwort

6

How can one go about setting up a local maven repo.

WARNUNG: das folgende Rezept funktioniert, aber wahrscheinlich Verbesserung verwenden konnte, wie ich weit von einem Maven Experte bin. Diesen Ansatz habe ich letztes Jahr für meine CWAC-Bibliotheken ausgearbeitet.

Schritt # 1: Fügen Sie classpath 'com.github.dcendents:android-maven-plugin:1.0' zu Ihrem buildscriptdependencies Block in Ihrer Bibliothek build.gradle-Datei des Projekts. Fügen Sie auch version und group Anweisungen hinzu, um diese Informationen zu Ihrem AAR bereitzustellen.

Schritt # 2: Verwenden Sie gradle install, um das AAR zu kompilieren und es im lokalen Maven-Standardrepository zu installieren.

Schritt # 3: Normalerweise würden Sie mavenLocal() zum dependencies Block Ihres Anwendungsprojekts hinzufügen, um den AAR über seine Artefakt-ID abzurufen. Das könnte wieder funktionieren, obwohl es für ein bisschen gebrochen war. Verwenden Sie stattdessen maven { url "${System.env.HOME}/.m2/repository" } als eine kurzfristige Problemumgehung.

So zum Beispiel Ihre Bibliotheksprojekt build.gradle Datei enthält möglicherweise:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.9.+' 
     classpath 'com.github.dcendents:android-maven-plugin:1.0' 
    } 
} 

apply plugin: 'android-library' 
apply plugin: 'android-maven' 

version '0.4.0' 
group 'some.likely.group.name.goes.here' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'com.squareup.picasso:picasso:2.2.0' 
    compile fileTree(dir: 'libs', include: '*.jar') 
} 

android { 
    // as normal 
} 

Sie gradle install verwenden würde die JAR auf Ihrem lokalen Maven-Repo zu veröffentlichen. Ihr Anwendungsprojekt würde dann die folgenden Sachen in seinem build.gradle:

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

apply plugin: 'android' 

repositories { 
    mavenCentral() 
    maven { url "${System.env.HOME}/.m2/repository" } // mavenLocal() 
} 

dependencies { 
    compile 'some.likely.group.name.goes.here:name-of-library:0.4.0' 
} 

android { 
    // as normal 
} 

, wo Sie ersetzen:

  • some.likely.group.name.goes.here mit etwas

  • 0.4.0 mit einer Versionsnummer in XYZ-Format

  • name-of-library wird der Verzeichnisname sein enthält das Android-Bibliothek-Projekt (beispielsweise presentation oder foo)

+0

Eine wichtige Sache zu beachten für jeden, der immer noch diese Methode verwendet, wie ich bin: Dies wurde seitdem für neuere Gradle-Versionen aktualisiert. Bitte beziehen Sie sich auf den neuen GitHub hier: https://github.com/dcendents/android-maven-gradle-plugin und stellen Sie sicher, dass Gradle mindestens 2.4 ist, indem Sie 'gradle-wrapper.properties' mit den folgenden Anweisungen ändern: http: // tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0 – anddev84

+0

Bitte verwenden Sie 'grdle install'? Ich installierte Gradle für Java auf Windows und versuchte 'Gradle installieren', ich habe diesen Fehler 'Task' installieren 'nicht im Root-Projekt' bin' gefunden. –

+0

@WilliamKinaan: Diese Antwort ist 2,5 Jahre alt. Ich empfehle eine neuere Lösung zu finden. – CommonsWare

Verwandte Themen