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