Невозможно получить доступ к закрытым полям и методам из внутреннего класса после запутывания YGuard

#java #obfuscation #illegalaccessexception #yguard

#java #запутывание #исключение illegalaccessexception #yguard

Вопрос:

Я испытываю странное поведение при запутывании YGuard в Java 11. У меня есть класс, который содержит некоторые закрытые поля и методы и внутренние классы, как показано ниже.

 public class TestClass {

    private int age;

    public void accessInnerClassVaiable() {
    InnerClass innerClz = new InnerClass();
    
    // Below lines throw java.lang.IllegalAccessError after obfuscation.
    System.out.println("Inner Class variable value:"   innerClz.innerVar);
    innerClz.accessAge();

    }

    class InnerClass {
    private int innerVar = 10;

    public void accessAge() {
        // Below line throws java.lang.IllegalAccessError after obfuscation.
        innerVar = age;
    }
    }
}
 

Если я скомпилирую и запущу программу, она будет работать нормально.

Но после запутывания файлов моего класса с помощью YGuard (3.0.0) при запуске программы строки, упомянутые выше, вызывают java.lang.IllegalAccessError как

  1. Внешний класс получает доступ к закрытым полям / методам, присутствующим во внутреннем классе
  2. Внутренний класс получает доступ к закрытым полям / методам, присутствующим во внешнем классе.

Кто-нибудь может пролить свет на то, как преодолеть эту проблему?

Заранее спасибо.

Комментарии:

1. После запутывания вашего TestClass с помощью yGuard 3.0.0 я не получаю никаких ошибок при вызове запутанного accessInnerClassVariable метода. Если это все еще проблема, я предлагаю создать полный тестовый пример и открыть соответствующую проблему по адресу github.com/yWorks/yGuard/issues