Вряд ли я буду сильно полезен, но имел дело с yGuard (у них возможностей и опций как мне известно поменьше чем у ProGuard) — там все подобные вещи настраиваются для отдельных пакэджей или классов. Или же глобально — например «не обфусцировать статические методы», «не обфусцировать имена методов» и т.д.
Примерно вот так выглядят настройки (прямо в билд-скрипте):
<target name="obfuscate">
<taskdef name="yguard" classpath="installer/obfuscate/yguard.jar"
classname="com.yworks.yguard.YGuardTask" />
<yguard>
<inoutpair in="dist/guidesigner.jar" out="dist/guidesigner-sec.jar" />
<externalclasses>
<path refid="obfuscate-process-path" />
</externalclasses>
<rename mainclass="com.alee.designer.app.Designer" logfile="dist/obfuscation.log">
<!--<property name="error-checking" value="pedantic"/>-->
<keep>
<class implements="com.alee.designer.NonObfuscable" fields="private" />
<class name="com.alee.designer.app.dialogs.pixelgrabber.PixelGrabber"
methods="public" />
<class name="com.alee.designer.viewer.DesignerViewer" methods="public" />
</keep>
</rename>
</yguard>
</target>
Тут, конечно, не всё, но думаю общая идея должна быть ясна.
То что находится между «keep» — как раз исключаемые из обфускации вещи.
Мы немного схитрили, конечно — сделали отдельный интерфейс NonObfuscable — всё что его имплементит автоматически исключается из обфускации (по крайней мере имена методов и переменных) и позволяет в итоге пользоваться классами для сохранения данных в XML.
Надеюсь это хоть как-то Вам поможет.