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
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) –
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? –
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. –