如何在本地搭建一个Android应用crashing跟踪系统-ACRA

https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAAndroid%E5%BA%94%E7%94%A8crashing%E8%B7%9F%E8%B8%AA%E7%B3%BB%E7%BB%9F%EF%BC%8DACRA

如何在本地搭建一个Android应用crashing跟踪系统-ACRA

  • 原文链接 : How to setup ACRA, an Android Application Crash Tracking system, on your own host
  • 作者 : nuunei
  • 译者 : sundroid
  • 校对者: sundroid
  • 状态 : 校对完成

在开发一款移动app时的一个事实是会有很多约束,比如硬件(CPU、RAM、Battery 等等)。如果你的代码设计不是很好,你会遇到一个非常让人头疼的问题:“Crash”,研究表明:

*应用崩溃时绝大多数应用使用者抱怨的问题。

此外

  • 如果应用程序联系崩溃三次,大约一半的用户将会卸载这款应用。

崩溃跟踪系统,帮助开发者能够直接的葱用户的设备收集每一个崩溃原因,是不是发现这个功能很特殊。目前最受欢迎的崩溃跟踪系统是 Crashlytics和Parse Crash Reporting,这两个系统都是完全免费的。开发者可以免费的集成他们在自己的应用中。不论什么时候app崩溃了,整个bug信息将会发送到后台,允许开发人员用最简单的方式去解决这些bug。通过这个方法,你可以在短时间内迭代一款不会影响正常使用的应用。

然而,提供崩溃信息收集的厂商收集这些崩溃信息同时也收集了用户信息,这可能让引起大公司担心用户隐私。

所以,这儿有没有崩溃信息跟踪系统可以让我们搭建在自己的服务器上?那么就不存在泄漏用户隐私的担忧了。当然有了,并且这个系统提供了非常简单的搭建方法。在这里我们来介绍下Application Crash Reporting on Android (ACRA),一个库允许Android应用自动地发送崩溃信息到自己的服务器。

下面将会介绍如何去搭建。

搭建一个服务器

服务器端是一个先决条件,让我们先从搭建服务器端开始。

由于ACRA设计的很好并且很受欢迎。它允许开发者开发自己的服务器系统,并且现在我们可以看到很多这样的系统。即便如此我觉得最好的是Acralyzer,这个也是由ACRA团队研发。Acralyzer工作在Apache CouchDB,所以 这里没有必要安装除了CouchDB以外的软件。

Acralyzer是一个功能相当齐全的后端崩溃跟踪系统。来自不同原因的相同堆栈轨迹将会被分组成一个单一的问题。如果你解决了所有问题,你可以非常便捷的关闭Acralyzer服务,并且这种关闭服务的操作时实时的,我发现系统唯一的缺点是它的ui让人感到不舒服,但是谁会在乎这个?它是为开发者开发的。

安装起来也很简单,下面将介绍如何在Ubuntu安装Acralyzer。

打开命令窗口,开始安装couchdb

*apt-get install couchdb

Test the installation with this command:

测试是否安装成功。

*curl http://127.0.0.1:5984

如果正确安装,会显示如下:

*{"couchdb":"Welcome","version":"1.2.0"}

编辑etc/couchdb/local.ini允许我们通过外部IP(默认的访问会通过127.0.0.1)去访问CouchDB。仅仅改变两行实现这个功能:

*;port = 5984 *;bind_address = 127.0.0.1

改变为

*port = 5984 *bind_address = 0.0.0.0

在同一个文件夹下,你需要添加username/password作为管理员账户。找到这一行(应该会在文件末尾)

*[admins]

下一行添加username/password 形式为username = password,比如:

*[nuuneoi = 12345]

请不要对在这里书写明文密码感到担心,一旦CouchDB重启后,你的密码将会自动地散列,并且将会是不可读的,

保存你刚刚编辑的文件同时通过命令行重启hashed:

*curl -X POST http://localhost:5984/_restart -H"Content-Type: application/json"

从现在起,你将可以通过浏览器访问CouchDB。这个web服务我们称之为Futon,一个CouchDB UI管理后台。在你的浏览器中打开这个地址。

*http://:5984/_utils

让我们开始吧,Futon。 

首先,通过你之前设置的管理员账号登陆这个系统。

现在我们开始安装一个acro-storage (Acralyzer's Storage Endpoing).在左边的菜单,点击Replicator,然后填写远程存储改为本地存储的表单。

*from Remote Database: http://get.acralyzer.com/distrib-acra-storage to Local Database: acra-myapp

点击Replicate然后等待,知道这个过程结束。

下一步安装Acralyzer通过同样的方法,但是参数是不同的。

*from Remote Database: http://get.acralyzer.com/distrib-acralyzer to Local Database: acralyzer

点击Replicate安装。

如果你操作正确,系统将会有两个数据库,acra-myapp 和 acralyzer。

我门就快大功告成了,下一步,我们需要为这个客户端创建一个用户,打开浏览器,然后打开这个网址:

*http://:5984/acralyzer/_design/acralyzer/index.html 

填写你想要的Username/Password,然后点击Create User,这些信息将会出现。 

复制这些信息,然后粘贴到你的文本编辑器,我们可能会用这个在客户端设置。

最后一件事是限制访问权限来保护在acra-myapp里面的数据,进入acra-myapp然后点击Securities,填写用户角色分配;

*["reader"] 

完工! 在这些结束后,你可以通过同一个网址访问这个控制台,去Admin选项卡,并选择Users。

*[http://:5984/acralyzer/_design/acralyzer/index.html

请注意acro-myapp只能够为一款应用服务。以防你想为另外一款应用创建一个后台,请通过同样的过程复制另外一个acro-storage,但是改变本地数据库名为acra-。请注意,有必要去通过acra- 去开启服务,或者它不能够在仪表盘中罗列为选择项供我们去选择。

如果在系统中有不止一款应用,在Acralyzer的仪表盘中将会有一个下拉列表,让我们去选择看哪一个的问题。你可以试一试。

在客户端设置ACRA。

在客户端中设置ACRA很简单,首先,在你的 build.gradle里添加ACRA的依赖配置信息。

*compile 'ch.acra:acra:4.6.1'

同步你的gradle文件,然后创建一个自定义Application类,但是不要忘记在AndroidManifest.xml中定义这个Application类。(我假设每一个Android开发者不会忘记这么做)。

在你创建的自定义的Application类中添加 @ReportCrashes注解。

import android.app.Application;
import org.acra.ACRA;
import org.acra.annotation.ReportsCrashes; import org.acra.sender.HttpSender; /**  * Created by nuuneoi on 2/19/2015.  */ @ReportsCrashes( ) public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); ACRA.init(this); } }

现在我们复制服务器端生成的信息,并且像下面那样粘贴到@ReportsCrashes中。

    @ReportsCrashes(httpMethod = HttpSender.Method.PUT, reportType = HttpSender.Type.JSON, formUri = "http://YOUR_SERVER_IP:5984/acra-myapp/_design/acra-storage/_update/report", formUriBasicAuthLogin = "tester", formUriBasicAuthPassword = "12345" )

最后一步,不要忘记添加在AndroidManifest.xml网络访问权限,否则ACRA可能无法发送这些日志信息到你的服务器上。

*

恭喜,现在所有的配置都已经完成,ACRA可以正常的工作,帮助你收集崩溃日志信息,从而你可以快速解决应用出现的问题。

测试

现在我们通过在Activity中强制一些崩溃来做一些测试,例子如下:

extView tvHello;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvHello.setText("Test Crash"); }

运行你的应用,然后改变崩溃的原因,再运行一次。查看你的仪表盘,你将会看到这些发送到后台的bug。

每一个bug来自不同用户不同时间,并且这些报告被分组了。 

仔细看看这些报告信息,你将会发现他们都是完整的崩溃信息。 

并且非常多的信息,足足有7页。

如果你修复这些bug后,你可以关闭这个问题,通过简单的点击在页面中高亮显示的"bug"图标, 

希望这篇文章对你们有用,特别是对于一些需要应用崩溃信息收集但是却担心隐私信息的大公司可以来使用这个系统。

事实上ACRA还有许多其他特性,比如:当一个月崩溃时显示Toast 或者 popup 来报告这些信息。你可以在ACRA网站上发现这些选项。

Acralytics也一样,这里有许多其他特性可以使用,比如,你可以设置一个服务器来发送邮件给我们。

下一篇博客再见。

分类: android solve


本文转自wanqi博客园博客,原文链接http://www.cnblogs.com/wanqieddy/p/4518918.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20165222第一周查漏补缺

一,第一章要点总结 1,java的特点:面向对象,动态,平台无关。 2,对于带包程序的编译:注意javac -d 编译到一个文件夹内,然后java -cp 文件夹名 包名.类名。 第一章是比较简单的&#x…

一份从 0 到 1 的 Java 项目实践清单

2019独角兽企业重金招聘Python工程师标准>>> 看了一篇文章,感觉还可以,就给大家共享一下: 对于着手一个项目的时候,要从以下入手(即项目清单): 1. 项目规划 1.1 首先,你得…

JWT 简介

JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信…

音视频编解码知识学习详解(分多部分进行详细分析)

1. 常用的基本知识 基本概念 编解码 编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。这里指的变换既包括将信号或者数据流进行编码(通常是为了传输、存储或者加密)或者提取得到一个编码流的操作…

SQL*Plus命令

SQL*Plus命令 前言 一:SQL*Plus 与数据库的交互 二:设置SQL* Plus的运行环境 二 - 1 :SET命令概述 二 - 2 :使用SET命令设置运行环境 二 - 2 ____1:Pagesize 变量 1 SYSorcl> show pagesize2 pages…

C语言数码管是共阴共阳程序,C语言实现共阴极数码管操作

共阴极或者共阳极数码管,因为其需要电流大,而一般51输出电流低,需要锁存器。买的开发板使用的共阴极数码管。至于其构造,找个相关方面的书看看,这里主要是对做好的电路板进行编程。刚开始的时候,感觉在数码…

百度与华为全面战略合作 人工智能手机真的要来了

视频加载中...12月21日百度和华为在北京宣布达成全面战略合作。这次合作内容主要包括三点,首先是在语音、语义、视觉和VR上的自然交互,这是百度为华为手机AI赋能的基础层。第二是基于华为HiAI平台和百度PaddlePaddle深度学习框架,共建人工智能…

Android 秒级编译FreeLine

项目地址:FreeLine FreeLine官网: FreeLine 1. 安装FreeLine插件 File->Settings->Plugins, 搜索输入FreeLine Plugin, 查找到后进行安装并重启Android Studio。 图1.png安装好之后,在工具栏就会出一个图标 图2.png2. 配置gradle 根目录build.gr…

C语言中的二级指针(双指针)

二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C中可以使用引用类型来实现。 下面讲解C中的二级指针的使用方法。 例如我们使用指针来交换两个整型变量的值。 错误代码如下: 一级指针 [cpp] view pla…

alpine_glibc 构建sun jdk 8的docker镜像

2019独角兽企业重金招聘Python工程师标准>>> 构建系统基础镜像 alpine glibc 的Dockerfile内容如下&#xff1a; alpine:3.6 MAINTAINER tongqiang<tongqiangyingmail.com># Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.ENV ALP…

c语言两个循环的ys,c语言编程:从键盘输入两个数,求它们的最小公倍数

满意答案flywisdom2019.06.20采纳率&#xff1a;44% 等级&#xff1a;9已帮助&#xff1a;1064人main(){int p,r,n,m,temp;printf("Please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//输入两个正整数.if(n{tempn;nm;mtemp;}pn*m;//P是原来…

每日微软面试题

每日微软面试题——day 1 <以下微软面试题全来自网络> <以下答案与分析纯属个人观点&#xff0c;不足之处&#xff0c;还望不吝指出^_^> 题&#xff1a;.编写反转字符串的程序&#xff0c;要求优化速度、优化空间。 分析&#xff1a;构建两个迭代器p 和 q &…

第八章 多态

第八章 多态1. 重写一个类通过继承来产生一个新类&#xff0c;继承了父类的所有变量和方法&#xff0c;在继承这些变量和方法的时候&#xff0c;子类也可以具有自己独特的特征和行为。Public class fruit{Public void print(){System.out.println(“这是超类的方法”);}}Clas…

计划任务 at,cron

示例&#xff1a;每3小时echo和wall命令 转载于:https://www.cnblogs.com/momenglin/p/8551618.html

2017.12.26

转载于:https://www.cnblogs.com/dyh-air/p/8118961.html

MessageBox 弹框

模拟系统的消息提示框而实现的一套模态对话框组件&#xff0c;用于消息提示、确认消息和提交内容。 从场景上说&#xff0c;MessageBox 的作用是美化系统自带的 alert、confirm 和 prompt&#xff0c;因此适合展示较为简单的内容。如果需要弹出较为复杂的内容&#xff0c;请使用…

什么是同轴电缆

同轴电缆从用途上分可分为基带同轴电缆和宽带同轴电缆&#xff08;即网络同轴电缆和视频同轴电缆&#xff09;。同轴电缆分50Ω 基带电缆和75Ω宽带电缆两类。基带电缆又分细同轴电缆和粗同轴电缆。基带电缆仅仅用于数字传输&#xff0c;数据率可达10Mbps。同轴电缆(Coaxial Ca…

android textview表情,Android开发(16)-TextView显示表情图像和文字

从这个案例中我们可以学到当我们美化图片美化界面的时候可以在某一区域输入图片和文字混搭信息,第三张图片按比例缩小&#xff0c;第四张图像有超链接布局文件MainActivity.javapackage com.example.textview3;import java.lang.reflect.Field;import android.os.Bundle;import…

linux的apache2.4限定某个目录禁止解析PHP及user_agent与PHP相关配置

限定某个目录禁止解析PHP 对于使用PHP语言编写的网站&#xff0c;有一些目录是有需求上传文件的&#xff0c;比如服务器可以上传图片&#xff0c;并且没有做防盗链&#xff0c;所以就会被人家当成了一个图片存储服务器&#xff0c;并且盗用带宽流量。如果网站代码有漏洞&#x…

什么是光缆

光缆(optical fiber cable)是为了满足光学、机械或环境的性能规范而制造的&#xff0c;它是利用置于包复护套中的一根或多根光纤作为传输媒质并可以单独或成组使用的通信线缆组件。光缆主要是由光导纤维&#xff08;细如头发的玻璃丝&#xff09;和塑料保护套管及塑料外皮构成&…