Skip to content

v2.0.0

Latest

Choose a tag to compare

@leavesczy leavesczy released this 05 Oct 07:18
· 2 commits to master since this release

相对 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"
        )
    )
}