在我的jar文件上使用ProGuard打破了我对class.getResource("")
的调用。我已经看到,在ProGuard手册中,您需要指定-keepdirectories mypackage
(manual link)。但是,我已经指定了-keepdirectories
选项,但它似乎不起作用。我认为我的ProGuard配置有问题。我也看了this related question,但我也无法让-keeppackagenames
工作。
在我的代码中,我有类似于以下内容。
package com.example.mypackage;
public class MyClass{
public static void main(String [] args){
//url is always returned as null
URL url = MyClass.class.getResource("");
//do additional stuff including retrieving manifest file
}
}
ProGuard配置
-injars ...
-outjars ...
-libraryjars ...
-dontoptimize
-keepattributes SourceFile,LineNumber,Table,LocalVariable*Table,*Annotation*
-renamesourcefileattribute SourceFile
-repackageclasses
-overloadaggressively
-keep public class com.example.mypackage.MyClass{
public static void main(java.lang.String[]);
}
-keepdirectories com.example.mypackage,com.example.mypackage.MyClass
-keeppackagenames com.example.mypackage,com.example.mypackage.MyClass
答案 0 :(得分:4)
ProGuard期望包名称中的点,以及文件名和目录名中的斜杠:
-keeppackagenames com.example.mypackage
-keepdirectories com/example/mypackage
答案 1 :(得分:0)
我发现我能够使用-keepdirectories
-keepdirectories **mypackage**
然而,这感觉有点笨拙,虽然它有效,但我觉得好像有更好的解决方案。