2013-06-14 10 views
5

Użycie ProGuard w moich plikach jar spowodowało przerwanie moich połączeń z class.getResource(""). Zauważyłem, że w podręczniku ProGuard trzeba podać -keepdirectories mypackage (manual link). Jednak podałem opcję -keepdirectories i wygląda na to, że nie działa. Myślę, że coś jest nie tak z moją konfiguracją ProGuard. Przyjrzałem się również this related question, ale mam problem z działaniem również -keeppackagenames.Używanie getResource z ProGuard kończy się wynikiem zerowym

W moim kodzie mam coś podobnego do następującego.

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 
    } 
} 

Konfiguracja 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 

Odpowiedz

3

ProGuard spodziewa kropki w nazwach pakietów i tnie w nazwach plików i nazw katalogów:

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

Dodanie '/' na 'keepdirectories' załatwiło sprawę! Zaznaczam to jako poprawną odpowiedź. –

+0

Uwaga! Podana ścieżka może nie kończyć się ukośnikiem: https://sourceforge.net/p/proguard/bugs/521/ – Gili

0

Okazało się, że udało mi się dostać pracy z następującą modyfikacją do -keepdirectories

-keepdirectories **mypackage** 

Jednakże, to czuje się jakby niezgrabne, a jednocześnie działa, wydaje mi się, że istnieje lepsze rozwiązanie.

Powiązane problemy