当前位置: 首页 > 工具软件 > acra > 使用案例 >

ACRA功能介绍与分析

锺离明煦
2023-12-01

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设计

主要模块

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

对外主要接口

classorg.acra.ACRA
methodinit
fields
classorg.acra.config.CoreConfigurationBuilder
method
fields
classorg.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

交互的设置

高级用法

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

服务端存储和分析

报告字段

其它设计考虑

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

案例接入

sample

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

<application
            android:name="MyApp"
   <uses-permission 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);
    }
}

项目地址

待补充

 类似资料: