我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。
有没有办法从这个APK文件中提取我的源代码?
当前回答
有几种方法可以做到这一点:
使用Android Studio 3.0中的“配置文件或调试APK”功能。它允许您在Android Studio中打开和探索APK。类被反编译为smali。如果没有源代码(android studio 3.0 canary 9),资源不会被提取,像“转到定义”、“查找所有引用”和调试都无法工作。一些额外的smali功能可能适用于smalidea。使用jadx。Jadx将给定APK中的代码反编译为java源文件。使用apktool。Apktool是一个命令行工具,它提取资源并将代码反编译为给定apk的smali。您也可以使用apktool重新编译。下面是一个实际的例子:$apktool d测试.apk一: 在test.apk上使用Apktool 2.2.4一: 正在加载资源表。。。一: 正在使用资源解码AndroidManifest.xml。。。一: 正在从文件加载资源表:1.apk一: 常规清单包。。。一: 正在解码文件资源。。。一: 正在解码值*/*XML。。。一: Baksmaling类dex。。。一: 正在复制资产和库。。。一: 正在复制未知文件。。。一: 正在复制原始文件。。。$apktool b测试一: 在测试中使用Apktool 2.2.4一: 正在检查源是否已更改。。。一: 正在将smali文件夹粉碎为classes.dex。。。一: 正在检查资源是否已更改。。。一: 正在生成资源。。。一: 正在生成apk文件。。。一: 正在复制未知文件/dir。。。
其他回答
Android应用程序的APK文件可以使用以下任何方法反编译:
APKTool(需要在电脑上安装Java)APKTool M(Android应用程序)JavaDecompilers(在线工具包括APKTool实用程序)
资料来源:https://droidmaze.com/how-to-extract-code-from-apk/
我发现以下是最简单的方法:
将app.apk重命名为app.zip(将扩展名从apk更改为zip)将zip文件解压缩到文件夹中使用JADX工具读取classes.dex文件中的源代码。
虽然您可以反编译APK文件,但您可能会遇到一个大问题:
它不会返回您编写的代码。相反,它将返回编译器内联的任何内容,变量为随机名称,函数为随机名称。尝试反编译并将其还原为您所拥有的代码可能需要比重新开始花费更多的时间。
可悲的是,这样的事情已经扼杀了许多项目。对于未来,我强烈建议学习版本控制系统,如CVS、SVN和git等。
以及如何备份。
几天来,我一直想让dex2jar在一台软呢帽31笔记本电脑上与一台无法工作的apk进行比较,这让我发疯了。这个python3脚本在几分钟内就完成了这个任务,安装jdgui使类文件变得可读。
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
具体来说,下面是我运行的:
# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*
# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify
# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build
# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc
现在应该可以使用以下方法获取类文件:
$> enjarify yourapkfile.apk
要启动jd-gui:
$> jd-gui
那就打开你的课堂文件吧!
我个人建议Show Java Android App获取源代码。您可以从play商店或此处下载