2013-10-14 12 views
5

Ich habe folgende:Proper Proguard Konfiguration statische innere Klasse zu halten

public class A extends B { 
    static class C { 
     Object field1; 
     int field2; 
     boolean field3; 
    } 
} 

I kann nicht die C-Klasse über Reflexion erhalten!

Ich habe versucht, die folgenden:

-keep class com.path.to._class.A$** {*;} 

-keep class com.path.to._class.A$* {*;} 

-keep class com.path.to._class.A$C {*;} 

-keep class com.path.to._class.A$C { 
    <fields>; 
} 

-keep class com.path.to._class.A$C { 
    Object field1; 
    int field2; 
    boolean field3; 
} 

Keine der oben gearbeitet. Mache ich hier etwas völlig Falsches?

Vielleicht ist es erwähnenswert, dass B Erwähnen erstreckt Ansicht ...

+0

Unnötig zu sagen, ohne Proguard läuft das funktioniert ganz gut ... – TacB0sS

Antwort

5

Alle diese funktionieren soll (nur Objekt -> java.lang.Object). Sie können überprüfen, bin/proguard/samen.txt, ob sie aufgeführt sind. Andernfalls ändern Sie möglicherweise die falsche Konfigurationsdatei, oder ein Tippfehler in den Namen.

+0

Aus irgendeinem Grund das Hinzufügen der -keepattribute InnerClasses hat die Arbeit gemacht, aber warum? es hat auch andere innere Klassen durcheinander gebracht. – TacB0sS

+0

Die -keep-Optionen behalten die Klassen mit ihren ursprünglichen Namen bei, was für eine normale Reflexion ausreicht. Die Option -keepattributes InnerClasses behält optionale Attribute bei, die nur für weniger häufige Reflektionstypen benötigt werden. Es hängt also von Ihrem Code und den Fehlern ab, die Sie bekommen. –

0
-keep public class com.path.to._class.A$C {*;} 

Dies ist für mich zu arbeiten, sehr spät veröffentlichen, kann aber immer noch anderen helfen dieses Problem konfrontiert

Verwandte Themen