import{_ as s,o as n,c as e,a}from"./app.a3fd8dd4.js";const o={},l=a(`
\u5F02\u5E38\u662F\u5728\u5F00\u53D1\u8FC7\u7A0B\u7ECF\u5E38\u9047\u5230\u7684\u4E3B\u8981\u95EE\u9898\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86
YukiHookAPI
\u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u9047\u5230\u7684\u5E38\u89C1\u5F02\u5E38\u4EE5\u53CA\u5904\u7406\u65B9\u5F0F\u3002
\u8FD9\u91CC\u7684\u5F02\u5E38\u8BF4\u660E\u53EA\u4F1A\u540C\u6B65\u6700\u65B0\u7684 API \u7248\u672C\uFF0C\u8F83\u65E7\u7684 API \u7248\u672C\u7684\u5F02\u5E38\u5C06\u4E0D\u4F1A\u518D\u8FDB\u884C\u8BF4\u660E\uFF0C\u8BF7\u59CB\u7EC8\u4FDD\u6301 API \u7248\u672C\u4E3A\u6700\u65B0\u3002
\u8FD9\u4E9B\u5F02\u5E38\u4E0D\u4F1A\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C(FC)\uFF0C\u4F46\u662F\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370
E
\u7EA7\u522B\u7684\u65E5\u5FD7\uFF0C\u4E5F\u53EF\u80FD\u4F1A\u505C\u6B62\u7EE7\u7EED\u6267\u884C\u76F8\u5173\u529F\u80FD\u3002
loggerE
Could not found any available Hook APIs in current environment! Aborted
\u5F02\u5E38\u539F\u56E0
\u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D\u5F53\u524D Hook API\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u5728\u6B63\u786E\u7684\u5730\u65B9\u88C5\u8F7D\u4E86 YukiHookAPI
\u7684 encase
\u65B9\u6CD5\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E \u4EE5\u53CA \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u3002
loggerE
You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted
\u5F02\u5E38\u539F\u56E0
\u4F60\u5C1D\u8BD5\u5728\u7EE7\u627F IYukiHookXposedInit
\u7684 Hook \u5165\u53E3\u7C7B\u7684 onInit
\u6216 onXposedEvent
\u65B9\u6CD5\u4E2D\u88C5\u8F7D\u4E86 encase
\u65B9\u6CD5\u3002
\u793A\u4F8B\u5982\u4E0B
object HookEntry : IYukiHookXposedInit {
override fun onInit() {
// \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5
YukiHookAPI.encase {
// Your code here.
}
}
override fun onXposedEvent() {
// \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5
YukiHookAPI.encase {
// Your code here.
}
}
override fun onHook() {
// Your code here.
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u5728 onHook
\u65B9\u6CD5\u4E2D\u88C5\u8F7D encase
\u65B9\u6CD5\u3002
\u793A\u4F8B\u5982\u4E0B
object HookEntry : IYukiHookXposedInit {
override fun onInit() {
// \u8FD9\u91CC\u53EA\u80FD\u88C5\u8F7D configs \u65B9\u6CD5
YukiHookAPI.configs {
// Your code here.
}
}
override fun onHook() {
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5
YukiHookAPI.encase {
// Your code here.
}
}
}
loggerE
An exception occurred in the Hooking Process of YukiHookAPI
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u88C5\u8F7D Xposed \u5165\u53E3\u65B9\u6CD5\u65F6\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A\u5F02\u5E38\u6C47\u603B\uFF0C\u5982\u679C\u4F60\u5F53\u524D\u7684 Hook \u8FDB\u7A0B\u4E2D\u53D1\u751F\u4E86\u4EFB\u4F55\u5F02\u5E38 (Hook \u8FDB\u7A0B\u5D29\u6E83)\uFF0C\u90FD\u4F1A\u4F7F\u7528\u6B64\u65B9\u5F0F\u6253\u5370\u5230\u63A7\u5236\u53F0\uFF0C\u8BF7\u8FFD\u6EAF\u5F02\u5E38\u53D1\u751F\u7684\u5806\u6808\u4EE5\u5B9A\u4F4D\u4F60\u7684\u4EE3\u7801\u95EE\u9898\u4F4D\u7F6E\u3002
loggerE
An exception occurred when hooking internal function
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u8FDB\u884C\u81EA\u8EAB\u521D\u59CB\u5316 Hook \u8FC7\u7A0B\u4E2D\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u53EF\u76F4\u63A5\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
YukiHookAPI try to load HookEntryClass failed
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u5C1D\u8BD5\u88C5\u8F7D Hook \u5165\u53E3\u7C7B onInit
\u6216 onHook
\u65B9\u6CD5\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u6216\u627E\u4E0D\u5230\u5165\u53E3\u7C7B\u3002
\u89E3\u51B3\u65B9\u6848
\u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
An exception occurred when YukiHookAPI loading Xposed Module
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u5C1D\u8BD5\u4F7F\u7528 Xposed \u539F\u751F\u63A5\u53E3\u88C5\u8F7D Xposed \u6A21\u5757\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u5C1D\u8BD5\u8FDB\u884C Resources Hook \u65F6\u53D1\u751F\u9519\u8BEF\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u4ED4\u7EC6\u68C0\u67E5\u9519\u8BEF\u65E5\u5FD7\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002
\u82E5\u53D1\u751F Resources$NotFoundException
\u5219\u53EF\u80FD\u4E3A\u4F60\u67E5\u627E\u7684 Resources Id \u4E0D\u6B63\u786E\u3002
\u82E5\u53D1\u751F ClassNotFound
\u6216 NoClassDefFoundError
\u53EF\u80FD\u662F Hook Framework \u4E0D\u652F\u6301 Resources Hook(\u8D44\u6E90\u94A9\u5B50)\u3002
loggerE
HookClass [NAME] not found
\u5F02\u5E38\u539F\u56E0
\u5F53\u524D\u88AB Hook \u7684 Class
\u6CA1\u6709\u88AB\u627E\u5230\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u76EE\u6807 Class
\u662F\u5426\u5B58\u5728\uFF0C\u82E5\u60F3\u5FFD\u7565\u6B64\u9519\u8BEF\u8BF7\u4F7F\u7528 ignoredHookClassNotFoundFailure
\u65B9\u6CD5\u3002
loggerE
Hook Member [NAME] failed
\u5F02\u5E38\u539F\u56E0
Hook \u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u53D1\u751F\u9519\u8BEF\u3002
\u89E3\u51B3\u65B9\u6848
\u6B64\u95EE\u9898\u901A\u5E38\u7531 Hook Framework \u4EA7\u751F\uFF0C\u8BF7\u68C0\u67E5\u5BF9\u5E94\u7684\u65E5\u5FD7\u5185\u5BB9\uFF0C\u82E5\u95EE\u9898\u6301\u7EED\u51FA\u73B0\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Hooked Member with a finding error by CLASS
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member
\u4E3A null
\u4E14\u5DF2\u7ECF\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u6B64\u9519\u8BEF\u53D1\u751F\u524D\u7684\u4E0A\u4E00\u4E2A\u9519\u8BEF\u65E5\u5FD7\uFF0C\u6216\u8BB8\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65F6\u5019\u53D1\u751F\u4E86\u627E\u4E0D\u5230\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u9519\u8BEF\u3002
loggerE
Hooked Member cannot be non-null by CLASS
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member
\u4E3A null
\u4E14\u6CA1\u6709\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// \u8FD9\u91CC\u5E76\u6CA1\u6709\u8BBE\u7F6E\u9700\u8981 Hook \u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u67E5\u627E\u6761\u4EF6
afterHook {
// ...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u5DF2\u7ECF\u5728 Hook \u4E4B\u524D\u6B63\u786E\u8BBE\u7F6E\u4E86\u8981 Hook \u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u67E5\u627E\u65B9\u5F0F\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
method {
// Your code here.
}
afterHook {
// ...
}
}
loggerE
Hooked method return type match failed, required [TYPE] but got [TYPE]
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u56DE\u8C03\u65B9\u6CD5\u4F53\u4E2D\u8BBE\u7F6E\u4E86 HookParam.result
\u6216\u4F7F\u7528\u4E86 replaceHook
\u4F46\u662F\u88AB Hook \u7684\u65B9\u6CD5\u8FD4\u56DE\u503C\u7C7B\u578B\u4E0E\u539F\u8FD4\u56DE\u503C\u7C7B\u578B\u4E0D\u5339\u914D\u3002
\u793A\u4F8B\u5982\u4E0B
\u5047\u8BBE\u8FD9\u4E2A\u662F\u88AB Hook \u7684\u65B9\u6CD5\u3002
private boolean test()
\u4E0B\u9762\u662F\u4E00\u4E2A\u9519\u8BEF\u7684\u6848\u5217\u3002
injectMember {
method {
name = "test"
emptyParam()
}
// <\u60C5\u666F1> \u8BBE\u7F6E\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\uFF0C\u539F\u7C7B\u578B\u4E3A Boolean
beforeHook {
result = 0
}
// <\u60C5\u666F2> \u8FD4\u56DE\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\uFF0C\u539F\u7C7B\u578B\u4E3A Boolean
replaceAny {
0
}
// <\u60C5\u666F3> \u76F4\u63A5\u4F7F\u7528\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\uFF0C\u539F\u7C7B\u578B\u4E3A Boolean
replaceTo(any = 0)
}
\u6CE8\u610F
\u82E5\u4E0A\u8FF0\u573A\u666F\u5728 beforeHook \u6216 afterHook \u4E2D\u53D1\u751F\uFF0C\u5219\u4F1A\u9020\u6210\u88AB Hook \u7684 APP (\u5BBF\u4E3B) \u7531 XposedBridge \u629B\u51FA\u5F02\u5E38 (\u4F1A\u5BF9\u5176\u66B4\u9732\u88AB Hook \u7684\u4E8B\u5B9E)\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u5F53\u524D\u88AB Hook \u65B9\u6CD5\u7684\u6B63\u786E\u8FD4\u56DE\u503C\u7C7B\u578B\uFF0C\u4FEE\u6539\u540E\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Hook initialization failed because got an Exception
\u5F02\u5E38\u539F\u56E0
\u5728\u51C6\u5907 Hook \u65F6\u53D1\u751F\u4E86\u4EFB\u610F\u7684\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A\u51C6\u5907 Hook \u9636\u6BB5\u5C31\u53D1\u751F\u5F02\u5E38\u7684\u63D0\u9192\uFF0C\u8BF7\u4ED4\u7EC6\u67E5\u770B\u5177\u4F53\u7684\u5F02\u5E38\u662F\u4EC0\u4E48\u4EE5\u91CD\u65B0\u786E\u5B9A\u95EE\u9898\u3002
loggerE
Try to hook NAME[NAME] got an Exception
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u5F00\u59CB\u65F6\u53D1\u751F\u4E86\u4EFB\u610F\u7684\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A Hook \u5F00\u59CB\u5C31\u53D1\u751F\u5F02\u5E38\u7684\u63D0\u9192\uFF0C\u8BF7\u4ED4\u7EC6\u67E5\u770B\u5177\u4F53\u7684\u5F02\u5E38\u662F\u4EC0\u4E48\u4EE5\u91CD\u65B0\u786E\u5B9A\u95EE\u9898\u3002
loggerE
Method/Constructor/Field match type "TYPE" not allowed
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u8BBE\u7F6E\u4E86\u4E0D\u5141\u8BB8\u7684\u53C2\u6570\u7C7B\u578B\u3002
\u793A\u4F8B\u5982\u4E0B
// \u67E5\u627E\u4E00\u4E2A\u65B9\u6CD5
method {
// \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
param(false, 1, 0)
// \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
returnType = false
}
// \u67E5\u627E\u4E00\u4E2A\u53D8\u91CF
field {
// \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
type = false
}
\u89E3\u51B3\u65B9\u6848
\u5728\u67E5\u627E\u4E2D param
\u3001returnType
\u3001type
\u4E2D\u4EC5\u63A5\u53D7 Class
\u3001String
\u3001VariousClass
\u7C7B\u578B\u7684\u4F20\u503C\uFF0C\u4E0D\u53EF\u4F20\u5165\u53C2\u6570\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
// \u67E5\u627E\u4E00\u4E2A\u65B9\u6CD5
method {
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
param(BooleanType, IntType, IntType)
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
returnType = BooleanType
// \u2705 \u4EE5\u4E0B\u65B9\u6848\u4E5F\u662F\u6B63\u786E\u7684
returnType = "java.lang.Boolean"
}
// \u67E5\u627E\u4E00\u4E2A\u53D8\u91CF
field {
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
type = BooleanType
}
loggerE
NoSuchMethod/NoSuchConstructor/NoSuchField happend in [NAME]
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u5E76\u672A\u627E\u5230\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u7684\u67E5\u627E\u6761\u4EF6\u662F\u5426\u80FD\u6B63\u786E\u5339\u914D\u5230\u76EE\u6807 Class
\u4E2D\u7684\u6307\u5B9A\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002
loggerE
Trying COUNT times and all failure by RemedyPlan
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 RemedyPlan
\u91CD\u65B0\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u65F6\u4F9D\u7136\u6CA1\u6709\u627E\u5230\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u8BBE\u7F6E\u7684 RemedyPlan
\u53C2\u6570\u4EE5\u53CA\u5BBF\u4E3B\u5185\u5B58\u5728\u7684 Class
\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
You must set a condition when finding a Method/Constructor/Field
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u5E76\u672A\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6\u3002
\u793A\u4F8B\u5982\u4E0B
method {
// \u8FD9\u91CC\u6CA1\u6709\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u5C06\u67E5\u627E\u6761\u4EF6\u8865\u5145\u5B8C\u6574\u5E76\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiHookAPI#ReflectionTool
\u5F02\u5E38\u539F\u56E0
\u901A\u8FC7 ClassLoader.searchClass
\u6216 PackageParam.searchClass
\u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684 Class
\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
customClassLoader?.searchClass {
from(...)
// ...
}.get()
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A\u5B89\u5168\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u4F60\u8BBE\u7F6E\u7684\u6761\u4EF6\uFF0C\u4F7F\u7528\u76F8\u5173\u5DE5\u5177\u67E5\u770B\u6240\u5728 Dex \u4E2D\u7684 Class
\u4EE5\u53CA\u5B57\u8282\u7801\u5BF9\u8C61\u7279\u5F81\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Can't find this Method/Constructor/Field in [CLASS]: CONTENT Generated by YukiHookAPI#ReflectionTool
\u5F02\u5E38\u539F\u56E0
\u901A\u8FC7\u6307\u5B9A\u6761\u4EF6\u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002
\u793A\u4F8B\u5982\u4E0B
TargetClass.method {
name = "test"
param(BooleanType)
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A\u5B89\u5168\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u4F60\u8BBE\u7F6E\u7684\u6761\u4EF6\uFF0C\u4F7F\u7528\u76F8\u5173\u5DE5\u5177\u67E5\u770B\u6240\u5728 Class
\u4E2D\u7684\u5B57\u8282\u7801\u5BF9\u8C61\u7279\u5F81\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
The number of VagueType must be at least less than the count of paramTypes
\u5F02\u5E38\u539F\u56E0
\u5728 Method
\u3001Constructor
\u67E5\u627E\u6761\u4EF6\u4E2D\u9519\u8BEF\u5730\u4F7F\u7528\u4E86 VagueType
\u3002
\u793A\u4F8B\u5982\u4E0B
TargetClass.method {
name = "test"
// <\u60C5\u666F1>
param(VagueType)
// <\u60C5\u666F2>
param(VagueType, VagueType ...)
}
\u89E3\u51B3\u65B9\u6848
VagueType
\u4E0D\u80FD\u5728\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u53C2\u6570\u4E2D\u5B8C\u5168\u586B\u5145\uFF0C\u82E5\u5B58\u5728\u8FD9\u6837\u7684\u9700\u6C42\u8BF7\u4F7F\u7528 paramCount
\u3002
loggerE
Field match type class is not found
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u53D8\u91CF\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D type
\u7684 Class
\u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002
\u793A\u4F8B\u5982\u4E0B
field {
name = "test"
// \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 type \u7684 Class \u5E76\u4E0D\u5B58\u5728
type = "com.example.TestClass"
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D type
\u7684 Class
\u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Method match returnType class is not found
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D returnType
\u7684 Class
\u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002
\u793A\u4F8B\u5982\u4E0B
method {
name = "test"
// \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 returnType \u7684 Class \u5E76\u4E0D\u5B58\u5728
returnType = "com.example.TestClass"
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D returnType
\u7684 Class
\u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Method/Constructor match paramType[INDEX] class is not found
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D param
\u7684 index
\u53F7\u4E0B\u6807\u7684 Class
\u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002
method {
name = "test"
// \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 1 \u53F7\u4E0B\u6807\u7684 Class \u5E76\u4E0D\u5B58\u5728
param(StringClass, "com.example.TestClass", BooleanType)
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D param
\u7684 index
\u53F7\u4E0B\u6807\u7684 Class
\u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Invoke original Member [MEMBER] failed
\u5F02\u5E38\u539F\u56E0
\u5728\u4F7F\u7528 HookParam.callOriginal
\u3001HookParam.invokeOriginal
\u3001method { ... }.get(...).original()
\u8C03\u7528\u672A\u7ECF Hook \u7684\u539F\u59CB\u65B9\u6CD5\u65F6\u53D1\u751F\u9519\u8BEF\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u82E5\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u53EF\u80FD\u4E3A\u5F53\u524D\u4F7F\u7528\u7684 Hook Framework \u95EE\u9898\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Resources Hook condition name/type cannot be empty [TAG]
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E Resources \u65F6\u5E76\u672A\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6\u3002
\u793A\u4F8B\u5982\u4E0B
// \u60C5\u51B5 1
conditions {
// \u8FD9\u91CC\u6CA1\u6709\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6
}
// \u60C5\u51B5 2
conditions {
name = "test"
// \u8FD9\u91CC\u7F3A\u5C11\u4E86 type \u6761\u4EF6
}
\u89E3\u51B3\u65B9\u6848
Resources \u7684 Hook \u5E76\u975E\u7C7B\u4F3C\u65B9\u6CD5\u7684 Hook\uFF0C\u5176\u5FC5\u987B\u62E5\u6709\u5B8C\u6574\u7684\u540D\u79F0\u548C\u7C7B\u578B\u63CF\u8FF0\u624D\u80FD\u67E5\u627E\u6210\u529F\uFF0C\u8BF7\u5C06\u67E5\u627E\u6761\u4EF6\u8865\u5145\u5B8C\u6574\u5E76\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Resources Hook type is invalid [TAG]
\u5F02\u5E38\u539F\u56E0
\u5728 Hook Resources \u65F6\u53D1\u751F\u4E86\u7C7B\u578B\u9519\u8BEF\u7684\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
YukiHookAPI
\u4F1A\u5C1D\u8BD5\u5728 initZygote
\u4E0E handleInitPackageResources
\u4E2D\u88C5\u8F7D Resources Hook\uFF0C\u82E5\u5168\u90E8\u88C5\u8F7D\u5931\u8D25\u53EF\u80FD\u4F1A\u53D1\u751F\u6B64\u5F02\u5E38\uFF0C\u5F53\u524D Hook Framework \u9700\u8981\u652F\u6301\u5E76\u542F\u7528\u8D44\u6E90\u94A9\u5B50 (Resources Hook) \u529F\u80FD\uFF0C\u8BF7\u68C0\u67E5\u540E\u518D\u8BD5\u4E00\u6B21\u3002
loggerE
Resources Hook got an Exception [TAG]
\u5F02\u5E38\u539F\u56E0
\u5728 Hook Resources \u65F6\u53D1\u751F\u4E86\u4EFB\u610F\u7684\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u662F\u4E00\u4E2A\u5F02\u5E38\u6C47\u603B\uFF0C\u8BF7\u81EA\u884C\u5411\u4E0B\u67E5\u770B\u65E5\u5FD7\u5177\u4F53\u7684\u5F02\u5E38\u662F\u4EC0\u4E48\uFF0C\u4F8B\u5982\u627E\u4E0D\u5230 Resources Id \u7684\u95EE\u9898\u3002
loggerE
Received action "ACTION" failed
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u65F6\u56DE\u8C03\u5E7F\u64AD\u4E8B\u4EF6\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u6B64\u5F02\u5E38\u591A\u4E3A\u4E00\u4E9B\u5173\u8054\u6027\u5F02\u5E38\u5F15\u53D1\uFF0C\u8BF7\u68C0\u67E5\u81EA\u8EAB\u4EE3\u7801\u662F\u5426\u5B58\u5728\u95EE\u9898\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Received data type TYPE is not a vailed YukiHookDataChannel's data
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u65F6\u56DE\u8C03\u5E7F\u64AD\u6536\u5230\u4E86\u4E0D\u5C5E\u4E8E YukiHookDataChannel
\u7684\u6570\u636E\u3002
\u89E3\u51B3\u65B9\u6848
\u4E3A\u4E86\u786E\u4FDD\u6570\u636E\u5B89\u5168\u6027\uFF0CYukiHookDataChannel
\u4F1A\u5BF9\u53D1\u9001\u7684\u6570\u636E\u8FDB\u884C\u5305\u88C5\uFF0C\u4EFB\u4F55\u7B2C\u4E09\u65B9\u5E7F\u64AD\u4E8B\u4EF6\u5747\u4E0D\u80FD\u88AB YukiHookDataChannel
\u63A5\u6536\uFF0C\u8BF7\u68C0\u67E5\u4F60\u7684\u4EE3\u7801\u662F\u5426\u6B63\u786E\u3002
loggerE
Unsupported segments data key of "KEY"'s type
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u65F6\u56DE\u8C03\u5E7F\u64AD\u6536\u5230\u4E86\u4E0D\u652F\u6301\u7684\u5206\u6BB5\u6570\u636E\u7C7B\u578B\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u4E0D\u53EF\u80FD\u53D1\u751F\uFF0C\u56E0\u4E3A YukiHookDataChannel
\u6240\u652F\u6301\u7684\u5206\u6BB5\u6570\u636E\u7C7B\u578B\u662F\u56FA\u5B9A\u7684\uFF0C\u4E0D\u4F1A\u52A8\u6001\u6539\u53D8\uFF0C\u82E5\u53D1\u751F\u8FD9\u79CD\u60C5\u51B5\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u6539\u52A8\u4E86 API \u76F8\u5173\u4EE3\u7801\u3002
loggerE
YukiHookDataChannel cannot merge this segments data key of "KEY"
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u65F6\u56DE\u8C03\u5E7F\u64AD\u6536\u5230\u4E86\u65E0\u6CD5\u5904\u7406\u7684\u5206\u6BB5\u6570\u636E\u5BFC\u81F4\u65E0\u6CD5\u5408\u5E76\u5206\u6BB5\u6570\u636E\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u9664\u975E\u6536\u5230\u8FDE\u7EED\u53D1\u9001\u6216\u91CD\u590D\u53D1\u9001\u7684\u5E7F\u64AD (\u65F6\u5E8F\u5F02\u5E38) \u6216\u5728\u63A5\u6536\u6570\u636E\u65F6\u8BBE\u7F6E\u4E86\u9519\u8BEF\u7684\u6CDB\u578B\u7C7B\u578B\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
YukiHookDataChannel cannot calculate the byte size of the data key of "KEY" to be sent, so this data cannot be sent
If you want to lift this restriction, use the allowSendTooLargeData function when calling, but this may cause the app crash
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u53D1\u9001\u5E7F\u64AD\u6570\u636E\u65F6\u8BA1\u7B97\u6570\u636E\u5927\u5C0F\u5931\u8D25\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
YukiHookDataChannel cannot send this data key of "KEY" type TYPE, because it is too large (total TOTAL KB, limit LIMIT KB) and cannot be segmented
SUGGESTION_MESSAGE
If you want to lift this restriction, use the allowSendTooLargeData function when calling, but this may cause the app crash
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u53D1\u9001\u5E7F\u64AD\u6570\u636E\u65F6\u6570\u636E\u8FC7\u5927\uFF0C\u4F46\u662F\u6B64\u6570\u636E\u7C7B\u578B\u5E76\u4E0D\u652F\u6301\u88AB\u5206\u6BB5\u53D1\u9001\u3002
\u89E3\u51B3\u65B9\u6848
\u5F53\u4F60\u53D1\u9001\u7684\u6570\u636E\u8D85\u51FA\u7CFB\u7EDF\u5E7F\u64AD\u7684\u4E0A\u9650\u65F6\uFF0CYukiHookDataChannel
\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u5C06\u6B64\u6570\u636E\u5206\u6BB5\u540E\u4F9D\u6B21\u53D1\u9001\uFF0C\u4F46\u4EC5\u652F\u6301\u5904\u7406 List\u3001Map\u3001Set\u3001String \u5E38\u89C1\u7C7B\u578B\u7684\u81EA\u52A8\u5206\u6BB5\u529F\u80FD\u3002
\u5C0F\u63D0\u793A
\u82E5\u4F60\u4ECD\u8981\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u8BF7\u53C2\u8003 YukiHookDataChannel.NameSpace.allowSendTooLargeData \u65B9\u6CD5\u3002
\u4F46\u662F\u5F3A\u70C8\u5EFA\u8BAE\u4E0D\u8981\u8FD9\u6837\u505A\uFF0C\u8FD9\u6709\u53EF\u80FD\u4F1A\u5BFC\u81F4\u7CFB\u7EDF\u4E0D\u5141\u8BB8\u8FC7\u5927\u7684\u6570\u636E\u53D1\u9001\u800C\u9020\u6210\u5E94\u7528\u5D29\u6E83\u3002
loggerE
Failed to sendBroadcast like "KEY", because got null context in "PACKAGENAME"
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 YukiHookDataChannel
\u65F6\u53D1\u9001\u5E7F\u64AD\u53D6\u5230\u4E86\u7A7A\u7684\u4E0A\u4E0B\u6587\u5B9E\u4F8B\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u5728\u6700\u65B0\u7248\u672C\u4E2D\u5DF2\u7ECF\u4FEE\u590D\u5BBF\u4E3B\u4F7F\u7528\u65F6\u53EF\u80FD\u53D1\u751F\u7684\u95EE\u9898\uFF0C\u82E5\u6700\u65B0\u7248\u672C\u4F9D\u7136\u53D1\u751F\u9519\u8BEF\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Failed to inject module resources into [RESOURCES]
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 injectModuleAppResources
\u6CE8\u5165\u6A21\u5757\u8D44\u6E90\u65F6\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
You cannot inject module resources into yourself
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883 (\u6A21\u5757\u81EA\u8EAB\u7684 Xposed \u73AF\u5883) \u4E2D\u4F7F\u7528 injectModuleAppResources
\u5C06\u6A21\u5757\u81EA\u8EAB\u7684\u8D44\u6E90\u6CE8\u5165\u81EA\u8EAB\u3002
\u89E3\u51B3\u65B9\u6848
\u7531\u4E8E\u6A21\u5757\u81EA\u8EAB\u4E5F\u53EF\u4EE5\u88AB\u81EA\u8EAB Hook\uFF0C\u4F46\u4F60\u5E76\u4E0D\u53EF\u4EE5\u5728\u6A21\u5757\u81EA\u8EAB\u6CE8\u5165\u81EA\u5DF1 (\u4E0D\u80FD\u9012\u5F52\u81EA\u8EAB\u7684\u8D44\u6E90)\uFF0C\u82E5\u4F60\u4E00\u5B9A\u8981\u83B7\u53D6\u6A21\u5757\u81EA\u8EAB\u7684\u8D44\u6E90\uFF0C\u8BF7\u76F4\u63A5\u4F7F\u7528\u5373\u53EF\uFF0C\u65E0\u9700\u4EFB\u4F55\u5176\u5B83\u64CD\u4F5C\u3002
loggerE
Activity Proxy initialization failed because got an Exception
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 registerModuleAppActivities
\u6CE8\u5165\u6A21\u5757 Activity
\u65F6\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u6B64\u9519\u8BEF\u53D1\u751F\u540E\u7684\u4E0B\u4E00\u4E2A\u9519\u8BEF\u65E5\u5FD7\uFF0C\u6216\u8BB8\u5728\u914D\u7F6E\u53C2\u6570\u4E0A\u53EF\u80FD\u53D1\u751F\u4E86\u4E00\u4E9B\u95EE\u9898\uFF0C\u82E5\u627E\u4E0D\u5230\u76F8\u5173\u9519\u8BEF\u65E5\u5FD7\u7684\u8BF4\u660E\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
Activity Proxy got an Exception in msg.what [WHAT]
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 registerModuleAppActivities
\u6CE8\u5165\u6A21\u5757 Activity
\u65F6\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u4F46\u6839\u636E\u7CFB\u7EDF\u7248\u672C\u5DEE\u5F02\u6027\u5E76\u672A\u505A\u8BE6\u7EC6\u6D4B\u8BD5\uFF0C\u6392\u9664\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u540E\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
loggerE
This proxy [TYPE] type is not allowed
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 registerModuleAppActivities
\u6CE8\u5165\u6A21\u5757 Activity
\u65F6\u586B\u5165\u4E86\u65E0\u6548\u7684\u53C2\u6570\u3002
\u793A\u4F8B\u5982\u4E0B
// \u2757 \u8FD9\u91CC\u586B\u5165\u7684\u5185\u5BB9\u4EC5\u4E3A\u4E3E\u4F8B\uFF0C\u5176\u4E2D proxy \u586B\u5165\u4E86\u4E0D\u80FD\u7406\u89E3\u7684\u65E0\u6548\u53C2\u6570
registerModuleAppActivities(proxy = false)
\u89E3\u51B3\u65B9\u6848
\u65B9\u6CD5\u4E2D\u7684 proxy
\u53C2\u6570\u53EA\u63A5\u53D7 String
\u3001CharSequence
\u3001Class
\u7C7B\u578B\uFF0C\u8BF7\u67E5\u770B\u76F8\u5173\u4F7F\u7528\u65B9\u6CD5\u6B63\u786E\u586B\u5165\u65B9\u6CD5\u53C2\u6570\u3002
loggerE
Cound not got launch intent for package "NAME"
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 registerModuleAppActivities
\u6CE8\u5165\u6A21\u5757 Activity
\u65F6\u627E\u4E0D\u5230\u5BBF\u4E3B\u7684\u542F\u52A8 Activity
\u3002
\u793A\u4F8B\u5982\u4E0B
// \u4F7F\u7528\u4E86\u9ED8\u8BA4\u53C2\u6570\u76F4\u63A5\u8FDB\u884C\u6CE8\u518C
registerModuleAppActivities()
\u89E3\u51B3\u65B9\u6848
\u9ED8\u8BA4\u53C2\u6570 (\u65E0\u53C2) \u53EA\u80FD\u7528\u4E8E\u53EF\u88AB\u542F\u52A8\u7684 APP\uFF0C\u82E5 APP \u5E76\u672A\u58F0\u660E\u542F\u52A8\u5165\u53E3 Activity
\uFF0C\u4F60\u5C31\u9700\u8981\u624B\u52A8\u6307\u5B9A\u65B9\u6CD5\u7684 proxy
\u53C2\u6570\u3002
loggerE
Could not found "NAME" or Class is not a type of Activity
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 registerModuleAppActivities
\u6CE8\u5165\u6A21\u5757 Activity
\u65F6\u65E0\u6CD5\u627E\u5230\u88AB\u586B\u5165\u53C2\u6570 proxy
\u7684 Activity
\u3002
\u793A\u4F8B\u5982\u4E0B
registerModuleAppActivities(proxy = "com.demo.test.TestActivity")
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u586B\u5165\u7684 Activity
\u540D\u79F0\u771F\u5B9E\u6709\u6548\u5730\u5B58\u5728\u4E8E\u5BBF\u4E3B\u4E2D\uFF0C\u4E14\u76EE\u6807 Class
\u7EE7\u627F\u4E8E Activity
\u3002
loggerE
You cannot register Activity Proxy into yourself
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883 (\u6A21\u5757\u81EA\u8EAB\u7684 Xposed \u73AF\u5883) \u4E2D\u4F7F\u7528 registerModuleAppActivities
\u5C06\u6A21\u5757\u81EA\u8EAB Activity
\u6CE8\u5165\u81EA\u8EAB\u3002
\u89E3\u51B3\u65B9\u6848
\u7531\u4E8E\u6A21\u5757\u81EA\u8EAB\u4E5F\u53EF\u4EE5\u88AB\u81EA\u8EAB Hook\uFF0C\u4F46\u4F60\u5E76\u4E0D\u53EF\u4EE5\u5728\u6A21\u5757\u81EA\u8EAB\u6CE8\u5165\u81EA\u5DF1 (\u4E0D\u80FD\u9012\u5F52\u81EA\u8EAB\u7684\u8D44\u6E90)\uFF0C\u82E5\u4F60\u4E00\u5B9A\u8981\u83B7\u53D6\u6A21\u5757\u81EA\u8EAB\u7684\u8D44\u6E90\uFF0C\u8BF7\u76F4\u63A5\u4F7F\u7528\u5373\u53EF\uFF0C\u65E0\u9700\u4EFB\u4F55\u5176\u5B83\u64CD\u4F5C\u3002
loggerE
Activity Proxy only support for Android 7.0 (API 24) or higher
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883 (\u6A21\u5757\u81EA\u8EAB\u7684 Xposed \u73AF\u5883) \u4E2D\u4F7F\u7528 registerModuleAppActivities
\u4F46\u662F\u5F53\u524D\u7CFB\u7EDF\u7248\u672C\u4E0D\u6EE1\u8DB3 Android 7.0 (API 24) \u6700\u4F4E\u8981\u6C42\u3002
\u89E3\u51B3\u65B9\u6848
Activity Proxy \u4EC5\u652F\u6301\u9AD8\u4E8E\u6216\u7B49\u4E8E Android 7.0 (API 24) \u7684\u7CFB\u7EDF\uFF0C\u8BF7\u5C1D\u8BD5\u5347\u7EA7\u4F60\u7684\u7CFB\u7EDF\u6216\u5BF9\u6A21\u5757 APP \u6700\u4F4E\u7CFB\u7EDF\u7248\u672C\u517C\u5BB9\u6027\u505A\u51FA\u8981\u6C42\uFF0C\u4F8B\u5982\u8BBE\u7F6E Min API \u4E3A 24\u3002
loggerE
An exception occurred during AppLifecycle event
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528 onAppLifecycle
\u76D1\u542C\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u671F\u95F4\u53D1\u751F\u5F02\u5E38\u3002
\u89E3\u51B3\u65B9\u6848
\u6B64\u5F02\u5E38\u4E3A onAppLifecycle
\u4E2D\u629B\u51FA\uFF0C\u7531\u4E8E\u4F60\u8BBE\u7F6E\u4E86\u53C2\u6570 isOnFailureThrowToApp = false
\uFF0C\u5F02\u5E38\u6CA1\u6709\u5728\u5BBF\u4E3B\u4E2D\u88AB\u629B\u51FA\u800C\u662F\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u8FDB\u884C\u6253\u5370\uFF0C\u8FD9\u4E0D\u5C5E\u4E8E API \u7684\u5F02\u5E38\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5\u81EA\u8EAB\u4EE3\u7801\u7684\u95EE\u9898\u3002
\u8FD9\u4E9B\u5F02\u5E38\u4F1A\u76F4\u63A5\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C(FC)\uFF0C\u540C\u65F6\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370
E
\u7EA7\u522B\u7684\u65E5\u5FD7\uFF0C\u8FD8\u4F1A\u9020\u6210 Hook \u8FDB\u7A0B\u201C\u6B7B\u6389\u201D\u3002
IllegalStateException
YukiHookAPI cannot support current Hook API or cannot found any available Hook APIs in current environment
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u4E0D\u652F\u6301\u5F53\u524D\u73AF\u5883\u4F7F\u7528\u7684 Hook API \u6216\u4E0D\u5B58\u5728 Hook API \u53EF\u88AB\u8C03\u7528\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60\u5728\u6B63\u786E\u7684\u5730\u65B9\u88C5\u8F7D\u4E86 YukiHookAPI
\u7684 encase
\u65B9\u6CD5\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E \u4EE5\u53CA \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u3002
RuntimeException
!!!DO NOT ALLOWED!!! You cannot hook or reflection to call the internal class of the YukiHookAPI itself, The called class is [CLASS]
\u5F02\u5E38\u539F\u56E0
\u4F60\u4F7F\u7528 YukiHookAPI
\u7684\u76F8\u5173\u53CD\u5C04\u6216 Hook \u529F\u80FD\u8C03\u7528\u4E86 API \u81EA\u8EAB\u7684 Class
\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
// <\u60C5\u666F1>
YukiHookAPI.current()
// <\u60C5\u666F2>
PackageParam::class.java.hook {
// ...
}
// <\u60C5\u666F3>
MethodFinder::class.java.method {
name = "name"
param(StringClass)
}.get().call("name")
// ...
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u4EE3\u7801\u90E8\u5206\u662F\u5426\u6709\u9519\u8BEF\uFF0C\u4F8B\u5982\u4E0B\u9762\u7684\u60C5\u51B5\u3002
\u793A\u4F8B\u5982\u4E0B
YourClass.method {
// ...
// \u2757 \u6CA1\u6709\u8C03\u7528\u65B9\u6CD5\u6267\u884C\uFF0C\u8FD9\u91CC\u5B9E\u9645\u8C03\u7528\u7684\u662F MethodFinder.Result \u5BF9\u8C61
}.get(instance).current()
YourClass.method {
// ...
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u5047\u8BBE\u6B64\u65B9\u6CD5\u65E0\u53C2
}.get(instance).call().current()
\u4E0D\u5141\u8BB8\u5185\u8054\u3001\u53CD\u5C04\u3001Hook YukiHookAPI
\u81EA\u8EAB\u7684 Class
\u4EE5\u53CA\u5185\u90E8\u529F\u80FD\uFF0C\u9632\u6B62\u53D1\u751F\u9519\u8BEF\u3002
UnsupportedOperationException
!!!DANGEROUS!!! Hook [CLASS] Class is a dangerous behavior! [CONTENT] [SOLVE]
\u5F02\u5E38\u539F\u56E0
\u4F60\u5C1D\u8BD5 Hook \u4E86\u5904\u4E8E\u5371\u9669\u884C\u4E3A\u5217\u8868\u4E2D\u7684 Class
\u5BF9\u8C61\uFF0C\u4F8B\u5982 Class
\u3001ClassLoader
\u3001Method
\u3002
\u793A\u4F8B\u5982\u4E0B
// <\u60C5\u666F1>
JavaClassLoader.hook {
// ...
}
// <\u60C5\u666F2>
JavaClass.hook {
// ...
}
// <\u60C5\u666F3>
JavaMethod.hook {
// ...
}
// ...
\u89E3\u51B3\u65B9\u6848
\u8FD9\u4E9B\u529F\u80FD\u662F\u7CFB\u7EDF\u5185\u90E8\u7684\uFF0C\u5B83\u4EEC\u4E0D\u5E94\u8BE5\u88AB Hook\uFF0C\u5728\u90E8\u5206 Hook Framework \u4E0A\u53EF\u80FD\u4E0D\u88AB\u652F\u6301\uFF0C\u8FD8\u4F1A\u5F15\u53D1\u5176\u5B83\u9519\u8BEF\uFF0C\u8BF7\u5C1D\u8BD5\u66F4\u6362 Hook \u70B9\u3002
\u5C0F\u63D0\u793A
\u82E5\u4F60\u4ECD\u8981\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u8BF7\u53C2\u8003 YukiMemberHookCreator.useDangerousOperation \u65B9\u6CD5\u3002
\u4F46\u662F\u5F3A\u70C8\u5EFA\u8BAE\u4E0D\u8981\u8FD9\u6837\u505A\uFF0C\u53D1\u751F\u95EE\u9898\u8BF7\u4E0D\u8981\u53CD\u9988\uFF0C\u81EA\u884C\u627F\u62C5\u4E00\u5207\u540E\u679C\u3002
NoClassDefFoundError
Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiHookAPI#ReflectionTool
\u5F02\u5E38\u539F\u56E0
\u901A\u8FC7 String.toClass(...)
\u6216 classOf<...>()
\u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684 Class
\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
"com.demo.Test".toClass()
\u89E3\u51B3\u65B9\u6848
\u8BF7\u68C0\u67E5\u5F53\u524D\u5B57\u7B26\u4E32\u6216\u5B9E\u4F53\u5339\u914D\u5230\u7684 Class
\u662F\u5426\u5B58\u5728\u4E8E\u5F53\u524D ClassLoader
\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002
IllegalStateException
ClassLoader [CLASSLOADER] is not a DexClassLoader
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 ClassLoader.searchClass
\u6216 PackageParam.searchClass
\u67E5\u627E Class
\u4F46\u662F\u5F53\u524D ClassLoader
\u5E76\u4E0D\u7EE7\u627F\u4E8E BaseDexClassLoader
\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u5F53\u524D APP \u5F15\u7528\u4E86\u975E ART \u5E73\u53F0\u7684\u53EF\u6267\u884C\u6587\u4EF6 (\u4F46\u662F\u8FD9\u79CD\u60C5\u51B5\u8FD8\u662F\u4E0D\u4F1A\u5B58\u5728) \u6216\u5F53\u524D ClassLoader
\u4E3A\u7A7A\u3002
IllegalStateException
Failed to got SystemContext
\u5F02\u5E38\u539F\u56E0
\u5728\u88AB Hook \u7684\u5BBF\u4E3B\u5185\u8C03\u7528\u4E86 systemContext
\u4F46\u5E76\u672A\u6210\u529F\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
encase {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
systemContext...
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u4E0D\u5E94\u8BE5\u5B58\u5728\uFF0C\u7531\u4E8E systemContext
\u901A\u8FC7\u53CD\u5C04\u4ECE ActivityThread
\u4E2D\u5F97\u5230\uFF0C\u9664\u975E\u7CFB\u7EDF\u8FDB\u7A0B\u53D1\u751F\u5F02\u5E38\uFF0C\u5426\u5219\u83B7\u53D6\u5230\u7684\u5BF9\u8C61\u4E0D\u4F1A\u4E3A\u7A7A\u3002
IllegalStateException
App is dead, You cannot call to appContext
\u5F02\u5E38\u539F\u56E0
\u7B2C\u4E00\u79CD\u60C5\u51B5
\u5728\u88AB Hook \u7684\u5BBF\u4E3B\u5185\u8C03\u7528\u4E86 ModuleApplication
\u7684 appContext
\u3002
\u793A\u4F8B\u5982\u4E0B
encase {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
ModuleApplication.appContext...
}
\u7B2C\u4E8C\u79CD\u60C5\u51B5
\u4F7F\u7528 ModuleApplication
\u65F6\u8C03\u7528\u4E86 appContext
\u4F46\u662F APP \u53EF\u80FD\u5DF2\u7ECF\u88AB\u9500\u6BC1\u6216\u6CA1\u6709\u6B63\u786E\u542F\u52A8\u3002
\u793A\u4F8B\u5982\u4E0B
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF\u4F46\u662F APP \u53EF\u80FD\u5DF2\u88AB\u9500\u6BC1\u6216\u6CA1\u6709\u6B63\u786E\u542F\u52A8
ModuleApplication.appContext...
\u89E3\u51B3\u65B9\u6848
\u7B2C\u4E00\u79CD\u60C5\u51B5
\u4F60\u53EA\u80FD\u5728\u6A21\u5757\u5185\u4F7F\u7528 ModuleApplication
\u7684 appContext
\uFF0C\u5728\u5BBF\u4E3B\u5185\u8BF7\u4F7F\u7528 PackageParam
\u4E2D\u7684 appContext
\uFF0C\u8BF7\u786E\u8BA4\u4F60\u4F7F\u7528\u7684\u662F\u5426\u6B63\u786E\u3002
\u7B2C\u4E8C\u79CD\u60C5\u51B5
\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0D\u5B58\u5728\uFF0C\u7531\u4E8E appContext
\u662F\u5728 onCreate
\u4E2D\u88AB\u8D4B\u503C\u7684\uFF0C\u9664\u975E\u9047\u5230\u591A\u8FDB\u7A0B\u5E76\u53D1\u542F\u52A8\u6216 APP \u6CA1\u6709\u542F\u52A8\u5B8C\u6210\u524D\u88AB\u53CD\u5C04\u8C03\u7528\u4E86\u7236\u7C7B\u7684 onCreate
\u65B9\u6CD5\u3002
IllegalStateException
YukiHookModulePrefs not allowed in Custom Hook API
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u81EA\u8EAB APP(\u975E Xposed \u6A21\u5757) \u4E2D\u4F7F\u7528\u4E86 YukiHookModulePrefs
\u3002
\u793A\u4F8B\u5982\u4E0B
class MyApplication : Application() {
override fun attachBaseContext(base: Context?) {
YukiHookAPI.encase(base) {
// \u2757\u4E0D\u80FD\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F7F\u7528 prefs
prefs.getBoolean("test_data")
}
super.attachBaseContext(base)
}
}
\u89E3\u51B3\u65B9\u6848
\u4F60\u53EA\u80FD\u5728 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528 \u65F6\u4F7F\u7528 YukiHookModulePrefs
\uFF0C\u5728 Hook \u81EA\u8EAB APP \u4E2D\u8BF7\u4F7F\u7528\u539F\u751F\u7684 Sp
\u5B58\u50A8\u3002
IllegalStateException
Cannot load the XSharedPreferences, maybe is your Hook Framework not support it
\u5F02\u5E38\u539F\u56E0
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u4E86 YukiHookModulePrefs
\u4F46\u662F\u65E0\u6CD5\u5F97\u5230 XSharedPreferences
\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
encase {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
prefs...
}
\u89E3\u51B3\u65B9\u6848
\u4E00\u822C\u60C5\u51B5\u4E0B\u4E0D\u4F1A\u53D1\u751F\u6B64\u95EE\u9898\uFF0C\u82E5\u6301\u7EED\u65E0\u6CD5\u83B7\u53D6 XSharedPreferences
\u5BF9\u8C61\u5219\u53EF\u80FD\u662F\u4F60\u4F7F\u7528\u7684 Hook Framework \u4E0D\u652F\u6301\u6B64\u529F\u80FD\u6216\u81EA\u8EAB\u5B58\u5728\u9519\u8BEF\u3002
IllegalStateException
YukiHookDataChannel not allowed in Custom Hook API
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u81EA\u8EAB APP(\u975E Xposed \u6A21\u5757) \u4E2D\u4F7F\u7528\u4E86 YukiHookDataChannel
\u3002
\u793A\u4F8B\u5982\u4E0B
class MyApplication : Application() {
override fun attachBaseContext(base: Context?) {
YukiHookAPI.encase(base) {
// \u2757\u4E0D\u80FD\u5728\u8FD9\u79CD\u60C5\u51B5\u4E0B\u4F7F\u7528 dataChannel
dataChannel.wait(key = "test_data") {
// ...
}
}
super.attachBaseContext(base)
}
}
\u89E3\u51B3\u65B9\u6848
\u4F60\u53EA\u80FD\u5728 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528 \u65F6\u4F7F\u7528 YukiHookDataChannel
\u3002
IllegalStateException
YukiHookDataChannel only support used on an Activity, but this current context is "CLASSNAME"
\u5F02\u5E38\u539F\u56E0
\u5728\u6A21\u5757\u7684\u975E Activity
\u73AF\u5883\u4E2D\u4F7F\u7528\u4E86 YukiHookDataChannel
\u3002
\u89E3\u51B3\u65B9\u6848
\u4F60\u53EA\u80FD\u5728 Activity
\u6216 Fragment
\u4E2D\u4F7F\u7528 YukiHookDataChannel
\u3002
IllegalStateException
Xposed modulePackageName load failed, please reset and rebuild it
\u5F02\u5E38\u539F\u56E0
\u5728 Hook \u8FC7\u7A0B\u4E2D\u4F7F\u7528 YukiHookModulePrefs
\u6216 YukiHookDataChannel
\u65F6\u65E0\u6CD5\u8BFB\u53D6\u88C5\u8F7D\u65F6\u7684 modulePackageName
\u5BFC\u81F4\u4E0D\u80FD\u786E\u5B9A\u81EA\u8EAB\u6A21\u5757\u7684\u5305\u540D\u3002
\u89E3\u51B3\u65B9\u6848
\u8BF7\u4ED4\u7EC6\u9605\u8BFB \u8FD9\u91CC \u7684\u5E2E\u52A9\u6587\u6863\uFF0C\u6B63\u786E\u914D\u7F6E\u6A21\u5757\u7684 Hook \u5165\u53E3\u7C7B\u5305\u540D\u3002
IllegalStateException
YukiHookModulePrefs missing Context instance
\u5F02\u5E38\u539F\u56E0
\u5728\u6A21\u5757\u4E2D\u4F7F\u7528\u4E86 YukiHookModulePrefs
\u5B58\u50A8\u6570\u636E\u4F46\u5E76\u672A\u4F20\u5165 Context
\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5
// \u6784\u9020\u65B9\u6CD5\u5DF2\u5728 API 1.0.88 \u53CA\u4EE5\u540E\u7684\u7248\u672C\u4E2D\u8BBE\u7F6E\u4E3A private
YukiHookModulePrefs().getBoolean("test_data")
}
}
\u89E3\u51B3\u65B9\u6848
\u5728 Activity
\u4E2D\u63A8\u8350\u4F7F\u7528 modulePrefs
\u65B9\u6CD5\u6765\u88C5\u8F7D YukiHookModulePrefs
\u3002
\u793A\u4F8B\u5982\u4E0B
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5
modulePrefs.getBoolean("test_data")
}
}
IllegalStateException
Key-Value type TYPE is not allowed
\u5F02\u5E38\u539F\u56E0
\u5728\u4F7F\u7528 YukiHookModulePrefs
\u7684 get
\u6216 put
\u65B9\u6CD5\u6216 YukiHookDataChannel
\u7684 wait
\u6216 put
\u65B9\u6CD5\u65F6\u4F20\u5165\u4E86\u4E0D\u652F\u6301\u7684\u5B58\u50A8\u7C7B\u578B\u3002
\u89E3\u51B3\u65B9\u6848
YukiHookModulePrefs
\u652F\u6301\u7684\u7C7B\u578B\u53EA\u6709 String
\u3001Set<String>
\u3001Int
\u3001Float
\u3001Long
\u3001Boolean
\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002
YukiHookDataChannel
\u652F\u6301\u7684\u7C7B\u578B\u4E3A Intent.putExtra
\u9650\u5236\u7684\u7C7B\u578B\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002
IllegalStateException
loadApp/loadZygote/loadSystem/withProcess method need a "NAME" param
\u5F02\u5E38\u539F\u56E0
\u5728 loadApp
\u3001loadZygote
\u3001loadSystem
\u3001withProcess
\u4E2D\u7F3A\u5C11\u4E86\u9700\u8981\u586B\u5199\u7684\u53EF\u53D8\u6570\u7EC4\u53D8\u91CF\u53C2\u6570\u3002
\u793A\u4F8B\u5982\u4E0B
// <\u60C5\u666F 1>
loadApp()
// <\u60C5\u666F 2>
loadZygote()
// <\u60C5\u666F 3>
loadSystem()
// <\u60C5\u666F 4>
withProcess()
\u89E3\u51B3\u65B9\u6848
\u8BF7\u67E5\u770B PackageParam
\u4E2D\u7684\u7528\u6CD5\u6B63\u786E\u5730\u4F7F\u7528\u6B64\u529F\u80FD\u3002
IllegalStateException
YukiHookDataChannel cannot used in zygote
\u5F02\u5E38\u539F\u56E0
\u5728 loadZygote
\u4E2D\u4F7F\u7528\u4E86 YukiHookDataChannel
\u3002
\u793A\u4F8B\u5982\u4E0B
loadZygote {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
dataChannel...
}
\u89E3\u51B3\u65B9\u6848
YukiHookDataChannel
\u53EA\u80FD\u5728 loadSystem
\u3001loadApp
\u4E2D\u4F7F\u7528\u3002
IllegalStateException
Custom Hooking Members is empty
\u5F02\u5E38\u539F\u56E0
\u5728 MemberHookCreator
\u4E2D\u8C03\u7528 members()
\u4F46\u662F\u672A\u8BBE\u7F6E\u9700\u8981 Hook \u7684 Member
\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// \u62EC\u53F7\u91CC\u7684\u65B9\u6CD5\u53C2\u6570\u88AB\u7559\u7A7A\u4E86
members()
afterHook {
// ...
}
}
\u89E3\u51B3\u65B9\u6848
\u82E5\u8981\u4F7F\u7528 members()
\u8BBE\u7F6E\u81EA\u5B9A\u4E49 Hook \u65B9\u6CD5\uFF0C\u4F60\u5FC5\u987B\u4FDD\u8BC1\u5176\u65B9\u6CD5\u53C2\u6570\u91CC\u7684 Member
\u6570\u7EC4\u5BF9\u8C61\u4E0D\u80FD\u4E3A\u7A7A\u3002
IllegalStateException
HookParam Method args index must be >= 0
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 args().last()
\u4F46\u662F\u76EE\u6807 param
\u4E3A\u7A7A\u6216 args
\u4E2D\u7684 index
\u8BBE\u7F6E\u4E86\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u5047\u8BBE param \u662F\u7A7A\u7684
args().last()...
// \u8BBE\u7F6E\u4E86\u5C0F\u4E8E 0 \u7684 index
args(index = -5)...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u4E14\u4E0D\u80FD\u5BF9 args
\u7684\u4E0B\u6807\u8BBE\u7F6E\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002
IllegalStateException
HookParam instance got null! Is this a static member?
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 instance
\u53D8\u91CF\u6216 instance
\u65B9\u6CD5\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
instance...
// \u8C03\u7528\u4E86\u6B64\u65B9\u6CD5
instance<Any>()...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u5426\u4E3A\u9759\u6001\u7C7B\u578B\uFF0C\u9759\u6001\u7C7B\u578B\u7684\u65B9\u6CD5\u6CA1\u6709\u5B9E\u4F8B\uFF0C\u4E0D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u82E5\u975E\u9759\u6001\u65B9\u6CD5\uFF0C\u8BF7\u68C0\u67E5\u5B9E\u4F8B\u662F\u5426\u5DF2\u7ECF\u9500\u6BC1\u3002
IllegalStateException
Current hooked Member args is null
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 args
\u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u53C2\u6570\u6570\u7EC4\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
args...
}
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
IllegalStateException
Current hooked Member is null
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 member
\u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
member...
}
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
IllegalStateException
Current hooked Member is not a Method
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 method
\u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
method...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u6784\u9020\u65B9\u6CD5\u8FD8\u662F\u666E\u901A\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member
\u6765\u83B7\u53D6\u3002
IllegalStateException
Current hooked Member is not a Constructor
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 constructor
\u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
constructor...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u666E\u901A\u65B9\u6CD5\u8FD8\u662F\u6784\u9020\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member
\u6765\u83B7\u53D6\u3002
IllegalStateException
HookParam instance cannot cast to TYPE
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 instance
\u65B9\u6CD5\u6307\u5B9A\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u7C7B\u578B\u88AB cast \u4E3A Activity \u4F46\u5047\u8BBE\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u578B\u5E76\u975E\u6B64\u7C7B\u578B
instance<Activity>()...
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u5F53\u524D Hook \u5B9E\u4F8B\u7684\u6B63\u786E\u7C7B\u578B\u5E76\u91CD\u65B0\u586B\u5199\u6CDB\u578B\u4E2D\u7684\u7C7B\u578B\uFF0C\u82E5\u4E0D\u80FD\u786E\u5B9A\u8BF7\u4F7F\u7528 Any
\u6216\u76F4\u63A5\u4F7F\u7528 instance
\u53D8\u91CF\u3002
IllegalStateException
HookParam Method args is empty, mabe not has args
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 ArgsModifyer.set
\u65B9\u6CD5\u4F46\u662F\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u7EC4\u4E3A\u7A7A\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u8C03\u7528\u4E86\u6B64\u65B9\u6CD5
args(...).set(...)
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u5426\u5219\u4F60\u65E0\u6CD5\u4F7F\u7528\u6B64\u529F\u80FD\u3002
IllegalStateException
HookParam Method args index out of bounds, max is NUMBER
\u5F02\u5E38\u539F\u56E0
\u5728 HookParam
\u4E2D\u8C03\u7528 ArgsModifyer.set
\u65B9\u6CD5\u6307\u5B9A\u4E86\u8D85\u51FA\u65B9\u6CD5\u53C2\u6570\u4E0B\u6807\u7684\u6570\u7EC4\u5E8F\u53F7\u3002
\u793A\u4F8B\u5982\u4E0B
injectMember {
// ...
afterHook {
// \u4E0B\u6807\u4ECE 0 \u5F00\u59CB\uFF0C\u5047\u8BBE\u539F\u59CB\u7684\u53C2\u6570\u4E0B\u6807\u662F 5 \u4E2A\uFF0C\u4F46\u662F\u8FD9\u91CC\u586B\u5199\u4E86 6
args(index = 6).set(...)
}
}
\u89E3\u51B3\u65B9\u6848
\u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u4E2A\u6570\uFF0C\u5E76\u91CD\u65B0\u8BBE\u7F6E\u6570\u7EC4\u4E0B\u6807\u3002
IllegalStateException
Current Hook Framework not support moduleAppResources
\u5F02\u5E38\u539F\u56E0
\u5728 PackageParam
\u4E2D\u8C03\u7528\u4E86 moduleAppResources
\u53D8\u91CF\u4F46\u662F\u65E0\u6CD5\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
encase {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
moduleAppResources...
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u51E0\u4E4E\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u76EE\u6807 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\uFF0C\u82E5\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
IllegalStateException
VariousClass match failed of those CLASSES
\u5F02\u5E38\u539F\u56E0
\u5728\u4F7F\u7528 VariousClass
\u521B\u5EFA\u4E0D\u786E\u5B9A\u7684 Class
\u5BF9\u8C61\u65F6\u5168\u90E8\u7684 Class
\u90FD\u6CA1\u6709\u88AB\u627E\u5230\u3002
\u89E3\u51B3\u65B9\u6848
\u68C0\u67E5\u5F53\u524D Hook \u7684\u5BBF\u4E3B\u5185\u662F\u5426\u5B58\u5728\u5176\u4E2D\u80FD\u591F\u5339\u914D\u7684 Class
\u540E\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002
IllegalStateException
Cannot get hook class "NAME" cause THROWABLE
\u5F02\u5E38\u539F\u56E0
\u5728 hook
\u65B9\u6CD5\u4F53\u975E onPrepareHook
\u65B9\u6CD5\u5185\u8C03\u7528\u4E86 instanceClass
\u53D8\u91CF\u4E14\u5F53\u524D Hook \u7684 Class
\u4E0D\u5B58\u5728\u3002
\u793A\u4F8B\u5982\u4E0B
TargetClass.hook {
// \u53EF\u80FD\u7684\u60C5\u51B5\u4E3A\u5728\u975E onPrepareHook \u65B9\u6CD5\u4F53\u5185\u8C03\u7528\u4E86 instanceClass \u53D8\u91CF\u7528\u4E8E\u6253\u5370\u65E5\u5FD7
loggerD(msg = "$instanceClass hook start")
}
\u89E3\u51B3\u65B9\u6848
\u5728 hook
\u5185\u76F4\u63A5\u4F7F\u7528 instanceClass
\u662F\u5F88\u5371\u9669\u7684\uFF0C\u82E5 Class \u4E0D\u5B58\u5728\u5219\u4F1A\u76F4\u63A5\u5BFC\u81F4 Hook \u8FDB\u7A0B\u201C\u6B7B\u6389\u201D\u3002
\u8BE6\u60C5\u8BF7\u53C2\u8003 \u72B6\u6001\u76D1\u542C\u3002
IllegalStateException
LayoutInflatedParam View instance got null
\u5F02\u5E38\u539F\u56E0
\u5728\u5E03\u5C40 Hook \u56DE\u8C03\u4E2D\u8C03\u7528\u4E86 currentView
\u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
injectResource {
conditions {
name = "activity_main"
layout()
}
injectAsLayout {
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
currentView...
}
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u88AB Hook \u7684\u5BBF\u4E3B\u5F53\u524D Activity
\u5DF2\u7ECF\u9500\u6BC1\u6216 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002
IllegalStateException
XResForwarder is invalid
\u5F02\u5E38\u539F\u56E0
\u5728 YukiResForwarder
\u4E2D\u8C03\u7528\u4E86 resources
\u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002
\u793A\u4F8B\u5982\u4E0B
// \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
moduleAppResources.fwd(...).resources
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002
IllegalStateException
paramTypes is empty, please use emptyParam() instead
\u5F02\u5E38\u539F\u56E0
\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u4FDD\u7559\u4E86\u7A7A\u7684 param
\u65B9\u6CD5\u3002
\u793A\u4F8B\u5982\u4E0B
method {
name = "test"
// \u62EC\u53F7\u5185\u6CA1\u6709\u586B\u5199\u4EFB\u4F55\u53C2\u6570
param()
}
\u89E3\u51B3\u65B9\u6848
\u82E5\u8981\u6807\u8BC6\u6B64\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u6CA1\u6709\u53C2\u6570\uFF0C\u4F60\u53EF\u4EE5\u6709\u5982\u4E0B\u8BBE\u7F6E\u65B9\u6CD5\u3002
\u7B2C\u4E00\u79CD\uFF0C\u8BBE\u7F6E emptyParam
(\u63A8\u8350)
\u793A\u4F8B\u5982\u4E0B
method {
name = "test"
emptyParam()
}
\u7B2C\u4E8C\u79CD\uFF0C\u8BBE\u7F6E paramCount = 0
\u793A\u4F8B\u5982\u4E0B
method {
name = "test"
paramCount = 0
}
IllegalStateException
Invalid YukiHookCallback type
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u7684\u6838\u5FC3 Hook \u529F\u80FD\u53D1\u751F\u6545\u969C\u3002
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u82E5\u53D1\u751F\u4E0A\u8FF0\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002
IllegalStateException
ModuleContextThemeWrapper already loaded
\u5F02\u5E38\u539F\u56E0
\u5728 Context
\u4E2D\u4F7F\u7528 applyModuleTheme
\u65B9\u6CD5\u65F6\u91CD\u590D\u8FDB\u884C\u8C03\u7528\u3002
\u793A\u4F8B\u5982\u4E0B
// \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D\u7684 Context \u5BF9\u8C61
context.applyModuleTheme(R.style.Theme_AppCompat).applyModuleTheme(R.style.Theme_AppCompat)
\u89E3\u51B3\u65B9\u6848
\u5728 Context
\u4E2D\u53EA\u80FD\u521B\u5EFA\u4E00\u6B21 ModuleContextThemeWrapper
\uFF0C\u8BF7\u68C0\u67E5\u4EE3\u7801\u662F\u5426\u6709\u5FAA\u73AF\u8C03\u7528\u95EE\u9898\u3002
IllegalStateException
Cannot create classes cache for "android", please remove "name" param
\u5F02\u5E38\u539F\u56E0
\u5728\u7CFB\u7EDF\u6846\u67B6 (android) \u5BBF\u4E3B\u4F7F\u7528\u4E86 DexClassFinder
\u7684\u7F13\u5B58\u529F\u80FD searchClass(name = ...)
\u3002
\u793A\u4F8B\u5982\u4E0B
loadSystem {
searchClass(name = "test") {
from(...)
// ...
}.get()
}
\u89E3\u51B3\u65B9\u6848
\u7531\u4E8E\u7F13\u5B58\u4F1A\u5C06\u627E\u5230\u7684 Class
\u540D\u79F0\u5B58\u5165 SharedPreferences
\uFF0C\u4F46\u662F\u7CFB\u7EDF\u6846\u67B6\u4E0D\u5B58\u5728 data \u76EE\u5F55\uFF0C\u6240\u4EE5\u8BF7\u4E0D\u8981\u5728\u7CFB\u7EDF\u6846\u67B6\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002
IllegalStateException
Target Class type cannot cast to TYPE
\u5F02\u5E38\u539F\u56E0
\u4F7F\u7528 Class.toClass
\u3001Class.toClassOrNull
\u3001GenericClass.argument
\u65B9\u6CD5\u5C06\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A\u76EE\u6807 Class
\u65F6\u58F0\u660E\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\u3002
\u4EE5\u4E0B\u4F7F\u7528 Class.toClass
\u65B9\u6CD5\u6765\u8FDB\u884C\u793A\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
// \u5047\u8BBE\u76EE\u6807\u7C7B\u578B\u662F Activity \u4F46\u662F\u88AB\u9519\u8BEF\u5730\u8F6C\u6362\u4E3A\u4E86 WrongClass \u7C7B\u578B
val clazz = "android.app.Activity".toClass<WrongClass>()
\u89E3\u51B3\u65B9\u6848
\u793A\u4F8B\u5982\u4E0B
// <\u89E3\u51B3\u65B9\u6848 1> \u586B\u5199\u6B63\u786E\u7684\u7C7B\u578B
val clazz1 = "android.app.Activity".toClass<Activity>()
// <\u89E3\u51B3\u65B9\u6848 2> \u4E0D\u586B\u5199\u6CDB\u578B\u58F0\u660E
val clazz2 = "android.app.Activity".toClass()
\u8BF7\u786E\u4FDD\u6267\u884C\u65B9\u6CD5\u540E\u58F0\u660E\u7684\u6CDB\u578B\u662F\u6307\u5B9A\u7684\u76EE\u6807 Class
\u7C7B\u578B\uFF0C\u5728\u4E0D\u786E\u5B9A\u76EE\u6807\u7C7B\u578B\u7684\u60C5\u51B5\u4E0B\u4F60\u53EF\u4EE5\u4E0D\u9700\u8981\u586B\u5199\u6CDB\u578B\u58F0\u660E\u3002