教你玩轉友盟應用性能監(jiān)控U-APM平臺
目錄

前言
正文
一、U-APM 應用性能監(jiān)控平臺介紹
1. 大核心優(yōu)勢
2. U-APM 與其他產(chǎn)品功能對比
二、集成友盟 SDK 步驟
第一步、進入U-APM功能首頁
第二步、填寫應用程序信息并注冊
第三步、下載并集成基礎SDK
第四步、初始化代碼
第五步、觀察控制臺統(tǒng)計數(shù)據(jù)
三、集成 SDK 過程中遇到的問題
問題1.??錯誤: 程序包com.umeng.commonsdk不存在
問題2. SDK集成好后,監(jiān)控平臺沒有看到相關的統(tǒng)計數(shù)據(jù)
問題3. 報錯:Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER
四、實際問題定位與解決
1. 崩潰實例分析
2. 設置告警策略
3. 其他功能
結尾
前言
友盟推出了全新的應用性能監(jiān)控平臺 U-APM,U-APM 可以幫助我們深入了解應用的性能和穩(wěn)定性,幫助我們高效提升應用的質量。通過實時采集新版本上線后的崩潰信息,提供了多種輔助定位問題的關鍵信息及多維度分析報表,從而能夠快速發(fā)現(xiàn)問題、定位問題、解決問題。
正文
一、U-APM 應用性能監(jiān)控平臺介紹
1. 大核心優(yōu)勢
1)捕獲采集類型豐富,支持Java、Native、Swift、Objective-C、ANR、自定義異常的捕捉。
2)快速定位錯誤根源,提供行為日志、詳細日志、內存快照、設備信息、自定義字段,幫您快速發(fā)現(xiàn)問題原因,提升問題解決效率。
3)智能告警專業(yè)服務,提供郵件、釘釘、飛書、企業(yè)微信告警觸達通道,多時間段、多指標組合式告警,助您7*24小時監(jiān)控應用情況。提供專業(yè)客服+技術支持,豐富用戶課程,線下沙龍等,助您快速上手。
4)主流熱門機型,隨時隨地獲取海量Android和iOS云端真機, 穩(wěn)定不掉線,操作流暢無延遲,省卻百萬真機購入費用,保障App質量。
2. U-APM 與其他產(chǎn)品功能對比
功能項
U-APM
其他產(chǎn)品
數(shù)據(jù)最長查詢時間
90天
60天
崩潰捕獲
支持
支持
ANR
支持
支持
自定義異常
支持
支持
卡頓分析
Android &iOS雙端全采
僅支持Android
啟動分析
首次\冷\熱啟動,慢啟動設備查詢、啟動崩潰分析
不支持
內存分析
支持
不支持
網(wǎng)絡分析
即將上線
不支持
頁面分析
即將上線
不支持
錯誤/異常分布
系統(tǒng)、設備、版本、地域、運營商、渠道、使用時長、頁面
系統(tǒng)、設備、版本
告警觸達方式
釘釘、飛書、企業(yè)微信、郵箱
郵箱
告警類型
Java崩潰、Native崩潰、ANR、自定義異常、C#錯誤、Lua錯誤、卡頓、OOM異常
崩潰
支持單一錯誤告警
支持
不支持
告警觸發(fā)條件
指標比值支持且/或設置,時間、版本可靈活交叉設定
固定指標固定條件
云真機
支持
不支持
二、集成友盟 SDK 步驟
如果想要集成友盟的SDK也是需要一定操作步驟的,在同類產(chǎn)品中,過程不算法復雜,但也不是很簡單。至于如何更加便捷,是不是可以考慮把填寫應用信息的步驟省略掉?好了,這個問題留給咱們產(chǎn)品同學吧。接下來,我們開始詳細介紹。
第一步、進入U-APM功能首頁
U-APM功能體驗鏈接地址:https://at.umtrack.com/q0Dmaa
HYPERLINK "https://apm.umeng.com/apps/list" https://apm.umeng.com/apps/list
第二步、填寫應用程序信息并注冊
進入創(chuàng)建應用界面,首先填寫應用名稱 AVPlayer,然后選擇平臺,這里需要注意的是友盟支持iPhone、iPad、Android三個移動終端平臺,我們選擇安卓,默認中文為應用語言。我們的應用程序是一款播放器,因此應用類型選擇影視觀看/本地播放。最后,填寫應用程序的基本描述信息,點擊“注冊應用”按鈕。
完成注冊后,系統(tǒng)會給出應用程序的AppKey,為了保密,截圖中隱藏了部分內容,請見諒。
第三步、下載并集成基礎SDK
集成基礎 SDK 有兩種方式,分別是線上接入 SDK 和手動集成 SDK。目前,可能是考慮到新舊版本的兼容性問題,官方推薦新的 APP 使用線上接入 SDK 的方式。
那我們就與時俱進,以新版 APP 集成SDK為例進行演示說明。
1. 在工程 build.gradle 配置腳本中 buildscript 和 allprojects 段中添加 sdk maven 倉庫地址。
配置方式如下:
buildscript {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
}
2.?集成組件化各業(yè)務SDK
在 maven 中可以靈活配置所需的 SDK,在工程 App 對應 build.gradle 配置腳本 dependencies 段中添加基礎組件庫和統(tǒng)計 SDK 庫的依賴。
配置方法如下:
// 友盟基礎組件庫(所有友盟業(yè)務SDK都依賴基礎組件庫)
implementation "com.umeng.umsdk:common:9.4.2" // 版本號(必選))
implementation "com.umeng.umsdk:asms:1.4.1" // asms包依賴(必選)
implementation "com.umeng.umsdk:apm:1.4.2" // U-APM產(chǎn)品包依賴(必選)
代碼實例:
3. 功能依賴庫介紹
當然,也可以根據(jù)應用程序 APP 的實際需要添加其他功能的依賴庫,依賴庫的種類非常多,比如:
1)友盟基礎組件庫(所有友盟業(yè)務SDK都依賴基礎組件庫)
業(yè)務
組件
基礎組件
com.umeng.umsdk:common:x.x.x(必選)
基礎組件
com.umeng.umsdk:asms:x.x.x(必選)
2)友盟統(tǒng)計SDK依賴坐標
業(yè)務
組件
友盟統(tǒng)計SDK
com.umeng.umsdk:abtest:x.x.x //ABTest模塊依賴
友盟統(tǒng)計SDK
com.umeng.umsdk:game:x.x.x //游戲統(tǒng)計依賴
3)應用性能監(jiān)控SDK依賴坐標庫
業(yè)務
組件
基礎組件(必選)
com.umeng.umsdk:common:x.x.x
asms包依賴
com.umeng.umsdk:asms:x.x.x
應用性能監(jiān)控包(必選)
com.umeng.umsdk:apm:x.x.x
游戲統(tǒng)計SDK依賴(可選)
com.umeng.umsdk:game:x.x.x
4)友盟分享SDK核心庫
業(yè)務
組件
友盟分享SDK核心庫(使用U-Share必選)
com.umeng.umsdk:share-core:x.x.x
友盟分享面板核心庫(使用U-Share必選)
com.umeng.umsdk:share-board:x.x.x
5)支持gradle在線依賴的友盟分享模塊
業(yè)務
組件
QQ分享模塊
com.umeng.umsdk:share-qq:x.x.x
微信分享模塊
com.umeng.umsdk:share-wx:x.x.x
新浪微博分享模塊
com.umeng.umsdk:share-sina:x.x.x
支付寶分享模塊
com.umeng.umsdk:share-alipay:x.x.x
釘釘分享模塊
com.umeng.umsdk:share-dingding:x.x.x
6)友盟推送SDK依賴坐標
業(yè)務
組件
PushSDK核心庫
com.umeng.umsdk:push:x.x.x
PushSDK必須依賴utdid庫,所以需要加入對應依賴
com.umeng.umsdk:utdid:x.x.x
httpdns支持庫,必須添加
com.umeng.umsdk:alicloud-httpdns:x.x.x
httpdns支持庫,必須添加
com.umeng.umsdk:alicloud-utils:x.x.x
httpdns支持庫,必須添加
com.umeng.umsdk:alicloud_beacon:x.x.x
消息推送核心庫,必須添加
com.umeng.umsdk:agoo-accs:x.x.x
消息推送網(wǎng)絡核心庫,必須添加
com.umeng.umsdk:agoo_networksdk:x.x.x
消息推送日志核心庫,必須添加
com.umeng.umsdk:agoo_tlog:x.x.x
消息推送網(wǎng)絡核心庫,必須添加
com.umeng.umsdk:agoo_tnet4android:x.x.x
7)廠商推送依賴坐標(單一廠商通道下相關組件必須全部集成,例:小米通道集成2個組件)
業(yè)務
組件
小米-push
com.umeng.umsdk:xiaomi-push:x.x.x
小米-umengaccs
com.umeng.umsdk:xiaomi-umengaccs:x.x.x
華為-basetb
com.umeng.umsdk:huawei-basetb:x.x.x
華為-pushtb
com.umeng.umsdk:huawei-pushtb:x.x.x
華為-umengaccs
com.umeng.umsdk:huawei-umengaccs:x.x.x
魅族-push
com.umeng.umsdk:meizu-push:x.x.x
魅族-umengaccs
com.umeng.umsdk:meizu-umengaccs:x.x.x
OPPO-push
com.umeng.umsdk:oppo-push:x.x.x
OPPO-umengaccs
com.umeng.umsdk:oppo-umengaccs:x.x.x
vivo-push
com.umeng.umsdk:vivo-push:x.x.x
vivo-umengaccs
com.umeng.umsdk:vivo-umengaccs:x.x.x
第四步、初始化代碼
統(tǒng)一對各個業(yè)務進行初始化接口,總共分三點,下面分別介紹。
1)隱私合規(guī)中加入友盟+SDK合規(guī)聲明
https://developer.umeng.com/docs/147377/detail/213789。這一點是非常必要的,最近審核非常嚴格,特別是移動端APP。
2)在Applicaiton.onCreate函數(shù)中調用預初始化函數(shù)UMConfigure.preInit()
敏感的小伙伴,在這里就立馬會提出一個疑問:調用友盟的這個方法會不會影響APP的移動速度?答案是多慮了。preInit() 作為預初始化函數(shù),耗時極少,不會影響App首次冷啟動的用戶體驗,不會采集設備信息,也不會向友盟后臺上報數(shù)據(jù)。
友盟預初始化函數(shù)聲明如下:
public static void preInit(Context context, String appkey, String channel)
代碼截圖如下:
3)客戶端在用戶同意隱私政策后,開始正式初始化友盟SDK
調用初始化函數(shù)UMConfigure.init(),友盟初始化函數(shù)聲明如下:
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret)
代碼截圖如下:
第五步、觀察控制臺統(tǒng)計數(shù)據(jù)
完成設置后,我們返回到首頁,就可以查看相應的APP應用程序的統(tǒng)計信息了,包括異常次數(shù)、影響用戶數(shù)、告警次數(shù)、云真機剩余分鐘數(shù)等。
三、集成 SDK 過程中遇到的問題
問題1.??錯誤: 程序包com.umeng.commonsdk不存在
個人感覺,這是最常見的一種錯誤,但是官方的文檔中居然沒有相關的說明。官方常見問題列表地址:https://developer.umeng.com/docs/119267/detail/181401 ,感覺其中很多內容都是官方自己總結的,不夠接地氣,比如這個錯誤就不知道應該歸到哪一類。官方是不是可以考慮增加一個社區(qū)模塊,方便開發(fā)者之間交流。具體位置可以參考下圖:
最終,折騰了好久,也沒有通過在線模式集成友盟 SDK,后來還是換成了本地依賴模式解決這個問題。
問題2. SDK集成好后,監(jiān)控平臺沒有看到相關的統(tǒng)計數(shù)據(jù)
這個問題是我疏忽導致的,我以為在調用UMConfigure.preInit()方法的時候傳入AppKey就行了。而UMConfigure.init()方法沒有同步更新,因此導致了這個問題。我也由此斷定,真正起到關聯(lián)作用的方法是UMConfigure.init()。當然也期待官方更合理的解釋,因為我的理解可能有誤。
問題3. 報錯:Installation did not succeed. The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDER
集成友盟 SDK 后,安裝 APP 時報了這個錯誤。后來,把之前老的 APP 從手機端卸載,再重新安裝,問題解決。這樣看來,和集成友盟 SDK 的關系不大,但是這個問題就是這么神奇。
四、實際問題定位與解決
我們完成友盟 SDK 集成后,就可以通過后臺首頁發(fā)現(xiàn)對應的應用名稱集成狀態(tài)顯示“已集成”。同時,我們還可以查看應用程序的運行狀態(tài),比如異常次數(shù)和影響用戶數(shù)。
接下來,我們根據(jù)具體的異常監(jiān)控結果進行分析。
1. 崩潰實例分析
通過后臺的“分析”頁簽,找到“崩潰分析”模塊,可以發(fā)現(xiàn)今天有一例崩潰錯誤。
在當前頁面往下劃,我們可以看到相應的錯誤列表和錯誤分布。其中,錯誤列表包含了錯誤發(fā)生的摘要、ID、最近一次的發(fā)生時間、錯誤類型、版本范圍、錯誤次數(shù)、影響用戶數(shù)、處理狀態(tài)等,具體內容如下圖所示:
錯誤分布包含了設備分布、系統(tǒng)分布、運營商分布、版本分布、頁面分布、時長分布、渠道分布、地域分布,具體內容如下圖所示:
好了,接下來,我們具體分析一下這個錯誤。點擊錯誤列表中錯誤摘要的鏈接進入錯誤詳情,里邊有錯誤的具體明細,比如下圖所顯示的錯誤原因是數(shù)組越界:ArrayIndexOutOfBoundsException,具體的代碼位置在文件 UappActivity.java 的第 93 行。
我們找到對應的代碼行數(shù)看一下代碼情況,具體截圖如下:
哇哦,看到代碼再結合報錯提示,我們立馬知道了這行代碼寫的有問題,大小為 3 的數(shù)組,索引值最大為 2 ,不可能是 3,修改成 0、1、2,問題解決。
重新編譯后安裝,再運行看一下效果,執(zhí)行相同的操作,崩潰不再發(fā)生。此時,我們就可以手動修改該崩潰的處理狀態(tài)了,比如下圖所示,將“未修復”修改為“已修復”,其中還包括另外兩個狀態(tài),分別是“處理中”、“已忽略”。
2. 設置告警策略
另外,我們還可以針對某種錯誤類型設置告警策略,比如上面的崩潰問題,如果我們不確定是否真正解決了。那么就可以點擊“告警”按鈕,進入告警策略設置頁面。
在新建告警計劃頁面中,我們需要設置告警計劃名稱,一般使用錯誤名稱+錯誤ID的方式,但是注意不要超過20個字符。同時,還可以設置告警生效時間,默認實時通知,也可以自定義通知時間段,比如每周二的下午三點到四點。
另外,還可以自定義告警觸發(fā)條件,一般都是錯誤發(fā)生次數(shù)大于 0 時就會生效。還可以指定生效的應用版本,比如我只想監(jiān)控 APP 應用最新的 3.0 版本,就從下拉列表中選擇對應的版本即可。通知方式可以選擇郵箱、釘釘、企業(yè)微信、飛書中的至少一種,常見的方式是前兩種。
但是,在實際使用過程中,自己嘗試了兩個告警計劃,郵箱都沒有收到對應的通知。對于這個功能官方好像沒有版本限制,通知消息列表也是空的,非常奇怪,本來想把這個問題留給以后排查的。但是,后來不知過了多久,居然收到了郵件通知,看來延時還是挺大的。郵件截圖如下所示:
3. 其他功能
友盟應用性能監(jiān)控平臺 U-APM 除了上邊介紹的崩潰分析和告警通知功能外,還有ANR分析、自定義異常、卡頓分析、啟動分析、內存分析、網(wǎng)絡分析等功能模塊。
1)ANR分析,ANR 是用戶在使用 Android APP 過程中出現(xiàn)彈框,提示應用無響應,計為一次ANR。穩(wěn)定性模塊可以捕獲發(fā)生在主進程和子進程中的ANR。通過對ANR發(fā)生次數(shù)的計算,為開發(fā)者展示了App在所選時間中的錯誤趨勢、錯誤分布和錯誤列表,可快速地分析出導致APP發(fā)生ANR的主要原因。
注意事項:啟動監(jiān)控ANR功能,Android 需要集成Common 9.3.8及以上 + APM 1.1.0 及以上版本號。iOS 需要集成Common 7.2.8及以上 + APM 1.1.0 及以上版本號,升級后自動采集。
2)自定義異常,開發(fā)人員可以自己定義某種異常類型,程序對異常進行了捕獲處理,為更好了解并監(jiān)控這類異常,開發(fā)人員也將這類異常上報到友盟+的錯誤分析服務中。不得不說這個功能應用場景還是非常多的,Bugly也有類似的功能。
3)卡頓分析,當消息設定時長超出卡頓的定義閾值后會被記為卡頓,可以作為判斷應用性能的指標。解決卡頓問題在提升用戶體驗方面具有非常重要的意義,合理優(yōu)化卡頓指標在 APP 開發(fā)過程中是一件中長期的任務。
注意事項:使用卡頓功能,Android需要集成Common 9.3.8及以上 + APM 1.2.0 及以上版本號。iOS 需要集成Common 7.2.8及以上 + APM 1.2.0 及以上版本號,升級后自動采集。
4)啟動分析,包括啟動趨勢、慢啟動分析、啟動過崩潰分析。通過監(jiān)控 APP 應用啟動耗時的平均值、分位值、區(qū)間分布等數(shù)據(jù),以及啟動階段的性能分解數(shù)據(jù),分析慢啟動和啟動崩潰的原因。
5)內存分析,包括 OOM 異常、內存占用。提供了 APP 在運行階段的內存溢出、內存占用情況及分布詳情,便于我們分析應用的健康狀況和問題定位。
6)網(wǎng)絡分析, 通過收集 HTTP 請求、網(wǎng)絡錯誤、DNS解析等維度的數(shù)據(jù),分析當前應用的網(wǎng)絡狀況,有利于開發(fā)人員定位網(wǎng)絡相關的編碼問題,比如超時處理,斷網(wǎng)重連等常見問題。
結尾
通過本文的介紹,我們可以看出友盟應用性能監(jiān)控平臺 U-APM 的集成過程還是比較簡單的,另外,U-APM 平臺具備豐富的數(shù)據(jù)收集和功能分析能力,而且在具體的功能顆粒度劃分方面做得也非常細。相比同類產(chǎn)品,比如Bugly、網(wǎng)易云捕等要強大很多。另外,在集成和使用過程中也遇到一些,并在文中有所體現(xiàn),希望友盟團隊不斷完善 U-APM 平臺,為移動端開發(fā)的小伙們帶來新的福音。
劉振,全棧工程師,前后就職于傳統(tǒng)廣電巨頭和音視頻互聯(lián)網(wǎng)公司,具有了豐富的音視頻直播和點播相關開發(fā)經(jīng)驗,對WebRTC、FFmpeg和Electron有非常深入的了解。在 CSDN 上推出了很多音視頻相關的技術專欄,累計產(chǎn)出了500余篇原創(chuàng)作品,榮獲了 CSDN 2020 年博客專家榮譽勛章和 CSDN 2020 年博客之星 TOP40 榮譽稱號。同時,作為華為云的云享專家,參加了很多社區(qū)活動并分享很多原創(chuàng)內容。
社區(qū)筆名:liuzhen007(Data-Mining)
Android API/SDK 應用性能管理 APM
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。