Bibliotheken werden nach dem Upgrade auf ADT 22 nicht mehr zu APK hinzugefügt

238

Ich habe ein ziemlich großes Android App-Projekt, das auf mehrere Bibliotheksprojekte verweist. Alles war in Ordnung, bis ich das Eclipse ADT-Plugin auf die neueste Version (v22) aktualisiert habe. Ich habe natürlich auch das SDK aktualisiert. Ich sehe keine Kompilierungsfehler in Eclipse, aber wenn ich das Projekt auf dem Telefon ausführe, erhalte ich einen NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

Die Arca-Bibliothek ist in einem der referenzierten Bibliotheksprojekte (im libs-Ordner) enthalten und ich kann sie in den "Android Private Libraries" im Paket-Explorer sehen, auch wie gesagt, keine Kompilierungsfehler. Das Projekt läuft einwandfrei auf allen anderen Computern, die ADT nicht aktualisiert haben.

Ich habe bereits eine ganze Reihe von Dingen ausprobiert, einschließlich, aber nicht beschränkt auf:

  • Installieren Sie das Android SDK erneut
  • Laden Sie ein neues ADT-Bundle herunter
  • lösche meinen ganzen Code und hol ihn dir wieder von git
  • Kopieren Sie die betreffende Bibliothek in das App-Projekt
  • Kommentieren Sie den Code aus, der diese Bibliothek verwendet - ich erhalte nur den gleichen Fehler für die nächste Bibliothek

alles ohne Erfolg, also werde ich hier wirklich verzweifelt.

Ich würde mich sehr freuen, wenn mir jemand einen Hinweis geben könnte, wie ich dieses Problem lösen kann.

Simon sagt
quelle

Antworten:

337

Zitiert Streets of Boston aus seinem Adt-Dev-Beitrag :

Beim Upgrade wird die Reihenfolge und der Export der neuen "Android Private Libraries" nicht immer überprüft. Und die android-support-v4.jar befindet sich jetzt in diesem Bereich "Android Private Libraries".

Um dies zu beheben, gehen Sie zu "Bestellen und Exportieren" und aktivieren Sie "Private Android-Bibliotheken". Dann aktualisieren / reinigen / neu erstellen.

Nachdem Sie diese Korrektur für ein Bibliotheksprojekt durchgeführt haben, müssen Sie möglicherweise jedes abhängige Projekt schließen und erneut öffnen, da diese Korrektur möglicherweise nicht sofort angezeigt wird.

Probieren Sie es aus und mit etwas Glück wird es Ihr Problem lösen.

Geben Sie hier die Bildbeschreibung ein

CommonsWare
quelle
32
CommonsWare ist wie immer einer der ersten Pioniere, vielen Dank! :)
Paul Wein
1
Jede neue ADT-Version ist eine neue Überraschung;) Ich hoffe, das neue Build-System wird besser. Vielen Dank, dass Sie CommonsWare
Lujop
3
Ist es nur ich oder klingt es falsch, wenn jeder Entwickler [der Eclipse und Bibliotheken verwendet] alle seine Bibliotheksprojekte aufruft und "Android Private Libraries" als exportiert markiert? Dies lässt mich denken, dass wir alle die Absicht falsch verstanden haben, dass Google diese neue "Funktion" überhaupt erst hinzufügt. Vielleicht sollten wir die Bibliotheken nicht als exportiert markieren. Vielleicht sollen wir fehlende JAR-Dateien direkt zu unserem Ordner "libs" hinzufügen. Beispiel: Dies würde es meinem Bibliotheksprojekt ermöglichen, die neueste Version von android-support-v4.jar [v13] zu verwenden, während ABS intern android-support-v4-12.jar verwendet.
Swooby
2
@swooby: "Bin ich es nur, oder klingt es falsch, wenn jeder Entwickler [der Eclipse und Bibliotheken verwendet] alle seine Bibliotheksprojekte aufruft und" Android Private Libraries "als exportiert markiert?" - Es ist "falsch", sofern es sich um einen Fehler handelt, der von den Personen anerkannt wurde, die die Tools geschrieben haben. "Vielleicht sollen wir fehlende JAR-Dateien direkt in unseren" libs "-Ordner einfügen" - oh, das müssen Sie auch tun, wie Sie es im letzten Jahr getan haben. Sie müssen dieses Kontrollkästchen jedoch noch aktivieren.
CommonsWare
9
@Phillip: AFAIK, es sind alles Projekte. Genauer gesagt, ich nehme an, es sind alles Projekte, in denen etwas enthalten ist libs/, aber Sie können es auch auf alles überprüfen, falls Sie libs/einige Monate später etwas hinzufügen und dies vergessen.
CommonsWare
10

Es reichte nicht aus, nur die privaten Bibliotheken von Android zu überprüfen. Außerdem musste ich die Android SDK Build-Tools im Android SDK Manager installieren .

Zaixer
quelle
Ich kann nicht bestätigen, dass dies erforderlich ist, aber ich habe den Fehler, auf den SimonSays vor der Installation gestoßen ist, nicht überwunden. Möglicherweise müssen nur die Export-Kontrollkästchen wie oben beschrieben richtig eingestellt werden. Ich sollte jedoch erwähnen, dass ich die Build Tools auf dem Weg installiert habe.
Strangeluck
das funktioniert bei mir. Es reicht nicht aus, nur die Eclipse-Einstellungen zu ändern. Möglicherweise müssen Sie die installierten Build-Tools im Android SDK-Manager überprüfen.
Stevens
4

Ich hatte auch das gleiche Problem und mein adtwar 22.0.1. Und keine der oben genannten Lösungen hat funktioniert. Wenn Sie einem Arbeitsprojekt ein externes Bibliotheksprojekt hinzufügen, überprüfe ich immer den genOrdner des Arbeitsprojekts. Wenn ein Rexternes Bibliotheksprojekt vorhanden ist (zusammen mit dem Paketnamen), wird nur ein externes Bibliotheksprojekt exportiert. Und in meinem genOrdner wurde keine packagenameexterne Bibliothek angezeigt.

Also habe ich die project.propertiesDatei überprüft und es war kein externer Bibliothekslink android.library.reference.1=vorhanden. Also habe ich dort manuell die externe Bibliotheksreferenz hinzugefügt, obwohl ich von hinzugefügt hatte project->properties->Java Build Path->Projects->Add. Das manuelle Bearbeiten hat also die project.propertiesganze Arbeit für mich erledigt.

Geben Sie hier die Bildbeschreibung ein

laaptu
quelle
1
Ich denke, es ist passiert, da der GUI-Ort nicht eingestellt android.library.reference.nist , sondern -> -> -> -> . Ein Gotcha . java build pathprojectpropertiesAndroidLibraryAdd...
n611x007
4

Ich bin auf ein ähnliches Problem gestoßen, habe ungefähr 3 Stunden verbracht, aber keine der hier vorgeschlagenen Entscheidungen hat nicht geholfen ... Schließlich habe ich eine Ursache für das Problem gefunden: Meine Projektdateien und project.properties waren schreibgeschützt. Eclipse ignoriert einfach stillschweigend alle Änderungen in den Bibliotheksabhängigkeiten, wenn ich dies in der GUI mache!

RedSoft
quelle
3

Ich hatte das gleiche Problem. Es war wegen des Eclipse-Projekts. Um dieses Problem zu lösen, habe ich ein neues Projekt in Eclipse erstellt, meine vorhandenen Projektklassen und Ressourcen in dieses Projekt kopiert, Eclipse erneut gestartet und meine benutzerdefinierten Includes hinzugefügt.

Asaf Pinhassi
quelle
1
Zu viel Aufwand, die Lösung von CommonsWare hat bei mir funktioniert, und ich glaube, sie hätte auch bei Ihnen funktioniert.
Bilthon
2

Ich hatte ein ähnliches Problem und meine Antwort unterscheidet sich geringfügig von der von CommonsWare. Hier ist mein Screenshot:

Geben Sie hier die Bildbeschreibung ein

Nachdem ich die Bibliotheken in meinem Build überprüft hatte, fing ich wieder an zu arbeiten.

Gilson
quelle
2
Ich würde mit dieser Lösung vorsichtig sein. Android Dependencieswurde durch ersetzt Android Private Librariesund ist möglicherweise nur aus alten Gründen noch vorhanden. Ich denke, es könnte jederzeit entfernt werden.
Simon sagt
0

Ich hatte auch das gleiche Problem,

i) Fügen Sie gson lib als Referenz-Librairies hinzu.
ii) Überprüfen Sie es in Java Build Path http://i.stack.imgur.com/Gldhs.png

Jeremy Piednoel
quelle