ProGuard Probleme

v Ralle v

Aktives Mitglied
Hallo,

ich habe ein ziemlich nerviges Problem mit ProGuard, wenn ich eine .jar shrinken will. Ich fasse meinen Standpunkt kurz zusammen:

Ich habe eine ausführbare Jar, die ist um die 50 KB groß. Nun habe ich noch eine Funktionalität hinzugefügt, mit der man .ppt, .pptx und .odp Files lesen kann. Für diese Funktion brauche ich insgesamt 9 Libraries, wodurch die .jar auf 16MB anwächst.

Das ist natürlich viel zu groß, weil ich wirklich nur ein paar Klassen benutzen, die allerdings Abhängigkeiten zu anderen Libraries haben. Nun habe ich versucht das ganze mit ProGuard zu verkleinern - ohne Erfolg.

Ich benutze Eclipse als IDE und weiß schon nicht richtig, wie ich es am besten exportieren muss. Ich habe die 3 Optionen die Libraries in die .jar zu extrahieren, sie einfach in die .jar zu legen oder in einen Ordner neben die .jar.

Bei der ersten Variante macht Proguard Probleme und das Shrinken klappt einfach nicht. Bei der zweiten lässt der die Libraries in der .jar ohne sie zu shrinken und bei der dritten shrinkt er die .jar, allerdings lässt er auch die Libraries daneben und ich hätte sie allerdings gerne in der .jar geshrinkt.


Wie soll ich am besten vorgehen? Mein Ziel ist es, dass mein Programm so klein wie möglich ist und wirklich nur die Klassen aus den Libraries enthält, die es braucht und der Rest einfach rausfliegt. Wenn es ein anderes kostenloses Programm gibt, dass das kann, wäre ich auch zufrieden :)

Ich danke für jeden Tip!!!


Ich hänge auch mal die Fehlermeldungen zur ersten Variante an, vielleicht helfen sie. Ich habe versucht die Libraries auch nochmal extra anzugeben, allerdings hat das auch nicht geholfen.

Code:
Warning: there were 10494 unresolved references to classes or interfaces.
         You may need to specify additional library jars (using '-libraryjars').
Warning: there were 416 instances of library classes depending on program classes.
         You must avoid such dependencies, since the program classes will
         be processed, while the library classes will remain unchanged.
Warning: there were 7 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile them and try again.
         Alternatively, you may have to specify the option 
         '-dontskipnonpubliclibraryclassmembers'.
Please correct the above warnings first.
 

kay73

Bekanntes Mitglied
Ich habe damals auch mal versucht, mit ProGuard eine Klassenbibliothek zu shrinken und damit mehr Schaden als Nutzen angerichtet. Sobald z. B. Reflection ins Spiel kommt (
Code:
Class.forName()
), kann ProGuard die Referenzen nicht mehr auflösen und fängt an zu warnen.

Ich würde folgendes versuchen: Packe alle verwendeten JAR libraries aus, so daß die .class-files irgendwo herumliegen. Dann füge einen Ant-Task hinzu, der Deine Projektklassen in ein JAR-File packt und hinter per JAR update die Libraryklassen dazupackt. Dann lass mal ProGuard rauf los.
 

v Ralle v

Aktives Mitglied
Danke für die Antwort. Ich habe das jetzt ausprobiert (musste mich erst zu Ant einlesen, hatte ich bisher noch nicht genutzt). Habe mit Ant meine Klassen kompilieren lassen, dann habe ich die extrahierte .class Files aus den Libraries hinzugefügt und mit Ant eine .jar gebaut.

Proguard hatte wieder die gleichen Probleme:

Code:
Note: there were 15 unresolved dynamic references to classes or interfaces.
      You should check if you need to specify additional program jars.
Note: there were 5 class casts of dynamically created class instances.
      You might consider explicitly keeping the mentioned classes and/or
      their implementations (using '-keep').
Note: there were 24 accesses to class members by means of introspection.
      You should consider explicitly keeping the mentioned class members
      (using '-keep' or '-keepclassmembers').
Warning: there were 10494 unresolved references to classes or interfaces.
         You may need to specify additional library jars (using '-libraryjars').
Warning: there were 416 instances of library classes depending on program classes.
         You must avoid such dependencies, since the program classes will
         be processed, while the library classes will remain unchanged.
Warning: there were 7 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile them and try again.
         Alternatively, you may have to specify the option 
         '-dontskipnonpubliclibraryclassmembers'.
Please correct the above warnings first.

Ich verstehe das einfach nicht.

Ich habe jetzt auch mal jShrink ausprobiert (die Evaluate Version) und die erfüllt ihren Job problemlos. Allerdings ist es mir zu heikel die erzeugt .jar hochzuladen, weil die Lizens ja nur zum Testen da war.
 

Wildcard

Top Contributor
Ich habe eine ausführbare Jar, die ist um die 50 KB groß. Nun habe ich noch eine Funktionalität hinzugefügt, mit der man .ppt, .pptx und .odp Files lesen kann. Für diese Funktion brauche ich insgesamt 9 Libraries, wodurch die .jar auf 16MB anwächst.
Ich möchte fast wetten das die Lizenzen dieser 9 Libraries es dir nicht erlauben den Byte Code zu verändern.
Warum packst du nicht einfach per Pack200? Das ist viel einfacher, legal, und bringt wahrscheinlich auch mehr.
Pack200 - Wikipedia, the free encyclopedia
 

v Ralle v

Aktives Mitglied
Danke für den Tip, davon hatte ich bisher noch nicht gehört. Allerdings war der Erfolg nicht ganz so groß wie erhofft. Bin von 15,6mb auf 13,8mb gekommen. Ich hatte gelesen, dass bis 8mal kleinere Files erzeugt werden können?! Hab ich da was falsch gemacht? Hab das mit einer Testklasse probiert.

Java:
public static void main(String[] args) throws IOException {
		JarFile f = new JarFile(args[0]);
		Pack200.Packer packer = Pack200.newPacker();
		OutputStream out = new FileOutputStream(args[0] + ".packed");
		packer.pack(f, out);
		out.close();
	}
 

v Ralle v

Aktives Mitglied
Richtig, deshalb denke ich auch, dass sich so viel nicht mehr rausholen lässt =/ Daher hab ich auch nur wirklich über Shrinken nachgedacht.
 

Wildcard

Top Contributor
Hast du mal versucht der Anleitung zu folgen inklusive dem repack?
Wie gesagt, ich denke du wirst kaum eine Wahl haben, denn die meisten Lizenzen erlauben dir wohl keine Bytecode Manipulation (ausserdem wird die Fehlersuche anhand von Logs nahezu unmöglich).
 

v Ralle v

Aktives Mitglied
Jep, ich habe die eingerahmte Anleitung genommen. Und du wirst sehr wahrscheinlich recht haben, dass ich den Bytecode nicht manipulieren darf. Bleibt mir also nichts anderes übrig als die große .jar hochzuladen.
 

Cola_Colin

Top Contributor
Da würde es sich eventuell anbieten, die libs nicht direkt in die jar hineinzupacken, sondern zumindest daneben zu legen, so dass du bei einem update deines eigenen codes nicht die ganzen 16mb wieder hin und her schieben musst.
 

v Ralle v

Aktives Mitglied
Das stimmt schon. Aber bei dem Programm handelt es sich um ein Gegenstück zu einer Android App. Die meisten Nutzer dieser App wollen alles so einfach wie möglich haben. Die meisten Windwos Nutzer werden sich schon erstmal wundern, dass es keine .exe Datei ist.

Also aus Usability Gründen will ich das nicht machen. Und außerdem kommen gar so viele Updates gar nicht :) Aber guter Einwand, danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
VfL_Freak IllegalArgumentException beim Obfuskieren mit ProGuard V4.4 Allgemeine Java-Themen 6
F Problem mit Java 7 und Proguard Allgemeine Java-Themen 6
Saxony ANT, ProGuard und Java heap space Allgemeine Java-Themen 8
Saxony ANT (mittlerw. ProGuard) und JDK 1.6 Allgemeine Java-Themen 5
P ProGuard 4 für java Allgemeine Java-Themen 3
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
R Snake Probleme Allgemeine Java-Themen 2
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S Probleme mit Collection Allgemeine Java-Themen 7
L Probleme mit Jar Allgemeine Java-Themen 6
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
J Synchronized Probleme Allgemeine Java-Themen 7
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
S Probleme mit dem filechooser Allgemeine Java-Themen 1
J Comperator Probleme Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme mit Webappplikation Allgemeine Java-Themen 5
L Plötzlich Probleme mit der JVM :( Allgemeine Java-Themen 6
S starke performance probleme des forums Allgemeine Java-Themen 10
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
H Reg Exp Probleme Allgemeine Java-Themen 5
M Classpath Probleme bei JAR Generierung Allgemeine Java-Themen 2
S Probleme mit JAVA-Installation Allgemeine Java-Themen 3
D Probleme bei for-Schleife Allgemeine Java-Themen 4
R Probleme mit Javadoc Allgemeine Java-Themen 2
G Gson Probleme Allgemeine Java-Themen 2
P KI für TicTacToe programmieren > Probleme Allgemeine Java-Themen 2
M Google App Engine macht Probleme Allgemeine Java-Themen 4
H Probleme mit finally-Block und close() Allgemeine Java-Themen 4
F 2d array probleme Allgemeine Java-Themen 2
M 3D-Grafik Probleme beim drehen von Objekten Allgemeine Java-Themen 9

Ähnliche Java Themen


Oben