React Native APK是否包含原生二进制代码与JS Bundle?打包机制问询
React Native 中二进制与 JS 代码的 APK 打包机制
一、原生二进制代码的打包路径
React Native 的 Android 原生代码(Java/Kotlin 编写的部分)会被编译成 DEX 字节码文件,最终打包进 APK 的 classes.dex(或拆分后的多个 dex 文件)里。另外,React Native 底层的 C++ 逻辑、依赖的原生库会被编译成对应 CPU 架构(arm64-v8a、armeabi-v7a 等)的 .so 二进制文件,存放在 APK 的 lib/{架构}/ 目录下——这部分就是你能直接看到的二进制内容。
二、JS 代码的打包与隐藏逻辑
你看不到 JS 代码是因为它被打包成了 bundle 文件,默认藏在 APK 的 assets/index.android.bundle 路径下,不是明文代码:
- 打包时,Metro 工具会把所有 JS/TS 代码、第三方依赖合并压缩成单一的 bundle 文件,Release 模式下还会自动移除注释、混淆变量名,所以直接看是一堆乱码,容易误以为没包含进去。
- Debug 模式下的 bundle 可能是明文或轻压缩,但正式打包的 Release 版本会做深度压缩,可读性极低。
三、两类代码的整合流程
整个 APK 打包的核心步骤是:
- 执行
gradlew assembleRelease(或 Android Studio 打包操作)时,先编译原生代码,生成 DEX 和 SO 文件。 - 同时触发 Metro 打包命令,生成 JS bundle 和配套的资源文件(图片、字体等)。
- Gradle 会把 Metro 输出的 bundle 和资源复制到 Android 项目的
assets目录,再和原生编译产物一起打包进 APK。 - 最后经过签名、对齐,生成完整的 Release APK。
验证 JS bundle 存在的方法
要是你想确认 bundle 确实在 APK 里,试试这两步:
- 把 APK 后缀改成
.zip解压,查看assets目录下有没有index.android.bundle文件。 - 用
react-native-unbundle这类工具对 bundle 文件反编译,就能还原出可读的 JS 代码(前提是没开启极致混淆)。
内容的提问来源于stack exchange,提问作者misbah
相关产品推荐
相关产品推荐

