cocos creator Android项目集成 Google breakpad

网上有很多Android项目集成Google breakpad的文章但是都不是很全,自己弄了很久结合大家经验参考Google breakpad的事例项目,总算整合成功了。

1.首先下载Google breakpad源代码,地址:https://github.com/google/breakpad 下载后改名为breakpad

下载解压后的目录

cocos creator Android项目集成 Google breakpad_第1张图片

2.集成Google breakpad在后续解读dump文件的时候需要Linux系统才能完成,这里我只讲一下client端的集成,这个阶段不需要Linux系统也能完成。

  以cocos creator空项目为例,配置完Android打包需要的ndk,sdk,ant,构建项目,只需要构建成功即可

cocos creator Android项目集成 Google breakpad_第2张图片

这里已经构建成功了。

3.把下载来的Googlebreakpad放到cocos2d-x的根目录下,这个不是固定的你可以自由选择,只要搜索路径设置对就行。

cocos creator Android项目集成 Google breakpad_第3张图片

使用使用Android studio打开构建好的项目,修改配置。

cocos creator Android项目集成 Google breakpad_第4张图片

cocos creator Android项目集成 Google breakpad_第5张图片

找到项目的Android.mk进行修改

cocos creator Android项目集成 Google breakpad_第6张图片

添加google breakpad的搜素路径,方便在你的项目中去包含Google breakpad的头文件,路径于你googlebreakpad源码包放置位置有关,如果你不是在cocos2d-x目录下就自己去调

添加google breakpad的静态库

添加google breakpad模块,添加google breakpad,Android项目的,mk文件

4.在mian.cpp中引用googlebreakpad的

cocos creator Android项目集成 Google breakpad_第7张图片

添加需要的头文件

#include "client/linux/handler/minidump_descriptor.h"
#include "client/linux/handler/exception_handler.h"
在app_init中添加googlebeakpad的崩溃处理

google_breakpad::MinidumpDescriptor descriptor(".");

google_breakpad::ExceptionHandler* eh = new google_breakpad::ExceptionHandler(descriptor, NULL, DumpCallback,
                                                                              NULL, true, -1);
descriptor()参数为dump文件保存位置 方便测试可以写“sdcard”

添加dumpcallback函数

bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
                  void* context,
                  bool succeeded) {
    LOGD("Dump path: %s\n", descriptor.path());
    return succeeded;
}
现在可以尝试编译一下了。

这个时候编译没有语法错误了,也能找都googlebreakpad目录,但会出现这个错误

cocos creator Android项目集成 Google breakpad_第8张图片

大概意思说你 __STDC_FORMAT_MACROS 这个宏

5.这个时候打开项目的Application.mk文件

cocos creator Android项目集成 Google breakpad_第9张图片

插入在APP_CPPFLAGS 追加缺少的这个宏 -D __STDC_FORMAT_MACROS

然后继续编译... 这个编译很慢请耐心等待...

你没有看出这次编译还是会出错,不过如果你能到这个一步,就离成功不远了。来看这个错误

错误大概意思是说utf16转utf32失败了

cocos creator Android项目集成 Google breakpad_第10张图片

6.这个时候打开breakpad\android\google_breakpad目录找到Android.mk进行修改

cocos creator Android项目集成 Google breakpad_第11张图片

添加../external/sources/ConvertUTF/ConvertUTF.c\

删除src/common/convert_UTF.c \

这里是替换成cocos2dx中对UTF字符操作的库

同时修改breakpad\src\common目录下string_conversion.cc文件 

中的#include "common/convert_UTF.h"替换成cocos2d-x中的 #include "../../external/sources/ConvertUTF/ConvertUTF.h"

cocos creator Android项目集成 Google breakpad_第12张图片

再次编译,就能够通过了。

7.测试自己写一个崩溃函数,就行了如果你的dump目录是sdcard下话真机测试,在崩溃后就会有一个一连串字符组合的后缀名为.dump文件了,有了dump文件发给服务器就行了,后面对dump文件的操作,大家可以去看其他的文章,这里就不在赘述了。

8.注意:dump文件只有真机测试能够生成,模拟器不行。

如果你把崩溃函数加在了appinit函数中那么会生成很多个dump文件这个不是你的错是js的问题,所以建议大家在creator项目中设置个按钮在回调时,利用jsb调C++中写的崩溃函数。这样只会得到一个dump文件。

你可能感兴趣的:(cocos creator Android项目集成 Google breakpad)