5

Mit der neuesten Version 4.0.0-rc.1 des Maven Android Plugins scheinen einige Klassen im Build zu fehlen. Ich erhalte eine jener Ausnahmen, wenn ich die app (zwei Möglichkeiten, die App zu starten) starten:NoClassDefFoundError mit Android Support Library und Maven

  • java.lang.NoClassDefFoundError: android.support.v4.app.TaskStackBuilderHoneycomb
  • java.lang.NoClassDefFoundError : android.support.v4.widget.EdgeEffectCompatIcs

Beide fehlenden Klassen sind Innenstütz-v4-21.0.0.aar/libs/internal_impl-21.0.0.jar.

Meine Abhängigkeitsdefinition:

<dependency> 
     <groupId>com.android.support</groupId> 
     <artifactId>support-v4</artifactId> 
     <version>21.0.0</version> 
     <type>aar</type> 
    </dependency> 

Ist das einige Konfigurationsfehler? Ein Fehler im Android Maven Plugin?

+1

Ich kann bestätigen, dass beide Klassen vorhanden sind, wenn Sie 'support-v4-21.0.0 'über Gradle ziehen. –

+0

Ich zweite, was Thomas Keller sagte, es funktioniert gut mit Gradle, aber nicht Maven, ich habe versucht herauszufinden, warum seit Stunden bereits, hier ist die Frage, die ich eingereicht android maven Plugin Repo: https: // github.com/jayway/maven-android-plugin/issues/484 – jianinz

+0

Das Logcat zeigt, dass der DexOut keine Aufrufe von classes.jar an internal_impl-21.0.0.jar leiten kann. Das maven android plugin scheint erfolgreich alle Abhängigkeiten von aar zu extrahieren und zu paketieren. Wenn Sie sich den 'target/unpacked-libs/cas_support-v4'-Ordner angesehen haben, hat er alles, was wir brauchen. – jianinz

Antwort

0

fand ich eine vorübergehende Lösung:

  • cp support-v4-21.0.0.aar ~/Desktop
  • cd ~/Desktop && mv support-v4-21.0.0.aar support-v4-21.0.0.jar
  • jar xf support-v4-21.0.0.jar

dann internal_impl-21.0.0.jar aus libs Ordner ziehen und zu Ihrem eigenen artifactory hochladen, wenn Sie welche haben, und Ändern Sie Ihre Pom-Datei, es sollte funktionieren, wenn Sie nicht Ihr eigenes Artefakt haben, dann fügen Sie es hinzu i nto Klassenpfad.

Das funktioniert für mich.

10

Sie benötigen die folgende Konfiguration in der pom setzen:

<includeLibsJarsFromAar>true</includeLibsJarsFromAar> 

So wird es in etwa so aussehen:

<plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <extensions>true</extensions> 
    <configuration> 
     //... 
     <includeLibsJarsFromAar>true</includeLibsJarsFromAar> 
     //... rest of config 
    </configuration>  
</plugin> 

Der Grund für diese Änderung ist, dass Google beschlossen, Gläser in den aar, die eine schlechte Praxis der Abhängigkeiten ist zu setzen. Wenn Sie die Version oder etwas anderes ersetzen möchten, ist dies derzeit nicht möglich. Kurz gesagt, es macht Abhängigkeiten viel schwieriger zu verwalten.

Diese Einstellung wird standardmäßig auf "false" gesetzt, um das Erstellen von aars mit jars im libs-Ordner zu verhindern.

Update:

Mit der neuesten Android-Maven-Plugin (jetzt 4.1.1 bald 4.2.0) dieses Flag standardmäßig auf true gesetzt ist, so dass Sie es nicht mehr benötigen hinzuzufügen.

+0

Danke! Ich habe es versucht, es funktioniert gut! Eine weitere Frage, da support-v4 und support-v13 aar-Pakete mit libs-Ordner kommen, wo es den ** gleichen ** JAR-Dateinamen internal_impl-21.0.0.jar enthält, wird maven-shade-Plugin einen von beiden herausfiltern sie werden benutzt? Sie wissen, Anwendung enthält Bibliothek, die Support-v4 in? – jianinz

+0

Wurde in dasselbe Problem wie Thema Starter mit "Klassendatei für android.support.v4.widget.DrawerLayoutImpl nicht gefunden". Dies hat es reibungslos behoben. – riwnodennyk

Verwandte Themen