【发布时间】:2015-08-05 02:48:53
【问题描述】:
我知道如何使用基于 Windows 的系统将 apk 文件提取到类中,如下所示:
第 1 步:重命名 .apk 文件
使用扩展名 .zip 重命名 .apk 文件(例如让文件 是“demofile.apk”然后重命名它成为“demofile.apk.zip”)
第 2 步:从 apk 获取 java 文件
现在将重命名的 zip 文件提取到特定文件夹中,例如让 该文件夹是“demofolder”。现在从链接下载 dex2jar windows 并在文件夹“demofolder”中提取该 zip 文件。
现在打开命令提示符并转到上一步创建的文件夹 并输入命令“dex2jar classes.dex”并按回车键。这将 在同一文件夹中生成“classes.dex.dex2jar”文件。
现在从链接下载java反编译器并解压 启动(双击)jd-gui.exe
从jd-gui窗口浏览生成的“classes.dex.dex2jar”文件 demofolder,这将按 src 名称给出所有类文件。
现在从文件菜单中选择“保存所有源”,这将生成一个 名为“classes_dex2jar.src.zip”的 zip 文件,包含所有包 和 java 文件。
解压那个 zip 文件 (classes_dex2jar.src.zip) 你会得到所有的 应用程序的 java 文件。
以上步骤将生成 java 文件,但要执行 xml 文件 以下步骤。
第 3 步:从 apk 获取 xml 文件
从链接下载 apktool 和 apktool install 并解压 文件并将其放在同一个文件夹中(例如“demoxmlfolder”)。
将 .apk 文件放在同一个文件夹中(即 demoxmlfolder)
现在打开命令提示符并转到存储 apktool 的目录 (此处为“demoxmlfolder”)并键入命令“apktool if framework-res.apk”上面的命令应该导致“Framework installed ...”现在在命令提示符中键入命令“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);
【问题讨论】:
-
这将需要 root,因为您无法读取其他进程/应用程序的资源,更不用说将它们的二进制文件作为您自己的应用程序的 uid。只是我的两分钱。 PD:准备好重新实现几个类,Android 的 Java API 不会复制完整的桌面 API 集
-
@Machinarius,私有应用程序只需要 root。查看play.google.com/store/apps/details?id=com.njlabs.showjava。几个月前我自己搞定了,但 dex2jar 在 Android 上运行速度非常慢。
-
我完全确定 Android 的安全模型不会让你在没有 root 的情况下这样做。我站得更正。很好地实现了这一目标,恭喜。至于性能增强...这需要专门干预 dex2java 的代码以使其成为多线程等。
-
你看过这个stackoverflow.com/questions/1249973/…>
标签: java android xml android-layout android-activity