romainguy / kotlin-explorer

Desktop tool to quickly explore disassembled Kotlin code.
Apache License 2.0
782 stars 23 forks source link
android bytecode dex kotlin

Kotlin Explorer

image

Kotlin Explorer is a desktop tool to quickly and easily disassemble Kotlin code into:

After launching Kotlin Explorer, type valid Kotlin code in the left pane, then click Build > Build & Disassemble or use Cmd-Shift-D on macOS, Ctrl-Shift-D on Linux and Windows.

By default, the middle pane will show the Android DEX bytecode, and the right panel the native assembly resulting from ahead of time compilation (AOT). You can control which panels are visible using the View menu.

./art/kotlin-explorer.png

Features

Kotlin Explorer and R8

You can use Build > Optimize with R8 to optimize the compiled code with the R8 tool. By default, all public classes/members/etc. will be kept, allowing you to analyze them in the disassembly panels.

However, keeping everything is not representative of what R8 will do on an actual application so you can disable that feature, and instead use the @Keep annotation to choose an entry point leading to the desired disassembly. You can also create a fun main() entry point and call your code from there. Be careful to not use constants when calling other methods as this may lead to aggressive optimization by R8.

Running Kotlin Explorer

Run Kotlin Explorer with ./gradlew jvmRun.

Kotlin Explorer needs to be told where to find the Android SDK and the Kotlin compiler. Unless you've set $ANDROID_HOME and $KOTLIN_HOME properly, Kotlin Explorer will ask you to enter the path to those directories.

For $ANDROID_HOME, use the path to the root of the Android SDK (directory containing build-tools/, platform-tools/, etc.). Android Studio for macOS stores this in $HOME/Library/Android/sdk.

For $KOTLIN_HOME, use the path to the root of your Kotlin installation. This directory should contain bin/kotlinc and lib/kotlin-stdlib-*.jar for instance.

Kotlin explorer also requires java and javap to be in your $PATH.

[!IMPORTANT]
DEX bytecode and OAT assembly will only be displayed if you have an Android device or emulator that can be successfully reached via adb. The device must be recent enough to host the oatdump tool on its system image.

License

Please see LICENSE.