2009-06-09 22 views
1

Ich benutze Antenne, um eine j2me App zu erstellen, zu packen und zu verschleiern. Bau und Verpackung funktioniert gut.Probleme bei der Verschleierung

Das Projekt verwendet eine JAR-Datei eines Drittanbieters, die abgesehen von einigen Schnittstellen bereits verschleiert ist.

Als ich mehrere Fehler wie zu verschleiern versucht:

[wtkobfuscate] Warning: i: can't find referenced class fooPackage.fooClass 

Klasse i und fooPackage.fooClass von diesem 3rd-Party-Glas ist, die ich erwähnt.

UPDATE:

Diese 3rd-Party-Bibliothek verwendet J2ME-xmlrpc.jar. Wenn ich nicht alles zusammenpacke, kann ich die Schnittstellen von Drittanbietern und die j2me-xmlrpc.jar nicht verdecken. (Und ich kann die App nicht auf diese Weise ausgeführt werden, nicht sicher, warum)

Wenn ich nur die J2ME-xmlrpc.jar und mein Projekt Klassen-Paket ich die diesen Fehler während

Verschleiern
[wtkobfuscate] Warning: there were 2 instances of library classes depending on program classes. 

UPDATE 2:

Ich weiß, dass diese Verschleierung möglich ist, denn in Netbeans kann ich mit Proguard Verschleierung tun.

Da Netbeans Interna ANT verwendet, um Builds zu erstellen, habe ich versucht, die generierte build.xml in meine eigene build.xml zu kopieren.

Für die Verschleierung verwendet Netbeans die Bibliothek org-netbeans-modules-mobility-antext.jar, die außerhalb von Netbeans verwendet werden kann. Ich habe diese Bibliothek in mein Projekt importiert und ohne Probleme benutzt.

Aber ich bekomme den gleichen Fehler, den ich mit Antenne bekam.

Verschleiern in Netbeans erzeugt eine Menge Warnungen, aber es erzeugt immer noch das verschleierte Glas.

Was ich vermisse?

+0

welchen obfuscator verwenden Sie? – Toad

+0

@reinier: Proguard 4.3 –

+0

Ich hatte viel bessere Ergebnisse mit jshrink. Wenn Sie möchten, kann ich es Ihnen zum Testen schicken. Es könnte einen Versuch wert sein – Toad

Antwort

1

Ich war mit Proguard 4.3. Das Herunterstufen auf Proguard 4.2 hat das Problem gelöst.

1

Wenn die Bibliothek eines Drittanbieters verschleiert ist, schließen Sie diese Bibliothek nicht ein, während Sie Ihre Klassen verschleiern. folgen vielmehr diese Schritte

  1. Jar Klassen allein (Dont 3rd-Party-Bibliothek enthalten)
  2. das Glas in Schritt 1
  3. Unjar der verschleierten Glas in Schritt 2 und der 3rd-Party-Bibliothek in einem gewissen Temperatur, erhalten Obfuscate Ordner
  4. Jar alle unjared Klassen
  5. Vorabüberprüfung und verpacken sie wieder
+0

Die 3rd-Party-Bibliothek enthält einige Schnittstellen, die meine Klassen verwenden. Wenn ich sie nicht einschließe, kann ich den Aufbau und die Verpackung nicht machen. Gibt es eine Möglichkeit, die verschleierten Klassen von den Schnittstellen im Jar zu trennen? –

+0

Natürlich werden Sie diese Bibliotheken von Drittanbietern in den Klassenpfad des Javac-Ziels während des Kompilierens einschließen, aber wenn Sie sie packen, tun Sie es anders als oben erwähnt, damit der Obfuscator keine Probleme hat, die bereits verschleierten Klassen zu verschleiern. Hoffe es ist klar, wenn nicht, lass es mich wissen – Ram

+0

Klarer, verschleiert der Obfuscator die 3rd-Party-Bibliotheken nicht wieder. – Ram

0

versuchen jshrink verwenden. Ich habe viel bessere Ergebnisse mit ihm dann mit prouard:

    <java jar="obfuscator\jshrink.exe" fork="true"> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
         <arg value="-classpath"/> 
         <arg pathref="project.class.path"/> 
         <arg value="-keep"/> 
         <arg value="${midletclass}"/> 
         <arg value="-o"/> 
         <arg value="..\${projectdir}\${projectname}.jar"/> 
        </java> 
+0

Wenn Sie mir Ihre Emailadressen (oder andere Kommunikationsmittel) geben, kann ich Ihnen jshrink schicken, damit Sie es testen können – Toad

+1

@reinier, oder er kann es googeln und es dort finden: http://lmgtfy.com/? q = Joshrink + –

Verwandte Themen