如何在 Android 中以编程方式反编译 dex 文件?
我知道如何使用基于Windows的系统将apk文件提取到类中,如下所示:
步骤 1:重命名.apk文件
重命名扩展名为 .zip 的.apk文件(例如,让文件为“demofile.apk”,然后在重命名后将其变为“demofile.apk.zip”)
步骤2:从apk获取java文件
现在将重命名的zip文件提取到特定文件夹中,例如,让该文件夹成为“demofolder”。现在从Windows链接下载dex2jar,并将该zip文件解压缩到文件夹“demofolder”中。
现在打开命令提示符并转到在上一步中创建的文件夹,然后键入命令“dex2jar classes.dex”,然后按Enter键。这将在同一文件夹中生成“classes.dex.dex2jar”文件。
现在从链接下载java反编译器并解压缩它并启动(双击)jd-gui.exe
从jd-gui窗口中浏览demofolder中生成的“classes.dex.dex2jar”文件,这将按src名称提供所有类文件。
现在,从“文件”菜单中选择“保存所有源”,这将生成一个名为“classes_dex2jar.src.zip”的zip文件,其中包含所有包和java文件。
提取该zip文件(classes_dex2jar.src.zip),您将获得该应用程序的所有java文件。
上述步骤将生成java文件,但要获取xml文件,请执行以下步骤。
步骤3:从apk获取xml文件
从链接下载apktool和apktool安装,并提取两个文件并将其放在同一个文件夹中(例如“demoxmlfolder”)。
将.apk文件放在同一个文件夹中(即 demoxmlfolder)
现在打开命令提示符并转到存储apktool的目录(此处为“demoxmlfolder”),然后键入命令“apktool if framework-res.apk”上面的命令应该导致“框架已安装...”现在在命令提示符下键入命令“apktool d filename.apk”(其中文件名是apk文件的名称),这将在当前目录(此处为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);