Skip to content

LogInvocation · 调用日志注解 ​

LogInvocation 是运行时注解,控制某个 MethodProxy 被命中时是否记录日志。排错时定位「某个系统方法到底有没有被 hook、参数是什么」全靠它。

用法 ​

java
@LogInvocation(LogInvocation.Condition.ALWAYS)
class startActivity extends MethodProxy { ... }

Condition 枚举 ​

值何时记录
NEVER从不记录(默认)
ALWAYS每次命中都记录
WHEN_HOOKED命中且被实际拦截时记录
WHEN_ERROR仅调用出错时记录

机制 ​

MethodProxy 构造函数读这个注解,存到 mInvocationLoggingCondition。HookInvocationHandler 分发调用时按此策略决定是否通过 VLog 输出方法名、参数、返回值。getLogLevel(isHooked, isError) 按「是否命中 / 是否出错」算出对应的 log 级别。

与 MethodInvocationStub 的关系 ​

MethodInvocationStub 也有 setInvocationLoggingCondition,可对整个 stub 设全局策略,未单独标注的 MethodProxy 继承之。

日志策略决策 ​

关联 ​

基于 VirtualApp 与 epic,仅供学习研究。VirtualApp 禁止商用。