如何在Android中以编程方式反编译dex文件?

15 java xml android android-layout android-activity

我知道如何使用基于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名称给出所有类文件.

现在从File菜单中选择"save all sources",这将生成一个名为"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"上面的命令应该导致"Framework installed ..."现在在命令提示符下键入命令"apktool d filename.apk"(其中filename是apk文件的名称)这将在当前目录(此处为demoxmlfolder)中生成名称filename的文件夹,其中所有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);
Run Code Online (Sandbox Code Playgroud)

Cil*_*nco 9

您可以在此处浏览ShowJava应用程序的源代码.看起来他正在使用Dex2Jar工具.反编译在BackgroundService中开始,所有魔法都发生在一些特殊的Jar类中.我不知道这段代码是来自一个库,还是所有这些代码都是由他创建的.看看ExtractJarDecompileJar方法,不应该很难理解发生了什么.