将Proguard与可运行的JAR文件一起使用

时间:2016-09-20 12:25:39

标签: java eclipse jar proguard

我正在尝试使用proguard创建可运行的JAR文件。当我使用Eclipse导出JAR时,一切正常,我有一个很好的JAR文件。

要说服我使用命令行和命令

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

但是当我尝试运行创建的JAR时,我得到了响应

no main manifest attribute

我的proguard-project.txt如下

-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>;
}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

ProGuard本身不会生成清单。 您必须手动创建一个,并在配置中包含它:

resource-dir应该包含使用以下目录结构的清单:

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

如果你也混淆了jar的主类,你需要添加以下配置:

META-INF/Manifest.MF