开发过程中,最担心的问题就是程序崩溃,而且还不知道崩溃的原因,现在使用Google Breakpad来跟踪崩溃的位置,非常方便;由于目前使用Mac系统开发,Google Breadpad处理Android崩溃日志时需要Linux环境,借助 vagrant 可以非常方便地在Mac使用Ubuntu环境。
有了vagrant以后就方便了~
$ varant ssh $ cd /vagrant $ sudo apt-get update $ sudo apt-get install build-essential $ svn checkout http://google-breakpad.googlecode.com/svn/trunk/ google-breakpad-read-only $ cd google-breakpad-read-only $ ./configure $ make
执行完上面的命令将会在
- google-breakpad-read-only/src/processor 目录下生成minidump_stackwalk 工具,用于导出crash log.
- google-breakpad-read-only/src/tools/linux/dump_syms 目录下生成 dump_syms工具,用于导出符号文件。
- google-breakpad-read-only/src/client/linux 目录下生成 libbreakpad_client.a。
- 如果编译遇到 “cc1plus: warnings being treated as errors “错误,请将google-breakpad-read-only/Makefile文件中”* -Werror* “删除,重新编译。
- 如果make的时候遇到 “/lib64/libc.so.6: version `GLIBC_2.14’ not found “错误,说明 glibc 没有安装,安装方法请移步:http://my.oschina.net/zhangxu0512/blog/262275
集成 google-breakpad到Android项目中
1. 添加google-beakpad代码:
方法一:
- 拷贝 libbreakpad_client.a 到 jni 目录下。
- 打开android项目的 Android.mk文件,在 LOCAL_PATH := $(call my-dir) 下加入如下代码:
include $(CLEAR_VARS) LOCAL_MODULE := breakpad_client LOCAL_MODULE_FILENAME := breakpad_client LOCAL_SRC_FILES := libbreakpad_client.a include $(PREBUILT_STATIC_LIBRARY)
- 方法二:
$(call import-module,google-breakpad-read-only/android/google_breakpad)
- 方法三:
- 将 google-breakpad 源代码里面的src文件夹拷贝到项目的jni目录下;
- 修改Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := breakpad_client
LOCAL_CPP_EXTENSION := .cc .cpp
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := \
main.cpp \
src/client/linux/crash_generation/crash_generation_client.cc \
src/client/linux/handler/exception_handler.cc \
src/client/linux/handler/minidump_descriptor.cc \
src/client/linux/log/log.cc \
src/client/linux/minidump_writer/linux_dumper.cc \
src/client/linux/minidump_writer/linux_ptrace_dumper.cc