У меня проблема с тем, что Proguard не работает, когда вы объявляете анонимный класс в анонимном классе. Вот как это выглядит в основном примере:
public class Class1 {
public void function1 (){
new Class2(){
@Override
public void function2(){
new Class3(){
@Override
public void function3(){
// do something
}
}
}
}
}
}
Во время выполнения gradle build script выполняется proguard. Теперь я получаю следующую ошибку:
my.package.Class1$2$1: can't find enclosing method 'void function2()' in program class my.package.Class1$2
Если я изменю код, чтобы иметь только 1 "уровень" анонимных классов, proguard заканчивается без ошибок. Это работает:
public class Class1 {
public void function1 (){
Class3 class3Instance = new Class3(){
@Override
public void function3(){
// do something
}
}
new Class2(){
@Override
public void function2(){
//do something with class3Instance
}
}
}
}
Проект - проект Android, хотя, насколько я знаю, это не имеет значения.
Я пробовал разные правила -keep
для Class1
, но ничего не получилось. Это не поддерживается Proguard или мне нужно добавить правило, чтобы заставить его работать?
ОБНОВЛЕНИЕ 1:
Как запрошена структура, если интерфейс используется для анонимных классов.
Интерфейс для Class2
определяется следующим образом:
public class Class2IntefaceEnclosingClass {
public interface Class2 {
void function2();
}
}
Интерфейс для Class3
несколько отличается:
public interface Class3IntefaceEnclosingInterface {
interface Class3 {
void function3();
}
}
Примечание. Я не могу изменить компоновку интерфейсов, так как они предоставлены андроидом.