debug_view_kotlin

Introduction: 用 kotlin 实现的 Android 浮层调试控制台,实时的显示内存、FPS、文字 log
More: Author   ReportBugs   
Tags:

Debug-View 是用 Kotlin 实现的用于 Android 调试的浮层调试控制台,这个控制台会一直浮在 app 的 UI 最上层, 用于实时地、直观地显示 app 的性能指标和日志信息:App 使用的内存信息、App 的实时帧率 FPS、app 启动时间、Activity 启动时间、文字 log 信息。

  • 推荐项目kotlin_tips,用 Kotlin 去提高生产力:汇总 Kotlin 相对于 Java 的优势,以及怎么用 Kotlin 去简洁、务实、高效、安全开发的 Tips
  • 推荐项目easy_mock_api,给客户端同学的模拟 json 接口的小工具
  • 推荐项目CompatWebView,CompatWebView is used to fix addJavascriptInterface below Android 4.2

How to use

debug_view

  • 开启浮层权限:在 App 首次启动时,Debug-View 可能会去请求开启浮层权限,开启后才能显示控制台
  • 浮层 Debug-View 的区域说明:
    • 如上图所示,浮层分为两个部分:左下角的矩形区域为控制区域,右上角的大矩形区域为显示日志区域,该区域不接收点击事件和焦点,会显示如下三种信息:
      • 内存信息:Mem 为手机剩余内存、Pss 为应用所使用的总内存(包括共有的)、PD 为应用的 TotalPrivateDirty 内存(私有的)
      • 帧率 FPS:手机的实时帧率 FPS
      • 启动时间:App 启动时间以及 Activity 启动时间
      • 文字 Log:通过 LogModule.instance.log("msg...")向浮层控制台输出任意日志
    • 浮层的控制说明
      • 点击左下角的控制区域(短按),会清空日志控制台信息
      • 长按左下角的控制区域(长按),会隐藏或者显示右上角的浮层控制台

How to import

  • 对于已经支持 kotlin 的项目,在 Application 的 module 里添加依赖即可

     dependencies {
       debugImplementation 'com.sw.debug.view:debug-view:1.0.1'
       releaseImplementation 'com.sw.debug.view:debug-view-no-op:1.0.1'
       testImplementation 'com.sw.debug.view:debug-view-no-op:1.0.1'
     }
    

    如果是 java 项目需要先添加 kotlin 的支持,步骤是在 Android Studio 中选择 tools ---> kotlin ---> Configure Kotlin in Project

  • 初始化,建议在应用的 Application 中,初始化后 debug-view 就会生成一个浮层 View 显示内存和 FPS ```kotlin private fun initDebugView() {

      DebugViewWrapper.instance.init(
              DebugViewWrapper.Builder(this)
                      .viewWidth(250) /* the width of debug-view */
                      .bgColor(0x6f677700) /* the color of debug-view */
                      .alwaysShowOverlaySetting(true) /* the flag for always showing Overlay Setting */
                      .logMaxLines(20) /* the max lines of log */
      )
    
    DebugViewWrapper.instance.show()
}

- 自定义输出文字 log 到浮层控制台中
```kotlin
    LogModule.instance.log("some msg...")
  • 统计应用的启动时间(详细见 example 案例)

    • 一般以 Application 中的 attachBaseContext()作为应用启动的开始点,故在 attachBaseContext()方法中调用
      TimerModule.instance.begin(application)
      
    • 一般以主页显示出来作为应用启动的结束点,故在 MainActivity 中的 onWindowFocusChanged()函数中调用(不要在 Activity 的 onResume 中调用,此时 Activity 还未完全显示)
      override fun onWindowFocusChanged(hasFocus: Boolean) {
          super.onWindowFocusChanged(hasFocus)
          if(hasFocus){
              TimerModule.instance.end(application)
          }
      }
      
  • 统计 Activity 的启动时间

    • 一般项目中都有 BaseActivity,以 BaseActivity 的 onCreate 作为启动的开始点:
       TimerModule.instance.begin(this)
      
    • 同理在 BaseActivity 的 onWindowFocusChanged()作为启动的结束点:
      override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if(hasFocus){
            TimerModule.instance.end(this)
        }
      }
      
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea