cocos2dx bugly专业版接入
cocos2dx引擎接入
如果业务使用的是c++的cocos2dx,那么可以参考 iOS 和 Android的接入方式。
如果业务使用的是cocos2dx-lua 或者cocos2dx-js, 理论上也可以直接接入iOS/Android原生sdk,然后自己封装脚本接口。这篇接入指引是bugly官方封装脚本接口的使用方法。
前置准备
首次使用,需要在 Bugly平台 注册对应的产品组,及添加平台,以便获得对应的 AppKey 和 AppID 供后续接入使用
注意:iOS和Android平台是相互独立的,如果你的产品需要在这两个平台发布,就需要将这俩平台都注册一遍。
下载cocos2dx bugly sdk,并解压
将cocos2dx bugly sdk 拷贝到项目根目录下
将bugly sdk/CocosPlugin/bugly 目录拷贝到项目的frameworks/cocos2d-x/external目录下。
cocos2dx-js 接入方法
ios
使用xcode打开proj.ios_mac目录下的xcodepro工程。
在ios文件夹下创建新Group,命名为bugly_sdk,也可以用其他名字
右键点击刚刚创建的Group,选择Add files to xxxx,然后选择frameworks/cocos2d-x/external/bugly目录下的CrashReport.h/mm
注意导入文件的时候,Action选择"Reference files in place":
用同样的方法将frameworks/cocos2d-x/external/bugly/js目录下的BuglyJSAgent.h/cpp 导入bugly_sdk中,最后xcode工程应该是如下样子:
选中刚刚导入的四个文件,在xcode右侧栏中将Location改成
Relative to Project
:在xcode的项目导航栏点击工程,进入Build Settings,往Other Linker Flags中加入一下内容:
-force_load ${SRCROOT}/../../../bugly_sdk/BuglySDK/iOS/BuglyPro.xcframework/ios-arm64/BuglyPro.framework/BuglyPro
-force_load ${SRCROOT}/../../../bugly_sdk/CocosPlugin/agent/iOS/BuglyBridge/libBuglyAgent.a
以上配置依赖前面提到的项目目录结构,如果将bugly sdk放到其他地方,这里的路径也要做相应调整
点击项目设置的General栏,往Framewrorks,Libraries,and Embedded Content中加入
network.framework
再次点击Frameworks,Libraries,and Embedded Content下面的加号按钮,点击左下角的Add Other...,将项目根目录下bugly_sdk/iOS/BuglyPro.xcframework也加入到Frameworks列表中:
此时可以尝试重新编译项目,应该要能编译成功。
往frameworks/runtime-src/Classes/AppDelegate.cpp中加入如下代码:
/// for bugly
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "CrashReport.h"
#include "BuglyJSAgent.h"
#define BUGLY_APPID "b7xxxxxx9b" // 你的Bugly iOS平台产品的appid
#define BUGLY_APPKEY "974513a3-xxxx-xxxx-xxxx-6d03d16cd3cf" // 你的Bugly iOS平台产品的appkey
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "bugly/CrashReport.h"
#include "bugly/js/BuglyJSAgent.h"
#define BUGLY_APPID "55xxxxxxcf" // 你的Bugly Android平台产品的appid
#define BUGLY_APPKEY "bfc8a9c4-xxxx-xxxx-xxxx-22c7be3adda2" // 你的Bugly Android平台产品的appkey
#endif
- 初始化:在AppDelegate::applicationDidFinishLaunching()函数开头加入Bugly初始化代码
/// init bugly
#if defined(COCOS2D_DEBUG)
#define BUGLY_DEBUG_MODE true
#define BUGLY_VERSION_TYPE APP_VERSION_TYPE_DEBUG
#define BUGLY_LOG_LEVEL CrashReport::Verbose
#else
#define BUGLY_DEBUG_MODE false
#define BUGLY_VERSION_TYPE APP_VERSION_TYPE_RELEASE
#define BUGLY_LOG_LEVEL CrashReport::Error
#endif // COCOS2D_DEBUG
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CrashReport::configCrashReportParams("9.5.8", "1.2.3", "xxxx-build-id-yyy-zzz",
"init_user_id", "init_device_module", BUGLY_VERSION_TYPE, BUGLY_LOG_LEVEL);
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CrashReport::setAppVersion("3.1.4");
#endif
CrashReport::initCrashReport(BUGLY_APPID, BUGLY_APPKEY, BUGLY_DEBUG_MODE);
CrashReport::configCrashReportParams的参数说明:
- appVersion: 游戏程序版本
- buildNum: 构建号
- uniqueId: 唯一标识,也可以理解为设备id
- userId: 用户id
- deviceModel: 设备型号
- appVersionType: 游戏程序版本类型,可以是 APP_VERSION_TYPE_DEBUG, APP_VERSION_TYPE_GARY, APP_VERSION_TYPE_RELEASE之一
- logLevel: 日志等级,参考CrashReport.h中LogLevel的定义,一般debug版本的包用Debug级别,release版本的包用Warning或者Error级别
- 注册bugly js api, 在applicationDidFinishLaunching函数下方调用如下方法注册bugly的js api,用于在js中设置场景信息/用户id等信息。这时可选的,如果不需要js接口,就不用进行这一步。
sc->addRegisterCallback(BuglyJSAgent::registerJSFunctions);
注意,上面示例图中是测试环境的代码,正式代码请参考上面的代码块内容
- 在启动main.js前注册js异常捕获:
/// for bugly js 异常
BuglyJSAgent::registerJSExceptionHandler(ScriptingCore::getInstance()->getGlobalContext());
此时bugly应该就可以自动捕获和上报js异常和native crash了。如果上报不成功,请联系bugly小助手
Android
cocos2dx-js Android平台的接入代码在上面iOS部分都已经说明(因为代码都是同一套),下面只说明Android平台的项目设置。
- 将项目根目录下的
bugly_sdk/BuglySDK/Android/bugly-pro-4.4.3.7.aar
文件拷贝到proj.android/app/libs目录下。 - 修改proj.android/app/build.gradle文件,将
implementation fileTree
加上'*.aar'文件。在dependencies中引入bugly,并添加bugly的依赖项:
/// bugly sdk 的依赖
implementation 'org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.41'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41'
implementation 'com.squareup.leakcanary:shark:2.7'
implementation 'androidx.annotation:annotation:1.2.0'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
- 修改proj.android/app/proguard-rules.pro文件,添加混淆白名单:
# for bugly
-keep public class com.tencent.bugly.agent.GameAgentPro {
public *;
}
- 修改proj.android/app/jni/Android.mk文件,将bugly接口封装和js脚本封装类引入:
# for bugly
LOCAL_STATIC_LIBRARIES += bugly_crashreport_cocos_static
LOCAL_STATIC_LIBRARIES += bugly_agent_cocos_static_js
# for bugly
$(call import-module, external/bugly)
# for bugly js api
$(call import-module, external/bugly/js)
- 在proj.android目录下的build.gradle中添加如下代码:
ext.kotlin_version = "1.3.41"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- 重新生成项目,应该能编译成功。且能自动监控和上报js异常和native crash。如果不能,请联系Bugly小助手。
bugly js api暴露的接口可以在BuglyJSAgent.cpp中找到。包括:
- buglySetUserId(string) // 设置用户id
- buglyAddUserValue(string_key, string_value) // 设置自定义字段
- buglySetScene(string) // 设置场景/关卡信息
cocos2dx-lua 接入方法
cocos2dx-lua 接入方法和cocos2dx-js类似,前置准备也是一样的。只是接入和初始化代码略有不同。下面做详细说明。
cocos2dx-lua iOS平台
前四步都和cocos2dx-js一样
- 使用同样的方法将
cocos2d-x/external/bugly/lua
目录下的BuglyLuaAgent.h/cpp导入xcode。 - 同cocos2dx-js
- 同cocos2dx-js
- 同cocos2dx-js
- 同cocos2dx-js
- 同cocos2dx-js
- 往frameworks/runtime-src/Classes/AppDelegate.cpp中加入如下代码:
/// for bugly
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "CrashReport.h"
#include "BuglyLuaAgent.h"
#define BUGLY_APPID "b7xxxxxx9b" // 你的Bugly iOS平台产品的appid
#define BUGLY_APPKEY "974513a3-xxxx-xxxx-xxxx-6d03d16cd3cf" // 你的Bugly iOS平台产品的appkey
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "bugly/CrashReport.h"
#include "bugly/lua/BuglyLuaAgent.h"
#define BUGLY_APPID "55xxxxxxcf" // 你的Bugly Android平台产品的appid
#define BUGLY_APPKEY "bfc8a9c4-xxxx-xxxx-xxxx-22c7be3adda2" // 你的Bugly Android平台产品的appkey
#endif
- 初始化:在AppDelegate::applicationDidFinishLaunching()函数开头加入Bugly初始化代码:
/// init bugly
#if defined(COCOS2D_DEBUG)
#define BUGLY_DEBUG_MODE true
#define BUGLY_VERSION_TYPE APP_VERSION_TYPE_DEBUG
#define BUGLY_LOG_LEVEL CrashReport::Verbose
#else
#define BUGLY_DEBUG_MODE false
#define BUGLY_VERSION_TYPE APP_VERSION_TYPE_RELEASE
#define BUGLY_LOG_LEVEL CrashReport::Error
#endif // COCOS2D_DEBUG
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CrashReport::configCrashReportParams("9.5.8", "1.2.3", "xxxx-build-id-yyy-zzz",
"init_user_id", "init_device_module", BUGLY_VERSION_TYPE, BUGLY_LOG_LEVEL);
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CrashReport::setAppVersion("3.1.4");
#endif
CrashReport::initCrashReport(BUGLY_APPID, BUGLY_APPKEY, BUGLY_DEBUG_MODE);
- 注册bugly lua api, 在applicationDidFinishLaunching函数下方调用如下方法注册bugly的Lua api,用于在js中设置场景信息/用户id等信息。这时可选的,如果不需要Lua接口,就不用进行这一步。
// for bugly lua exception
BuglyLuaAgent::registerLuaExceptionHandler(engine);
- 注册Lua异常回调:修改
src/cocos/init.lua
中的GTRACKBACK__函数为如下样子:
__G__TRACKBACK__ = function(msg)
-- record the message
local message = msg
local msg = debug.traceback(msg, 3)
print(msg)
-- report lua exception to bugly
buglyReportLuaException(tostring(message), debug.traceback())
return msg
end
此时bugly应该就可以自动捕获和上报异常和native crash了。如果上报不成功,请联系bugly小助手
cocos2dx-lua Android平台
cocos2dx-lua Android平台的接入代码在上面iOS部分都已经说明(因为代码都是同一套),下面只说明Android平台的项目设置。
前三步和上面cocos2dx-js Android平台接入的一样。
- 修改proj.android/app/jni/Android.mk文件,将bugly接口封装和js脚本封装类引入:
# for bugly
LOCAL_STATIC_LIBRARIES += bugly_crashreport_cocos_static
LOCAL_STATIC_LIBRARIES += bugly_agent_cocos_static_lua
# for bugly
$(call import-module, external/bugly)
# for bugly js api
$(call import-module, external/bugly/lua)
注意到了吗?只是引入的库不一样,前面是引入js库,这里是引入lua库
- 和cocos2dx-js Android一样。
- 重新生成项目,应该能编译成功。且能自动监控和上报js异常和native crash。如果不能,请联系Bugly小助手。
bugly lua api暴露的接口可以在BuglyLuaAgent.cpp中找到。包括:
- buglySetUserId(string) // 设置用户id
- buglyAddUserValue(string_key, string_value) // 设置自定义字段
- buglySetScene(string) // 设置场景/关卡信息