import proguard.annotation.*; /** * This application illustrates the use of annotations for configuring ProGuard. * * You can compile it with: * javac -classpath ../lib/annotations.jar NativeCallBack.java * You can then process it with: * java -jar ../../../lib/proguard.jar @ ../examples.pro * * The annotation will preserve the class and its main method. */ @KeepApplication public class NativeCallBack { /** * Suppose this is a native method that computes an answer. * * The -keep option regular ProGuard configuration will make sure it is * not renamed when processing this code. */ public native int computeAnswer(); /** * Suppose this method is called back from the above native method. * * ProGuard would remove it, because it is not referenced from java. * The annotation will make sure it is preserved anyhow. */ @Keep public int getAnswer() { return 42; } public static void main(String[] args) { int answer = new NativeCallBack().computeAnswer(); System.out.println("The answer is " + answer); } }