我知道如何使用基于Windows的系统将apk文件解压缩到类中,如下所示:
第1步:重命名.apk文件
使用扩展名.zip重命名.apk文件(例如,让文件 be" demofile.apk"然后重命名后,它变为" demofile.apk.zip")
第2步:从apk获取java文件
现在在特定文件夹中提取重命名的zip文件,例如let 该文件夹是" demofolder"。现在从链接下载dex2jar 窗口并解压缩文件夹" demofolder"。
现在打开命令提示符并转到上一步中创建的文件夹 并输入命令" dex2jar classes.dex"然后按回车。这会 生成" classes.dex.dex2jar"文件在同一文件夹中。
现在从链接下载java反编译器并将其解压缩 启动(双击)jd-gui.exe
从jd-gui窗口浏览生成的" classes.dex.dex2jar"档案 demofolder,这将通过src名称给出所有类文件。
现在从文件菜单中选择"保存所有来源"这会产生一个 zip文件名为" classes_dex2jar.src.zip"包括所有包裹 和java文件。
提取该zip文件(classes_dex2jar.src.zip),您将获得所有 应用程序的java文件。
以上步骤将生成java文件,但要执行xml文件 以下步骤。
第3步:从apk获取xml文件
从链接下载apktool和apktool安装并解压缩 文件并将其放在同一个文件夹中(例如" demoxmlfolder")。
将.apk文件放在同一个文件夹中(即demoxmlfolder)
现在打开命令提示符并转到存储apktool的目录 (这里" demoxmlfolder")并输入命令" apktool if 框架-res.apk"上面的命令应该导致安装" Framework ..."现在在命令提示符下输入命令" apktool d filename.apk" (其中filename是apk文件的名称)这将生成一个文件夹 当前目录中的name filename(此处为demoxmlfolder)所有xml 文件将存储在res \ layout文件夹中。
但我想知道如何在Android 中以编程方式完成上述。所以我的android应用程序可以简单地提取另一个应用程序的dex文件。我不介意将dex文件复制到手机上的其他地方,然后反编译(这只是我反复使用的反编译)
根据以下原则,我可以访问每个应用的dex ,而不知道如何在Android中反编译它。
任何帮助都会很棒。
final PackageManager pm = getPackageManager();
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo("PACKAGE NAME HERE", PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(packageInfo.applicationInfo.sourceDir);
Uri uri = Uri.fromFile(file);
答案 0 :(得分:9)
您可以浏览ShowJava应用程序here的源代码。看起来他正在使用Dex2Jar工具。反编译从BackgroundService开始,所有魔法都发生在一些特殊的Jar类中。我不知道这段代码是来自一个库,还是所有这些代码都是由他创建的。查看ExtractJar和DecompileJar方法,而不是很难理解正在发生的事情。
答案 1 :(得分:2)
您需要按照以下步骤操作才能使其正常运行:
loadDexFile
)并将其保存到文件(writeDexFile
)。InputTypeLoader
加载类文件,然后调用Decompiler.decompile()
。当然,您可以在步骤3中使用其他库,但对于第1步和第2步,我还没有找到任何替代方案。