java - 使用 dex2jar 读取 APK 需要什么魔法?

标签 java android dex dex2jar

我正在尝试使用 dex2jar在普通 Java 应用程序中读取 dex 文件(Android APK)。

我有一个指向 APK 的文件对象,然后只需调用 new DexFileReader(dex)

但是这会引发以下异常“不支持魔法”:

com.googlecode.d2j.DexException: not support magic.
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:160)
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:258)
at com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:276)

源代码显示以下 block :

in = in.asReadOnlyBuffer().order(ByteOrder.BIG_ENDIAN);
int magic = in.getInt() & 0xFFFFFF00;

final int MAGIC_DEX = 0x6465780A & 0xFFFFFF00;// hex for 'dex ', ignore the 0A
final int MAGIC_ODEX = 0x6465790A & 0xFFFFFF00;// hex for 'dey ', ignore the 0A

if (magic == MAGIC_DEX) {
    ...
} else if (magic == MAGIC_ODEX) {
    ...
} else {
    throw new DexException("not support magic.");
}

我的假设是我错过了一个步骤,需要从 APK 转换为基本 dex 格式,但它没有显示在 wiki 的示例“想要使用 dex2jar 读取 dex 文件”部分(链接多于)。

如何成功读取 APK?我错过了什么?

最佳答案

apk 基本上是一个 zip 文件。它包含 dex - 但远不止于此。所以请先从那里提取 dex,然后运行 ​​dex2jar。

关于java - 使用 dex2jar 读取 APK 需要什么魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279864/

相关文章:

java - Eclipse Mars保存后始终无法解决导入问题,但是仅清理项目就可以解决

java - 同步(或 future 返回)调用 Akka UntypedPersistentActor?

java - 我可以将我的 TODO 转换为 git 错误吗?

java - 同时点击多个可点击项目会触发所有项目

android:stretchColumns

android - WebView : webpage not available but I load it from an html string

java - 无法以编程方式为 Android Oreo 上的通知 channel 更新声音

android - MultiDexApplication 的使用导致 Application 类的 Robolectric 测试中断

java - 在LibGDX And​​roid部署中执行transformClassesWithDexForDebug失败

java - 用于字节码检索的解析器 dex 文件