gpt4 book ai didi

java - Proguard 去除 Java 匿名类中的匿名类

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:51 25 4
gpt4 key购买 nike

我有一个问题,当您在匿名类中声明匿名类时,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 项目,但据我所知这应该无关紧要。

我为 Class1 尝试了所有不同类型的 -keep 规则,但没有任何效果。 Proguard 是否不支持此功能,还是我必须添加规则才能使其正常工作?

更新 1:

如果接口(interface)用于匿名类,则按要求结构。Class2 的接口(interface)定义如下:

public class Class2IntefaceEnclosingClass {
public interface Class2 {
void function2();
}
}

Class3 的接口(interface)略有不同:

public interface Class3IntefaceEnclosingInterface {
interface Class3 {
void function3();
}
}

注意:我无法更改界面的布局,因为它们是由 android 提供的。

最佳答案

你可以尝试使用@Keep function1()、function2() 和 function3() 上面的注释。

public class Class1 {
@Keep
public void function1 (){
new Class2(){
@Keep
@Override
public void function2(){
new Class3(){
@Keep
@Override
public void function3(){
// do something
}
}
}
}
}
}

关于java - Proguard 去除 Java 匿名类中的匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com