日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bugly怎么读_高级功能

發(fā)布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bugly怎么读_高级功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Bugly Android SDK 高級配置

更多的Bugly行為控制

我們提供了UserStrategy類作為Bugly的初始化擴展,在這里您可以修改本次初始化Bugly數(shù)據(jù)的版本、渠道及部分初始化行為。通過以下方式傳入:

UserStrategy strategy = new UserStrategy(appContext);

//...在這里設(shè)置strategy的屬性,在bugly初始化時傳入

//...

CrashReport.initCrashReport(appContext, APPID, true, strategy);

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

用戶策略(UserStrategy)

設(shè)置App版本、渠道、包名

Bugly默認(rèn)讀取AndroidManifest.xml文件中VersionName、Package信息。若您有自己的版本或渠道設(shè)定需求,可通過該接口修改。

strategy.setAppChannel("myChannel"); //設(shè)置渠道

strategy.setAppVersion("1.0.1"); //App的版本

strategy.setAppPackageName("com.tencent.xx"); //App的包名

設(shè)置Bugly初始化延遲

Bugly會在啟動10s后聯(lián)網(wǎng)同步數(shù)據(jù)。若您有特別需求,可以修改這個時間。

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

設(shè)置標(biāo)簽

自定義標(biāo)簽,用于標(biāo)明App的某個“場景”。在發(fā)生Crash時會顯示該Crash所在的“場景”,以最后設(shè)置的標(biāo)簽為準(zhǔn),標(biāo)簽id需大于0。例:當(dāng)用戶進(jìn)入界面A時,打上9527的標(biāo)簽:

CrashReport.setUserSceneTag(context, 9527); // 上報后的Crash會顯示該標(biāo)簽

打標(biāo)簽之前,需要在Bugly產(chǎn)品頁配置中添加標(biāo)簽,取得標(biāo)簽ID后在代碼中上報。

設(shè)置自定義Map參數(shù)

自定義Map參數(shù)可以保存發(fā)生Crash時的一些自定義的環(huán)境信息。在發(fā)生Crash時會隨著異常信息一起上報并在頁面展示。

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

最多可以有9對自定義的key-value(超過則添加失敗);

key限長50字節(jié),value限長200字節(jié),過長截斷;

key必須匹配正則:[a-zA-Z[0-9]]+。

設(shè)置開發(fā)設(shè)備

在開發(fā)測試階段,可以在初始化Bugly之前通過以下接口把調(diào)試設(shè)備設(shè)置成“開發(fā)設(shè)備”。

CrashReport.setIsDevelopmentDevice(context, true);

ADT 17增加了BuildConfig特性,可以通過獲取BuildConfig類的DEBUG變量來設(shè)置:

CrashReport.setIsDevelopmentDevice(context, BuildConfig.DEBUG);

設(shè)置Crash回調(diào)

Crash回調(diào)類(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進(jìn)制內(nèi)容進(jìn)行上報

*/

public abstract byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType,

String errorMessage, String errorStack);

}

設(shè)置方法如下:

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);

兩個回調(diào)返回的數(shù)據(jù)將伴隨Crash一起上報到Bugly平臺,并展示在附件中:

注意,需要盡量保證回調(diào)的邏輯簡單和穩(wěn)定,絕對不能在回調(diào)中Kill掉進(jìn)程,否則會影響Crash的上報。如果需要執(zhí)行類似于Crash之后Kill掉進(jìn)程并重新拉起的動作,建議自定義一個Crash handler,并在初始化Bugly之前注冊。

Javascript的異常捕獲功能

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

/**

* 設(shè)置Javascript的異常監(jiān)控

*

* @param webView 指定被監(jiān)控的webView

* @param autoInject 是否自動注入Bugly.js文件

* @return true 設(shè)置成功;false 設(shè)置失敗

*/

CrashReport.setJavascriptMonitor(WebView webView, boolean autoInject)

“Bugly.js”文件在Bugly SDK包中,可以在HTML手動嵌入;

如果使用自動集成SDK方式,可以使用自動注入和手動注入兩種方式。如果使用自動集成+手動注入的方式 需要下載“Bugly.js”文件;

由于Android 4.4以下版本存在反射漏洞,接口默認(rèn)只對Android 4.4及以上版本有效;

接口不會設(shè)置webView的WebViewClient和Listener;

接口默認(rèn)會開啟webView的JS執(zhí)行能力;

如果使用了非Android官方的WebView(例如使用X5內(nèi)核),需要下載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表示關(guān)閉

*/

@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的內(nèi)容描述.

*

* @return WebView的內(nèi)容描述.

*/

@Override

public CharSequence getContentDescription() {

// 下面僅為例子,請用真正邏輯代替

return .getContentDescription();

}

};

// 調(diào)用Bugly設(shè)置JS異常捕獲接口時傳入創(chuàng)建的WebView接口對象即可

自動注入

建議在WebChromeClient的onProgressChanged函數(shù)中調(diào)用接口:

CrashReport.setJavascriptMonitor(webView, true);

例子如下:

WebView webView = new WebView(this);

// 設(shè)置WebChromeClient

webView.setWebChromeClient(new WebChromeClient() {

@Override

public void onProgressChanged(WebView webView, int progress) {

// 增加Javascript異常監(jiān)控

CrashReport.setJavascriptMonitor(webView, true);

super.onProgressChanged(webView, progress);

}

});

// 加載HTML

webView.loadUrl(url);

手動注入

下載Bugly.js文件并添加到需要監(jiān)控Javascript異常的HTML中:

...

在WebView加載完該HTML后設(shè)置Javascript的異常捕獲功能:

WebView webView = new WebView(this);

// 加載HTML

webView.loadUrl(url);

// 增加Javascript異常監(jiān)控

CrashReport.setJavascriptMonitor(webView, false);

在Bugly Android SDK捕獲到Javascript異常后,默認(rèn)會上報以下信息:

Android設(shè)備的相關(guān)信息;

Javascript異常堆棧和其他信息;

Java堆棧;

WebView的信息,目前只包括ContentDescription。

更多的Bugly日志附加信息

我們提供了一些信息記錄API供您補充額外的內(nèi)容。這些信息會隨著異常一起上報。例如App環(huán)境、用戶屬性等等。主要包含以下接口:

1、設(shè)置用戶ID

您可能會希望能精確定位到某個用戶的異常,我們提供了用戶ID記錄接口。

例:網(wǎng)游用戶登錄后,通過該接口記錄用戶ID,在頁面上可以精確定位到每個用戶發(fā)生Crash的情況。

CrashReport.setUserId("9527"); //該用戶本次啟動后的異常日志用戶ID都將是9527

2、主動上報開發(fā)者Catch的異常

您可能會關(guān)注某些重要異常的Catch情況。我們提供了上報這類異常的接口。

例:統(tǒng)計某個重要的數(shù)據(jù)庫讀寫問題比例。

try {

//...

} catch (Throwable thr) {

CrashReport.postCatchedException(thr); // bugly會將這個throwable上報

}

3、自定義日志功能

我們提供了自定義Log的接口,用于記錄一些開發(fā)者關(guān)心的調(diào)試日志,可以更全面地反應(yīng)App異常時的前后文環(huán)境。使用方式與android.util.Log一致。用戶傳入TAG和日志內(nèi)容。該日志將在Logcat輸出,并在發(fā)生異常時上報。有如下

BuglyLog.v(tag, log)

BuglyLog.d(tag, log)

BuglyLog.i(tag, log)

BuglyLog.w(tag, log)

BuglyLog.e(tag, log)

注意:

使用BuglyLog接口時,為了減少磁盤IO次數(shù),我們會先將日志緩存在內(nèi)存中。當(dāng)緩存大于一定閾值(默認(rèn)10K),會將它持久化至文件。您可以通過setCache(int byteSize)接口設(shè)置緩存大小,范圍為0-30K。例:BuglyLog.setCache(12 * 1024) //將Cache設(shè)置為12K

如果您沒有使用BuglyLog接口,且初始化Bugly時isDebug參數(shù)設(shè)置為false,該Log功能將不會有新的資源占用;

為了方便開發(fā)者調(diào)試,當(dāng)初始化Bugly的isDebug參數(shù)為true時,異常日志同時還會記錄Bugly本身的日志。請在App發(fā)布時將其設(shè)置為false;

上報Log最大30K。

添加額外的SO文件信息

為了更好得區(qū)分不同構(gòu)建或者版本的SO文件以方便地管理Native代碼,建議給SO文件加上獨立的版本號或者UUID。

SO文件的版本號

在任意一個源碼文件(建議是專門控制版本相關(guān)信息的源碼文件)中加入一行:

extern "C" const char SO_FILE_VERSION[] __attribute__ ((section (".bugly_version"))) = ""

此后,NDK編譯的SO文件將帶有一個具有版本信息的段(.bugly_version)。之所以把段名 定義為“.bugly_version”,是為了Bugly的NDK解析的統(tǒng)一性。查看SO文件的版本號的一個方法如下(需要readelf或類似工具):

readelf -p .bugly_version libxxx.so

其中“readelf”是GNU Binary Utilities一個工具,用于解析ELF格式文件(SO文件屬于ELF格式文件)。Linux下默認(rèn)安裝了;Windows下可使用NDK提供的readelf(\toolchains\xxx\prebuit\windowsxxx\bin\xxxreadelf.exe)或者安裝MinGW或者Cygwin;Mac下如果沒有該工具,可從GNU Binary Utilities官網(wǎng)下載安裝或者使用NDK提供的readelf。

添加SO文件的UUID

在“Android.mk”文件中加上一行:

LOCAL_LDFLAGS += -Xlinker --build-id

此后,NDK構(gòu)建的SO文件將帶有一個段(.note.gnu.buildid)專門存放構(gòu)建的UUID。查看SO文件的UUID的一個方法如下(需要readelf或類似工具):

readelf -x .note.gnu.build-id libxxx.so

Native堆棧例子如下圖(UUID不在堆棧中顯示):

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的bugly怎么读_高级功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。