import{_ as s,o as n,c as e,a}from"./app.99fcdd51.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 XposedBridge in current space! Aborted
\u5F02\u5E38\u539F\u56E0
\u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D XposedBridge
\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
class 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
class 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
Hooking Process exception occurred
\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
YukiHookAPI bind initZygote failed
\u5F02\u5E38\u539F\u56E0
YukiHookAPI
\u5728\u5C1D\u8BD5\u88C5\u8F7D Xposed \u539F\u751F\u63A5\u53E3 initZygote
\u65B9\u6CD5\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(StringType, "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
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
\u4E00\u822C\u60C5\u51B5\u4E0B\uFF0C\u6B64\u9519\u8BEF\u57FA\u672C\u4E0A\u4E0D\u4F1A\u53D1\u751F\uFF0C\u4E00\u65E6\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 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
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
\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
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(StringType)
}.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\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
PackageParam got null ClassLoader
\u5F02\u5E38\u539F\u56E0
\u5728 PackageParam
\u4E2D\u8C03\u7528\u4E86 appClassLoader
\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
appClassLoader...
}
\u89E3\u51B3\u65B9\u6848
\u8FD9\u79CD\u60C5\u51B5\u51E0\u4E4E\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u6A21\u5757\u88AB\u88C5\u8F7D\u7684\u5BBF\u4E3B\u6216\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
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
moduleAppResources
\u9700\u8981\u5F53\u524D Hook Framework \u652F\u6301 initZygote
\u529F\u80FD\uFF0C\u8BF7\u68C0\u67E5\u540E\u518D\u8BD5\u4E00\u6B21\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