2013-10-14 5 views
5

У меня есть следующие:Правильная настройка Proguard держать статический внутренний класс

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

Я не может получить класс С помощью отражения!

Я попытался следующая:

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

Ни один из выше работал. Я делаю что-то совершенно неправильное здесь?

Пожалуй, стоит отметить, что B простирается вид ...

+0

Само собой разумеется, не запуская Proguard это работает просто отлично ... – TacB0sS

ответ

5

Все те должны работать (только Object -> java.lang.Object). Вы можете проверить bin/proguard/seeds.txt, чтобы узнать, указаны ли они. В противном случае вы можете изменить неправильный файл конфигурации или может быть опечатка в именах.

+0

По какой-то причине, добавив в -keepattribute InnerClasses сделал работу, но почему? он перепутал и другие внутренние классы. – TacB0sS

+0

Параметры -keep сохраняют классы с их оригинальными именами, что достаточно для нормального отражения. Опция -keepattributes InnerClasses содержит дополнительные атрибуты, которые необходимы только для менее распространенных типов отражения. Так что это зависит от вашего кода и ошибок, которые вы получаете. –

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

Это работает для меня, размещая очень поздно, но все же может помочь другим лицом этой проблемы

Смежные вопросы