"Абстрактный экземпляр класса", говорите вы.«Невозможно!»
Вот мой код:
public static AbstractFoo getAbstractFoo(Context context) {
try {
Class<?> klass = Class
.forName("com.bat.baz.FooBar");
Constructor<?> constructor = klass.getDeclaredConstructor(
String.class, String.class);
constructor.setAccessible(true);
AbstractFoo foo = (AbstractFoo) constructor.newInstance(
"1", "2");
return foo;
} catch (ClassNotFoundException e) {
// Ignore
} catch (NoSuchMethodException e) {
throw new InflateException(
"No matching constructor");
} catch (IllegalAccessException e) {
throw new InflateException("Could not create foo", e);
} catch (InvocationTargetException e) {
throw new InflateException("Could not create foo", e);
} catch (InstantiationException e) {
throw new InflateException("Could not create foo", e);
}
return null;
}
com.bat.baz.FooBar - это закрытый класс, который расширяет AbstractFoo.Без Proguard этот код работает на моем устройстве Android.При этом происходит сбой при попытке / ловле NoSuchMethodException.
Я продолжаю добавлять операторы в файл конфигурации Proguard, например
-keep public abstract class AbstractFoo
{public *;protected *; private *;}
, но это не решает проблему.Как я могу заставить Proguard признать, что это правильный способ создания экземпляра объекта AbstractFoo?По крайней мере, если он работает без Proguard, он должен работать с ним.