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

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

下载解压后的目录cocos creator Android项目集成 Google breakpadcocos creator Android项目集成 Google breakpad

cocos creator Android项目集成 Google breakpad

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

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

cocos creator Android项目集成 Google breakpad

这里已经构建成功了。

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

cocos creator Android项目集成 Google breakpad

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

cocos creator Android项目集成 Google breakpadcocos creator Android项目集成 Google breakpad

cocos creator Android项目集成 Google breakpad

找到项目的Android.mk进行修改cocos creator Android项目集成 Google breakpad

cocos creator Android项目集成 Google breakpadcocos creator Android项目集成 Google breakpad

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

添加google breakpad的静态库

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

4.在mian.cpp中引用googlebreakpad的

cocos creator Android项目集成 Google breakpadcocos creator Android项目集成 Google breakpad

添加需要的头文件

#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 breakpadcocos creator Android项目集成 Google breakpad

大概意思说你 __STDC_FORMAT_MACROS 这个宏

5.这个时候打开项目的Application.mk文件cocos creator Android项目集成 Google breakpad

cocos creator Android项目集成 Google breakpad

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

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

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

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

cocos creator Android项目集成 Google breakpad

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

cocos creator Android项目集成 Google breakpadcocos creator Android项目集成 Google breakpad

添加../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 breakpadcocos creator Android项目集成 Google breakpad

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

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

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

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

相关文章: