2016-09-20 3 views
0

Ich versuche, eine lauffähige JAR-Datei mit Proguard zu erstellen. Wenn ich das JAR mit Eclipse exportiere, funktioniert alles gut und ich habe eine nette JAR-Datei.Verwenden von Proguard mit einer ausführbaren JAR-Datei

Um obfusicate ich die Befehlszeile verwenden und den Befehl

java -jar ${ANDROID_SDK}/lib/proguard.jar @proguard-project.txt 

Aber dann, wenn ich versuche, die erstellt JAR ich die Antwort

no main manifest attribute 

Mein proguard-project.txt ist wie erhalten laufen

folgt
-injars  bin/classes 
-injars  libs 
-outjars  bin/classes_processed.jar 
-libraryjars proguard/android.jar 

-dontwarn java.** 
-keep class java.** 

-dontwarn javax.** 
-keep class javax.** 

-dontwarn android.** 
-keep class android.** 

-dontwarn com.sun.** 
-keep class com.sun.** 

-dontwarn java.awt.** 
-dontwarn java.beans.Beans 
-dontwarn javax.security.** 
-keep class javamail.** {*;} 
-keep class javax.mail.** {*;} 
-keep class javax.activation.** {*;} 
-keep class com.sun.mail.dsn.** {*;} 
-keep class com.sun.mail.handlers.** {*;} 
-keep class com.sun.mail.smtp.** {*;} 
-keep class com.sun.mail.util.** {*;} 
-keep class mailcap.** {*;} 
-keep class mimetypes.** {*;} 
-keep class myjava.awt.datatransfer.** {*;} 
-keep class org.apache.harmony.awt.** {*;} 
-keep class org.apache.harmony.misc.** {*;} 

-dontnote 


-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class com.app.main { 
    public static void main(java.lang.String[]); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static ** CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 

jede Hilfe sehr geschätzt würde

Antwort

1

ProGuard erzeugt selbst kein Manifest. Sie haben eine manuell erstellen, und schließen es so in Ihrer Konfiguration:

-injars path/to/your/resources-dir 
-injars ... 

Die Ressource-dir das Manifest mit der folgenden Verzeichnisstruktur enthalten sollte:

META-INF/Manifest.MF 

Wenn Sie auch verschleiern die Hauptklasse des jar, müssen Sie die folgende Konfiguration hinzufügen:

-adaptresourcefilecontents **.MF 
+0

Hallo, Danke für die Hilfe, habe ich versucht, aber ich bekomme immer noch das gleiche Ergebnis. Ich habe es mit und ohne Verschleierung der Hauptklasse versucht, aber es hat zu anderen Ergebnissen geführt. Bevor ich meine Manifest.mf-Datei verschleiern sieht wie Manifest-Version: 1.0 Class-Path:. Main-Klasse: com.app.main Nachdem ich verschleiern und ich verwende winrar die JAR zu extrahieren und öffnen Sie die manifest.mf es wie Manifest-Version sieht nun Datei: 1,0 Erstellt-By: 1.7.0_95 (Oracle Corporation) –

+0

Ah Ich habe gerade meine Manifest.MF auf der obersten Ebene der Extrakt-JAR gefunden, nicht im META-INF-Ordner - könnte das ein Problem sein? –

+0

Ja, dies muss im Verzeichnis META-INF sein, sonst wird es nicht als gültiges Manifest erkannt. Ich habe vergessen, dies zu erwähnen, so dass Sie stattdessen ein -injars-Pfad/zu/Ihrem/Ressource-Verzeichnis benötigen, das die META-INF/Manifest.MF-Datei in der erwarteten Verzeichnisstruktur enthält. –

Verwandte Themen