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也一樣,這里有許多其他特性可以使用,比如,你可以設置一個服務器來發送郵件給我們。
下一篇博客再見。