2013-10-14 12 views
5

mam następujące:zachować statyczną klasę wewnętrzną

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

I nie można uzyskać klasy C poprzez odbicie!

Próbowałem następujące:

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

Żadne z powyższych pracował. Czy robię tutaj coś całkowicie nie tak?

Być może warto wspomnieć, że B rozciąga się widok ...

+0

rzecz jasna, bez uruchamiania PROGUARD to działa dobrze ... – TacB0sS

Odpowiedz

5

Wszystkie te powinny działać (tylko Object -> java.lang.Object). Możesz sprawdzić bin/proguard/seeds.txt, aby zobaczyć, czy są wymienione. W przeciwnym razie możesz modyfikować nieprawidłowy plik konfiguracyjny lub może występować literówka w nazwach.

+0

Z jakiegoś powodu, dodając -keepattribute InnerClasses wykonał pracę, ale dlaczego? zawiodło to także inne klasy wewnętrzne. – TacB0sS

+0

Opcje -keep zachowują klasy z ich oryginalnymi nazwami, co wystarcza do normalnego odbicia. Opcja -keepattributes InnerClasses utrzymuje opcjonalne atrybuty, które są potrzebne tylko w przypadku mniej popularnych typów refleksji. To zależy od kodu i błędów, które otrzymujesz. –

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

To działa na mnie, publikując bardzo późno, ale nadal mogą pomóc innym w obliczu tego problemu

Powiązane problemy