2013-06-14 5 views
5

Mit ProGuard auf meinem JAR-Dateien hat meine Anrufe zu class.getResource("") gebrochen. Ich habe gesehen, dass Sie im ProGuard-Handbuch die -keepdirectories mypackage (manual link) angeben müssen. Allerdings habe ich die Option -keepdirectories angegeben und es scheint nicht zu funktionieren. Ich denke, mit meiner ProGuard Konfiguration ist etwas nicht in Ordnung. Ich habe auch this related question betrachtet, aber ich habe Probleme, die -keeppackagenames funktioniert auch.Verwendung von getResource mit ProGuard führt zu null Ergebnis

In meinem Code habe ich etwas Ähnliches wie folgt.

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 Konfiguration

-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 

Antwort

3

ProGuard erwartet Punkte in Paketen Namen und schlitzt in Dateinamen und Verzeichnisnamen:

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

die '/' auf 'keepdirectories' hat den Trick Hinzufügen! Ich habe dies als die richtige Antwort markiert. –

+0

Vorsicht! Der angegebene Pfad darf nicht mit einem Schrägstrich enden: https://sourceforge.net/p/proguard/bugs/521/ – Gili

0

fand ich, dass ich in der Lage war es mit der folgenden Modifikation -keepdirectories

-keepdirectories **mypackage** 

jedoch zum Laufen zu bringen, das fühlt sich irgendwie klobig, und während es funktioniert, ich habe das Gefühl, dass es eine bessere Lösung gibt.

Verwandte Themen