cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android

这篇具有很好参考价值的文章主要介绍了cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cocosCreator3.6以上接入Bugly上报其实很简单,不需要网上那么多弯弯绕,三须三步走。

1. 按照官网方式接入android的bugly

2. android端写一个Bugly上报管理类

3. 修改你工程目录下native\engine\common\Classes\目录下的Game.h, Game.cpp两个文件,加上handleException方法。

不需要修改游戏引擎。网上广泛传播的在ts/js代码层游戏开始时监听 window.console.error = function() {}方法实测在网页端有效,在android上没用,这个方法返回个arguments参数,网页端有错误时取arguments[0]就得到详细的Error信息,包括行号列号,错误message和详细stack, 可惜在android端没用,监听不到javascript空指针错误或者其他error错误,只能监听到websocket is error这样无关紧要的信息,这我要你有何用啊!比如我手写一个空结点,let ndMouse:Node = this.ndRoot.getChildbyName("mouse"); ndMouse.active = false;  这个mouse是没有的,运行时我让它故意报错,结果window.console.error居然捕捉不到,网页端却能正常捕捉,真的无语。

具体方法:

1. 按官网方法接入android层面的bugly ,这个官网有详细说明,用gradle方式安装,非常简单,是个人都会。

2. 在安卓端写个BuglyAgent类,方便简单起见写在跟AppActivity一个包里,即 com.cocos.game,如下图:

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android,cocosCreator,javascript,android,android,javascript,开发语言

具体代码如下:

package com.cocos.game;

import android.content.Context;
import android.util.Log;


import java.util.Map;

import com.tencent.bugly.crashreport.CrashReport;

public class BuglyAgent {

    public static void initSDK(Context context, String appId) {
        CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context);
        strategy.setAppPackageName(context.getPackageName());
        strategy.setAppVersion("1.0.1");

        CrashReport.initCrashReport(context, appId, true, strategy);
    }

    public static void postException(int category, String name, String reason, String stack, Map<String, String> extraInfo) {
        Log.d("BuglyAgent", "reason:" + reason);
        CrashReport.postException(category, name, reason, stack, extraInfo);
    }

    public static void postException(int category, String name, String reason, String stack) {
        CrashReport.postException(category, name, reason, stack, null);
    }

}

 这个类很简单,只包括了初始化initSDK方法和上报postException方法,为什么要加上报方法呢,因为bugly不给力啊,不能上报js/ts层面错误 ,只能我们自己监听了。

然后我们可以在AppActivity类里的onCreate方法你觉得合适的地方初始化了,如我写的代码:

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android,cocosCreator,javascript,android,android,javascript,开发语言

这样android层的就做完了,我们剩下的工作就是修改工程里的game.cpp函数,监听报错。

为了不污染游戏引擎代码(就是你的cocosCreator安装目录下resources/resources/3d/engine下的代码),cocos贴心地在你的工程的根目录有个native文件夹, 即工程目录下 native\engine\common\Classes,有两个文件Game.cpp和Game.h,在这里修改

3.修改Game.cpp和Game.h代码

你会发现这两个文件里是没有handleException方法的,这该怎么办呢,你仔细看Game.h, class Game : public cc::BaseGame 它是继承于cc.BaseGame, 这个BaseGame源代码文件在resources\resources\3d\engine\native\cocos\application下,你打开会发现它又继承于CocosApplication类,即当前目录下的CocosApplication.h, 再打开CocosApplication.h你就会发现这个CocosApplication类里有handleException方法的,那就好办了,直接把这个方法声明和实现抄过去,别忘加个override, Game.h如下:

#pragma once

#include "cocos/cocos.h"

/**
 @brief    The cocos2d Application.
 
 The reason for implement as private inheritance is to hide some interface call by Director.
 */
class Game : public cc::BaseGame {
public:
    Game();
    int init() override;
    //bool init() override;
    void onPause() override;
    void onResume() override;
    void onClose() override;
	void handleException(const char* location, const char* message, const char* stack) override;
};

然后修改Game.cpp
首先加个头文件声明 #include "platform/java/jni/JniHelper.h",你也可以严谨点,这样写

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <cocos/platform/java/jni/JniHelper.h>
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "CrashReport.h"
#endif
然后在下面实现handleException方法,注意这里我们在C++层调用了android层的Java方法
 

void Game::handleException(const char *location, const char *message, const char *stack) {
    // Send exception information to server like Tencent Bugly.
    CC_LOG_ERROR("\nUncaught Exception:\n - location :  %s\n - msg : %s\n - detail : \n      %s\n", location, message, stack);
#if (CC_PLATFORM == CC_PLATFORM_ANDROID)
    /**
     * 5是JS错误的标志,Bugly定义的,参考com.tencent.bugly.BuglyStrategy。
     * JSError: 错误的名字,自定义是可以的,Bugly是这么定义的。
     * message: 错误的原因
     * stack: 错误的堆栈
     */
    cc::JniHelper::callStaticVoidMethod("com/cocos/game/BuglyAgent", "postException", 5, "JSError", message, stack);
#elif(CC_PLATFORM == CC_PLATFORM_IOS)
    CrashReport::reportException(message, stack);
#endif
}

这里我们只考虑Android不考虑IOS哈,其实到这一步基本工作都已经完成,这时我们兴冲冲的插上手机,连上Android Studio, 开始调试,注意C++代码在Android Studio也是可以下断点调试的,可是这C++代码怎么在Android Studio里打开呢,很简单你用别的编辑器如Notepad++在你想调试的C++代码里故意乱写一个语法错误,随便乱写个字符都行,然后Android Studio直接点调试按钮就行了,编译不过AS就会报错会在下面Build那一栏显示出哪个C++文件报错了,在那里把它点开就行了。

可是我们在这个Game::handleException下断点启动手机调试时会发现游戏出错时这个方法根本进不去,那大家是不是我又在欺骗大家感情呢?其实我们又错了,进入这个方法的条件是在release模式下打包才能进,Debug模式是进不了这个方法的,好啦,我们用release打包,安装在手机上调试,果然不出所料,上报bugly成功了,还有具体的堆栈和行号呢,连符号表都不用上传了。

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android,cocosCreator,javascript,android,android,javascript,开发语言

 文章来源地址https://www.toymoban.com/news/detail-581629.html

到了这里,关于cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DedeCMS不支持PHP5.3、5.4及以上版本后台500错误白屏的解决方法

    今天把系统换成了windows server 2008 r2 同时将PHP环境提升至PHP5.5版本,测试PHPinfo的时候一点问题都没有,但是登陆dede后台却显示500错误,这应该怎么解决呢?百度了一下发现dede不支持PHP5.3、PHP5.4及以上版本了,主要原为是php5.4的版本废除了session_register函数 可以采用如$_SESSIO

    2023年04月21日
    浏览(44)
  • 如何在Windows7中安装Node.js14.x.x版本及以上版本

    如何在Windows7中安装Node.js14.x.x版本及以上版本呢?具体操作步骤如下: 第一步:在环境变量中添加一条配置: 第二步:下载14.x.x以上的node安装包zip版本,并将其解压,放到你想放的目录下,比如:   第三步:配置环境变量 如果你之前安装了node的其他版本,比如12.x.x,可以

    2024年02月13日
    浏览(59)
  • Windows上传ios dsym到Bugly

    首先下载符号表工具腾讯 Bugly SDK下载 (qq.com) dsym 可以在 wIndow-Organizer-找到版本 右键show In Finder buglyqq-upload-symbol.jar 在上面得文件同级目录下 进入cmd 输入一下命令 需要修改成你自己得信息 java -jar buglyqq-upload-symbol.jar -appid d83b04b3c3 -appkey  89d3e43d-3bc0-42f8-89af-87114e15fc52 -bundleid c

    2024年02月16日
    浏览(37)
  • Unity Android FireBase bugly报错查询

    报错如下图,注意,标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表,在unity安装目录下,也可以从安卓apk中解压出来 找到libunity.sym.so。拷贝到下一步的NDK目录下。 找到NDK中arm-linux-androideabi-addr2line.exe目录 效果如下:

    2024年02月03日
    浏览(54)
  • 无痛接入flow.js

    前言: 针对项目越来越大,js弱类型、动态类型捉襟见肘,导致项目维护成本越来越高,typeScript接入学习成本及vue兼容性等问题,考虑引入flow.js 优点: 静态类型检查,避免类型编码错误 不影响线上代码打包,对线上代码影响小 接入后可仅在需要的文件中使用 项目接入流程

    2024年04月15日
    浏览(31)
  • Android技术分享| Bugly 应用升级自定义UI

    最近项目里的采用免费的Bugly应用升级功能,由于默认的 UI 非常的简陋且与项目整体风格不搭,所以需要自定义UI,本篇文章记录在实现过程中的一些注意事项。根据官方文档可知,自定义升级界面有以下两种方式。 一、固定控件ID 这种方式比较简单,只需要自己编写布局,

    2024年02月02日
    浏览(45)
  • vue项目接入海康威视H5player.js

    插件下载 点击跳转海康威视H5player下载地址 首先我们需要将下载下来的程序包内的JS文件放到我们自己的项目文件 在utils里面还要放置h5player.min.js文件进去 下方代码中解释 注意:一定要放在vue中的public文件夹中 否则会报错 在public/index.html文件中引入 在页面中使用 这样就O

    2024年02月12日
    浏览(48)
  • vue+js+海康web开发包接入海康威视摄像头

    一、登录海康开放平台下载web开发包,下载需要先登录海康账号,没有的需先注册一个。 海康开放平台web开发包下载地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10id=4c945d18fa5f49638ce517ec32e24e24 二、将web开发包引入vue项目 下载后解压的包目录如下: 将把webs下的整个

    2024年02月02日
    浏览(60)
  • 【UE5/UE4】超详细教程接入科大讯飞语音唤醒SDK并初始持久监听(10102错误码解决)

    Windows环境下 **UE版本为UE4.27及以下 你需要具备一定的C++基础,或全程一对一对照我的代码编写你的代码 使用Offline Voice Recognition插件作为录音插件(仅做录音插件使用) 基于https://github.com/zhangmei126/XunFei二次开发 语音识别部分参考CSDNUE4如何接入科大讯飞的语音识别 在此基础

    2024年04月09日
    浏览(68)
  • Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

    Rspack CLI 官方文档。 rspack.config.js 官方文档。 创建项目(文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式,根据需求进行选择) 创建好项目并运行,目前 Rspack 版本支持的工程模版: 默认创建的 vue 项目为 vue3 : 如果需要其他版本,或其他框架的基础工程,可到官方提

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包