Поскольку ProGuard работает аналогично большинству других Java-обфускаторов (по крайней мере, с теми, с которыми я знаком), вполне вероятно, что вы столкнетесь с подобными проблемами.(На самом деле, ProGuard делает все возможное, чтобы выдавать совместимый байт-код, в то время как некоторые другие обфускаторы, по слухам, менее бдительны по этому поводу.)
Какие проблемы у вас возникли?Как правило, проблемы с использованием обфускации связаны с искажением имен - возникают проблемы с другими библиотеками, которые не могут найти общедоступные классы / методы / поля, или проблемы с использованием отражения.Это часто можно решить, очень внимательно следя за тем, какие имена классов и методов вы разрешаете искажать.
В последний раз, когда я использовал запутывание в проекте Java, мы были довольно консервативны в отношении того, что было запутано.Мы поместили классы, которые хотели обфусцировать, в подпакет их оригинального пакета, называемого «внутренним», и запутали только .internal. .Мы обнаружили, что это гораздо удобнее, чем пытаться определить, что не скрыть.
Еще одна проблема с обфускаторами - их оптимизация.Хотя я не видел ошибок в оптимизации в ProGuard, это, конечно, не невозможно.Несмотря на это, я отключаю это по нескольким причинам: во-первых, когда вы получаете (обфусцированный) трассировку стека для клиента, достаточно сложно разобрать имена, чтобы определить, что пошло не так.Если ваш обфускатор что-то оптимизировал, то трассировка стека, скорее всего, не имеет смысла.Во-вторых, в этом нет необходимости: JVM очень и очень хорошо оптимизирует байт-код, и это мешает этому (что может ухудшить ситуацию).