> Obfuscators cannot change public members.
That is not true.
Take RetroGuard (http://www.retrologic.com/) for example.
It works on jars and obfuscates EVERYTHING by default.
If you want it to spare stuff, you have to explicitly tell RetroGuard which class names, fields, or methods are to be left unobfuscated.
The disadvantage of RetroGuard is that it needs to be patched for java 1.4 ... (it's OpenSource, so you'll have to do that yourself)
Thomas