Adding Annotations
With the Annotations Support Library, you can add @Keep
to methods and classes you want to preserve. This is a great feature because it acts like documentation. The ProGuard information sits above your method as opposed to being in a separate file. Adding @Keep
on a class will preserve the entire class. Adding @Keep
on a method or field will keep the name of the method or field as-is.
In the BN.kt file, add a @Keep
annotation to the top of the GO
object.
Build and run the app. You should now see the bubbles again. This time, if you analyze the APK, you’ll see the secret gradient numbers are not so obvious:
Even if you follow those methods to the GO
companion object, the numbers that are apparently returned are not the real ones. You tricked em!
You’re becoming a pro at ProGuard!
Where To Go From Here
You survived a crash course on ProGuard. Download the final project using the Download Materials button at the top or bottom of this tutorial.
You looked at how ProGuard has problems with reflection. ProGuard also has issues when you call a method from JNI (Java Native Interface). If you’re working with JNI, check out solutions in the JNI training article.
An Android Library (AAR) is able to make use of a transparent method that retrieves published keep rules automatically. See consumerProguardFiles on how to take advantage of this.
The makers of ProGuard, GuardSquare, have a commercial solution called DexGuard. It offers more protection than obfuscation. DexGuard encrypts the classes and strings as well as assets and resource files. It also provides app and device integrity checking which is important for keeping spammers out of your app.
While Android Studio comes with ProGuard built in, Google has been developing R8, which aims to be a drop-in replacement. It’s a new code shrinking and obfuscation tool that could replace ProGuard in the future. Check out Google’s R8 page for more information.
If you have any questions or comments, please join the discussion below!