Skip to content
leavesCZY edited this page Jul 31, 2023 · 15 revisions

一、Trace

Trace 是一个适用于 Android 的字节码插桩库

目前一共包含三个功能点:

  • 应用双击防抖。包括 Android 原生的 View 体系以及目前流行的 Jetpack Compose
  • 替换 Class 的继承关系。可用于非侵入式地实现监控大图加载的功能
  • 修复 Toast 在 Android 7.1 上的系统 bug。用于解决在 Android 7.1 系统上 Toast 由于 WindowToken 失效从而导致应用崩溃的问题

相关联的文章:

二、引入

在项目根目录下的 build.gradle 或者 build.gradle.kts 中引入插件

//grovy
plugins {
    id "io.github.leavesczy.trace" version "latestVersion" apply false
}
//kts
plugins {
    id("io.github.leavesczy.trace").version("latestVersion").apply(false)
}

在项目主模块下的 build.gradle 或者 build.gradle.kts 中应用插件,需要哪些功能点就为其设置对应的参数即可

//grovy
plugins {
    id("io.github.leavesczy.trace")
}

clickTrace {
    view.onClickClass = "x"
    view.onClickMethodName = "x"
    view.uncheckViewOnClickAnnotation = "x"
    view.include = []
    view.exclude = []
    compose.onClickClass = "x"
    compose.onClickWhiteList = "x"
}

replaceClassTrace {
    originClass = "x"
    targetClass = "x"
    include = []
    exclude = []
}

toastTrace {
    toasterClass = "x"
    showToastMethodName = "x"
}
//kts
plugins {
    id("io.github.leavesczy.trace")
}

clickTrace {
    view {
        onClickClass = "x"
        onClickMethodName = "x"
        uncheckViewOnClickAnnotation = "x"
        include = listOf()
        exclude = listOf()
    }
    compose {
        onClickClass = "x"
        onClickWhiteList = "x"
    }
}

replaceClassTrace {
    originClass = "x"
    targetClass = "x"
    include = listOf()
    exclude = listOf()
}

toastTrace {
    toasterClass = "x"
    showToastMethodName = "x"
}

三、接入说明

  • Trace 在 AGP 7.0+ 和 8.0+ 均已测试通过,更低版本的 AGP 则没有再特意进行试验
  • Trace 目前处于刚起步阶段,可能还会存在一些 bug,但由于 Trace 是以 Gradle Plugin 的形式引入到项目中的,引入成本和移除成本都很低,有需要的话还是值得一试的
  • Trace Plugin 也托管到了 GradlePluginPortal,可以在 Trace 查看
Clone this wiki locally