У меня проблемы с proguard и некоторыми рефлексами.
Myclass.java
package not.obfuscated
class MyClass {
public List<InnerClass> childs;
}
InnerClass.java
package not.obfuscated
class InnerClass {
//.somestuff
}
Внутри proguard.cfg у меня есть:
-keep class not.obfuscated.** {*;}
Внутри другого класса мне удается получить экземпляр «Field» для поля MyClass.childs, а затем попытаться получить getGenericType, чтобы определить, какой класс находится в скобках списка (‹InnerClass>)
Для ведения журнала я сделал следующий код Log.d (field - это экземпляр Field, представляющий MyClass.childs):
Log.d("FIELD", field.getName()+" generic type: "+ field.getGenericType()+ " class: "+ field.getGenericType().getClass().getName());
Результат следующий (2-я строка):
Как видите, field.getGenericType.toString () может быть правильным, но когда я запрашиваю класс, он возвращает java.lang.Class. В самом деле, через пару строк, когда я это сделаю:
ParameterizedType listType = (ParameterizedType) field.getGenericType();
Я получаю исключение ClassCastException:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
Я твердо верю, что это связано с proguard, но, насколько мне известно о proguard, я уже исключил все классы внутри пакета not.obfuscated. В качестве последней попытки я также вставил строку -keep class java.lang.List (очевидно, что ничего не произошло).