Запутывание классов, содержащих аннотации

При запутывании файлов .class удаляются аннотации. Есть ли способ запутать эти файлы (файлы, содержащие аннотации), не удаляя их. Есть ли способ запутать не скомпилированные файлы .java для сохранения аннотаций, если это возможно?


Как компилятор Java обрабатывает аннотации и где они сохраняются? почему после обфускации удаляются все аннотации. Разве я не могу после запутывания классов вернуть аннотации и вернуть их на место, чтобы они работали?


person GingerHead    schedule 02.02.2012    source источник
comment
Какой инструмент вы используете? Что ты пытаешься сделать? Почему вам нужно запутать .java файлы, а не .class?   -  person Marcelo    schedule 02.02.2012
comment
Например, я использую proguard, и когда я запутываю его, все аннотации удаляются. так что подумываю что-то на нем изменить, чтобы он не удалял аннотации из файлов.   -  person GingerHead    schedule 02.02.2012
comment
Различные обфускаторы будут делать разные вещи с сгенерированным байт-кодом. Поскольку аннотированные классы сохраняются во время выполнения, большая часть этой информации хранится в байт-коде. Делает ли обфускатор что-либо дополнительно к этой информации, я предполагаю, это часть контракта обфускатора.   -  person    schedule 23.10.2015


Ответы (2)


Я спросил и исследовал аннотации и запутывание, и я нашел следующее:

  1. Аннотации хранятся в мета-разделе байт-кода класса, и ими очень сложно манипулировать. Программы обфускации не работают с такими классами.
  2. Я перепробовал много обфускаторов - коммерческих и с открытым исходным кодом, но ни один из них не мог запутать аннотированные классы, у которых аннотированы все их поля и методы.
  3. Единственный оставшийся способ, который я мог придумать, - это использовать сконфигурированные файлы xml вместо аннотаций.
person GingerHead    schedule 27.02.2012

Обычно мы запутывали уже скомпилированные классы с помощью proguard, и я почти уверен, что запутать не скомпилированные классы невозможно. java, так как он работает с самим байт-кодом.

Чтобы сохранить свои аннотации, вы можете указать proguard сохранять определенные атрибуты, такие как аннотации. Дополнительную информацию можно найти в их главе с примерами. Я рекомендую использовать proguardGui для создания собственного файла конфигурации для процесса обфускации.

person crusam    schedule 02.02.2012
comment
Да, я все об этом знаю, но проблема в том, что в моем проекте широко используются весенние аннотации. Если я хочу сохранить все аннотированные классы, методы, атрибуты, мне нечего будет запутывать, поэтому мне нужно найти способ использовать эти аннотации. - person GingerHead; 02.02.2012
comment
Это было не совсем ясно в вашем первом заявлении. Насколько я знаю (и у меня есть только маргинальный опыт proguard/obfuscation), вы можете сохранить эти аннотации и по-прежнему запутывать эти классы. После этого проблема в том, что он все еще не найдет эти классы, потому что (и это только предположение) вы сопоставили их в конфигурации xml, и он больше не может найти их путем самоанализа. Одним из решений для обхода этого может быть программное сопоставление ваших bean-компонентов, поэтому вам не нужно будет отображать эти классы строковыми литералами, но это всего лишь предположение, у вас нет никакого опыта в этой теме. - person crusam; 02.02.2012