【发布时间】:2016-11-16 19:38:58
【问题描述】:
我创建了一个具有如下内部接口的 Java 类:
public class TaskManager {
// other codes
public interface TaskManagerListener {
void onLoad();
}
// other codes
}
然后我使用 ProGuard 将其包装在一个 JAR 中以进行混淆/收缩。
我使用了以下 ProGuard 配置:
-keepattributes InnerClasses
-keep public class package.name.of.TaskManager { *; }
-keep public interface package.name.of.TaskManager$TaskManagerListener { *; }
我从 JAR 中验证了类和内部接口在那里: .
我现在的问题是当我尝试从使用 JAR 的代码中访问该内部接口时。我可以正常访问TaskManager 类,但访问TaskManager.TaskManagerListener 会引发编译错误。
这些工作:
public class MyTaskManager extends TaskManager {..}TaskManager tm = new TaskManager();
但这些不是:
public class MyTaskManagerListener implements TaskManager.TaskManagerListenernew TaskManager.TaskManagerListener() { @Override public void onLoad() {..} });
引发了一个“无法解析符号TaskManagerListener”错误。
我尝试从 JAR 库的原始代码中访问TaskManager.TaskManagerListener,它工作正常。所以我想我只有在 JAR 中时才能访问它..?
有没有办法让它工作?
还是我的期望错了?
我不确定我的 ProGuard 配置中是否缺少某些内容,或者我对 Java 和内部接口的理解。
我已经检查了this 的答案,并且我已经在考虑不使用嵌套接口的解决方法。
【问题讨论】:
标签: java jar proguard inner-classes