Breakpad 在 Cocos Android项目中的使用

BreakPadCocos2dx Android项目的使用

环境

VMwareUbuntu Kylin 14.04 LTS32bit)、Eclipse J2EE

NDK r9cAndroid 4.1.2JDK1.7Breakpad r1339、 Cocos2.2.3


备注:之前下载的Breakpad最新版,但是总是遇到Uncontext.h 出问题,最后换了个版本 1339就好了


前期准备

1、配置好Ubuntu下面Android的开发环境; 

2、Eclipse配置好Android真机调试; 

3、建立Cocos游戏Demo

4、下载源码 svn checkout http://google-breakpad.googlecode.com/svn/trunk/  r1339 google-breakpad-read-only


Breakpad 使用

1、编译breakpad得到工具

Breakpad主目录下面有个README文件,打开里面有配置指引

 

使用办法就是在终端进入到Breakpad主目录,依次执行命令./configure; make; make install。在make install时,如果出错,直接采用sudo make install 即可。

编译完成后得到可执行文件dump_syms(路径:src->tools->linux->dump_syms)和minidump_stackwalksrc->processor

2、添加到项目

Cocos项目的jni目录下新建googlebreakpad文件夹,把Breakpad中的src文件夹都加到下面,同时把breakpad中的Android demo中的Android.mk加到其中。如下图(为了省事,我直接在cocossample项目中操作的)

        

3、修改项目Android.mk

之前的Android.mk是左图,修改成右图

修改或增加右侧图片划线部分

    

4、添加breakpad实例使用

1》因为要写文件到SD卡,所以首先要在Android程序中配置SD卡的写操作

AndroidManifest.xml 中增加

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

注意:使用小米手机测试时,在调试过程中要关闭USB数据存储才能写数据到SD

2》在hellocpp->main.cpp中添加

#include "../googlebreakpad/src/client/linux/handler/exception_handler.h"

#include "../googlebreakpad/src/client/linux/handler/minidump_descriptor.h" 

google_breakpad::ExceptionHandler* eh;  // 只有定义在函数外才能保证全局有效,否则只是在函数体内部有效 

jint JNI_OnLoad(JavaVM *vm, void *reserved)

{

    JniHelper::setJavaVM(vm);

    google_breakpad::MinidumpDescriptor descriptor("/sdcard/hellobreakpad/"); // 确保SD卡中有hellobreakpad这个文件夹

    eh = new google_breakpad::ExceptionHandler(descriptor, NULL, NULL, NULL, true,-1); 

    return JNI_VERSION_1_4;

}

5、解析dump

1》首先取出项目中的obj下面的libhellocpp.so

 

2》执行命令 ./dump_syms libhellocpp.so > libhellocpp.so.sym

3》使用head命令,获取versonhead  -n1 libhellocpp.so.sym

会有大概如下输出: 

MODULE Linux arm C80AEA7AF6F380D83EC0866D799369450 libhellocpp.so 

4》根据 README.ANDROID 的指引,我们将生成的 libhellocpp.so.sym 文件放入文件夹:【 /HelloCpp/symbols/libhellocpp.so/C80AEA7AF6F380D83EC0866D799369450/ 】里面。

 5》然后将 拿到的 dump文件和 minidump_stackwalk 放到【 /HelloCpp/symbols/ 下面

 6》执行命令

./minidump_stackwalk  089db057-1c2c-94d0-68f468a8-02dfa8d2.dmp  ./ > result.txt

环境配置

Ubuntu配置Cocos开发的环境 

http://www.nwtel.cn/forum.php/forum.php?mod=viewthread&tid=6&extra=page%3D1PDF 

http://www.nwtel.cn/thread-7-1-1.html 

http://blog.csdn.net/typ0520/article/details/8019356 


Eclipse真机调试

http://blog.csdn.net/whucyl/article/details/17057859  

Android开发环境搭建全程演示(jdk+eclipse+android sdk)

http://hi.baidu.com/wlj1013/item/3e6080351168b9302f0f815c 

错误记录

1/将环境变量从profile中转移到 bashrc中之后,启动Eclipse会出现以下问题
A Java Runtime Environment (JRE) or Java Development Kit (JDK)
must be available in order to run Eclipse. No Java virtual machine
was found after searching the following locations:
/home/zishuiyi/Software/eclipse/jre/bin/java
java in your current PATH


2/ 在eclipse中进行真机测试的时候,会遇到设备识别出来为 ????
解决办法为
http://blog.csdn.net/whucyl/article/details/17057859
http://www.linuxidc.com/Linux/2012-02/54836.htm
http://blog.csdn.net/a497393102/article/details/12689399

之前因为在 home目录下有个 android sdk  同时设定其为环境变量,但是Eclipse 中引用的 sdk并不是这个路径下面的sdk,所以导致一直设置了设备都是显示?????,浪费了很多时间

3/ 很好的android开发环境配置图解
http://hi.baidu.com/wlj1013/item/3e6080351168b9302f0f815c


4/ 在Eclipse 中安装ADT 插件的时候不显示 AVD 在主窗体的解决办法
http://blog.csdn.net/zcyhappy1314/article/details/8307534


新版本的编译不通过

Cocos版本移植

平台指令集的配置 (APP_ABI

参考链接

官网:https://code.google.com/p/google-breakpad/w/list 

Breakpad使用:http://cstriker1407.info/blog/android-application-development-notes-jni-crash-capture-and-google-breakpad/ 

JNI编程:

猜你喜欢

转载自blog.csdn.net/zishuiyi/article/details/40890379