React Native发布版APK启动页闪退,开发模式正常该如何排查?
React Native 0.65.1 正式包启动闪退排查方案
打包命令异常排查
你当前使用的打包命令gradlew assembleRelease -x bundleReleaseJsAndAssets添加了-x bundleReleaseJsAndAssets参数,作用是跳过JS代码和资源的打包流程。如果你没有提前手动执行JS打包命令将产物放到安卓项目对应目录,打出来的正式包没有运行所需的JS代码,会直接触发启动闪退。
如果需要保留该跳过参数,需先执行以下命令打包JS资源:
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
执行完成后再执行打包命令生成APK,先验证是否是该原因导致的闪退。
本地闪退原因检测方法
- 连接测试设备开启USB调试,执行命令抓取系统崩溃日志:
adb logcat *:E,启动APP触发闪退之后,搜索AndroidRuntime、ReactNative、Crash关键字,即可查看完整的报错栈,原生层、JS层的报错都会被捕获。 - 开启正式包可调试权限,在
android/app/build.gradle的release构建配置段添加debuggable true,重新打包安装后,可通过Chrome开发者工具的chrome://inspect功能连接APP运行环境,直接查看JS层报错信息。 - 检查ProGuard混淆规则,在
android/app/proguard-rules.pro文件中确认已添加React Native官方要求的保留规则,同时补充所有第三方原生依赖的混淆规则,避免类、方法被误删触发闪退,RN 0.65.1通用混淆规则参考:
-keep class com.facebook.react.** { ; }
-keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp; } * { *; }
-keep class com.facebook.react.bridge.
- 核对targetSdkVersion 30的适配逻辑,Android 11的包可见性、文件访问权限等特性如果没有做适配,运行时触发权限问题也会直接闪退。
线上闪退监控方案
- 接入崩溃监控SDK,比如Bugly、Firebase Crashlytics,可自动捕获原生层、JS层的所有闪退,上报完整报错栈、设备信息、运行场景,方便排查线上用户的闪退问题。
- 自定义JS全局异常捕获,在项目JS入口文件最外层添加
ErrorUtils.setGlobalHandler方法,自定义全局异常捕获逻辑,将JS报错信息、调用栈存储到本地,也可自行上报到服务端做统计分析。
内容的提问来源于stack exchange,提问作者wendy
相关产品推荐
相关产品推荐

