android应用崩溃分析开源工具acra研究以及使用心得
2015-01-15 16:36
721 查看
近期花了2天时间针对android crash 自动采集上传工具ACRA进行研究,客户端错误信息采集功能很强大,但服务端收集需要通过邮件方式或上传到google平台。使用不是很方便,因此根据公司需要,对ACRA进行了简化并利用提供的发送接口搭建了一款适合满足自身需要的系统。
1、客户端JAR集成方式:
1>Maven dependency
2>直接集成acra.jar
在被测试项目中libs目录下添加jar,右击 jar文件,并且添加到build path。
2、被测试客户代码添加
在package的root目录创建一个新的类
继承android.app.Application,并命名如: MyApplication,在
MyApplication 类中, 覆盖 onCreate() 方法并添加ACRA初始化代码
@ReportsCrashes(formKey = "", // will not be used
formUri = "http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm",
//customReportContent = { ReportField.REPORT_ID,ReportField.ANDROID_VERSION,ReportField.APP_VERSION_CODE,ReportField.APP_VERSION_NAME,ReportField.DEVICE_ID,ReportField.PHONE_MODEL,ReportField.BRAND, ReportField.PRODUCT,ReportField.STACK_TRACE,ReportField.STACK_TRACE,ReportField.PACKAGE_NAME},
formUriBasicAuthLogin = "user", // optional
formUriBasicAuthPassword = "password"// optional
//mode = ReportingInteractionMode.TOAST
//resToastText = R.string.crash_toast_text
)
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ACRA.init(this);
Map<ReportField, String> mapping = new HashMap<ReportField,String>();
mapping.put(ReportField.ANDROID_VERSION, "android_version");
mapping.put(ReportField.APP_VERSION_CODE, "app_version_code");
mapping.put(ReportField.APP_VERSION_NAME, "app_version_name");
mapping.put(ReportField.DEVICE_ID, "device_id");
mapping.put(ReportField.PHONE_MODEL, "model");
mapping.put(ReportField.BRAND, "brand");
mapping.put(ReportField.PRODUCT, "product");
mapping.put(ReportField.STACK_TRACE, "stack_trace");
mapping.put(ReportField.USER_CRASH_DATE, "crash_date");
mapping.put(ReportField.PACKAGE_NAME, "package_name");
ErrorReporter.getInstance().removeAllReportSenders();
//HttpSender httpsend = new HttpSender(HttpSender.Method.POST, HttpSender.Type.JSON,"http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm", mapping);
ErrorReporter.getInstance().addReportSender(new HttpSender(HttpSender.Method.POST, HttpSender.Type.FORM,"http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm", mapping));
}
}
3、服务端
根据客户端定义的传送方式Type.JSON或者Type.FORM,读取采集到的数据即可。采用Type.FORM方式可以通过如下方式:
public void uploadBugByStream(HttpServletRequest request,
HttpServletResponse response) {
String androidVersion=request.getParameter("android_version");
String appVersionCode=request.getParameter("app_version_code");
String appVersionName=request.getParameter("app_version_name");
String deviceId=request.getParameter("device_id");
String model=request.getParameter("model");
String brand=request.getParameter("brand");
String product=request.getParameter("product");
String stackTrace=request.getParameter("stack_trace");
String crashDate=request.getParameter("crash_date");
String packageName=request.getParameter("package_name");
}
并把结果存入数据库中即可。
1、客户端JAR集成方式:
1>Maven dependency
<dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>4.5.0</version> </dependency>
2>直接集成acra.jar
在被测试项目中libs目录下添加jar,右击 jar文件,并且添加到build path。
2、被测试客户代码添加
在package的root目录创建一个新的类
继承android.app.Application,并命名如: MyApplication,在
MyApplication 类中, 覆盖 onCreate() 方法并添加ACRA初始化代码
@ReportsCrashes(formKey = "", // will not be used
formUri = "http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm",
//customReportContent = { ReportField.REPORT_ID,ReportField.ANDROID_VERSION,ReportField.APP_VERSION_CODE,ReportField.APP_VERSION_NAME,ReportField.DEVICE_ID,ReportField.PHONE_MODEL,ReportField.BRAND, ReportField.PRODUCT,ReportField.STACK_TRACE,ReportField.STACK_TRACE,ReportField.PACKAGE_NAME},
formUriBasicAuthLogin = "user", // optional
formUriBasicAuthPassword = "password"// optional
//mode = ReportingInteractionMode.TOAST
//resToastText = R.string.crash_toast_text
)
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ACRA.init(this);
Map<ReportField, String> mapping = new HashMap<ReportField,String>();
mapping.put(ReportField.ANDROID_VERSION, "android_version");
mapping.put(ReportField.APP_VERSION_CODE, "app_version_code");
mapping.put(ReportField.APP_VERSION_NAME, "app_version_name");
mapping.put(ReportField.DEVICE_ID, "device_id");
mapping.put(ReportField.PHONE_MODEL, "model");
mapping.put(ReportField.BRAND, "brand");
mapping.put(ReportField.PRODUCT, "product");
mapping.put(ReportField.STACK_TRACE, "stack_trace");
mapping.put(ReportField.USER_CRASH_DATE, "crash_date");
mapping.put(ReportField.PACKAGE_NAME, "package_name");
ErrorReporter.getInstance().removeAllReportSenders();
//HttpSender httpsend = new HttpSender(HttpSender.Method.POST, HttpSender.Type.JSON,"http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm", mapping);
ErrorReporter.getInstance().addReportSender(new HttpSender(HttpSender.Method.POST, HttpSender.Type.FORM,"http://192.168.1.100:8080/downFile/bugMng/upLoadBugTest.htm", mapping));
}
}
3、服务端
根据客户端定义的传送方式Type.JSON或者Type.FORM,读取采集到的数据即可。采用Type.FORM方式可以通过如下方式:
public void uploadBugByStream(HttpServletRequest request,
HttpServletResponse response) {
String androidVersion=request.getParameter("android_version");
String appVersionCode=request.getParameter("app_version_code");
String appVersionName=request.getParameter("app_version_name");
String deviceId=request.getParameter("device_id");
String model=request.getParameter("model");
String brand=request.getParameter("brand");
String product=request.getParameter("product");
String stackTrace=request.getParameter("stack_trace");
String crashDate=request.getParameter("crash_date");
String packageName=request.getParameter("package_name");
}
并把结果存入数据库中即可。
相关文章推荐
- Android内存优化详解以及内存分析工具MAT的使用
- 干货分享:分析Android应用使用的技术框架和开源库
- Android中的应用——谷歌官方Json分析工具Gson使用
- 使用网络流量分析工具更好调试Android应用
- 使用网络流量分析工具更好调试Android应用(转)
- android 使用开源工具ChkBugReport分析Bugreport
- Android应用测试工具使用的一些心得记录
- android 使用开源工具ChkBugReport分析Bugreport
- android 开源工具 EventBus的使用和源码分析
- 分析Android应用使用的技术框架和开源库
- android轻量级开源缓存框架——ASimpleCache(ACache)源码分析(封装好了一个工具类供大家使用)
- android 使用开源工具ChkBugReport分析Bugreport
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- Android系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程
- android开发环境建立以及开发工具的使用--怎样使用eclipse来开发android源码
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- 借助开源工具高效完成Java应用的运行分析
- Android中Parcel的分析以及使用[转]
- Android中Preference的使用以及监听事件分析
- Android中Parcel的分析以及使用