如何在本地搭建一个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应用crashing跟踪系统-ACRA的更多相关文章
- 如何使用XAMPP本地搭建一个属于你自己的网站
你好,从今天开始,我将为大家带来一些我学习SEO和建站的免费教程,今天为大家带来的是如何用XAMPP搭建一个属于你自己的网站.来到这里,可以说很多在百度上已经过时了的资料需要总结的资料这里都有,你只要 ...
- 利用Wamp在本地搭建一个wordpress站点
原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...
- 用express搭建一个简单的博客系统
转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...
- 使用http-server在本地搭建一个HTTP服务器
安装http-server 在控制台中输入 npm install http-server -g 进行全局安装 共享资源 进入需要共享资源的目录,比如 D:\,然后在控制台中输入 http-serve ...
- 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览
昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...
- 为自己搭建一个分布式 IM(即时通讯) 系统
前言 大家新年快乐! 新的一年第一篇技术文章希望开个好头,所以元旦三天我也没怎么闲着,希望给大家带来一篇比较感兴趣的干货内容. 老读者应该还记得我在去年国庆节前分享过一篇<设计一个百万级的消息推 ...
- 利用red5搭建一个简单的流媒体直播系统
http://blog.sina.com.cn/s/blog_51396f890102exmz.html 一.red5安装.设置. 这个过程就不多说了,参见http://blog.csdn.net/l ...
- 本地搭建 Gradle 服务器,提高 Android Studio Gradle 下载速度
AndroidStudio 更新以后,在公司网会卡在下载 Gradle 的地方,下载 Gradle 速度很慢. 看到别人的博客提供的解决办法本地搭建一个 Gradle 的服务器,然后把 Android ...
- 搭建一个完整的Android工程(一)Dagger2
写在前面 现在越来越多的使用到了开源项目,但是仅限于使用,却不了解,更谈不上深入.也是因为越来越多的开源项目,平时工作中遇到问题也是第一时间寻找对应的开源项目,少了许多独立的思考.现在虽然能很轻松的完 ...
随机推荐
- [转]Apache Commons IO入门教程
Apache Commons IO是Apache基金会创建并维护的Java函数库.它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的 ...
- 京东在html5页面中打开本地app的解决方案
转:https://blog.csdn.net/CameloHuang/article/details/64476385 从html5打开本地的app–如果本地没有app就跳转到下载页面,大家都会认为 ...
- 深度学习Bible学习笔记:第一章 前言
写在前面:请务必踏踏实实看书,结合笔记或视频来理解学习,任何技术,啃砖头是最扎实最系统的,为避免知识碎片化,切忌抛却书本的学习!!! 一 什么是深度学习 1 关于AI: AI系统必须具备从原始数据提取 ...
- poj3666 线性dp
要把一个序列变成一个不严格的单调序列,求最小费用 /* 首先可以证明最优解序列中的所有值都能在原序列中找到 以不严格单增序列为例, a序列为原序列,b序列为升序排序后的序列 dp[i][j]表示处理到 ...
- cf1020c 瞎搞
枚举获胜状态即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath&g ...
- 性能测试三:jmeter进阶之图形插件
一.图形化插件的使用 使用Jmeter插件可以更直观的查看tps和响应时间 插件官网: http://jmeter-plugins.org/downloads/all 第一种方法,找到需要的插件下载j ...
- 《剑指offer》-斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 这么直接的问fibonacci,显然是迭代计算.递归的问题在于重复计算,而迭代则避免了这一点:递归是自 ...
- 【BZOJ5110】[CodePlus2017]Yazid 的新生舞会
题解: 没笔的时候我想了一下 发现如果不是出现一半次数而是k次,并不太会做 然后我用前缀和写了一下发现就是维护一个不等式: 于是就可以随便维护了
- js手机端和pc端加载不同的样式
function loadCSS() { if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android| ...
- 用户设置与virtual host配置
1.进入localhost:15672yemian 然后选择Admin菜单. 2.添加用户 caojun/123456 3.效果 4.virtual hosts添加 相当于db. /cjhost,一般 ...