BreakPad在Cocos2dx Android项目的使用
环境
VMware、Ubuntu Kylin 14.04 LTS(32bit)、Eclipse J2EE
NDK r9c、Android 4.1.2、JDK1.7、Breakpad 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_stackwalk(src->processor)
2、添加到项目
在Cocos项目的jni目录下新建googlebreakpad文件夹,把Breakpad中的src文件夹都加到下面,同时把breakpad中的Android demo中的Android.mk加到其中。如下图(为了省事,我直接在cocos的sample项目中操作的)
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命令,获取verson:head -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
JNI编程: