在Android上玩google-breakpad(崩溃日志收集)

准备:把ndk目录加到$PATH。

首先得到代码

svn co http://google-breakpad.googlecode.com/svn/trunk breakpad

然后把整个代码目录breakpad复制一份,一份用来编译Linux的tool,一份编Android的静态库。

编译Tool:

[plain]  view plain  copy
  1. cd breakpad  
  2. chmod +x configure  
  3. ./configure  
  4. make  

编译android静态库:

[plain]  view plain  copy
  1. cd breakpad  
  2. SYSROOT=$android-ndk-r8d/platforms/android-8/arch-arm  
  3. export CC="arm-linux-androideabi-gcc --sysroot=$SYSROOT"  
  4. ./configure --disable-processor --disable-tools --host=arm-linux-androideabi  

然后新建一个terminal(为了把export CC的效果去除),继续:

[plain]  view plain  copy
  1. cd breakpad  
  2. cd android/sample_app  
  3. ndk-build  
这样就能编出示例程序。


加到自己的程序:

在自己的Android.mk里加入

[plain]  view plain  copy
  1. include $(LOCAL_PATH)/src/breakpad/android/google_breakpad/Android.mk  
C/C++代码里加入:

[cpp]  view plain  copy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7. #include "client/linux/handler/exception_handler.h"  
  8.   
  9. static google_breakpad::ExceptionHandler *handler = NULL;  
  10.   
  11. JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)  
  12. {  
  13.     google_breakpad::MinidumpDescriptor descriptor("/sdcard");  
  14.     handler = new google_breakpad::ExceptionHandler(descriptor,  
  15.               NULL,  
  16.               NULL,  
  17.               NULL,  
  18.               true,  
  19.               -1);  
  20.     return JNI_VERSION_1_6;  
  21. }  
在JNI_Onload里注册client。

然后Java代码里加载你的so。

[java]  view plain  copy
  1. System.loadLibrary("MySo");  


如果崩溃了,会在/sdcard/下生成 UUID.dmp(UUID是真的一串UUID)。

把UUID.dmp拷贝出来,然后参考这个做。

http://blog.csdn.net/brook0344/article/details/20126351

得到崩溃堆栈文本后,使用addr2line来把函数地址转换成代码行

参考这个:

http://blog.csdn.net/yanzheng1113/article/details/8148091


google-breakpad在我们项目的位置在:external\google-breakpad,目前是集成在build的版本内的。

你可能感兴趣的:(文章)