【问题标题】:Using getResource with ProGuard results in null result将 getResource 与 ProGuard 一起使用会导致 null 结果
【发布时间】:2013-06-14 15:14:18
【问题描述】:

在我的 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

【问题讨论】:

    标签: java proguard


    【解决方案1】:

    ProGuard 需要在包名中使用点,在文件名和目录名中使用斜杠:

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

    【讨论】:

    【解决方案2】:

    我发现我可以通过对-keepdirectories的以下修改使其工作

    -keepdirectories **mypackage**
    

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

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2020-10-11
      • 2019-09-19
      • 2014-01-28
      • 2019-12-31
      • 2019-08-04
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多