leo
leo

Reputation: 3694

With ProGuard, how do I obfuscate just one class?

What would be a smart ProGuard configuration to obfuscate just the private methods and constants of one particular class com.acme.Algorithm?

I would like to obfuscate just that, because it contains an algorithm that should not be plain obvious when accidentally opening the .jar.

I'm a ProGuard newbie. AFAIU, you have to use "keep", but the positive logic of "do obfuscate" is not available, right? So how to exlude my class from a "keep everything" config? Note: I don't want to obfuscate other classes for the moment, because I want to allow the customer to see meaningful stacktraces.

Upvotes: 22

Views: 9222

Answers (1)

Eric Lafortune
Eric Lafortune

Reputation: 45676

Obfuscating a single class won't have much effect: it may change the class name and a few field names and methods names, and it may optimize some code. Obfuscation tends to be less effective for hiding small pieces of information. The more application code you obfuscate, the more difficult it becomes to understand.

That being said, you can specify:

-keep class !com.acme.Algorithm { *; }

It keeps all classes/fields/methods outside of com.acme.Algorithm.

Upvotes: 26

Related Questions