如何在本地搭建一个 Android 应用 crashing 跟踪系统-ACRA
在开发一款移动 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 也一样,这里有许多其他特性可以使用,比如,你可以设置一个服务器来发送邮件给我们。
下一篇博客再见。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: VectorDrawable 第一章
下一篇: 自动化截图-应用分发时的自动截图方案
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论