aboutcode-org / aboutcode-org/scancode.io

Android APK: support kotlin decompilation

未关闭
#1,392 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
215
派生
203
平均合并
4 天 8 小时
30 天内合并 PR
6

描述

This is a follow from https://github.com/aboutcode-org/scancode.io/issues/1372#issuecomment-2357828400 by @chinyeungli :+1:

> 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.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。