如何在本地搭建一個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.pswp.cn/news/453313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20165222第一周查漏補缺

一,第一章要點總結 1,java的特點:面向對象,動態,平臺無關。 2,對于帶包程序的編譯:注意javac -d 編譯到一個文件夾內,然后java -cp 文件夾名 包名.類名。 第一章是比較簡單的&#x…

學習中的十七條建議

作者:孤劍 對于一個自學的人來說,幾條規則當然是必要的了,以下是我自己的一些心得。 1。自信是你成功的第一要素; 2。用心去學,活學活用; 3。新手不要“好高騖遠”,老手不要“驕傲自大”&#x…

tp5 linux路由不跳轉,thinkphp5路由不生效一直跳到首頁的解決方法

自從用laravel框架后,好久沒用過thinkphp框架了,早期用的3.x系列,想熟悉一下thinkphp5,結果入坑了;路由配置一直不起作用,總是跳到首頁,折騰了好久,后來發現是nginx配置的問題&#…

stack堆棧簡介

stack堆棧簡介 堆棧是一個線性表,插入和刪除只在表的一端進行。這一端稱為棧頂(Stack Top),另一端則為棧底(Stack Bottom)。堆棧的元素插入稱為入棧,元素的刪除稱為出棧。由于元素的入棧和出棧總在棧頂進行,因此,堆棧是…

一份從 0 到 1 的 Java 項目實踐清單

2019獨角獸企業重金招聘Python工程師標準>>> 看了一篇文章,感覺還可以,就給大家共享一下: 對于著手一個項目的時候,要從以下入手(即項目清單): 1. 項目規劃 1.1 首先,你得…

JWT 簡介

JWT是一種用于雙方之間傳遞安全信息的簡潔的、URL安全的表述性聲明規范。JWT作為一個開放的標準(RFC 7519),定義了一種簡潔的,自包含的方法用于通信雙方之間以Json對象的形式安全的傳遞信息。因為數字簽名的存在,這些信…

FFMPEG的詳細資料可以在它的官方網站上找到

請看官網的文檔欄目: http://ffmpeg.mplayerhq.hu/documentation.html FFmpeg System Documentation Frequently Asked QuestionsFFmpeg program documentationffserver documentationffplay documentationvideo hook documentationsample ffserver configuration fileFFmpeg A…

空指針入棧問題

空指針和數據元素一樣能夠進棧。并且如果棧原來為空,壓入空指針后棧就不會為空了。空指針一旦被賦予指針,如果是在32位機上則占四個字節。只不過是沒有指向堆內存中的任何數據。而空指針已經壓進棧了,不加以釋放就一直存在。

arm linux 中斷 分析,armlinux中斷異常的處理分析.pdf

基于 ARM Linux 中斷、異常的處理分析本文是基于ARM S3C2410X 系統的Linux 2.6 中斷、異常和系統調用的處理分析。主要有以下幾個部分:1. ARM 的硬件中斷機制2. Linux 2.6 對 ARM 中斷向量表的初始化3. Linux 2.6 對 ARM 中斷、異常的處理(從匯編-->C 語言函數&a…

(數據科學學習手札03)Python與R在隨機數生成上的異同

隨機數的使用是很多算法的關鍵步驟,例如蒙特卡洛法、遺傳算法中的輪盤賭法的過程,因此對于任意一種語言,掌握其各類型隨機數生成的方法至關重要,Python與R在隨機數底層生成上都依靠梅森旋轉(twister)來生成…

音視頻編解碼知識學習詳解(分多部分進行詳細分析)

1. 常用的基本知識 基本概念 編解碼 編解碼器(codec)指的是一個能夠對一個信號或者一個數據流進行變換的設備或者程序。這里指的變換既包括將信號或者數據流進行編碼(通常是為了傳輸、存儲或者加密)或者提取得到一個編碼流的操作…

二叉樹非遞歸后序遍歷算法

與正常的非遞歸中序遍歷算法不同于兩點: 一 比正常的中序遍歷算法多了對數據元素的標記。 在壓數據元素入棧(標記記為0,用來表示訪問了其左子樹)時標記, 還有訪問完左子樹利用gettop()獲取雙親…

SQL*Plus命令

SQL*Plus命令 前言 一:SQL*Plus 與數據庫的交互 二:設置SQL* Plus的運行環境 二 - 1 :SET命令概述 二 - 2 :使用SET命令設置運行環境 二 - 2 ____1:Pagesize 變量 1 SYSorcl> show pagesize2 pages…

redis-day1

1 Redis 概述 REmote DIctionary Server(Redis)是一個基于key-value鍵值對的持久化數據庫存儲系統。redis和大名鼎鼎的Memcached緩存服務軟件很像,但是Redis支持的數據存儲類型比Memcached更豐富,包括strings(字符串)、lists&…

C語言數碼管是共陰共陽程序,C語言實現共陰極數碼管操作

共陰極或者共陽極數碼管,因為其需要電流大,而一般51輸出電流低,需要鎖存器。買的開發板使用的共陰極數碼管。至于其構造,找個相關方面的書看看,這里主要是對做好的電路板進行編程。剛開始的時候,感覺在數碼…

數據庫主要特點

(1)實現數據共享。數據共享包含所有用戶可同時存取數據庫中的數據,也包括用戶可以用各種方式通過接口使用數據庫,并提供數據共享。 (2)減少數據的冗余度。同文件系統相比,由于數據庫實現了數據共享,從而避免了用戶各自建立應用文…

百度與華為全面戰略合作 人工智能手機真的要來了

視頻加載中...12月21日百度和華為在北京宣布達成全面戰略合作。這次合作內容主要包括三點,首先是在語音、語義、視覺和VR上的自然交互,這是百度為華為手機AI賦能的基礎層。第二是基于華為HiAI平臺和百度PaddlePaddle深度學習框架,共建人工智能…

JavaScript數據類型

一、JavaScript數據類型主要分為原始類型和引用數據類型。 原始類型包括(不可拆分的東西):Number、String、Boolean、Null、Undefined。引用數據類型包括:Object(Array,Date,RegExp,Function)ty…

funcode拼圖游戲c語言程序,同求funcode平臺下拼圖游戲的C語言代碼

做了好幾天,寫了好多回就是不對,徹底崩潰。。#include "CommonAPI.h"//#include "LessonX.h"#include#define BLOCK_COUNT 4int g_iGameState;intg_iBlockState[BLOCK_COUNT][BLOCK_COUNT];charg_szBlockName[BLOCK_COUNT*BLOCK_COU…

什么是透明傳輸

透明傳輸是指不管所傳數據是什么樣的比特組合,都應當能夠在鏈路上傳送。當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時,就必須采取適當的措施,使收方不會將這樣的數據誤認為是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。…