You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法反编译React Native安卓APK提取bundle.js及项目文件如何解决

解决方案

为什么没有找到index.android.bundle

React Native打包时支持自定义bundle的输出文件名和路径,并非所有APK的JS bundle都固定命名为index.android.bundle,你在app目录下找到的bundle.js就是你需要的打包后JS产物,无需纠结文件名差异。

解包失败的排查与处理

首先确认bundle.js的文件类型,不同类型对应不同处理方案:

情况1:bundle是Hermes引擎编译的字节码

目前新版本React Native默认开启Hermes引擎,打包后生成的是Hermes字节码文件,而非纯JS代码,直接用debundle处理必然失败,判断和处理方式如下:

  • 用文本编辑器打开bundle.js,若前几行出现乱码或Hermes相关标识,即可确认是字节码文件
  • 先找到与APK打包时匹配版本的hermes工具包,使用其中的hbc-disasm工具将字节码反编译为可读JS代码后,再进行后续解包操作

情况2:bundle是普通metro打包的纯JS代码

如果打开bundle.js可看到以__d(开头的模块化代码,说明是标准metro打包产物,debundle失败是因为该工具已停止维护,对0.60以上版本的RN打包格式适配性差,可按以下步骤处理:

  • 优先使用维护更活跃的react-native-decompiler工具
    • 安装命令:npm install -g react-native-decompiler
    • 解包命令:react-native-decompiler ./bundle.js ./output-folder
    • 解包完成后可在output-folder中得到拆分后的所有JS模块文件
  • 若仍解包失败,可先通过正则提取bundle内的模块ID与代码映射,再手动整理依赖关系

关于完整项目结构和package.json的说明

APK打包后不会保留原始项目的目录结构和package.json文件:

  • JS部分的原始目录结构不会被打包产物携带,只能通过解包后的模块依赖关系手动重构
  • 第三方依赖的版本需要你基于解包后的代码逻辑逆向推导,无法直接得到原始package.json
  • 若bundle文件被开发者做了二次加密,还需要先逆向APK原生层找到解密逻辑,对bundle完成解密后才能正常解包

内容的提问来源于stack exchange,提问作者Sonny49

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:48:03