Proguard 在 Java 中的 Anonymous 类中删除了 Anonymous 类
2022-09-04 23:29:54
我有一个问题,当您在匿名类中声明匿名类时,Proguard不起作用。这是它在一个基本示例中的样子:
public class Class1 {
public void function1 (){
new Class2(){
@Override
public void function2(){
new Class3(){
@Override
public void function3(){
// do something
}
}
}
}
}
}
在 gradle 构建脚本期间,正在执行 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项目,尽管据我所知,这应该无关紧要。
我尝试了所有不同的规则,但没有任何效果。这是Proguard不支持的,还是我必须添加规则才能使其正常工作?-keep
Class1
更新 1:
根据要求结构,如果用于匿名类的接口。的接口定义如下:Class2
public class Class2IntefaceEnclosingClass {
public interface Class2 {
void function2();
}
}
的接口略有不同:Class3
public interface Class3IntefaceEnclosingInterface {
interface Class3 {
void function3();
}
}
注意:我无法更改界面的布局,因为它们是由Android提供的。