1. 程式人生 > >Bugly錯誤監測Android SDK接入

Bugly錯誤監測Android SDK接入

庫檔案匯入

Bugly支援自動整合和手動整合兩種方式,如果您使用Gradle編譯Apk,強烈推薦您使用自動接入方式配置庫檔案。

自動整合(推薦)

Bugly支援JCenter倉庫Maven Central倉庫。為了實現更加靈活的配置,Bugly SDK(2.1.5及以上版本)和NDK(SO庫)目前已經分開成兩個獨立的倉庫:

  • SDK:com.tencent.bugly:crashreport
  • NDK:com.tencent.bugly:nativecrashreport

其中,整合Bugly NDK時,需要同時整合Bugly SDK。

整合SDK

在Module的build.gradle檔案中新增依賴和屬性配置:

dependencies {
    compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本號,也可以指定明確的版本號,例如2.2.0
}

同時整合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時,只需變更配置指令碼中的版本號即可。

Alt text

注意:自動整合時會自動包含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

手動整合

如果您不採用上述自動匯入方式,也可以手動整合Bugly SDK。

下載Bugly庫檔案

  • 如果您的工程有Native程式碼(C/C++)或者集成了其他第三方SO庫,建議下載Bugly的NDK動態庫

Bugly NDK包含多個架構的SO庫:

  • armeabi
  • armeabi-v7a
  • arm64-v8a
  • x86
  • x86_64

在整合Bugly SO庫時,請注意只保留支援的架構SO庫。

Eclipse工程

  • 將Bugly庫檔案複製到工程的libs目錄下;
  • Refresh一下工程;
  • 新增工程依賴:滑鼠右鍵點選Bugly的JAR檔案,新增到編譯路徑中。

Alt text

Android Studio工程

  • 將Bugly庫檔案複製到工程的libs目錄下;
  • 如果整合Bugly NDK,則在Module的buid.gradle檔案中新增SO庫目錄配置:
android {
    sourceSets {
        main.jniLibs.srcDirs = ['libs']
    }
}
  • 點選Sync,同步配置。

Alt text

為了使APP Crash堆疊的可讀性更高,建議您配置符號表檔案,更準確地定位問題:

  • 純Java程式碼的工程:只需要配置混淆後生成的Mapping檔案即可;
  • 含有Native程式碼的工程:建議配置符號表工具從Debug SO中提取的Symbol符號表檔案。

Bugly支援手動和自動配置兩種方式,具體的配置方法請參考:《Bugly Android符號表配置

引數配置

  • 在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" />
  • 請避免混淆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。

Alt text

此外,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”作為版本號,自定義設定請使用參考“高階設定”。

增加上報程序控制

如果App使用了多程序且各個程序都會初始化Bugly(例如在Application類onCreate()中初始化Bugly),那麼每個程序下的Bugly都會進行資料上報,造成不必要的資源浪費。

因此,為了節省流量、記憶體等資源,建議初始化的時候對上報程序進行控制,只在主程序下上報資料:判斷是否是主程序(通過程序名是否為包名來判斷),並在初始化Bugly時增加一個上報程序的策略配置。

Context context = getApplicationContext();
// 獲取當前包名
String packageName = context.getPackageName();
// 獲取當前程序名
String processName = getProcessName(android.os.Process.myPid());
// 設定是否為上報程序
UserStrategy strategy = new UserStrategy(context);
strategy.setUploadProcess(processName == null || processName.equals(packageName));
// 初始化Bugly
CrashReport.initCrashReport(context, "註冊時申請的APPID", isDebug, strategy);
// 如果通過“AndroidManifest.xml”來配置APP資訊,初始化方法如下
// CrashReport.initCrashReport(context, strategy);

其中獲取程序名的方法“getProcessName”有多種實現方法,推薦方法如下:

/**
 * 獲取程序號對應的程序名
 * 
 * @param pid 程序號
 * @return 程序名
 */
private static String getProcessName(int pid) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"));
        String processName = reader.readLine();
        if (!TextUtils.isEmpty(processName)) {
            processName = processName.trim();
        }
        return processName;
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    } finally {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }
    return null;
}

測試

現在您可以製造一個Crash(建議通過“按鍵”來觸發),來體驗Bugly的能力了。在初始化Bugly的之後,呼叫Bugly測Java Crash介面。

CrashReport.testJavaCrash();

執行到這段程式碼時會發生一個Crash,Logcat的TAG=CrashReportInfo中輸出為:

Alt text

現在您已經可以在“崩潰”頁面看到剛才觸發的Crash issue了(延遲一般在10s以內)。

如果專案包含了Native工程或者使用了程式碼混淆,建議配置符號表檔案。

更多的Bugly行為控制

我們提供了UserStrategy類作為Bugly的初始化擴充套件,在這裡您可以修改本次初始化Bugly資料的版本、渠道及部分初始化行為。通過以下方式傳入:

UserStrategy strategy = new UserStrategy(appContext);
//...在這裡設定strategy的屬性,在bugly初始化時傳入
//...
CrashReport.initCrashReport(appContext, APPID, true, strategy);

如果通過UserStrategy設定了版本號和渠道號,則會覆蓋“AndroidManifest.xml”裡面配置的版本號和渠道。

使用者策略(UserStrategy)

設定App版本、渠道、包名

Bugly預設讀取AndroidManifest.xml檔案中VersionName、Package資訊。若您有自己的版本或渠道設定需求,可通過該介面修改。

strategy.setAppChannel("myChannel");  //設定渠道
strategy.setAppVersion("1.0.1");      //App的版本
strategy.setAppPackageName("com.tencent.xx");  //App的包名  

設定Bugly初始化延遲

Bugly會在啟動10s後聯網同步資料。若您有特別需求,可以修改這個時間。

strategy.setAppReportDelay(20000);   //改為20s

設定標籤

自定義標籤,用於標明App的某個“場景”。在發生Crash時會顯示該Crash所在的“場景”,以最後設定的標籤為準,標籤id需大於0。例:當用戶進入介面A時,打上9527的標籤:

CrashReport.setUserSceneTag(context, 9527); // 上報後的Crash會顯示該標籤

打標籤之前,需要在Bugly產品頁配置中新增標籤,取得標籤ID後在程式碼中上報。

設定自定義Map引數

自定義Map引數可以儲存發生Crash時的一些自定義的環境資訊。在發生Crash時會隨著異常資訊一起上報並在頁面展示。

CrashReport.putUserData(context, "userkey", "uservalue");

最多可以有9對自定義的key-value(超過則新增失敗),key限長50位元組、value限長200位元組,過長截斷。

設定開發裝置

在開發測試階段,可以在初始化Bugly之前通過以下介面把除錯裝置設定成“開發裝置”。

CrashReport.setIsDevelopmentDevice(context, true);

ADT 17增加了BuildConfig特性,可以通過獲取BuildConfig類的DEBUG變數來設定:

CrashReport.setIsDevelopmentDevice(context, BuildConfig.DEBUG);

Javascript的異常捕獲功能

Bugly Android SDK 1.2.8及以上版本提供了Javascript的異常捕獲和上報能力,以便開發者可以感知到 WebView中發生的Javascript異常。

/**
* 設定Javascript的異常監控
* 
* @param webView 指定被監控的webView
* @param autoInject 是否自動注入Bugly.js檔案
* @return true 設定成功;false 設定失敗
*/
CrashReport.setJavascriptMonitor(WebView webView, boolean autoInject)
  • Bugly.js檔案在Bugly SDK包中,可以在HTML手動嵌入;
  • 如果使用自動整合SDK方式,且需要在HTML手動嵌入Bugly.js,請下載Bugly SDK包
  • 由於Android 4.4以下版本存在反射漏洞,介面預設只對Android 4.4及以上版本有效;
  • 介面不會設定webView的WebViewClient和Listener;
  • 介面預設會開啟webView的JS執行能力;

自動注入

建議在WebChromeClient的onProgressChanged函式中呼叫介面:

CrashReport.setJavascriptMonitor(webView, true);

例子如下:

WebView webView = new WebView(this);
// 設定WebChromeClient
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void 
            
           

相關推薦

Bugly錯誤監測Android SDK接入

庫檔案匯入 Bugly支援自動整合和手動整合兩種方式,如果您使用Gradle編譯Apk,強烈推薦您使用自動接入方式配置庫檔案。 自動整合(推薦) Bugly支援JCenter倉庫和Maven Central倉庫。為了實現更加靈活的配置,Bugly SDK(2.1.

Bugly熱修復 Android SDK接入

首先為什麼要整合bugly熱修復。市面上有其他的熱修復框架,為什麼就用bugly?這裡給出2張圖大家就明白了。 引用騰訊bugly官網的一段話: 無需關注Tinker是如何合成補丁的無需自己搭建補丁管理後臺無需考慮後臺下發補

Android sdk 接入時遇到的錯誤解決方案

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/mi/san/R$attr; Uncaught translation error: java.lang.

環信android sdk接入的過程

         最近專案中要用到群聊的功能,瞭解過後最終用了環信來實現此功能,下面來說具體的整合步驟; 第一步:首先至環信官網,<a href="http://www.easemob.com

Unity3d Android SDK 接入(入門篇)

前言:以前沒接過SDK,總覺得很高深莫測的樣子,但真正接觸之後,發現並不是那麼可怕,重要的是要學會android怎麼呼叫Unity裡的方法,Unity怎麼呼叫android裡的方法,當然, 現在學的還比較膚淺,繼續加油嘍。>=。=< 一,首先要掌握一些Unit

Android-SDK接入-YSDK(應用寶1.7.0)

  SDK接入-YSDK(應用寶1.7.0)-2021-01-07      大家好,近期在做多渠道打包平臺,會定期遇到第三方SDK升級,所以很被動的是,我們也要跟隨他們的步伐,及時升級。否則將面臨第三方開發者站無法過審的問題。之前我整理了 CodeReview 系列的部落格,今天開始會抽

AS匯入一個工程出現Error:please select Android SDK錯誤

匯入一個新的工程出現:Error:please select Android SDK 的錯誤 現象描述:點選執行程式按鈕,彈出一個“Edit Configure”的對話方塊,最下面報:Error:please select Android 

騰訊Bugly異常崩潰SDK接入

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Yuanti SC" } 首先登入Bugly,建立應用,記錄下AppId ①下載SDK,通過Cocoapods整合 pod 'Bugly'

騰訊Bugly錯誤日誌上傳,實時監測程式報錯問題

https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=201801191058421.新建專案異常上報:ECLIPES:Android Studio:檢視錯誤:首頁-立即接入-雙擊我們的專案,檢視

SDK接入】使用UnityPlugin接入Bugly(iOS)

不知不覺已入行將近一年,慢慢開始了碼農生涯。 最近專案中要求接入Bugly,方便隨時檢視遊戲執行的異常。騰訊出品的Bugly工具功能還是很強大的,包括異常上報、收集詳細Log、登入網頁實時檢視。但是,接SDK總會有坑,自己踩完之後希望能幫到同樣情況的碼友。

快速整合Bugly Android SDK

騰訊Bugly,面向移動開發者提供最專業的Crash監控、崩潰分析等質量跟蹤服務,為您修復使用者的每一次Crash! 註冊新App 註冊登入平臺賬號,然後就可以註冊新的app,填寫相應的資訊,就可以得到相應的APP_ID。

Android基礎學習總結(十五)——微信SDK接入與基本使用

前言 在專案開發中,有時候會遇到使用微信的需求,例如微信登入,分享到微信好友或者朋友圈等等,微信開放平臺為我們提供了非常方便的SDK接入方法,這裡簡單總結一些。 接入SDK 1申請你的AppID 請到 開發者應用登記頁面 進行登記,登記並

eclipse執行錯誤提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar

前幾天在ecplise上執行專案還好好,今天一執行就提示這個錯誤:Your project contains error(s), please fix them before running your application.(你的程式包含錯誤,請修改後再執行)。咋

華為推送-華為PUSH SDK Android接入方法

    整理了整個接入過程以及常用用法 檢查通道是否連線: adb shell netstat –ano | find "118" 整合過程 1.拷貝jar及res資原始檔 androidMa

Bugly Android 快速接入使用文件

轉自:http://bugly.qq.com/androidsdk 如果您使用Gradle編譯Apk,我們強烈推薦您使用自動接入方式配置庫檔案(JCenter倉庫)。 方式1:自動匯入(推薦) 在Module的buid.gradle檔案中新增依賴和屬性配置:

bugly映象地址,可以下載android sdk的外掛

http://android-mirror.bugly.qq.com:8080/android/repository/ sdk manager中,選單依次開啟Tools–>Manage Add-on Sites...–>User Defined Site

芝麻信用分SDK接入,顯示芝麻信用授權介面(Android

文件中寫的還是很清楚,要在自己app的服務端以及客戶端都接入相應的SDK。 這是Android版授權芝麻信用的回撥介面: ICreditListener iCreditListener = new ICreditListener() { @Override public void onComplete

android 第三方SDK接入一般流程

1 官方文件必看官方文件接入一般包括常規接入和自定義接入。這裡的建議是:先常規接入,跑起來,並測試正常之後,然後實現自定義的接入。目前我接入過的包括:常用的支付,地圖,推送,分享,熱更新,功能性sdk等等2 官方的Demo最好去下載官方的Demo並能執行起來,Demo裡面一般

百度地圖api android sdk leaked ServiceConnection com.baidu.location.LocationClient錯誤

最近在百度地圖api 的android sdk , 下載了官方的例子執行,一切正常,然後參照定點陣圖層寫了個程式一執行,出現了以下錯誤: 03-29 15:36:52.300: E/ActivityThread(6484): Activity com.gif.activ

Unity 接入Android SDK導致遊戲在模擬器中崩潰(豎屏遊戲)

        前段時間接入sdk之後,發現遊戲在真機中執行正常,但是在模擬器中運行遊戲莫名崩潰,於是猜測是sdk導致的。今天有時間來專門找問題所在。        方法:新建工程A,原始工程B。把B工程下的plugins資料夾匯入A工程,打包a.apk發現模擬器可以執行。原