前言
Bugly官方有对接Cocos引擎的文档,但是文档较老,目前Creator又到1.7版本,按着官方的文档来接可能会遇到一些问题。针对论坛上一些新同学的要求,搞了一个简要的教程,方法与Bugly官方的略有差异,好处是只会改动工程相关的代码,不会触碰到cocos2d-x。
首先是下载BuglyCocos Plugin 下载。
Bugly接入Android
-
将
CocosPlugin\agent\Android\bugly_agent.jar
和BuglySDK\Android\bugly_crash_release.jar
拷贝到Android工程的frameworks\runtime-src\proj.android-studio\app\libs\
里面。 -
将
BuglySDK\Android\libs\armeabi-v7a
文件夹拷贝到jsb-default\frameworks\runtime-src\proj.android-studio\app\jni\prebuilt
,如果prebuilt
文件夹不存在就创建一下,如果还需要其他ABI就拷贝相应的,比如常用于模拟器的x86
。 -
将
CocosPlugin\bugly
文件夹拷贝到frameworks\runtime-src\Classes
里面,其实只需要用到CrashReport.h
和CrashReport.mm
,其他的如js, lua文件夹并不需要,你可以把它们删掉,即拷贝过去后是这样的结构:
- Classes\
- bugly\
- CrashReport.h
- CrashReport.mm
- 接着打开
frameworks\runtime-src\proj.android-studio\app\jni\Android.mk
,加入bugly的配置,文件大概如下,和Bugly相关的加了注释:
LOCAL_PATH := $(call my-dir)
# --- bugly: 引用 libBugly.so ---
include $(CLEAR_VARS)
LOCAL_MODULE := bugly_native_prebuilt
LOCAL_SRC_FILES := prebuilt/$(TARGET_ARCH_ABI)/libBugly.so
include $(PREBUILT_SHARED_LIBRARY)
# --- bugly: end ---
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2djs_shared
LOCAL_MODULE_FILENAME := libcocos2djs
ifeq ($(USE_ARM_MODE),1)
LOCAL_ARM_MODE := arm
endif
# --- bugly: 增加cpp扩展名mm
LOCAL_CPP_EXTENSION := .mm .cpp .cc
LOCAL_CFLAGS += -x c++
# --- bugly: 增加CrashReport.mm文件
LOCAL_SRC_FILES := hellojavascript/main.cpp \
../../../Classes/AppDelegate.cpp \
../../../Classes/bugly/CrashReport.mm \
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes
LOCAL_STATIC_LIBRARIES := cocos2d_js_static
LOCAL_EXPORT_CFLAGS := -DCOCOS2D_DEBUG=2 -DCOCOS2D_JAVASCRIPT
include $(BUILD_SHARED_LIBRARY)
$(call import-module, scripting/js-bindings/proj.android)
参照如上的规则,看看bugly相关的地方,加一下就可以了,应该也不难理解。
- 最后是修改AppDelete.cpp文件,打开
frameworks\runtime-src\Classes\AppDelegate.cpp
:
// bugly
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "bugly/CrashReport.h"
#endif
... ...
bool AppDelegate::applicationDidFinishLaunching()
{
// bugly: 初始化bugly, xxxxxx是你的APPID,这个不用多说了吧
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CrashReport::initCrashReport("xxxxxxx", false);
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CrashReport::initCrashReport("xxxxxxx", false);
#endif
.... ....
#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0)
// Enable debugger here
// Change IP while remote debugging on Android device.
jsb_enable_debugger("0.0.0.0", 5086);
#endif
// bugly: 设置JS的异常上报
se->setExceptionCallback([](const char* location, const char* message, const char* stack){
// Send exception information to server like Tencent Bugly.
CrashReport::reportException(CATEGORY_JS_EXCEPTION, "JSException", message, stack);
});
... ...
}
最后编译工程,如无意外应该就成功了,崩溃和JS异常都会上报到Bugly上面。不过崩溃是需要符号表的,否则无法看到完整的堆栈信息。
这里留个坑,等后面有时间再来补齐,待补的内容如下面的大纲。
Android符号文件的自动上传
Bugly提供一个工具方便提取符文表文件以及上传,下载在这里。
使用方式大概是这样的:
PROJECT_ROOT = <替换成你的安卓工程根目录>
so_path = PROJECT_ROOT + "/frameworks/runtime-src/proj.android-studio/app/libs/armeabi-v7a/libcocos2djs.so" # so文件路径
save_path = "x86-symbol.zip" # 保存符号表的路径
app_id = "xxxx" # 你的bugly app_id
app_key = "xxxx" # 你的bugly app_key
package = "com.xxx.xxx" # 你的包名
channal = "xx" # 你的渠道
version = "1.0.0.2222" # 你的程序版本号
cmd = 'buglySymbolAndroid.bat -i %s -o %s -u -id %s -key %s -package %s -channel %s -version %s' % (
so_path, save_path, app_id, app_key, package, channal, version, )
os.system(cmd)
上面的python脚本略作修改,就可以用于实际项目中。
一般构建过程都会写成自动化的命令行方式,上面脚本可以在构建APK完毕之后调用,并且渠道,版本号什么的,都可以通过参数传进来。这样就实现构建和上传符号表自动化的流程。
Bugly接入IOS
IOS的接入比较简单,一般按Bugly的帮助文档可以成功接入,这里写一个大概的流程
- 打开xcode工程:
frameworks/runtime-src/proj.ios_mac/xxxx.xcodeproj
- 在Android接入流程中,已经将
CrashReport.h
和CrashReport.mm
放在frameworks/runtime-src/Classes/bugly
中,所以直接将这两个文件加进xcode工程即可。 - 在
proj.ios_mac/ios/
中新建bugly
目录,并将libBuglyAgent.a
,Bugly.framework
拷贝过去,目录结构大概是:
- ios\
- bugly\
- Bugly.framework
- libBuglyAgent.a
- 接着,将Bugly.framework和libBuglyAgent.a加到xcode。在
Build Settings
的Other Linker Flags
配置中添加-force_load
标记, 设置libBuglyAgent.a 和 Bugly.framework的路径,如:
-force_load
${SRCROOT}ios/bugly/libBuglyAgent.a
-force_load
${SRCROOT}ios/bugly/Bugly.framework/Bugly
- 因为在Android流程中,已经修改了AppDelete.cpp代码,所以不需要再写代码了,直接编译xcode工程,如无意外将编译成功。
IOS符号文件的自动上传
Bugly官方提供了一段脚本集成到XCode的构建流程中,这样编译完成,就会自动上传符号表到Bugly网站:
- 从这里下载这个工具
- 解压后,里面有一个
dSYMUpload.sh
脚本,修改里面的BUGLY_APP_ID
,BUGLY_APP_KEY
,BUNDLE_IDENTIFIER
, 含义非常明显,不多作解释,如果你想只有Archive操作时才上传,则修改UPLOAD_ARCHIVE_ONLY=1
- 在Xcode工程对应Target的Build Phases中新增Run Scrpit Phase, 将
dSYMUpload.sh
的内容拷贝进去。 - 然后就OK了,以后你每次编译Release或Archive,就会自动上传符号表
- 如果你还想更进一步的了解,请参考https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=20171109131920
到此接入Bugly完毕,中间遇到什么问题请自行摸索或参考官方文档。