将getResource与ProGuard一起使用会导致null结果

时间:2013-06-14 15:14:19

标签: java proguard

在我的jar文件上使用ProGuard打破了我对class.getResource("")的调用。我已经看到,在ProGuard手册中,您需要指定-keepdirectories mypackagemanual 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

2 个答案:

答案 0 :(得分:4)

ProGuard期望包名称中的点,以及文件名和目录名中的斜杠:

-keeppackagenames com.example.mypackage
-keepdirectories  com/example/mypackage

答案 1 :(得分:0)

我发现我能够使用-keepdirectories

进行以下修改
-keepdirectories **mypackage**

然而,这感觉有点笨拙,虽然它有效,但我觉得好像有更好的解决方案。