您的位置:首页 > 移动开发 > Android开发

android应用崩溃分析开源工具acra研究以及使用心得

2015-01-15 16:36 721 查看
近期花了2天时间针对android crash 自动采集上传工具ACRA进行研究,客户端错误信息采集功能很强大,但服务端收集需要通过邮件方式或上传到google平台。使用不是很方便,因此根据公司需要,对ACRA进行了简化并利用提供的发送接口搭建了一款适合满足自身需要的系统。

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");

}

并把结果存入数据库中即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: