Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android APK: support kotlin decompilation #1392

Open
Tracked by #1396
pombredanne opened this issue Sep 28, 2024 · 0 comments
Open
Tracked by #1396

Android APK: support kotlin decompilation #1392

pombredanne opened this issue Sep 28, 2024 · 0 comments

Comments

@pombredanne
Copy link
Member

This is a follow from #1372 (comment) by @chinyeungli 👍

This is a little sample d2d note when I compile an APK from kotlin sources

I created an APK in a sample android project that have 7 sources (excluing those xml from res/) which include 6 .kt files and 1.java file.

If I extract the APK, I find 5 classes.dex files, making it unclear which dex files contain the 'real' sources and which ones contain Google libraries.

On the other hand, if I use JADX directly on the APK file, it generates file structure without worrying the dex files.

This note indicates that we can use JADX directly on the APK file rather than the DEX file.

However, in either cases, it generated many more files that we originally have in the sources.
It generated the following directories:

_COROUTINE/
android/support/v4/
andoridx/
com/example/ <-- source location
com/google/common/
kotlin/
kotlinx/
org/intellig/
org/jetbrains/

As note above, the source location should only be in com/example/, but it generates many other libs that we need to smartly ignore/identify when we perform the D2D in a sense that these will be no match.

For the file level, following are the source files in a sample andorid project:

empty_java.java
empty_kt.kt
MainActivity.kt
test_kt.kt

Following are the decompiled files generated from jadx:

ComposableSingletons$MainActivityKt.java
empty_java.java
empty_kotlin.java
MainActivity.java
MainActivityKt.java
R.java
test_kotlin.java
Test_ktKt.java

We already know all the R.java is generated, but for others, it is important to note that not all of them have matching basenames.
These are the matching:

Source: empty_java.java
JADX: empty_java.java

Source: empty_kt.kt
JADX: empty_kotlin.java

Source: MainActivity.kt
JADX: MainActivity.java, MainActivityKt.java

Source: test_kt.kt
JADX: test_kotlin.java, Test_ktKt.java

We need to find a pattern in order to increase the matching accuracy and avoid noise.

@pombredanne pombredanne changed the title Android APK: support kotlin decompliation Android APK: support kotlin decompilation Sep 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant