Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Proguard与可运行的JAR文件一起使用_Java_Eclipse_Jar_Proguard - Fatal编程技术网

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

Java 将Proguard与可运行的JAR文件一起使用,java,eclipse,jar,proguard,Java,Eclipse,Jar,Proguard,我正在尝试使用proguard创建一个可运行的JAR文件。当我使用Eclipse导出JAR时,一切都很好,我有一个很好的JAR文件 要进行obfuscate,我使用命令行和 java -jar ${ANDROID_SDK}/lib/proguard.jar @proguard-project.txt 但是当我尝试运行创建的JAR时,我得到了响应 no main manifest attribute 我的proguard-project.txt如下 -injars bin/class

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

要进行obfuscate,我使用命令行和

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>;
}
-injars箱/类
-injars libs
-outjars bin/classes\u processed.jar
-libraryjars proguard/android.jar
-顿瓦恩爪哇**
-保持类java**
-DontwarnJavax**
-保持类javax**
-dontwarn安卓**
-保持课堂秩序**
-dontwarn com.sun**
-保持类com.sun**
-dontwarn java.awt**
-dontwarn java.beans.beans
-dontwarn javax.security**
-保留类javamail.*{*;}
-保持类javax.mail.*{*;}
-保持类javax.activation.*{*;}
-保持类com.sun.mail.dsn.*{*;}
-保持类com.sun.mail.handlers.*{*;}
-保持类com.sun.mail.smtp.*{*;}
-保持类com.sun.mail.util.*{*;}
-保留类mailcap.*{*;}
-保留类mimetypes.*{*;}
-保持类myjava.awt.datatransfer.*{*;}
-保持类org.apache.harmony.awt.*{*;}
-保持类org.apache.harmony.misc.*{*;}
-dontnote
-不要翻转
-重新打包类“”
-允许访问修改
-优化!代码/简化/算术
-keepattributes*注释*
-保持公共类com.app.main{
公共静态void main(java.lang.String[]);
}
-keepclassswithmembers类*{
public(android.content.Context、android.util.AttributeSet);
}
-keepclassswithmembers类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers类*扩展了android.content.Context{
public void*(android.view.view);
public void*(android.view.MenuItem);
}
-keepclassmembers类*实现android.os.Parcelable{
静态**创建者;
}
-keepclassmembers类**.R$*{
公共静态;
}
-keepclassmembers类*{
@android.webkit.JavascriptInterface;
}

任何帮助都将不胜感激

ProGuard本身不会生成清单。 您必须手动创建一个,并将其包括在配置中,如下所示:

-injars path/to/your/resources-dir
-injars ...
-adaptresourcefilecontents **.MF
资源目录应包括使用以下目录结构的清单:

META-INF/Manifest.MF
如果还混淆了jar的主类,则需要添加以下配置:

-injars path/to/your/resources-dir
-injars ...
-adaptresourcefilecontents **.MF

嗨,谢谢你的帮助,我试过了,但还是得到了同样的结果。我尝试了它并没有混淆主类,但它确实产生了不同的结果。在混淆之前,manifest.mf文件看起来像清单版本:1.0类路径:。Main Class:com.app.Main在我混淆并使用winrar提取JAR并打开manifest.mf文件后,它现在看起来像是manifest版本:1.0由:1.7.0_95(Oracle Corporation)创建的。啊,我刚刚在提取JAR的顶层找到了manifest.mf,而不是在META-INF文件夹中-这可能是个问题吗?是的,这必须在META-INF目录中,否则它不能被识别为有效的清单。我忘了提到这一点,因此您需要一个-injars path/to/your/resource目录,它包含预期目录结构中的META-INF/Manifest.MF文件。您好,感谢您的快速回复,我现在可以在提取jar时在META-INF文件夹中看到Manifest.MF文件,但是,我仍然收到错误no main manifest attributed您是否添加了main Class属性(请参见此处)?