Also versuche ich , Software zu veröffentlichen, aber Proguard bereitet mir Kopfschmerzen.
Wenn ich versuche, mit Proguard zu exportieren, erhalte ich viele Warnungen, z. B. "Referenzierte Klasse kann nicht gefunden werden"
Beispielsweise:
[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME] You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME] or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[
Die Warnungen scheinen sich auf simpleframework zu beziehen, daher habe ich in meiner Proguard-Konfigurationsdatei Folgendes hinzugefügt:
-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar
Wo pathtoprojecttolibs
ist der Weg zu Gläsern, auf die mein Projekt verweist?
Dies macht keinen Unterschied.
Wenn simpleframework auf javax verweist, kann ich proguard anweisen, dies auch zu ignorieren?
Irgendwelche Ideen?
Antworten:
org.simpleframework.xml.stream.StreamReader
in Ihrem Code bezieht sich aufjavax.xml.stream.events.XMLEvent
. Die letztere Klasse ist Teil der Java-Laufzeit (rt.jar
), aber nicht Teil der Android-Laufzeit (android.jar
). Daher warnt ProGuard, dass möglicherweise etwas kaputt geht. Wenn Sie sicher sind, dass Ihre Anwendung trotzdem funktioniert, können Sie angebenProGuard Hölle?
quelle
-dontwarn javax.xml.**
-libraryjars <java.home>/lib/rt.jar
das Problem für mich behoben.-dontwarn javax.xml.stream.**
-dontwarn
die GUI singen?In meinem Fall war die Grundursache hier . Diese Warnungen können Sie einfach überspringen mit:
Die ursprüngliche Antwort ist hier
quelle
Dieser Fehler tritt auf, weil die von Ihnen verwendeten Bibliotheken von anderen Bibliotheken abhängen, die nicht wirklich verwendet werden, aber Proguard nach ihnen sucht.
Fügen Sie Ihre -dontwarn- Zeilen zu Ihrer proguard-rules.pro- Datei in Ihrem Android-Projekt hinzu, um diese Warnungen zu deaktivieren.
Welche Abhängigkeiten Sie zu proguard-rules.pro hinzufügen müssen, finden Sie im Stacktrace Ihres Fehlers.
quelle
Sie sollten dies in Ihre Proguard-Konfiguration aufnehmen:
quelle
Mein magischer Schlüssel, der meine stundenlangen Suchvorgänge gelöst hat: Fügen Sie diesen zuprogruard-android.txt hinzu
quelle
Hmm. Wenn Sie diese Warnung lesen, scheint die Bibliothek, die Sie verwenden möchten, von javax.xml.stream.events abhängig zu sein. Ich glaube nicht, dass der Namespace überhaupt in Android enthalten ist. (Siehe Paketindex ).
Versuchen Sie, es ohne Proguard auf dem Emulator bereitzustellen, und prüfen Sie, ob es funktioniert. Meine Vermutung wäre nein, wenn diese Warnung korrekt ist.
quelle
Ich denke, dies ist ein Randfall, aber in meinem Fall musste ich den Build-Ordner auf meinem Jenkins-Proguard vollständig löschen und versuchte, mit altem Code zu arbeiten, der nicht mehr vorhanden war - nur für den Fall, dass jemand das gleiche Problem hat.
quelle
In meinem Fall habe ich nichts geändert und die Warnung wurde angezeigt. Das Problem war mit kaputten Gradle-Caches. Überprüfen Sie meine andere Antwort . Ich teile dies, weil ich 2 Stunden gebraucht habe, um das Problem zu finden:]
quelle
Fügen Sie diese Zeile Ihrer
proguard-rules.pro
Datei im Verzeichnis gradle scripts hinzu:wo
package.class.name
ist der Paketname mit dem Klassennamen der angehängten JAR-Datei?Beispielsweise:
quelle