Skip to content

Releases: leavesczy/Track

v2.0.0

Choose a tag to compare

@leavesczy leavesczy released this 05 Oct 07:18

相对 1.1.7 的破坏性升级

接入说明:Wiki

环境

运行 Gradle 的 JDK 需 21

能力调整

1.1.7 2.0.0
viewClickTrack / composeClickTrack 保留,参数改名
replaceClassTrack superclassTrack(多规则)
replaceFieldTrack / replaceMethodTrack memberTrack(fields / methods)
toastTrack / optimizedThreadTrack 删除,改用 memberTrack

不再提供 isEnabled:不写对应 DSL 就不插桩;写了但不完整会直接失败

include / exclude:viewClickTrack 配在 extension 上;SuperclassRule / MemberMethodRule / MemberFieldRule 按条配置;composeClickTrack 不支持

参数改名

  • View:onClickClass → clickHandlerClass,onClickMethodName → clickMethodName,uncheckViewOnClickAnnotation → skipOnClickAnnotation
  • Compose:onClickClass → clickWrapperClass,onClickWhiteList → skipOnClickLabel(空字符串表示不做 label 豁免)
  • 替换规则:owner / name / descriptor / proxyOwner → ownerClass / methodName|fieldName / methodDescriptor|typeDescriptor / proxyClass
  • 匹配全部重载或类型:以前可用空 descriptor,现在必须写 "*"

新 DSL

import github.leavesczy.track.member.MemberFieldRule
import github.leavesczy.track.member.MemberMethodRule
import github.leavesczy.track.superclass.SuperclassRule

viewClickTrack {
    clickHandlerClass = "your.pkg.ViewClickHandler"
    clickMethodName = "shouldHandleClick"
    skipOnClickAnnotation = "your.pkg.SkipViewOnClick"
}

composeClickTrack {
    clickWrapperClass = "your.pkg.ComposeClickWrapper"
    skipOnClickLabel = "skip"
}

superclassTrack {
    rules = setOf(
        SuperclassRule(
            originClass = "android.widget.ImageView",
            targetClass = "your.pkg.MonitorImageView"
        )
    )
}

memberTrack {
    methods = setOf(
        MemberMethodRule(
            ownerClass = "android.widget.Toast",
            methodName = "show",
            methodDescriptor = "()V",
            proxyClass = "your.pkg.ToastProxy"
        ),
        MemberMethodRule(
            ownerClass = "java.util.concurrent.Executors",
            methodName = "newFixedThreadPool",
            methodDescriptor = "*",
            proxyClass = "your.pkg.OptimizedExecutors"
        )
    )
    fields = setOf(
        MemberFieldRule(
            ownerClass = "android.os.Build",
            fieldName = "BRAND",
            typeDescriptor = "Ljava/lang/String;",
            proxyClass = "your.pkg.SystemFieldProxy"
        )
    )
}

1.1.7

Choose a tag to compare

@leavesczy leavesczy released this 29 Apr 07:44
  • AGP 升级到 9.2.0,Gradle 升级到 9.5.0,Kotlin 升级到 2.3.21

1.1.6

Choose a tag to compare

@leavesczy leavesczy released this 13 Apr 09:11
  • 修复 Invalid stack map table 的警告信息

1.1.5

Choose a tag to compare

@leavesczy leavesczy released this 25 Jan 08:26
  • 规整代码

1.1.4

Choose a tag to compare

@leavesczy leavesczy released this 14 Aug 07:01
  • AGP 降级到 8.6.0,Gradle 降级到 8.7,Kotlin 降级到 2.0.0,以避免版本兼容性问题

1.1.3

Choose a tag to compare

@leavesczy leavesczy released this 12 Aug 13:35
  • 适配 compose foundation 1.9 版本。修复由于 clickable 和 combinedClickable 方法由于调用链变化导致双击防抖失效的问题

1.1.2

Choose a tag to compare

@leavesczy leavesczy released this 17 May 14:03
  • 适配 compose foundation 1.8 版本。修复由于 clickable 和 combinedClickable 方法多了一个 hapticFeedbackEnabled 参数导致双击防抖失效的问题

1.1.1

Choose a tag to compare

@leavesczy leavesczy released this 08 Feb 10:10
  • 修复 viewClickTrack 在 uncheckViewOnClickAnnotation 为空值时会导致编译失败的问题

1.1.0

Choose a tag to compare

@leavesczy leavesczy released this 05 Oct 09:49
  • 新增三个功能点:
    • optimizedThreadTrack:收拢应用内所有的 Executors 线程池方法。可用于实现线程整治,统一应用内所有的线程池实例
    • replaceFieldTrack:修改指定字段的调用链,将指定字段替换为另一个字段
    • replaceMethodTrack:修改指定方法的调用链,将指定方法替换为另一个方法
  • 修改 toastTrack 的实现逻辑,统一通过 replaceMethodTrack 来实现,并修改入参参数

1.0.0

Choose a tag to compare

@leavesczy leavesczy released this 11 Jul 10:04

包含四个功能点:

  • viewClickTrack:View Click 双击防抖
  • composeClickTrack:Jetpack Compose Click 双击防抖
  • toastTrack:收拢应用内所有的 Toast.show 方法,可用于解决在 Android 7.1 系统上 Toast 由于 WindowToken 失效从而导致应用崩溃的问题
  • replaceClassTrack:修改指定类的继承关系,将指定父类替换为另一个类