image.png
到此,我们算是完成了 ReactNative App,崩溃分析的⼀个完整的链路逻辑,我们只需要⾃⼰写个脚本⼯具,就可以帮我们精准定位了。
前⾯有点长,这⾥总结⼀下本⼩结的内容。
ReactNative 不同的编译模式,使⽤的 JS 来源不同。Debug 模式来⾃ Packager Server,⽽ Release 模式,来⾃ Apk 的 assets ⽬录。Debug 模式下的崩溃,会触发红屏,⽽ Release 模式下的崩溃,会直接导致 App 崩溃。
Debug 模式,之所以可以显⽰崩溃栈的基本信息,是因为编译的 JS ⽂件中,包含了对应的源⽂件和代码⾏号。⽽这些在 Release 模式下的 JS 是没有的。
Release 模式的崩溃栈是被混淆后的,可以通过崩溃栈显⽰的⾏号和列号,来定位代码,但是⽆法定位具体源⽂件。
通过 react-native 命名,增加 --sourcemap-output参数,指定输出需要的混淆 Mapping ⽂件,它其内包含了混淆的信息。
解读 ReactNative Mapping ⽂件,可以使⽤ source-map 这个 NodeJs 库来进⾏解析,可以精准定位到⾏号和源⽂件名。
另外,RN 项⽬很容易崩溃
经常使⽤发⾏包进⾏测试的开发者们可能会发现,在发⾏版本中,如果出现了脚本错误,还是会直接闪退。我们可能会希望捕获这种错误,给予⽤户合理的提⽰,并采集错误详情帮助后续版本改进。这时候可以使⽤如下的代码:
require('ErrorUtils').setGlobalHandler(function(err) {
// 做你⾃⼰的任何处理
});
实验代码如下:
require('react-native')
react native require('ErrorUtils').setGlobalHandler(function (err) {
console.log('Just ignore');
});
setTimeout(()=>{
throw new Error(‘Ouch');
}, 10000);
require('./src/app'); // 正常启动app
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论