Я создал класс Java с внутренним интерфейсом, как это:не удается получить доступ к внутреннему интерфейсу из ProGuard-эд JAR
public class TaskManager {
..other codes..
public interface TaskManagerListener {
void onLoad();
}
..other codes..
}
Тогда я завернул его в баночку с использованием ProGuard для запутывания/усадка.
я использовал следующую конфигурацию: 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.TaskManagerListener
new TaskManager.TaskManagerListener() { @Override public void onLoad() {..} });
"Не удается разрешить символ TaskManagerListener" поднимается ошибка.
Я попытался получить доступ к TaskManager.TaskManagerListener
от исходного кода библиотеки JAR, и он работает нормально. Так что, я думаю, я не могу получить доступ к нему, когда он находится внутри JAR ..?
Есть ли способ сделать эту работу?
Или мое ожидание не так?
Я не уверен, есть ли что-то в моей конфигурации ProGuard или с моим пониманием Java и внутренних интерфейсов.
Я уже проверил this ответ, и я уже рассматриваю обходной путь, чтобы не использовать вложенный интерфейс.