Android 可視化性能監控和輔助小工具合集

MagicBox是一款Android平臺的小工具合集, 性能檢測, 接口請求控制和攔截等功能集合. 建議在Debug和測試階段使用.

功能清單

  • 小工具: 提供各種小工具輔助開發測試, 並支持外部擴展.

    功能 描述
    APP信息 打開展示APP詳細信息, 支持外部擴展
    設備信息 打開展示設備詳細信息
    儀表盤 打開或關閉系統彈窗, 用於實時展示性能和網絡數據
    Crash信息 直接在APP內查看Crash信息, 也支持導出到SD卡
    沙盒查看 查看APP沙盒空間, 支持文本預覽和導出到SD卡
    支持外部動態擴展
  • 性能監控: 提供開關性能相關數據的監控, 實時性能數據可以展示在儀表盤上或直接回調.

    功能 描述
    CPU 開關監控APP的實時CPU使用率
    內存 開關監控APP的實時內存使用量
    幀率 開關監控APP的實時渲染幀率
  • 網絡輔助(支持3.x okhttp): 支持開關模擬各種網絡情況和攔截請求日誌.

    功能 描述
    弱網模擬 接口請求的速度默認限制在1kb/s, 可以外部配置
    超時模擬 接口請求默認等待5s後, 返回400. 超時時間可配置
    404模擬 接口直接返回404
    攔截日誌 攔截請求, 彙總基本屬性和耗時等信息
  • TODO

    TODO 描述
    組件加載耗時監控 插樁監控頁面, 服務等組件的加載耗時

額外開銷

額外開銷 描述
線程1個 開啓性能監控後, 啓動線程處理數據
線程1個 預覽沙盒文件時IO文件
網絡攔截器2個 開啓網絡功能後, 用來模擬和攔截接口請求
系統彈窗權限 需要申請系統彈窗權限, 來進行數據可視化
存儲權限 導出沙盒或Crash文件到SD卡時申請
包體積 增大40k左右

Gradle接入

根項目build.gradle中引入mavenCentral.

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

Modulebuild.gradle中接入Magic-Box.

dependencies {
    compile 'com.github.hijesse:magic-box:1.0.0'
}

如何使用

  • 初始化

    1. 初始化Magic-Box. 建議在Application中初始化MagicBox. SDK的初始化並沒有做任何耗時操作, 只是全局緩存一下應用的context並標記是否要打印內部log.

      MagicBox.init(getApplication(), true);
      
    2. 初始化網絡攔截器

      SDK提供兩種方式添加攔截器並開啓網絡相關總開關:

      使用SDK傳入OKHttpClient自動添加攔截器並打開總開關.

      // 分別添加網絡模擬攔截器和請求日誌攔截器
      okHttpClient = MagicBox.getNetworkInfoManager().setSimulationEnable(true, okHttpClient);
      okHttpClient = MagicBox.getNetworkInfoManager().setRequestLoggerEnable(true, okHttpClient);
      

      或者使用OKHttp的builder手動添加網絡攔截器.

      // 分別添加網絡模擬和請求日誌攔截器
      builder.addNetworkInterceptor(new SimulateNetworkInterceptor())
      builder.addInterceptor(new RequestLoggerInterceptor())
      
    3. 擴展APP信息展示

      List<MagicBoxDeviceAppInfoData> appData = new ArrayList<>();
      appData.add(new MagicBoxDeviceAppInfoData("渠道", "demo"));
      // 設置app信息的擴展數據
      MagicBox.setAppInfoExternalData(appData);
      
  • 啓動魔盒主頁

    1. 啓動默認魔盒主頁

      在這裏插入圖片描述

      /**
      * 啓動默認魔盒主頁
      *
      * @param context context
      * @param title   標題
      */
      MagicBoxActivity.start(context, title)
      
    2. 啓動支持擴展小工具的魔盒主頁, 並回調擴展小工具的點擊事件.

      在這裏插入圖片描述

      /**
      * 啓動魔盒主頁, 支持小工具擴展, 並監聽回調
      * <p>
      * 回調以{@link #BASE_RESULT_CODE} 爲基數
      * 加上tools數組下標爲result code, 進行回調
      *
      * @param context     context
      * @param title       標題
      * @param requestCode 請求code
      * @param tools       擴展小工具
      */
      MagicBoxActivity.startActivityWithResult(activity, title,
                  REQUEST_MAGIC_BOX, new String[]{"擴展1", "擴展2"});
      

      以擴展的方式啓動魔盒主頁後, 在啓動父級頁面的onActivityResult裏處理擴展的點擊回調.

      在這裏插入圖片描述

      if (requestCode != REQUEST_MAGIC_BOX) {
          return;
      }
      
      // 以BASE_RESULT_CODE 基數 + 擴展下標
      if (resultCode == MagicBoxActivity.BASE_RESULT_CODE) {
          toast("擴展1");
      } else if (resultCode == MagicBoxActivity.BASE_RESULT_CODE + 1) {
          toast("擴展2");
      }
      
  • 獨立開關

    1. 開關性能監控, 並監聽性能數據回調. 將在儀表盤上展示的數據直接回調本地.

      在這裏插入圖片描述

      // 開啓性能監控
      MagicBox.getPerformanceManager().startMonitorCPU();
      MagicBox.getPerformanceManager().startMonitorMem();
      MagicBox.getPerformanceManager().startMonitorFPS();
      
      // 關閉性能監控
      MagicBox.getPerformanceManager().stopMonitorCPU();
      MagicBox.getPerformanceManager().stopMonitorMem();
      MagicBox.getPerformanceManager().stopMonitorFPS();
      
      // 註冊性能數據回調
      MagicBox.registerDashboardData(listener);
      // 非使用場景一定要註銷, 避免內存泄露
      MagicBox.unregisterDashboardData(listener);
      
      /**
      * Magic Box所有數據監聽. UI 線程回調.
      */
      public interface OnDashboardDataListener {
          /**
          * 性能相關數據回調
          *
          * @param performanceData 性能
          */
          void onPerformance(PerformanceData performanceData);
      
          /**
          * 網絡請求攔截日誌回調
          *
          * @param loggerData 攔截日誌
          */
          void onHttpRequestLog(RequestLoggerData loggerData);
      }
      
    2. 開啓Crash攔截, 建議在Application中初始化MagicBox後進行設置.

      // java crash攔截
      MagicBox.getJavaUncaughtCrashManager().enable(getApplication());
      

      開啓Crash攔截, 在APP中發生Crash後SDK會將Crash信息保存至沙盒緩存文件中. 可以使用小工具直接文本查看或導出到SD卡.

      在這裏插入圖片描述

      在這裏插入圖片描述

    3. 開關網絡模擬

      // 開啓網絡模擬總開關
      MagicBox.getNetworkInfoManager().setSimulationEnable(true)
      
      // 設置模擬網絡超時, 並設置超時時間爲10s
      MagicBox.getNetworkInfoManager().setSimulationType(NetworkInfoManager.SIMULATION_TYPE_TIMEOUT);
      MagicBox.getNetworkInfoManager().setSimulationTimeout(10000);
      
      // 模擬404
      MagicBox.getNetworkInfoManager().setSimulationType(NetworkInfoManager.SIMULATION_TYPE_BLOCK);
      
      // 設置模擬限速, 並設置限速爲10k/s
      MagicBox.getNetworkInfoManager().setSimulationType(NetworkInfoManager.SIMULATION_TYPE_SPEED_LIMIT);
      MagicBox.getNetworkInfoManager().setSimulationRequestSpeed(10);
      
    4. 開關網絡攔截

      // 開啓網絡攔截總開關
      MagicBox.getNetworkInfoManager().setRequestLoggerEnable(true);
      
      // 設置網絡攔截域名白名單
      MagicBox.getNetworkInfoManager().setRequestLoggerHostWhiteList(new String[]{"www.github.com"});
      

源碼倉庫

https://github.com/HiJesse/Magic-Box


轉載請註明出處:https://blog.csdn.net/l2show/article/details/106757328

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章