将 Proguard 与可运行的 JAR 文件一起使用
Using Proguard with a runnable JAR file
我正在尝试使用混淆器创建一个 运行 可用的 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>;
}
任何帮助将不胜感激
ProGuard 本身不生成清单。
您必须手动创建一个,并将其包含在您的配置中:
-injars path/to/your/resources-dir
-injars ...
资源目录应包含使用以下目录结构的清单:
META-INF/Manifest.MF
如果你也混淆了主要的jar class,你需要添加以下配置:
-adaptresourcefilecontents **.MF
我正在尝试使用混淆器创建一个 运行 可用的 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>;
}
任何帮助将不胜感激
ProGuard 本身不生成清单。 您必须手动创建一个,并将其包含在您的配置中:
-injars path/to/your/resources-dir
-injars ...
资源目录应包含使用以下目录结构的清单:
META-INF/Manifest.MF
如果你也混淆了主要的jar class,你需要添加以下配置:
-adaptresourcefilecontents **.MF