解决 React Native 0.62 安卓打包apk后,index.android.bundle 被修改为二进制文件
问题描述
React Naitve 升级到 0.62,打包正式版 apk 前,将 React Naitve 模块的 js 文件捆绑到 index.android.bundle
,运行
npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
使用 Android Studio,打包正式版 apk,解压 apk,可以发现 index.android.bundle
文件为二进制文件。
$ unzip app-release.apk
$ less assets/index.android.bundle
"assets/index.android.bundle" may be a binary file. See it anyway?
由于 app 做了 javascript 运行错误日志收集,对于修改 bug 非常有用,之前一直能对错误日志进行代码定位。错误格式如下:
{
"message": "Can't find variable: test",
"stack": [
{
"file": "index.android.bundle",
"methodName": "value",
"arguments": [],
"lineNumber": 814,
"column": 15055
},
{
"file": "[native code]",
"methodName": "value",
"arguments": [],
"lineNumber": null,
"column": null
},
{
"file": "index.android.bundle",
"methodName": "onPress",
"arguments": [],
"lineNumber": 232,
"column": 1701
},
...
]
}
以下是升级到 0.62 后,错误日志的格式。methodName 和 lineNumber(都为第1行)都变得不可定位。
{
"message": "Property 'test' doesn't exist",
"stack": [
{
"file": "index.android.bundle",
"methodName": "value (address at",
"arguments": [],
"lineNumber": 1,
"column": 901699
},
{
"file": "index.android.bundle",
"methodName": "onPress (address at",
"arguments": [],
"lineNumber": 1,
"column": 271115
},
{
"file": "index.android.bundle",
"methodName": "value (address at",
"arguments": [],
"lineNumber": 1,
"column": 267186
},
...
]
}
解决方法
修改文件 android/app/build.gradle
,将 enableHermes
修改为 false
。
project.ext.react = [
- enableHermes: true, // clean and rebuild if changing
+ enableHermes: false, // clean and rebuild if changing
]
在开发模式下,可以修改为 true
,方便使用 flipper 调试。