[翻譯]如何安裝ACRA-一個Android應用Crash跟蹤系統

[翻譯]如何安裝ACRA-一個Android應用Crash跟蹤系統

—在你自己的服務器上

How to setup ACRA, an Android Application Crash Tracking system, on your own host
原文地址:
http://inthecheesefactory.com/blog/how-to-install-and-use-acra-android/en

開發一個手機應用有如此多的限制,比如硬件限制(CPU,內存,電池等等)。如果你的代碼不是足夠合理,那就準備迎接世界上最嚴重的問題吧:Crash。根據研究所示:

應用崩潰是手機app用戶抱怨最多的額問題

更嚴重的:

如果一個應用連續崩潰3次,大概一半的用戶會卸載這個應用

崩潰追蹤系統,讓開發者能夠從用戶的設備上收集到每一個導致崩潰的細節,專門用來解決這種應用崩潰問題。目前最流行的2個流行崩潰追蹤系統是 Crashlytics 和 Parse Crash Reporting,這兩個服務都是免費的,開發者可以免費集成他們到你的app。當應用奔潰,整個跟蹤報告就會發送到他們的後端,開發者可以及時快捷的修復這些嚴重的問題,這樣,你就可以在很短的時間內奉上一個“無Crash”的應用。

然而,這些服務的提供商會收集這些數據,對於對用戶隱私敏感的公司還是有些顧慮的。

那麼。。。是否有那種允許我們在自己服務器部署的崩潰追蹤系統?當然有!!並且會非常容易創建,下面有請Application Crash Reporting on Android (ACRA) 一個允許Android應用自動發送崩潰報告到自己服務器的庫。

開始!

創建服務器

服務器端是客戶端的一個先決條件。 因此,讓我們從服務器端開始。

ACRA是精心設計的,是相當受歡迎的(ACRA是針對客戶端應用的,服務端可以自己搭建)。 它允許開發者開發自己的服務器系統,我們找到網上有很多種ACRA服務端。我建議選擇–也是最好的—Acralyzer,Acralyzer也是ACRA團隊開發的,Acralyzer工作在Apache CouchDB之上,所以除了CouchDB之外,沒有必要安裝任何額外的軟件。

Acralyzer是一個全功能的後端崩潰跟蹤系統。 從不同設備反饋回的同一堆棧跟蹤報告會被歸類爲一個問題。如果你已經修復了某個問題,你可以通過簡單的點擊一下來關閉這個問題。同時它也是實時工作的。 這個系統我找到的唯一一個缺點就是他的界面有點複雜,但是無所謂啦,本來就是爲開發者設計的嘛 =P。

安裝很簡單,下面是一個如何在Ubuntu上安裝Acralyzer的完整的指導。

首先從安裝couchdb開始,打開終端,輸入如下命令:

apt-get install couchdb

使用如下指令來驗證是否安裝成功

curl http://127.0.0.1:5984

如果安裝成功,會返回如下信息

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

編輯/etc/couchdb/local.ini 文件來允許我們通過外部IP來訪問CouchDB(默認只能通關127.0.0.1來訪問)。只需要把下面兩行的註釋去掉即可。

;port = 5984
;bind_address = 127.0.0.1

然後修改爲:

port = 5984
bind_address = 0.0.0.0

在這個文件裏,你還應該添加一個用戶名/密碼來作爲管理員賬戶,找到這一行(一般是在文件末尾):

[admins]

在它的下一行添加一個 username=password形式的內容。例如:

nuuneoi = 12345

不用擔心在這裏寫明文密碼會不會有問題,一旦CouchDB重啓後,你的密碼會被自動哈希加密,並且是不可讀的

保存文件,通過下面的語句來重啓CouchDB:

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

現在,你就可以通過瀏覽器來訪問CouchDB了,網頁服務被稱爲Futon—CouchDB的界面後端。通過以下地址來打開瀏覽器:

http://<YOUR_SERVER_IP>:5984/_utils

界面顯示如下:
Futon

首先,你需要通過之前設定的管理員賬戶來登錄系統

現在我們要安裝一個acro-storage(Acralyzer的存儲端)。通過右側的菜單,點擊Replicator(複製器),並填寫表單的from Remote Databasefrom Remote Database類似如下所示:

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來安裝

如果你上面做的都對的話,你會發現系統裏多了2個數據庫—-acra-myapp 和 acralyzer.

acra-myapp and acralyzer

離成功很近了,下一步,我們要創建用戶,打開瀏覽器,轉到這個網址:

http://<YOUR_SERVER_IP>:5984/acralyzer/_design/acralyzer/index.html

進入 Admin 頁並點擊 Users

AdminUser

填寫一個任意的用戶名和密碼(不一定非得是之前的那個管理員賬戶),點擊Create User。然後會看到如下信息:

Users2

把這些信息都拷貝保存在文檔裏,我們會在後面的客戶端裏用到

最後一件事就是保護acra-myapp裏的數據,可以設定僅開放權限給管理員或者某些用戶,你可以進入acra-myapp,然後點擊Securities。 填寫Members段裏的Roles字段。如下所示:

["reader"]

Reader

搞定!

之後,你就可以通過類似下面這樣的網頁來訪問操作面板:

http://<YOUR_SERVER_IP>:5984/acralyzer/_design/acralyzer/index.html
請注意:arco-myapp是爲一個應用創建的,如果你要爲另外一個應用創建一個後端系統。那麼重複上面的步驟,複製一個acro-storage,不過需要把本地的數據庫改爲*acra-<your_app_name>* 。 注意名字是以*acra-*開頭的。

如果系統裏不止一個app。Acralyzer的操作面板裏會呈現一個下拉列表,讓你選擇哪一個應用來查看問題報告,有空可以自己試試。

在客戶端安裝ACRA

在手機客戶端安裝ACRA非常容易,首先需要在build.gradle中添加一個(dependency)依賴(使用Android Studio):

compile 'ch.acra:acra:4.6.1'

同步你的gradle文件,然後創建一個自定義的Application類—不要忘記在AndroidManifest.xml中定義它。(我認爲每個Android開發者都會怎麼做的),

在你的自定義Application類上面添加一個Annotation @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中添加網絡權限

<uses-permission android:name="android.permission.INTERNET"/>

恭喜你!全都搞定!

測試

現在讓我們測試一下,在Activity中添加一些認爲的Crash。例如:

TextView tvHello;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tvHello.setText("Test Crash");
}

運行你的應用,然後換一個Crash的方式,再次運行,然後在你的操作面板裏可以看到這些bugs報告已經發送到後端系統中了。

acra

每個bug條目都是一系列來自不同的應用用戶,不同時間發送的。

reports

點擊一個報告,深入的查看一下,你會看到內容是一個完整的stacktrace。

stacktrace

還有一堆長長的信息,足夠你翻7頁之多。
如果你fix了某個bug。你可以通過點擊“bug”圖標來關閉該bug。(下圖中高亮的部分)

closeissue

希望大家覺得這篇文章有幫助,尤其對於那些對隱私比較關心的,需要一個應用崩潰追蹤系統的大公司。

實際上ACRA還有很多特性,比如:當Crash發生時,通過Toast提示或者彈出Dialog。你可以在ACRA的網站找到這些選項。

Acralytics同樣也有很多其他功能,比如,你可以設定服務器在收到Bug報告的時候給我們發郵件。查看更多信息,請訪問Acralyzer .


原文作者:nuuneoi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章