bugly怎么读_高级功能
Bugly Android SDK 高級配置
更多的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字節,過長截斷;
key必須匹配正則:[a-zA-Z[0-9]]+。
設置開發設備
在開發測試階段,可以在初始化Bugly之前通過以下接口把調試設備設置成“開發設備”。
CrashReport.setIsDevelopmentDevice(context, true);
ADT 17增加了BuildConfig特性,可以通過獲取BuildConfig類的DEBUG變量來設置:
CrashReport.setIsDevelopmentDevice(context, BuildConfig.DEBUG);
設置Crash回調
Crash回調類(CrashReport的子類)的定義如下:
public abstract static class CrashHandleCallback {
public static final int CRASHTYPE_JAVA_CRASH = 0; // Java crash
public static final int CRASHTYPE_JAVA_CATCH = 1; // Java caught exception
public static final int CRASHTYPE_NATIVE = 2; // Native crash
public static final int CRASHTYPE_U3D = 3; // Unity error
public static final int CRASHTYPE_ANR = 4; // ANR
public static final int CRASHTYPE_COCOS2DX_JS = 5; // Cocos JS error
public static final int CRASHTYPE_COCOS2DX_LUA = 6; // Cocos Lua error
/**
* Crash處理.
*
* @param crashType 錯誤類型:CRASHTYPE_JAVA,CRASHTYPE_NATIVE,CRASHTYPE_U3D ,CRASHTYPE_ANR
* @param errorType 錯誤的類型名
* @param errorMessage 錯誤的消息
* @param errorStack 錯誤的堆棧
* @return 返回額外的自定義信息上報
*/
public abstract Map onCrashHandleStart(int crashType, String errorType,
String errorMessage, String errorStack);
/**
* Crash處理.
*
* @param crashType 錯誤類型:CRASHTYPE_JAVA,CRASHTYPE_NATIVE,CRASHTYPE_U3D ,CRASHTYPE_ANR
* @param errorType 錯誤的類型名
* @param errorMessage 錯誤的消息
* @param errorStack 錯誤的堆棧
* @return byte[] 額外的2進制內容進行上報
*/
public abstract byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType,
String errorMessage, String errorStack);
}
設置方法如下:
UserStrategy strategy = new UserStrategy(appContext);
strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {
public Map onCrashHandleStart(int crashType, String errorType,
String errorMessage, String errorStack) {
LinkedHashMap map = new LinkedHashMap();
map.put("Key", "Value");
return map;
}
@Override
public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType,
String errorMessage, String errorStack) {
try {
return "Extra data.".getBytes("UTF-8");
} catch (Exception e) {
return null;
}
}
});
CrashReport.initCrashReport(appContext, APPID, true, strategy);
兩個回調返回的數據將伴隨Crash一起上報到Bugly平臺,并展示在附件中:
注意,需要盡量保證回調的邏輯簡單和穩定,絕對不能在回調中Kill掉進程,否則會影響Crash的上報。如果需要執行類似于Crash之后Kill掉進程并重新拉起的動作,建議自定義一個Crash handler,并在初始化Bugly之前注冊。
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方式,可以使用自動注入和手動注入兩種方式。如果使用自動集成+手動注入的方式 需要下載“Bugly.js”文件;
由于Android 4.4以下版本存在反射漏洞,接口默認只對Android 4.4及以上版本有效;
接口不會設置webView的WebViewClient和Listener;
接口默認會開啟webView的JS執行能力;
如果使用了非Android官方的WebView(例如使用X5內核),需要下載2.5.0或以上版本Bugly Android SDK并按照以下方法使用:
CrashReport.WebViewInterface webView = new CrashReport.WebViewInterface() {
/**
* 獲取WebView URL.
*
* @return WebView URL
*/
@Override
public String getUrl() {
// 下面僅為例子,請用真正邏輯代替
return .getUrl();
}
/**
* 開啟JavaScript.
*
* @param flag true表示開啟,false表示關閉
*/
@Override
public void setJavaScriptEnabled(boolean flag) {
// 下面僅為例子,請用真正邏輯代替
WebSettings webSettings = .getSettings();
webSettings.setJavaScriptEnabled(flag);
}
/**
* 加載URL.
*
* @param url 要加載的URL
*/
@Override
public void loadUrl(String url) {
// 下面僅為例子,請用真正邏輯代替
.loadUrl();
}
/**
* 添加JavaScript接口對象.
*
* @param jsInterface JavaScript接口對象
* @param name JavaScript接口對象名稱
*/
@Override
public void addJavascriptInterface(H5JavaScriptInterface jsInterface, String name) {
// 下面僅為例子,請用真正邏輯代替
.addJavascriptInterface(jsInterface, name);
}
/**
* 獲取WebView的內容描述.
*
* @return WebView的內容描述.
*/
@Override
public CharSequence getContentDescription() {
// 下面僅為例子,請用真正邏輯代替
return .getContentDescription();
}
};
// 調用Bugly設置JS異常捕獲接口時傳入創建的WebView接口對象即可
自動注入
建議在WebChromeClient的onProgressChanged函數中調用接口:
CrashReport.setJavascriptMonitor(webView, true);
例子如下:
WebView webView = new WebView(this);
// 設置WebChromeClient
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView webView, int progress) {
// 增加Javascript異常監控
CrashReport.setJavascriptMonitor(webView, true);
super.onProgressChanged(webView, progress);
}
});
// 加載HTML
webView.loadUrl(url);
手動注入
下載Bugly.js文件并添加到需要監控Javascript異常的HTML中:
...
在WebView加載完該HTML后設置Javascript的異常捕獲功能:
WebView webView = new WebView(this);
// 加載HTML
webView.loadUrl(url);
// 增加Javascript異常監控
CrashReport.setJavascriptMonitor(webView, false);
在Bugly Android SDK捕獲到Javascript異常后,默認會上報以下信息:
Android設備的相關信息;
Javascript異常堆棧和其他信息;
Java堆棧;
WebView的信息,目前只包括ContentDescription。
更多的Bugly日志附加信息
我們提供了一些信息記錄API供您補充額外的內容。這些信息會隨著異常一起上報。例如App環境、用戶屬性等等。主要包含以下接口:
1、設置用戶ID
您可能會希望能精確定位到某個用戶的異常,我們提供了用戶ID記錄接口。
例:網游用戶登錄后,通過該接口記錄用戶ID,在頁面上可以精確定位到每個用戶發生Crash的情況。
CrashReport.setUserId("9527"); //該用戶本次啟動后的異常日志用戶ID都將是9527
2、主動上報開發者Catch的異常
您可能會關注某些重要異常的Catch情況。我們提供了上報這類異常的接口。
例:統計某個重要的數據庫讀寫問題比例。
try {
//...
} catch (Throwable thr) {
CrashReport.postCatchedException(thr); // bugly會將這個throwable上報
}
3、自定義日志功能
我們提供了自定義Log的接口,用于記錄一些開發者關心的調試日志,可以更全面地反應App異常時的前后文環境。使用方式與android.util.Log一致。用戶傳入TAG和日志內容。該日志將在Logcat輸出,并在發生異常時上報。有如下
BuglyLog.v(tag, log)
BuglyLog.d(tag, log)
BuglyLog.i(tag, log)
BuglyLog.w(tag, log)
BuglyLog.e(tag, log)
注意:
使用BuglyLog接口時,為了減少磁盤IO次數,我們會先將日志緩存在內存中。當緩存大于一定閾值(默認10K),會將它持久化至文件。您可以通過setCache(int byteSize)接口設置緩存大小,范圍為0-30K。例:BuglyLog.setCache(12 * 1024) //將Cache設置為12K
如果您沒有使用BuglyLog接口,且初始化Bugly時isDebug參數設置為false,該Log功能將不會有新的資源占用;
為了方便開發者調試,當初始化Bugly的isDebug參數為true時,異常日志同時還會記錄Bugly本身的日志。請在App發布時將其設置為false;
上報Log最大30K。
添加額外的SO文件信息
為了更好得區分不同構建或者版本的SO文件以方便地管理Native代碼,建議給SO文件加上獨立的版本號或者UUID。
SO文件的版本號
在任意一個源碼文件(建議是專門控制版本相關信息的源碼文件)中加入一行:
extern "C" const char SO_FILE_VERSION[] __attribute__ ((section (".bugly_version"))) = ""
此后,NDK編譯的SO文件將帶有一個具有版本信息的段(.bugly_version)。之所以把段名 定義為“.bugly_version”,是為了Bugly的NDK解析的統一性。查看SO文件的版本號的一個方法如下(需要readelf或類似工具):
readelf -p .bugly_version libxxx.so
其中“readelf”是GNU Binary Utilities一個工具,用于解析ELF格式文件(SO文件屬于ELF格式文件)。Linux下默認安裝了;Windows下可使用NDK提供的readelf(\toolchains\xxx\prebuit\windowsxxx\bin\xxxreadelf.exe)或者安裝MinGW或者Cygwin;Mac下如果沒有該工具,可從GNU Binary Utilities官網下載安裝或者使用NDK提供的readelf。
添加SO文件的UUID
在“Android.mk”文件中加上一行:
LOCAL_LDFLAGS += -Xlinker --build-id
此后,NDK構建的SO文件將帶有一個段(.note.gnu.buildid)專門存放構建的UUID。查看SO文件的UUID的一個方法如下(需要readelf或類似工具):
readelf -x .note.gnu.build-id libxxx.so
Native堆棧例子如下圖(UUID不在堆棧中顯示):
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的bugly怎么读_高级功能的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 南航里程每年清空吗_航空里程被盗用,多位
- 下一篇: cpuz北桥频率和内存频率_内存频率不是
