What is the difference between “normal”, “aggressive” and “flow obfuscate” String encryption?
“Normal” String encryption encrypts all String literals that are accessed by methods in the defining class. This can mean that the values of some final String fields were not obfuscated. For example, String constants in interfaces would typically not be encrypted. “Aggressive” String encryption uses a more sophisticated approach that can normally encrypt Strings even in interfaces. The “flow obfuscate” option is the same as the “aggressive” option but causes the runtime decryption instructions, that is inserted into your bytecode, to be flow obfuscated. This makes the decrypt instructions harder to decompile but it could cause problems with some JITs. Note that the limitations mentioned above for the “aggressive” option also apply for the “flow obfuscate” option. Note also that the String Encryption “flow obfuscate” option is quite independent of the general Flow Obfuscation functionality. You can choose to have one without the other.