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

Gre*_*eck 6 java proguard

在我的jar文件上使用ProGuard打破了我的电话class.getResource("").我已经看到在ProGuard手册中你需要指定-keepdirectories mypackage(手动链接).但是,我已经指定了该-keepdirectories选项,它似乎没有起作用.我认为我的ProGuard配置有问题.我也看过这个相关的问题,但是我也无法-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
    }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Eri*_*une 6

ProGuard 需要包名中的点,文件名和目录名中的斜线:

-keeppackagenames com.example.mypackage
-keepdirectories  com/example/mypackage
Run Code Online (Sandbox Code Playgroud)