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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 准备:把ndk目录加到$PATH。首先得到代码svn co http://google-breakpad.googlecode.com/svn/trunk breakpad然后把整个代码目录breakpad复制一份,一份用来编译linux的tool,一份编android的静态库。

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

首先得到代码

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

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

编译Tool:

cd breakpad
chmod +x configure
./configure
make

编译Android静态库:

cd breakpad
SYSROOT=$android-ndk-r8d/platforms/android-8/arch-arm
export CC="arm-linux-androideabi-gcc --sysroot=$SYSROOT"
./configure --disable-processor --disable-tools --host=arm-linux-androideabi

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

cd breakpad
cd android/sample_app
ndk-build
这样就能编出示例程序。


加到自己的程序:

在自己的Android.mk里加入

include $(LOCAL_PATH)/src/breakpad/android/google_breakpad/Android.mk
C/C++代码里加入:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <jni.h>
#include <assert.h>
#include <android/log.h>
#include "client/linux/handler/exception_handler.h"

static google_breakpad::ExceptionHandler *handler = NULL;

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
	google_breakpad::MinidumpDescriptor descriptor("/sdcard");
	handler = new google_breakpad::ExceptionHandler(descriptor,
			  NULL,
			  NULL,
			  NULL,
			  true,
			  -1);
	return JNI_VERSION_1_6;
}
在JNI_Onload里注册client。

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

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
627 0
|
1月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
55 8
|
2月前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
42 2
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
141 1
|
7月前
|
Android开发
如何在Android真机上检测是否有Google Map add-on
如何在Android真机上检测是否有Google Map add-on
81 3
|
4月前
|
开发工具 Android开发
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
141 1
|
5月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
96 4
|
4月前
|
安全 Java Android开发
Android 14适配Google play截止时间临近,适配注意点和经验
本文介绍了Android 14带来的关键更新,包括性能优化、定制化体验、多语言支持、多媒体与图形增强等功能。此外,还强调了适配时的重要事项,如targetSdkVersion升级、前台服务类型声明、蓝牙权限变更等,以及安全性与用户体验方面的改进。开发者需按官方指南更新应用,以充分利用新特性并确保兼容性和安全性。
322 0
|
7月前
|
监控 安全 API
orhanobut/logger - 强大的Android日志打印库
orhanobut/logger - 强大的Android日志打印库
348 1
|
7月前
|
Shell
android2.3.4没有google map的真机上增加google map(原创)
android2.3.4没有google map的真机上增加google map(原创)
61 4