ACRA功能介绍与分析

ACRA概述

介绍

在Android开源库和开源项目一文中,介绍了不少开源项目。其中ACRA是一个Android平台程序崩溃信息收集的开源库,用于嵌入到Android Project中,当该程序崩溃的时候ACRA能够在进程彻底结束前收集崩溃状态时的该应用和设备的各种信息,生成崩溃报告,保存到本地,并在合适的时机发送报告到服务端。使得开发者能进行程序错误信息的收集,可以更好的改进程序以提高兼容性,目前只能支持采集java层的crash,要采集native层需要考虑集成breakpad

github

https://github.com/ACRA/acra

wiki

https://github.com/ACRA/acra/wiki

历史版本

目前的最新版本是5.3.0 (2019年3月23日)

ACRA设计

主要模块

package module comments
acra-advanced-scheduler schedule when to send
acra-core org.acra.attachment
acra-core org.acra.builder 构建
acra-core org.acra.collector 信息采集类
acra-core org.acra.config 配置
acra-core org.acra.data 崩溃报告的数据结构和创建
acra-core org.acra.file 崩溃报告的保存
acra-core org.acra.interaction 发送前的交互管理
acra-core org.acra.legacy 日志遗留,历史报告转成最新报告格式
acra-core org.acra. plugins
acra-core org.acra.prefs acra的配置保存
acra-core org.acra.reporter 崩溃报告的入口
acra-core org.acra.scheduler
acra-core org.acra.sender 崩溃报告发送类库,SenderService在此
acra-core org.acra.startup
acra-core org.acra.util
acra-dialog 发送交互为dialog
acra-http 崩溃报告通过http发送
acra-limiter
acra-mail 崩溃报告通过邮件发送
acra-notification 崩溃报告弹通知来通知
acra-toast 崩溃报告弹toast通知

对外主要接口

class org.acra.ACRA
method init
fields
class org.acra.config.CoreConfigurationBuilder
method
fields
class org.acra.config.CoreConfiguration
method
fields

架构图

待定

CRASH流程图

ErrorReporterImpl ReportBuilder ReportExecutor CrashReport SchedulerStarter uncaughtException build execute createCrashData crashReportData saveCrashReportFile sendReport now, go to the sender module ErrorReporterImpl ReportBuilder ReportExecutor CrashReport SchedulerStarter

交互的设置

  • ACRA的默认行为是静默发送崩溃报告。 除了静默发送崩溃报告以外,还可以选择Toast、Diallog、Notification
  • https://github.com/ACRA/acra/wiki/Interactions

高级用法

  • 自定义报告的内容
    • 在崩溃报告中添加自己的自定义变量或跟踪(“Breadcrumbs”)
    • 将logcat,eventlog或radiolog提取添加到报告中
    • 添加您自己的日志文件将摘录到报告中
    • 将DropBoxManager事件添加到报表中
    • 将设备唯一ID添加到报告中
    • 选择要包含在报告中的字段
    • 添加自定义SharedPreferences名称
    • 排除SharedPreferences键
    • 排除设置键
  • 让您的用户控制ACRA
    • 启用/禁用ACRA
    • 启用/禁用系统日志
    • 启用/禁用包括DeviceID
    • 设置要添加到报告的电子邮件地址
    • 启用/禁用自动接受报告
  • 为捕获的异常或意外的应用程序状态发送报告,没有任何异常
  • 配置KeyStore
  • 捕获应用程序无响应错误(ANR)
  • https://github.com/ACRA/acra/wiki/AdvancedUsage

服务端存储和分析

  • Acralyzer is the new open source backend created by the author of ACRA.
  • https://github.com/ACRA/acralyzer

报告字段

  • https://github.com/ACRA/acra/wiki/ReportContent

其它设计考虑

  • 配置更新
  • 上传时机与策略
  • 上传失败处理
  • 服务端实现
    • 计算上传成功率、重复发送、漏发送
  • 捕获native异常

案例接入

sample

AndroidManifest.xml 添加权限android.permission.INTERNET

<application
            android:name="MyApp"
    android:name="android.permission.INTERNET">uses-permission> 

MyApp.java中初始化代码,以下呈现了一个通过http把crash发送到服务端的例子

@AcraCore(buildConfigClass = BuildConfig.class)
public class MyApp extends Application {
     
    @Override
    protected void attachBaseContext(Context base) {
     
        super.attachBaseContext(base);

        // The following line triggers the initialization of ACRA
        CoreConfigurationBuilder builder = new CoreConfigurationBuilder(this);
        builder.setBuildConfigClass(BuildConfig.class).setReportFormat(StringFormat.JSON);
        builder.getPluginConfigurationBuilder(HttpSenderConfigurationBuilder.class)
                .setUri("http://192.168.1.118:8080/AcraServiceDemo/CrashApiAction")
                .setHttpMethod(HttpSender.Method.POST)
                .setEnabled(true);
        ACRA.init(this, builder);
    }
}

项目地址

待补充

你可能感兴趣的:(Android,ACRA,ACRA分析,ACRA架构,ACRA设计,Android,Crash)