近期項目有一個需求就是統計App的異常資訊,并且異常資訊要實時的通知到開發者,友善開發者第一時間掌握線上異常,以及客戶回報的異常及時查找問題的所在,後續通過阿裡雲的HotFix進行線上及時修複。目前市面上使用較多的第三方移動平台品質跟蹤主要有友盟、Bugly、網易雲捕和crashlytics。其中前三個是國内異常統計的第三方,國内開發者使用較多的也是前三者,目前我個人使用過有友盟和Bugly,這兩者接入都很簡單,并且背景的異常統計資訊也都是很清晰的。
首先我們來看一下Bugly的接入:
注冊産品
- 登入
使用 QQ 登入 Bugly官網
- 完善開發者資訊
在建立産品之前完善開發者資訊: 按照要求填寫郵箱,微信号和手機号以便及時收到産品的動态,同時也友善我們和開發這随時保持聯系。
- 建立應用
按照要求添加應用名稱、選擇應用平台、産品類型、産品圖示和描述資訊。
儲存後即建立成功。
平台功能介紹
應用內建SDK後,即可在Web站點檢視應用上報的崩潰資料和聯網資料。
異常上報
-
檢視今日實時統計、崩潰趨勢、崩潰排行和TOP20崩潰問題等資訊異常概覽
-
檢視上報問題的清單崩潰分析/卡頓分析/錯誤分析
-
檢視上報問題的詳細資訊問題詳情
-
通過各種條件快速查找需要定位分析的異常進階搜尋
庫檔案導入
Bugly支援自動內建和手動內建兩種方式,如果您使用Gradle編譯Apk,強烈推薦您使用自動接入方式配置庫檔案。
同時內建SDK和NDK
在Module的build.gradle檔案中添加依賴和屬性配置:
android {
defaultConfig {
ndk {
// 設定支援的SO庫架構
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
}
dependencies {
compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9
compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0
}
同時內建Bugly SDK和NDK的配置如下圖所示,後續更新Bugly SDK和NDK時,隻需變更配置腳本中的版本号即可。
如果在添加“abiFilter”之後Android Studio出現以下提示:
注意:自動內建時會自動包含Bugly SO庫,建議在Module的build.gradle檔案中使用NDK的“abiFilter”配置,設定支援的SO庫架構。
則在項目根目錄的gradle.properties檔案中添加:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
android.useDeprecatedNdk=true
參數配置
- 在AndroidManifest.xml中添權重限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
注:如果您的App需要上傳到,您需要将
google play store
權限屏蔽掉或者移除,否則可能會被下架。
READ_PHONE_STATE
- 請避免混淆Bugly,在Proguard混淆檔案中增加以下配置:
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
最簡單的初始化
擷取APP ID并将以下代碼複制到項目Application類onCreate()中,Bugly會為自動檢測環境并完成配置:
CrashReport.initCrashReport(getApplicationContext(), "注冊時申請的APPID", false);
為了保證營運資料的準确性,建議不要在異步線程初始化Bugly。
第三個參數為SDK調試模式開關,調試模式的行為特性如下:建議在測試階段建議設定成true,釋出時設定為false。
- 輸出詳細的Bugly SDK的Log;
- 每一條Crash都會被立即上報;
- 自定義日志将會在Logcat中輸出。
此外,Bugly2.0及以上版本還支援通過“AndroidManifest.xml”來配置APP資訊。如果同時又通過代碼中配置了APP資訊,則最終以代碼配置的資訊為準。
在“AndroidManifest.xml”的“Application”中增加“meta-data”配置項:
<application
<!-- 配置APP ID -->
<meta-data
android:name="BUGLY_APPID"
android:value="<APP_ID>" />
<!-- 配置APP版本号 -->
<meta-data
android:name="BUGLY_APP_VERSION"
android:value="<APP_Version>" />
<!-- 配置APP管道号 -->
<meta-data
android:name="BUGLY_APP_CHANNEL"
android:value="<APP_Channel>" />
<!-- 配置Bugly調試模式(true或者false)-->
<meta-data
android:name="BUGLY_ENABLE_DEBUG"
android:value="<isDebug>" />
</application>
不同于“android:versionName”,“BUGLY_APP_VERSION”配置的是Bugly平台的APP版本号。
通過“AndroidManifest.xml”配置後的初始化方法如下:
CrashReport.initCrashReport(getApplicationContext());
Bugly預設從“AndroidManifest.xml”檔案中讀取“VersionName”作為版本号。
MultiDex注意事項
如果使用了MultiDex,建議通過Gradle的“
multiDexKeepFile
”配置等方式把Bugly的類放到主Dex,另外建議在
Application
類的"
attachBaseContext
"方法中主動加載非主dex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
}
以上就是Bugly的接入,我們可以寫一個bug讓程式crash,一分鐘左右就可以在Bugly崩潰分析裡看到具體的錯誤資訊。那麼要想将這些crash資訊實時的發送給開發者該怎麼處理呢?Bugly提供了一項功能,如圖所示:
在這個地方綁定微信以後Bugly就會統計一個小時内的異常發送給綁定使用者的人,以上就是Bugly的接入和異常統計上報的流程,有不明白的小夥伴可以給我評論留言。