天天看點

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

近期項目有一個需求就是統計App的異常資訊,并且異常資訊要實時的通知到開發者,友善開發者第一時間掌握線上異常,以及客戶回報的異常及時查找問題的所在,後續通過阿裡雲的HotFix進行線上及時修複。目前市面上使用較多的第三方移動平台品質跟蹤主要有友盟、Bugly、網易雲捕和crashlytics。其中前三個是國内異常統計的第三方,國内開發者使用較多的也是前三者,目前我個人使用過有友盟和Bugly,這兩者接入都很簡單,并且背景的異常統計資訊也都是很清晰的。

首先我們來看一下Bugly的接入:

注冊産品

  • 登入

使用 QQ 登入 Bugly官網

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
  • 完善開發者資訊

在建立産品之前完善開發者資訊: 按照要求填寫郵箱,微信号和手機号以便及時收到産品的動态,同時也友善我們和開發這随時保持聯系。

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
  • 建立應用

按照要求添加應用名稱、選擇應用平台、産品類型、産品圖示和描述資訊。

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

儲存後即建立成功。

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

平台功能介紹

應用內建SDK後,即可在Web站點檢視應用上報的崩潰資料和聯網資料。

異常上報

  • 異常概覽

    檢視今日實時統計、崩潰趨勢、崩潰排行和TOP20崩潰問題等資訊
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
  • 崩潰分析/卡頓分析/錯誤分析

    檢視上報問題的清單
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
  • 問題詳情

    檢視上報問題的詳細資訊
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者
  • 進階搜尋

    通過各種條件快速查找需要定位分析的異常
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

庫檔案導入

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時,隻需變更配置腳本中的版本号即可。

Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

注意:自動內建時會自動包含Bugly SO庫,建議在Module的build.gradle檔案中使用NDK的“abiFilter”配置,設定支援的SO庫架構。

如果在添加“abiFilter”之後Android Studio出現以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

則在項目根目錄的gradle.properties檔案中添加:

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調試模式開關,調試模式的行為特性如下:
  • 輸出詳細的Bugly SDK的Log;
  • 每一條Crash都會被立即上報;
  • 自定義日志将會在Logcat中輸出。
建議在測試階段建議設定成true,釋出時設定為false。
Bugly接入、實作線上異常上報并實時通過微信将異常資訊發送給開發者

此外,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就會統計一個小時内的異常發送給綁定使用者的人,以上就是Bugly的接入和異常統計上報的流程,有不明白的小夥伴可以給我評論留言。