NativeScript混合移动应用崩溃捕获及错误原因记录方案咨询
没问题!针对你开发NativeScript移动应用时需要捕获崩溃事件、记录错误原因的需求,我把你找到的那段代码完善并整理成了更实用的完整方案:
NativeScript 崩溃事件捕获与错误记录实现
NativeScript 提供了全局的uncaughtErrorEvent事件,可以用来捕获未被处理的异常(也就是导致应用崩溃的错误),下面是跨Android和iOS平台的完整实现:
核心崩溃监听代码
首先在应用的入口文件(比如app.js或main.ts)中添加以下代码:
var application = require("application"); var fs = require("file-system"); application.on(application.uncaughtErrorEvent, function (args) { // 通用错误信息收集 let errorLog = `[${new Date().toISOString()}] 应用崩溃:\n`; if (args.android) { // Android 平台专属处理 const throwable = args.android; errorLog += `平台: Android\n`; errorLog += `错误消息: ${throwable.getMessage()}\n`; errorLog += `错误堆栈:\n${throwable.getStackTrace().toString()}\n`; } else if (args.ios) { // iOS 平台专属处理 const exception = args.ios; errorLog += `平台: iOS\n`; errorLog += `错误名称: ${exception.name}\n`; errorLog += `错误原因: ${exception.reason}\n`; errorLog += `调用堆栈:\n${exception.callStackSymbols.join('\n')}\n`; } // 记录错误到本地文件(也可以改成发送到后端服务器) saveErrorLog(errorLog); // 注意:如果是严重崩溃,应用可能还是会退出,但错误信息已经被记录 }); // 辅助函数:保存错误日志到本地文件 function saveErrorLog(logContent) { const documentsPath = fs.knownFolders.documents().path; const logFilePath = fs.path.join(documentsPath, "crash_logs.txt"); // 追加写入日志 fs.writeText(logFilePath, logContent + '\n\n', { append: true }) .then(() => console.log("崩溃日志已保存")) .catch(err => console.error("保存日志失败:", err)); }
关键说明
application.uncaughtErrorEvent会捕获所有未被try/catch包裹的异常,是捕获崩溃的核心入口- Android平台的
args.android是原生Java的Throwable对象,可以调用原生方法获取详细堆栈信息 - iOS平台的
args.ios是原生Objective-C的NSException对象,包含错误名称、触发原因和完整调用堆栈 - 示例中把日志保存到了应用的documents目录,你也可以根据需求改成上传到后端服务,方便后续的数据分析工作
这样就能完整捕获应用的崩溃事件并记录下足够的错误信息,满足你的数据分析需求啦!
内容的提问来源于stack exchange,提问作者Gauzy
相关产品推荐
相关产品推荐

