如何反编译kotlin android apk?

问题描述 投票:0回答:2

我有自己用 kotlin 开发的 Android 应用程序。在我使用下面的 adb 命令从物理 Android 设备中提取我的 apk 后,我丢失了所有源代码(硬盘崩溃) -

c:\> adb shell pm path com.digi

该命令的响应是apk的完整路径。之后我使用下面的命令来获取实际的 apk-

c:\>adb pull /data/app/com.digi-ZF6WfmctELhsLvm4oICrAQ==/base.apk Destination\folder

之后我使用了 android studio 并使用 build -> 分析 APK 这给出了一些文件夹结构,但没有得到我开发的任何 kotlin 类。

有没有办法至少获得 kotlin 源代码?

android kotlin decompiler
2个回答
4
投票

嗯,是的,也不是。您无法完全恢复源代码,但至少可以获取其中的一部分。它会部分是乱码,部分几乎没问题,您将丢失局部变量名称、注释、格式等,因此您将需要遍历所有文件并修复它们,甚至完全重写其中一些文件。但这仍然比从头开始更好。

我很长时间没有反编译Android应用程序,所以我的知识可能已经过时,但标准流程是:

  1. 将代码从 dex 转换为 jar。
  2. 反编译为Java。
  3. 对于您的情况:将 Java 转换为 Kotlin。

广告1。 AFAIK 有两个工具可以做到这一点:

dex2jar
enjarify
。我建议使用
enjarify
,它总是给我更好的结果。

广告2。 有多种 Java 反编译器,其中一些可以更好地处理某些代码,另一些则可以更好地处理另一些代码。我建议至少尝试

Fernflower
JD-CORE
/
JD-GUI
,也许
Krakatau

我猜结果远非完美,因为应用程序是用 Kotlin 编写的,而不是用 Java 编写的。挂起函数和 Kotlin 特有的其他功能会更糟。

您还可以使用

ByteCodeViewer
,这是一个 GUI 应用程序,可以简化 1. 和 2 的过程。它包含所有上述工具以及更多。您还可以动态切换反编译器以查看不同反编译器的结果。

广告 3。 IntelliJ 有一些用于将 Java 转换为 Kotlin 的实用程序。我从来没有用反编译的代码尝试过这个,我想这会有问题

如果您需要恢复资源(XML文件等),您可以尝试使用

apktool


0
投票

你无法获取Kotlin源代码,你可以获取Java。但会很乱 会有一堆a,b,c,d,e...悲伤

© www.soinside.com 2019 - 2024. All rights reserved.