ACRA - Android App 上的錯誤回報
任何程式一定有 bug,問題是如何找出來,麻煩的是找出來的九成也是用戶,而非開發者。而且很多時是出廠後才找出來。
慶幸如是開發 android app 的話,android 2.x 以上已內建回報系統,用家遇到錯誤時按「回報」,即可在 developer console 收到有關的問題資料。
問題是,要用家主動按「回報」才能將 bug 告之。而很多時用家會選擇「取消」而已,所以我們需要一個自動的回報系統,讓我們主動了解程式的問題所在。
ACRA
在 Android 上最廣泛使用的就是 ACRA。只需簡單的設定,加上一個 server backend, 便能有一個自動回報問題的系統。用了它後便能助你更快消滅臭蟲。ARCA 優點如下:
簡單
簡單的設定一下,便能在有錯誤時自動回報給預定的伺服器。只要在 Android app 上
-
新增一個 MyApplication extend android.app.Appplication
-
加
@ReportsCrashes
進去:import org.acra.*; import org.acra.annotation.*; @ReportsCrashes( formKey = "", // This is required for backward compatibility but not used formUri = "http://www.backendofyourchoice.com/reportpath" ) public class MyApplication extends Application { }
-
override
onCreate()
,加 ACRA 的起始:import org.acra.*; import org.acra.annotation.*; @ReportsCrashes( formKey = "", // This is required for backward compatibility but not used formUri = "http://www.backendofyourchoice.com/reportpath" ) public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }
-
修改
AndroidManifest.xml
,在application
使用新的MyApplication
class<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">
-
當然也要加
internet
permission 啦<uses-permission android:name="android.permission.INTERNET"/>
這樣便設置妥當了。
涵蓋甚廣
什麼 exception 也可以,連 uncaught exception 也可回報,回報時會包含 stack trace、裝置資料、時間等, 也可自行定義要回報的資料。
自訂 server
伺服器完全任君選擇,可使用ACRA 官方的 open source project 作 backend,要求高一點的可選坊間一些收費服務。想由零開始的可自行編寫,方便加進自己的 bug tracking system。
自訂 client
Client 方面可設定錯誤時的處理,可只顯示 toast 訊息,也可顯示在 Notification bar,又或顯示提示訊息,讓用戶自行輸入更多資料等。關注私隱的話,也可設定為讓用戶自行選擇不回報,非常周到。
有收費服務商支援
Open source project 很多時要自己弄妥所有事情,不過時間就是金錢, 不想花時間在這些支節上的話, 可以使用有商業服務,如 Bugsense 等, 省回一點功夫時間。
統一回報接口
使用 ACRA 的最大好處,是統一了回報的 protocol,就算使用某一 backend 不滿意, 要變更服務商,只要改一改回報的網址便可以,其他什麼也不用改,簡單方便。(當然若想連 bug report 轉移的話是另外一回事了)
Backend 選擇
官方有自 wiki 介紹 backend services。 大約看完後有 Bugsense,Bugsnag 和 Acralyzer。我最初選用的是 Bugsense:
它的介面不錯, 可作過濾,方便找尋某些特定 bug,有新 bug 回報時也有即時電郵通知,而且支援 proguard mapping,不用在 stack trace 看見 aaa.aa method 時還要去找 mapping files。
可惜免費的每月只能有 500 個回報個案,而且只保留 7 天,過額後所有回報個案也不能查看,每月 $19 有點貴。
至於 Bugsnag 每用包含 2000 個回報個案,一個 project,好像較花算,但我沒有試用過,不知效果如何。
最後不嫌麻煩的用了 acralyzer ,在免費 server 上 host,介面較差,但限制少一點,而且可以接收無限量 bug(因為只是計流量,要很多很多 bugs 才要付費),再用多一段時間才寫用後感吧。
後記
想做一個令人滿意的程式,自動 bug reporting 是必須的,設定後你會找到有很多意想不到的臭蟲,然後發現程式的 bugs handling 遠遠不夠。
It's hard enough to find an error in your code when you're looking for it; it's even harder when you've assumed your code is error-free.
歡迎進入除蟲的地獄。