具有.apk文件,有什么办法可以获取其源代码?

评论

在此之前,您是否检查过软件包是否为开源软件?

.apk只是.zip文件。但不幸的是,任何用于“发行”的应用程序构建都可能会受到ProGuard的保护。

@MatthewRead Op询问他是否可以从api获取代码,我回答了这种现象的含义以及至少防止制作类似应用程序的方法。他没有说如何防止获取代码,所以是的,它的确回答了这个问题。

这是做这件事的美丽宝石

#1 楼

即使使用了ProGuard,您仍然可以获得一些有趣的见解。这是一个带有详细说明的StackOverflow问题:Android:从APK文件获取源代码。带有详细指南的YouTube视频。与此相关的博客文章:如何从Android APK文件中检索源代码。

#2 楼

如果您很幸运,而且您的.apk文件不受Proguard或模拟产品的保护,则可以使用APK工具。它是用于反向工程第三方,封闭的二进制Android应用程序的工具。

评论


Apktool仅生成Smali代码,而不生成Java代码-这是一个很大的差异。

–罗伯特
2012年10月5日在7:52

#3 楼

摘自Parnkul Garg在SO中的一个社区Wiki:

解码.apk文件的过程,分步方法:
步骤1:


新建一个文件夹,然后复制要解码的.apk文件。


现在,将此.apk文件的扩展名重命名为.zip(例如,从文件名重命名)。 apk到filename.zip)并保存。现在,您可以访问classes.dex文件等。在此阶段,您可以看到可绘制对象,但是看不到xml和Java文件,因此继续。


步骤2:


现在将这个.zip文件解压缩到同一文件夹(或NEW FOLDER)中。


下载dex2jar并将其解压缩到同一文件夹(或NEW FOLDER)中。


将classes.dex文件移动到dex2jar文件夹中。


现在打开命令提示符并将目录更改为该文件夹(或NEW FOLDER) )。然后输入d2j-dex2jar classes.dex并按Enter。现在,您在同一个文件夹中有classes.dex.dex2jar文件。


下载Java反编译器,双击jd-gui,单击打开的文件,然后打开classes.dex.dex2jar该文件夹中的文件:现在您将获得类文件。


按src名称保存所有这些类文件(在jd-gui中,单击File-> Save All Sources)。在这一阶段,您获得了Java源代码,但是.xml文件仍然不可读,因此继续。 />
放入要解码的.apk文件


下载最新版本的apktool和apktool安装窗口(均可从同一链接下载)和将它们放置在同一文件夹中


下载framework-res.apk并将其放置在同一文件夹中(并非所有apk文件都需要该文件,但不会造成伤害)


打开命令窗口


导航到APKtool的根目录,然后键入以下命令:
apktool if framework-res.apk


apktool d myApp.apk(其中myApp.apk表示要解码的文件名)


现在您在该文件夹中获得一个文件夹,并且可以轻松读取apk的xml文件。
步骤4:
将两个文件夹(在本例中均为两个新文件夹)的内容复制到单个文件夹中是没有任何步骤一个
并享受源代码...