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時,只需變更配置指令碼中的版本號即可。
注意:自動整合時會自動包含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檔案,新增到編譯路徑中。
Android Studio工程
- 將Bugly庫檔案複製到工程的libs目錄下;
- 如果整合Bugly NDK,則在Module的buid.gradle檔案中新增SO庫目錄配置:
android {
sourceSets {
main.jniLibs.srcDirs = ['libs']
}
}
- 點選Sync,同步配置。
為了使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。
此外,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中輸出為:
現在您已經可以在“崩潰”頁面看到剛才觸發的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發現模擬器可以執行。原