我笔记本电脑上的硬盘刚刚崩溃,我丢失了过去两个月一直在开发的应用程序的所有源代码。我只有一个APK文件,它存储在我发给朋友的电子邮件中。

有没有办法从这个APK文件中提取我的源代码?


当前回答

这是另一种描述,以防有人被上面的描述卡住。遵循以下步骤:

从以下位置下载apktool.bat(或适用于Linux的apktool)和apktool_<version>.jarhttp://ibotpeaches.github.io/Apktool/install/ 将jar文件从上面重命名为apktool.jar,并将两个文件放在同一文件夹中打开一个dos框(cmd.exe)并切换到该文件夹;验证是否安装了Java环境(对于Linux,请查看有关所需库的说明)开始:apktool解码[apk文件]中间结果:资源文件,AndroidManifest.xml使用您选择的解包器解压缩APK文件中间结果:classes.dex从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=将classes.dex拖放到dex2jar.bat上(或在DOS框中输入<path_to>\dex2jar.classes.dex;对于Linux,使用dex2jars.sh)中间结果:classes_dex2jar.jar解包classes_dex2jar.jar(可能是可选的,取决于使用的反编译器)反编译类文件(例如,使用JD-GUI或DJ反编译程序)结果:源代码

注意:不允许对第三方软件包进行反编译;本指南仅用于从APK文件恢复个人源代码;最后,生成的代码很可能会被混淆

其他回答

用于反向工程第三方、封闭的二进制Android应用程序的Apktool。

它可以将资源解码为几乎原始的形式,并在进行一些修改后重建它们。

它使逐步调试smali代码成为可能。此外,它还使使用应用程序变得更容易,因为它具有类似项目的文件结构和一些重复任务的自动化,如构建apk等。

http://ibotpeaches.github.io/Apktool/

这两篇文章描述了如何结合使用apktool和dex2jar来获取APK文件并创建一个可以构建和运行它的Eclipse项目。

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.htmlhttp://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

基本上你:

使用apktool从apk中获取资源文件使用dex2jar获取一个jar文件,其中包含Eclipse喜欢的格式的类。创建一个Eclipse项目,指向资源文件和新的jar文件使用zip实用程序打开jar文件并删除现有资源使用JDGui打开jar文件以查看源代码从JDGui中获取所需的任何源代码,将其粘贴到Eclipse中的一个类中并进行修改从jar文件中删除该类(这样就不会多次定义相同的类)运行它。

apktool是最好的选择。在线apktool服务也存在:http://www.javadecompilers.com/apktool

显然,由于服务的“在线性质”,存在一些限制:您可以提取和研究资产和清单文件,但目前不可能重新编译应用程序。

尽管如此,这是一种“打开”android应用程序的简单方法。

这是另一种描述,以防有人被上面的描述卡住。遵循以下步骤:

从以下位置下载apktool.bat(或适用于Linux的apktool)和apktool_<version>.jarhttp://ibotpeaches.github.io/Apktool/install/ 将jar文件从上面重命名为apktool.jar,并将两个文件放在同一文件夹中打开一个dos框(cmd.exe)并切换到该文件夹;验证是否安装了Java环境(对于Linux,请查看有关所需库的说明)开始:apktool解码[apk文件]中间结果:资源文件,AndroidManifest.xml使用您选择的解包器解压缩APK文件中间结果:classes.dex从http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=将classes.dex拖放到dex2jar.bat上(或在DOS框中输入<path_to>\dex2jar.classes.dex;对于Linux,使用dex2jars.sh)中间结果:classes_dex2jar.jar解包classes_dex2jar.jar(可能是可选的,取决于使用的反编译器)反编译类文件(例如,使用JD-GUI或DJ反编译程序)结果:源代码

注意:不允许对第三方软件包进行反编译;本指南仅用于从APK文件恢复个人源代码;最后,生成的代码很可能会被混淆

Play Store上还有一个新的应用程序,它可以反编译apk(系统应用程序),并在智能手机上查看源代码。它将文件保存到SD卡中,以便您也可以在计算机上查看。它不需要根或其他东西。

只需安装并享受乐趣。我认为这是反编译应用程序最简单的方法。