With a little work, I found the following:
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -keep, allowobfuscation class com.company.* -keepclassmembers, allowobfuscation class * { *; } -keepnames class com.company.MyClass -keepclassmembernames class com.company.MyClass { public <methods>; public <fields>; #!private *; also tried this but it didn't work }
An error in your configuration - the presence of { *; } { *; } at the end of the -keepnames option.
I used the following class:
package com.company; public class MyClass { public static void main(String[] args) { int longVariableName = publicStaticMethod(); String abcxyz = privateStaticMethod("abc", "xyz"); System.out.println("longVariableName: " + longVariableName); System.out.println("abcxyz: " + abcxyz); } public static int publicStaticMethod() { return 9000; } private static String privateStaticMethod(String first, String second) { return first + second; } }
and the decompiled result class was as follows:
package com.company; import java.io.PrintStream; public class MyClass { public static void main(String[] paramArrayOfString) { paramArrayOfString = publicStaticMethod(); String str = a("abc", "xyz"); System.out.println("longVariableName: " + paramArrayOfString); System.out.println("abcxyz: " + str); } public static int publicStaticMethod() { return 9000; } private static String a(String paramString1, String paramString2) { return paramString1 + paramString2; } }
source share