使用ACRA和Cloudant自动生成Android崩溃报告

本文概述

  • 为什么Android错误报告很重要
  • 介绍ACRA
  • 设置Cloudant后端
  • 使用acralyzer可视化Android崩溃报告
  • 在你的Android项目中实施ACRA
  • 需要帮忙?这是一个示例项目
  • ACRA的替代品
  • 结论
制作基本的Android应用很容易。另一方面, 制作可靠, 可扩展且强大的Android应用程序可能会非常具有挑战性。
从成千上万的不同制造商那里抽出成千上万的可用设备, 假设单条代码将在手机之间可靠地运行, 充其量只是天真。
细分是拥有开放平台的最大权衡, 我们以代码维护的货币支付价格, 这种价格在应用程序通过生产阶段后仍会持续很长时间。
为什么Android错误报告很重要 那么, 当Android应用崩溃或无响应时会发生什么呢?好吧, “ 强制关闭” 对话框会弹出, 让用户知道出了点问题。如果该应用是通过Google Play下载的, 则系统会提示用户通过发送详细的Android故障报告(包括时间, 手机型号, Android版本, 堆栈跟踪等)来报告故障(开发人员可以在其中查看)开发人员控制台, 可让你解决问题的根源。
这一切听起来都很好, 但是Android的默认错误报告存在一个主要问题:用户倾向于不使用它, 从而使开发人员对应用程序的状态一无所知。
这一切听起来都很好, 但是使用Android的默认错误报告存在一个主要问题:当应用崩溃时, 用户往往不采取任何措施;实际上, 大多数选择不发送Android错误报告。那么, 作为一个有责任心的开发人员, 你如何才能获得有关应用程序崩溃和失败的可靠见解?
使用ACRA和Cloudant自动生成Android崩溃报告

文章图片
介绍ACRA ACRA代表” Android自动崩溃报告” 。这是一个免费的库, 你可以使用几行代码来解决” 手动错误报告” 问题。实施该库并正确初始化所有内容后, 你将能够自动提取与Google默认值相同的Android错误日志(以及大量添加的自定义选项), 而无需用户采取任何措施。
除此之外, ACRA还可让你选择将Android崩溃通知用户的方式, 默认设置为静音后台报告, 以及包括自定义对话框在内的其他选择。
直到最近, ACRA还得到了Google Spreadsheet的支持, 这意味着你可以将所有报告存储在一个文件中, 该文件免费托管在你的Google Drive帐户中。不幸的是, Google要求我们将来不再使用此选项, 因此我们剩下了一些发送崩溃报告数据的替代方法, 其中一些将在本教程中介绍:
  • 标准电子邮件(仍然需要用户交互)。
  • 自定义电子邮件/ HTTP客户端(需要大量设置)。
  • 定制后端(选项从免费到商业解决方案不等)。
在本文中, 我们将分析以下解决方案之一:将你的ACRA报告托管在Cloudant后端, 并使用acralyzer可视化数据。
设置Cloudant后端 我们需要做的第一件事是注册一个Cloudant帐户。当然, 有一个陷阱:Cloudant的服务并非完全免费, 但根据其定价页面, 你不可能超过每月5美元的限制(除非你拥有庞大的用户群和代码中的大量错误)。
注册后, 我们需要了解事情的运作方式。在较高的级别上, 我们的后端将包含两个组件:
  1. 存储数据库, 或更确切地说, 是Apache CouchDB。 CouchDB以JSON格式存储其数据, 这意味着从Android设备发送的所有报告都必须与该格式匹配才能作为条目插入。数据库插入是一个简单的HTTP POST或PUT请求。
  2. 网络应用程序(用于分析), 或更准确地说, 是CouchApp。这是一个简单的JavaScript应用程序, 可让你运行查询并显示存储在CouchDB实例中的数据。
为了使后端正常工作, 我们需要设置这两个组件。从理论上讲, 我们可以从源代码构建数据库和应用程序, 然后使用工具将它们部署到我们的后端, 但是ACRA的优秀人才已经为我们做到了。因此, 最简单的方法是复制远程数据库和远程应用程序。
让我们继续复制一个空的ACRA CouchDB:
  • 在Cloudant信息中心中选择” 复制” 部分。
  • 作为源数据库, 选择http://get.acralyzer.com/distrib-acra-storage作为URL的” 远程数据库” 。
  • 作为目标数据库, 选择” 新数据库” 并将其命名为” acra- {myapp}” (不带引号)。请注意, {myapp}参数对于你的应用程序应该是唯一的, 并且数据库名称必须以” acra-“ 开头。
  • 点击” 复制” 。
使用ACRA和Cloudant自动生成Android崩溃报告

文章图片
因此, 我们已经成功复制了数据库以存储报告。接下来, 我们需要复制acralyzer CouchApp, 以便可以可视化数据:
  • 在Cloudant信息中心中选择” 复制” 部分。
  • 作为源数据库, 选择http://get.acralyzer.com/distrib-acralyzer作为URL的” 远程数据库” 。
  • 作为目标数据库, 选择” 新数据库” 并将其命名为” acralyzer” 。
  • 点击” 复制” 。
使用ACRA和Cloudant自动生成Android崩溃报告

文章图片
注意:复制acralyzer应用程序是可选的。如果你只想存储Android崩溃报告, 而不是可视化数据, 则将不需要它(我们将在本Android教程的下一部分中详细介绍acralyzer)。如果你对JavaScript技巧有足够的信心, 甚至可以编写自己的分析应用程序!但这超出了本博客文章的范围。
初始设置过程的最后一步是添加安全权限。 Cloudant在CouchDB上提供了自己的安全层, 可以更好地控制个人权限, 因此, 为了将报告写入数据库, 我们需要创建一个具有写入权限的用户帐户:
  • 在Cloudant信息中心中选择” 数据库” 部分。
  • 单击acra- {myapp}数据库的权限部分(锁定图标)。
  • 点击” 生成API密钥” 。
  • 写下生成的用户名和密码(我们将在以后使用)。
  • 为生成的用户名添加写权限。
使用ACRA和Cloudant自动生成Android崩溃报告

文章图片
使用acralyzer可视化Android崩溃报告 复制后, 可以通过以下网址轻松访问acralyzer仪表板:https:// {myapp} .cloudant.com / acralyzer / _design / acralyzer / index.html#/ dashboard。我会承认:它不是目前最漂亮的分析工具, 但可以达到目的。
从顶部菜单中, 你可以选择要可视化的数据库(可以在一个项目中为不同应用程序托管多个数据库;这会影响你的使用配额), 并在主仪表板上预览数据。例如, 你可以:
  • 按时间单位(小时, 日, 月等)绘制报告数量。
  • 通过特定于Android的指标(Android版本, SDK版本, 应用程序版本, 设备等)查看报告的分布。
  • 列出所有崩溃报告(具有详细的堆栈跟踪信息)或查看所有错误(此处的” 错误” 是一组来自不同用户的完全相同的报告)。
  • 预览单个错误的详细信息, 并将其状态设置为已解决(如果已修复)。
  • 清除旧的或过时的条目。
使用ACRA和Cloudant自动生成Android崩溃报告

文章图片
请注意, 可用于可视化的Android崩溃指标将取决于我们选择从应用发送的报告。 ACRA提供了各种报告字段, 其中一些字段可能很大, 或者与错误修复不完全相关。对于大多数项目, 所需的报告字段将足够。这些包括:
  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • ANDROID_VERSION
  • 包裹名字
  • REPORT_ID
  • 建立
  • 堆栈跟踪
在你的Android项目中实施ACRA 如本教程前面所述, 实施ACRA非常简单, 只需几个快速步骤。
添加依赖
首先, 我们需要通过以下其中一种方式将库包含为依赖项:
作为/ libs文件夹中的.jar文件。
作为Maven依赖项:
< dependency> < groupId> ch.acra< /groupId> < artifactId> acra< /artifactId> < version> X.Y.Z< /version> < /dependency>

作为gradle依赖项:
compile 'ch.acra:acra:X.Y.Z'

添加应用程序类
接下来, 我们需要在项目中添加一个Android Application类(或更新现有类, 因为只能有一个实例), 并在AndroidManifest.xml中对其进行声明:
< application android:name=".MyApp" android:theme="@style/AppTheme"> ...

并在那里设置ACRA:
@ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash )public class MainApp extends Application {@Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }

而已!当然, 你需要将所有{myapp}占位符替换为实际值, 以及formUriBasicAuthLogin和formUriBasicAuthPassword的值。
从上面的代码段可以看出, 我们仅使用必填的报告字段。随时添加可能与你的应用程序相关的任何其他字段。
你也可以选择使用PUT而不是POST。在这种情况下, REPORT_ID将作为参数附加到前者的末尾。
最后, 你还可以选择如何将Android应用程序崩溃通知用户, 默认为无声后台报告。在我们的案例中, 我们选择显示一条Toast消息, 以使用户知道已报告了崩溃问题, 并且应该尽快提供错误修复。
需要帮忙?这是一个示例项目 要查看ACRA的实际效果, 我已在GitHub上设置了acra_example存储库。它具有一个简单的应用程序, 可在启动时初始化ACRA, 让你通过按下按钮将其崩溃(然后触发空指针异常)。崩溃数据将发送到示例Cloudant数据库, 该数据库可以在此处可视化。
要查看数据, 请使用以下凭据登录:
  • 用户名:medo
  • 密码:acraexample
ACRA的替代品 ACRA不是自动报告Android错误的唯一选择。由于崩溃肯定会发生, 因此存在一个巨大的企业对开发(B2D)市场, 试图通过其解决方案获利。
例如, Crittercism是用于崩溃报告的非常成熟的平台。它看起来很棒, 提供了许多数据分析选项, 并且非常易于集成。唯一的缺点是:价格和免费试用在有效用户数量, 数据保留天数和支持方面都受到很大限制。 BugSense是类似的服务。
但是, 我认为Crashlytics是一个出色的解决方案。直到最近, Crashlytics才拥有免费增值模式(带有付费高级级别)。但是现在(在被Twitter收购后), 所有以前的高级功能都是免费提供的。没有使用成本, 费用或限制。对于许多知名度较高的公司和开发人员而言, 这是错误报告的首选方式, 因为它易于使用且提供了强大的分析和可视化工具。它甚至可以与大多数流行的IDE集成为插件(例如Eclipse, Android Studio), 因此将Crashlytics添加到你的应用程序就像选择一个项目并按一个按钮一样简单。这些插件还使你能够从IDE跟踪崩溃报告, 而无需打开浏览器。
那么, 为什么要使用ACRA, 那么当有其他替代方案看起来更好并且为相同的实施工作提供更多功能时, 为什么要使用ACRA?我给你两个理由。
  1. 所有其他选项均为封闭源专有软件。即使有很多EULA, 你也无法确定数据的收集和处理方式。另一方面, ACRA和acralyzer是托管在GitHub上的开源项目, 你可以轻松地根据自己的需要进行分叉和定制。
  2. 数据移动性。假设你对Cloudant不满意。将你的数据复制并迁移到另一个后端很容易。你可以保证数据归你所有。
与许多选择一样, 这一选择归结为个人喜好和熟悉程度。请查看此Google+主题, 以进一步讨论可用于使你的应用更加可靠的各种替代方法。
结论 ACRA是一个高度健壮和高度可定制的库, 可以与Cloudant和acralyzer一起使用, 以为你的应用程序实现免费, 自动的崩溃报告和基本分析, 所有这些都可以最大程度地减少实施工作。
编写可靠的Android代码需要大量的经验和远见, 但我们谁都不是真正的无所不知。为意外的崩溃和错误做好准备, 并为尽快修复意外做好准备。这就是出色产品和出色用户体验的工作。
【使用ACRA和Cloudant自动生成Android崩溃报告】相关:使你的应用获利—利用移动分析

    推荐阅读