全部產品
Search
文件中心

Mobile Platform as a Service:Android 用戶端診斷

更新時間:Jul 13, 2024

本文介紹如何在 Android 用戶端中使用日誌診斷服務。日誌診斷在控制台下發任務時支援訊息推送和資料同步雙通道。

進行 Android 用戶端診斷的步驟如下:

  1. 初始化診斷服務

  2. 寫入診斷記錄

  3. 在控制台拉取日誌

前置條件

初始化診斷服務

診斷服務支援使用資料同步或訊息推送通道拉取診斷記錄,兩種通道的初始方式不同。

使用訊息推送通道

使用訊息推送通道時,您需要在 App 啟動後完成以下操作:

使用資料同步通道

使用資料同步通道時,您需要在 App 啟動後調用以下方法,完成通道初始化。

// 設定 userId
MPLogger.setUserId(String userId);
// 初始化 Sync 通道,必須先設定 userId,否則會初始化失敗
MPDiagnose.initSyncChannel(Context context);

寫入診斷記錄

用戶端收到下發的診斷任務時,只有使用 mPaaS 的日誌工具 MPLogger 寫入的日誌才會被上傳,因此推薦您使用 MPLogger 代替 android.util.Log 寫日誌。MPLogger 提供和原生 Log 類似的記錄層級方法:

void verbose(String tag, String msg);
void debug(String tag, String msg);
void info(String tag, String msg);
void warn(String tag, String msg);
void warn(String tag, Throwable t);
void warn(String tag, String msg, Throwable tr);
void error(String tag, String msg);
void error(String tag, Throwable t);
void error(String tag, String msg, Throwable t);
void print(String tag, String msg);
void print(String tag, Throwable t);

在通過 MPLogger 寫入的日誌中,debug 包會在 logcat 中顯示;release 包不會在 logcat 中顯示。診斷記錄在裝置上的儲存目錄為:

  • debug 包:/sdcard/[PackageName]/applog,當該目錄無法寫入時(例如應用 targetSdkVersion 大於等於 30),日誌將寫入 release 包的目錄。

  • release 包:/data/data/[PackageName]/files/applog

在控制台拉取日誌

您可以在控制台拉取使用 mPaaS 的日誌工具列印的日誌,從而快速便捷地分析 App 在指定機型或使用者上出現的崩潰或異常問題。

步驟 1:建立日誌拉取任務

  1. 進入 mPaaS 控制台,選擇目標應用。

  2. 在左側導覽列中,點擊 移動分析 > 日誌管理

  3. 拉取即時日誌 標籤頁中,點擊 添加 按鈕。

  4. 填寫任務資訊。其中,使用者識別碼 為您的應用登入系統中使用者的標識。通過 MPLogger.setUserId(String userId) 或訊息推送上報使用者識別碼 的方法設定。

  5. 點擊 確認 按鈕,完成日誌拉取任務建立。

步驟 2:觸發日誌拉取任務

  1. 在日誌拉取工作清單中,找到剛剛建立的任務,選擇 觸發通道,然後點擊 操作 列的 觸發

  2. 稍等片刻重新整理頁面,若任務狀態為:

    • 任務處理完成:點擊 查看 按鈕即可下載診斷記錄。

    • 調用 Push/Sync 服務成功:表示已下發上傳診斷記錄的訊息,但用戶端還未收到或收到但未上傳日誌。 針對此情況,請確認您的 App 進程在系統中仍然存在;如果不存在請重啟 App。如果重啟後任務狀態仍未變化,請參考下文進行初步排查。

問題排查

如果出現無法拉取到日誌的問題,請根據所使用的診斷記錄下發通道,按照對應的步驟進行排查。

使用訊息推送通道

排查步驟如下:

  1. 進入 mPaaS 控制台 > 訊息推送 頁面,根據 userId 推送一條普通的訊息到您的 App,確認訊息推送通道暢通。

  2. 在訊息推送通道暢通的情況下,先清空 logcat 日誌,切換到 push 進程,然後在控制台診斷任務中再次點擊 觸發 按鈕,觀察 logcat 日誌。

  3. 過濾 mPush14,觀察是否收到診斷訊息。若未收到,請確認推送通道是否已中斷連線。 image.png

  4. 確認收到診斷訊息後,可尋找是否有以下日誌,確認診斷訊息是否被轉寄到 MonitorService。 若報錯找不到ClientMonitorService,請使用 mPaaS 外掛程式更新 SDK:

    • 10.1.32 基準請升級到 10.1.68,並更新群組件到最新版本。

    • 10.1.60 或 10.1.68 基準請更新群組件到最新版本。2

  5. 確認 MonitorService 啟動後,過濾 AlipayLogUploader,查看本地是否存在診斷記錄。如果出現以下日誌,說明本地存在診斷記錄可以上傳。

    本地存在日誌

    如果出現以下日誌,說明不存在診斷記錄。

    本地不存在日誌

    若不存在診斷記錄,請檢查以下專案:

    • 控制台建立的拉取即時日誌任務,選取的時間段不能少於 1 小時;在選取的時間段內 App 須運行且輸出診斷記錄。

    • App 聲明並動態申請了以下許可權:

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  6. 確認本地存在診斷記錄後,過濾 HttpUpload,查看日誌上傳是否成功,若 responseCode 為 200 則表示上傳成功。 3

使用資料同步通道

排查步驟如下:

  1. 清空 logcat 日誌,切換到主進程,初始化同步通道後,過濾 isConnected,觀察同步通道建連是否成功。

  2. 在 mPaaS 控制台診斷任務中再次點擊 觸發 按鈕,過濾 MPDiagnose,觀察是否收到診斷訊息,以及是否啟動了MonitorService

    若未收到訊息,請確認設定的 userId 和診斷任務中填寫的 userId 是否一致;若報錯找不到ClientMonitorService,請使用 mPaaS 外掛程式更新 SDK:

    • 10.1.32 基準請升級到 10.1.68,並更新群組件到最新版本。

    • 10.1.60 或 10.1.68 基準請更新群組件到最新版本。

  3. 確認 MonitorService 啟動後,切換到 push 進程,過濾 AlipayLogUploader,查看本地是否存在診斷記錄。如果出現以下日誌,說明本地存在診斷記錄可以上傳。如果出現以下日誌,說明不存在診斷記錄。

    請檢查以下專案:

    • 控制台建立的拉取即時日誌任務,選取的時間段不能少於 1 小時;在選取的時間段內 App 須運行且輸出診斷記錄。

    • App 聲明並動態申請了以下許可權:

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  4. 確認本地存在診斷記錄後,過濾 HttpUpload,查看日誌上傳是否成功,若 responseCode 為 200 則表示上傳成功。