2013-06-14 2 views
5

내 jar 파일에서 ProGuard를 사용하면 class.getResource("")으로 전화가 끊어졌습니다. ProGuard 설명서에서 -keepdirectories mypackage (manual link)을 지정해야한다는 것을 확인했습니다. 그러나 -keepdirectories 옵션을 지정했는데 작동하지 않는 것 같습니다. 내 ProGuard 구성에 문제가 있다고 생각합니다. 나는 또한 this related question을 보았지만 -keeppackagenames도 잘 작동하지 못했습니다.ProGuard에서 getResource를 사용하면 결과가 null이됩니다.

제 코드에는 다음과 비슷한 내용이 있습니다.

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 

답변

3

ProGuard에서 패키지 이름에 점을 기대하고, 파일 이름과 디렉토리 이름에서 슬래시 :

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

는'/'keepdirectories'가 속임수를 썼는지'에 추가! 나는 이것을 정답으로 표시했다. –

+0

주의! 지정된 경로는 슬래시로 끝날 수 없습니다. https://sourceforge.net/p/proguard/bugs/521/ – Gili

0

나는,이 종류의 투박한 느낌, 그리고 그 동안 내가 그러나 -keepdirectories

-keepdirectories **mypackage** 

에 다음과 같은 수정 작업을 얻을 수있었습니다 발견 저기, 더 나은 해결책이있는 것처럼 느껴집니다.

관련 문제