import{_ as s,o,c as a,a as e}from"./app.fb8271cf.js";const n={},l=e(`
open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D Hook \u7684\u76EE\u6807 APP \u5165\u53E3\u5BF9\u8C61\u5B9E\u73B0\u7C7B\u3002
val appClassLoader\uFF1AClassLoader
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684
ClassLoader
\u3002
val appInfo: ApplicationInfo
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684
ApplicationInfo
\u3002
val appUserId: Int
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684\u7528\u6237 ID\u3002
\u673A\u4E3B\u4E3A 0
\uFF0C\u5E94\u7528\u53CC\u5F00 (\u5206\u8EAB) \u6216\u5DE5\u4F5C\u8D44\u6599\u56E0\u7CFB\u7EDF\u73AF\u5883\u4E0D\u540C ID \u4E5F\u5404\u4E0D\u76F8\u540C\u3002
val appContext: Application?
\u53D8\u66F4\u8BB0\u5F55
v1.0.72
\u65B0\u589E
v1.1.0
\u4FEE\u6539
\u52A0\u5165\u53EF\u7A7A\u7C7B\u578B (\u7A7A\u5B89\u5168)
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684
Application
\u3002
\u7279\u522B\u6CE8\u610F
\u9996\u6B21\u88C5\u8F7D\u53EF\u80FD\u662F\u7A7A\u7684\uFF0C\u8BF7\u5EF6\u8FDF\u4E00\u6BB5\u65F6\u95F4\u518D\u83B7\u53D6\u6216\u4F7F\u7528 onAppLifecycle \u76D1\u542C\u6765\u5B8C\u6210\u3002
val appResources\uFF1AResources?
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
v1.1.0
\u4FEE\u6539
\u52A0\u5165\u53EF\u7A7A\u7C7B\u578B (\u7A7A\u5B89\u5168)
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684 Resources\u3002
\u7279\u522B\u6CE8\u610F
\u4F60\u53EA\u80FD\u5728 HookResources.hook \u65B9\u6CD5\u4F53\u5185\u6216 appContext \u88C5\u8F7D\u5B8C\u6BD5\u65F6\u8FDB\u884C\u8C03\u7528\u3002
val systemContext: Context
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D\u7CFB\u7EDF\u6846\u67B6\u7684
Context
\u3002
val processName: String
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684\u8FDB\u7A0B\u540D\u79F0\u3002
val packageName: String
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684\u5305\u540D\u3002
val isFirstApplication: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u662F\u5426\u4E3A\u7B2C\u4E00\u4E2A
Application
\u3002
val mainProcessName: String
\u53D8\u66F4\u8BB0\u5F55
v1.0.70
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook APP \u7684\u4E3B\u8FDB\u7A0B\u540D\u79F0\u3002
\u5176\u5BF9\u5E94\u7684\u5C31\u662F packageName
\u3002
val moduleAppFilePath: String
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB APK \u6587\u4EF6\u8DEF\u5F84\u3002
\u7279\u522B\u6CE8\u610F
\u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u65E0\u6CD5\u4F7F\u7528\uFF0C\u4F1A\u83B7\u53D6\u5230\u7A7A\u5B57\u7B26\u4E32\u3002
val moduleAppResources: YukiModuleResources
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB
Resources
\u3002
\u7279\u522B\u6CE8\u610F
\u4F5C\u4E3A Hook API \u6216\u4E0D\u652F\u6301\u7684 Hook Framework \u88C5\u8F7D\u65F6\u65E0\u6CD5\u4F7F\u7528\uFF0C\u4F1A\u629B\u51FA\u5F02\u5E38\u3002
val prefs: YukiHookModulePrefs
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u83B7\u5F97\u5F53\u524D\u4F7F\u7528\u7684\u5B58\u53D6\u6570\u636E\u5BF9\u8C61\u7F13\u5B58\u5B9E\u4F8B\u3002
\u7279\u522B\u6CE8\u610F
\u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u65E0\u6CD5\u4F7F\u7528\uFF0C\u4F1A\u629B\u51FA\u5F02\u5E38\u3002
fun prefs(name: String): YukiHookModulePrefs
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.0.80
\u4FEE\u6539
\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline
\u529F\u80FD\u63CF\u8FF0
\u83B7\u5F97\u5F53\u524D\u4F7F\u7528\u7684\u5B58\u53D6\u6570\u636E\u5BF9\u8C61\u7F13\u5B58\u5B9E\u4F8B\u3002
\u4F60\u53EF\u4EE5\u901A\u8FC7 name
\u6765\u81EA\u5B9A\u4E49 Sp \u5B58\u50A8\u7684\u540D\u79F0\u3002
\u7279\u522B\u6CE8\u610F
\u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u65E0\u6CD5\u4F7F\u7528\uFF0C\u4F1A\u629B\u51FA\u5F02\u5E38\u3002
val dataChannel: YukiHookDataChannel.NameSpace
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u5F97\u5F53\u524D\u4F7F\u7528\u7684\u6570\u636E\u901A\u8BAF\u6865\u547D\u540D\u7A7A\u95F4\u5BF9\u8C61\u3002
\u7279\u522B\u6CE8\u610F
\u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u65E0\u6CD5\u4F7F\u7528\uFF0C\u4F1A\u629B\u51FA\u5F02\u5E38\u3002
fun resources(): HookResources
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u5F97\u5F53\u524D Hook APP \u7684
YukiResources
\u5BF9\u8C61\u3002
\u8BF7\u8C03\u7528 HookResources.hook
\u65B9\u6CD5\u5F00\u59CB Hook\u3002
fun refreshModuleAppResources()
\u53D8\u66F4\u8BB0\u5F55
v1.0.87
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u5237\u65B0\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB
Resources
\u3002
inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u751F\u547D\u5468\u671F\u88C5\u8F7D\u4E8B\u4EF6\u3002
\u6CE8\u610F
\u5728 loadZygote \u4E2D\u4E0D\u4F1A\u88AB\u88C5\u8F7D\uFF0C\u4EC5\u4F1A\u5728 loadSystem\u3001loadApp \u4E2D\u88C5\u8F7D\u3002
\u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u8BF7\u4F7F\u7528\u539F\u751F\u7684 Application \u5B9E\u73B0\u751F\u547D\u5468\u671F\u76D1\u542C\u3002
inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
fun loadApp(name: String, hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.0.80
\u4FEE\u6539
\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u5305\u540D\u7684 APP\u3002
name
\u4E3A APP \u7684\u5305\u540D\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda
\u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002
\u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u3001\u5168\u90E8\u5305\u540D\u7684 APP\u3002
\u82E5\u8981\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\uFF0C\u8BF7\u4F7F\u7528 loadZygote
\u3002
\u82E5\u8981 Hook \u7CFB\u7EDF\u6846\u67B6\uFF0C\u8BF7\u4F7F\u7528 loadSystem
\u3002
\u529F\u80FD\u793A\u4F8B
\u4F60\u53EF\u4EE5\u4F7F\u7528 loadApp
\u7684 lambda
\u65B9\u6CD5\u4F53\u5F62\u5F0F\u6216\u76F4\u63A5\u88C5\u8F7D\u4E00\u4E2A Hooker\u3002
\u793A\u4F8B\u5982\u4E0B
// \u4F7F\u7528 lambda
loadApp(name = "com.example.test") {
// Your code here.
}
// \u4F7F\u7528 Hooker
loadApp(name = "com.example.test", CustomHooker)
\u82E5\u4E0D\u6307\u5B9A name
\u53C2\u6570\uFF0C\u5219\u6B64\u65B9\u6CD5\u4F53\u9ED8\u8BA4\u4F1A\u8FC7\u6EE4\u5F53\u524D\u7CFB\u7EDF\u4E2D\u5168\u90E8\u53EF\u88AB Hook \u7684 APP\u3002
\u793A\u4F8B\u5982\u4E0B
// \u4F7F\u7528 lambda
loadApp {
// Your code here.
}
// \u4F7F\u7528 Hooker
loadApp(hooker = CustomHooker)
inline fun loadZygote(initiate: PackageParam.() -> Unit)
fun loadZygote(hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\u3002
\u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda
\u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002
inline fun loadSystem(initiate: PackageParam.() -> Unit)
fun loadSystem(hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0.82
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D\u5E76 Hook \u7CFB\u7EDF\u6846\u67B6\u3002
\u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda
\u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002
inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
fun withProcess(name: String, hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0.70
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D\u5E76 Hook APP \u7684\u6307\u5B9A\u8FDB\u7A0B\u3002
name
\u4E3A APP \u7684\u8FDB\u7A0B\u540D\u79F0\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda
\u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002
fun loadHooker(hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D Hook \u5B50\u7C7B\u3002
\u4F60\u53EF\u4EE5\u586B\u5165 hooker
\u5728 Hooker \u4E2D\u7EE7\u7EED\u88C5\u8F7D Hooker\u3002
inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u901A\u8FC7
appClassLoader
\u6309\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u5E76\u5F97\u5230\u5F53\u524D Hook APP Dex \u4E2D\u7684Class
\u3002
\u7279\u522B\u6CE8\u610F
\u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u53CA\u67E5\u627E\u6761\u4EF6\u590D\u6742\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002
\u5EFA\u8BAE\u542F\u7528 async \u6216\u8BBE\u7F6E name \u53C2\u6570\uFF0Cname \u53C2\u6570\u5C06\u5728 Hook APP (\u5BBF\u4E3B) \u4E0D\u540C\u7248\u672C\u4E2D\u81EA\u52A8\u8FDB\u884C\u672C\u5730\u7F13\u5B58\u4EE5\u63D0\u5347\u6548\u7387\u3002
\u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.1.0
\u4F5C\u5E9F
\u8BF7\u8F6C\u79FB\u5230 toClass(...)
\u65B9\u6CD5
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.1.0
\u4F5C\u5E9F
\u8BF7\u8F6C\u79FB\u5230 hasClass(...)
\u65B9\u6CD5
fun String.toClass(loader: ClassLoader?): Class<*>
fun VariousClass.toClass(loader: ClassLoader?): Class<*>
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u3001
VariousClass
\u8F6C\u6362\u4E3Aloader
\u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002
\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D appClassLoader
\u88C5\u8F7D\u76EE\u6807 Class
\u3002
\u529F\u80FD\u793A\u4F8B
\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u5C06 String
\u7C7B\u578B\u7684 Class
\u5305\u540D\u8F6C\u4E3A Class
\u5B9E\u4F8B\u3002
\u793A\u4F8B\u5982\u4E0B
"com.example.demo.DemoClass".toClass()
\u4F60\u8FD8\u53EF\u4EE5\u5411 loader
\u53C2\u6570\u4F20\u5165\u4F60\u81EA\u5B9A\u4E49\u7684 ClassLoader
\u3002
\u793A\u4F8B\u5982\u4E0B
val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
"com.example.demo.DemoClass".toClass(customClassLoader)
\u4F60\u8FD8\u53EF\u4EE5\u521B\u5EFA\u4E00\u4E2A VariousClass
\uFF0C\u5E76\u8F6C\u6362\u4E3A\u5B9E\u4F53\u7C7B\u3002
VariousClass
\u4F1A\u679A\u4E3E\u6240\u6709\u8BBE\u7F6E\u7684 Class
\u5E76\u6700\u7EC8\u83B7\u5F97\u7B2C\u4E00\u4E2A\u5B58\u5728\u7684 Class
\u3002
\u793A\u4F8B\u5982\u4E0B
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").toClass()
\u540C\u6837\u5730\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5411 loader
\u53C2\u6570\u4F20\u5165\u4F60\u81EA\u5B9A\u4E49\u7684 ClassLoader
\u3002
\u793A\u4F8B\u5982\u4E0B
val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").toClass(customClassLoader)
fun String.toClassOrNull(loader: ClassLoader?): Class<*>?
fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>?
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u3001
VariousClass
\u8F6C\u6362\u4E3Aloader
\u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002
\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D appClassLoader
\u88C5\u8F7D\u76EE\u6807 Class
\u3002
\u627E\u4E0D\u5230 Class
\u4F1A\u8FD4\u56DE null
\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002
\u529F\u80FD\u793A\u4F8B
\u7528\u6CD5\u8BF7\u53C2\u8003 String+VariousClass.toClass \u65B9\u6CD5\u3002
fun String.hasClass(loader: ClassLoader?): Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u67E5\u627E\u662F\u5426\u5B58\u5728\u3002
\u9ED8\u8BA4\u4F7F\u7528\u5F53\u524D appClassLoader
\u88C5\u8F7D\u76EE\u6807 Class
\u3002
\u529F\u80FD\u793A\u4F8B
\u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u4F7F\u7528\u6B64\u65B9\u6CD5\u5224\u65AD\u5B57\u7B26\u4E32\u4E2D\u7684\u7C7B\u662F\u5426\u5B58\u5728\u3002
\u793A\u4F8B\u5982\u4E0B
if("com.example.demo.DemoClass".hasClass()) {
// Your code here.
}
\u4F60\u8FD8\u53EF\u4EE5\u81EA\u5B9A\u4E49\u5176\u4E2D\u7684 loader
\u53C2\u6570\uFF0C\u9ED8\u8BA4\u4E3A appClassLoader
\u3002
\u793A\u4F8B\u5982\u4E0B
val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
if("com.example.demo.DemoClass".hasClass(customClassLoader)) {
// Your code here.
}
fun findClass(name: String, loader: ClassLoader?): HookClass
fun findClass(vararg name: String, loader: ClassLoader?): VariousClass
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.0.1
\u4FEE\u6539
\u79FB\u9664\u4E86 \u65B9\u6CD5findClass(various: VariousClass)
v1.1.0
\u4FEE\u6539
\u65B0\u589E loader
\u53C2\u6570
\u529F\u80FD\u63CF\u8FF0
\u901A\u8FC7\u5B8C\u6574\u5305\u540D+\u540D\u79F0\u67E5\u627E\u9700\u8981\u88AB Hook \u7684
Class
\u3002
\u6CE8\u610F
\u4F7F\u7528\u6B64\u65B9\u6CD5\u4F1A\u5F97\u5230\u4E00\u4E2A HookClass \u4EC5\u7528\u4E8E Hook\uFF0C\u82E5\u60F3\u67E5\u627E Class \u8BF7\u4F7F\u7528 toClass \u529F\u80FD\u3002
\u529F\u80FD\u793A\u4F8B
\u4F60\u53EF\u4EE5\u4F7F\u7528\u4E09\u79CD\u65B9\u5F0F\u67E5\u627E\u4F60\u9700\u8981 Hook \u7684\u76EE\u6807 Class
\u3002
\u4F60\u53EF\u4EE5\u76F4\u63A5\u5C06\u88AB\u67E5\u627E\u7684 Class
\u5B8C\u6574\u5305\u540D+\u540D\u79F0\u586B\u5165 name
\u4E2D\u3002
\u793A\u4F8B\u5982\u4E0B
findClass(name = "com.example.demo.DemoClass")
\u82E5\u4F60\u4E0D\u786E\u5B9A\u591A\u4E2A\u7248\u672C\u7684 Class
\u4EE5\u53CA\u4E0D\u540C\u540D\u79F0\uFF0C\u4F60\u53EF\u4EE5\u5C06\u591A\u4E2A\u5B8C\u6574\u5305\u540D+\u540D\u79F0\u586B\u5165 name
\u4E2D\u3002
\u793A\u4F8B\u5982\u4E0B
findClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2", "com.example.demo.DemoClass3")
\u4F60\u8FD8\u53EF\u4EE5\u521B\u5EFA\u4E00\u4E2A VariousClass
\uFF0C\u5C06 Class
\u7684\u5B8C\u6574\u5305\u540D+\u540D\u79F0\u586B\u5165 VariousClass
\u7684 name
\u4E2D\u5E76\u586B\u5165 various
\u53C2\u6570\u4E2D\u3002
\u793A\u4F8B\u5982\u4E0B
val variousClass = VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2", "com.example.demo.DemoClass3")
\u82E5\u4F60\u5F53\u524D\u9700\u8981\u67E5\u627E\u7684 Class
\u4E0D\u5C5E\u4E8E appClassLoader
\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 loader
\u53C2\u6570\u6307\u5B9A\u4F60\u8981\u88C5\u8F7D\u7684 ClassLoader
\u3002
\u793A\u4F8B\u5982\u4E0B
val outsideLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u5C31\u662F\u4F60\u7684 ClassLoader
findClass(name = "com.example.demo.OutsideClass", loader = outsideLoader)
\u540C\u6837\u5730\uFF0C\u5728\u4E0D\u786E\u5B9A\u591A\u4E2A\u7248\u672C\u7684 Class
\u4EE5\u53CA\u4E0D\u540C\u540D\u79F0\u65F6\uFF0C\u4E5F\u53EF\u4EE5\u4F7F\u7528 loader
\u53C2\u6570\u6307\u5B9A\u4F60\u8981\u88C5\u8F7D\u7684 ClassLoader
\u3002
\u793A\u4F8B\u5982\u4E0B
val outsideLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u5C31\u662F\u4F60\u7684 ClassLoader
findClass("com.example.demo.OutsideClass1", "com.example.demo.OutsideClass2", "com.example.demo.OutsideClass3", loader = outsideLoader)
inline fun String.hook(initiate: YukiMemberHookCreator.() -> Unit): YukiMemberHookCreator.Result
inline fun Class<*>.hook(isForceUseAbsolute: Boolean, initiate: YukiMemberHookCreator.() -> Unit): YukiMemberHookCreator.Result
inline fun VariousClass.hook(initiate: YukiMemberHookCreator.() -> Unit): YukiMemberHookCreator.Result
inline fun HookClass.hook(initiate: YukiMemberHookCreator.() -> Unit): YukiMemberHookCreator.Result
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.0.1
\u4FEE\u6539
\u65B0\u589E VariousClass
\u7684\u76F4\u63A5\u8C03\u7528 hook
\u65B9\u6CD5
v1.0.2
\u4FEE\u6539
\u65B0\u589E String
\u7684\u76F4\u63A5\u8C03\u7528 hook
\u65B9\u6CD5
v1.0.3
\u4FEE\u6539
\u65B0\u589E YukiMemberHookCreator.Result
\u8FD4\u56DE\u503C
v1.0.70
\u4FEE\u6539
\u65B0\u589E isUseAppClassLoader
\u53C2\u6570
v1.0.80
\u4FEE\u6539
\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline
v1.1.0
\u4FEE\u6539
\u79FB\u9664\u4E86 \u53C2\u6570isUseAppClassLoader
\u6DFB\u52A0\u4E86 isForceUseAbsolute
\u53C2\u6570\u5230 Class.hook
\u65B9\u6CD5
\u529F\u80FD\u63CF\u8FF0
\u8FD9\u662F\u4E00\u5207 Hook \u7684\u5165\u53E3\u521B\u5EFA\u65B9\u6CD5\uFF0CHook \u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3002
\u529F\u80FD\u793A\u4F8B
\u5982\u4F60\u6240\u89C1\uFF0CHook \u65B9\u6CD5\u4F53\u7684\u521B\u5EFA\u53EF\u4F7F\u7528 4 \u79CD\u65B9\u5F0F\u3002
\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u5F97\u5230 HookClass
\u5B9E\u4F8B\u8FDB\u884C\u521B\u5EFA\u3002
\u793A\u4F8B\u5982\u4E0B
"com.example.demo.DemoClass".hook {
// Your code here.
}
\u901A\u8FC7 findClass
\u5F97\u5230 HookClass
\u5B9E\u4F8B\u8FDB\u884C\u521B\u5EFA\u3002
\u793A\u4F8B\u5982\u4E0B
findClass(name = "com.example.demo.DemoClass").hook {
// Your code here.
}
\u4F7F\u7528 stub
\u6216\u76F4\u63A5\u62FF\u5230 Class
\u5B9E\u4F8B\u8FDB\u884C\u521B\u5EFA\u3002
\u9ED8\u8BA4\u60C5\u51B5\u4E0B API \u4F1A\u5C06 Class
\u5B9E\u4F8B\u8F6C\u6362\u4E3A\u7C7B\u540D\u5E76\u7ED1\u5B9A\u5230 appClassLoader
\uFF0C\u82E5\u5931\u8D25\uFF0C\u5219\u4F1A\u4F7F\u7528\u539F\u59CB Class
\u5B9E\u4F8B\u76F4\u63A5\u8FDB\u884C Hook\u3002
\u793A\u4F8B\u5982\u4E0B
Stub::class.java.hook {
// Your code here.
}
\u82E5\u5F53\u524D Class
\u4E0D\u5728 appClassLoader
\u4E14\u81EA\u52A8\u5339\u914D\u65E0\u6CD5\u627E\u5230\u8BE5 Class
\uFF0C\u8BF7\u542F\u7528 isForceUseAbsolute
\u3002
\u793A\u4F8B\u5982\u4E0B
YourClass::class.java.hook(isForceUseAbsolute = true) {
// Your code here.
}
\u4F7F\u7528 VariousClass
\u5B9E\u4F8B\u8FDB\u884C\u521B\u5EFA\u3002
\u793A\u4F8B\u5982\u4E0B
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
// Your code here.
}
\u6216\u8005\u76F4\u63A5\u4F7F\u7528\u53EF\u53D8\u5B57\u7B26\u4E32\u6570\u7EC4\u8FDB\u884C\u521B\u5EFA\u3002
\u793A\u4F8B\u5982\u4E0B
findClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
// Your code here.
}
inline fun HookResources.hook(initiate: YukiResourcesHookCreator.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.80
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
Hook APP \u7684 Resources\u3002
\u7279\u522B\u6CE8\u610F
\u8BF7\u6CE8\u610F\u4F60\u9700\u8981\u786E\u4FDD\u5F53\u524D Hook Framework \u652F\u6301\u4E14 InjectYukiHookWithXposed.isUsingResourcesHook \u5DF2\u542F\u7528\u3002
\u529F\u80FD\u793A\u4F8B
Resources Hook \u4E3A\u56FA\u5B9A\u7528\u6CD5\uFF0C\u83B7\u53D6 resources
\u5BF9\u8C61\uFF0C\u7136\u540E\u8C03\u7528 hook
\u65B9\u6CD5\u5F00\u59CB Hook\u3002
\u793A\u4F8B\u5982\u4E0B
resources().hook {
// Your code here.
}
\u7279\u522B\u6CE8\u610F
\u8FD9\u662F\u56FA\u5B9A\u7528\u6CD5\uFF0C\u4E3A\u4E86\u9632\u6B62\u53D1\u751F\u95EE\u9898\uFF0C\u4F60\u4E0D\u53EF\u624B\u52A8\u5B9E\u73B0\u4EFB\u4F55 HookResources \u5B9E\u4F8B\u6267\u884C hook \u8C03\u7528\u3002
\u5C06 Resources \u7684 Hook \u8BBE\u7F6E\u4E3A\u8FD9\u6837\u662F\u4E3A\u4E86\u4E0E findClass(...).hook
\u505A\u5230\u7EDF\u4E00\uFF0C\u4F7F\u5F97\u8C03\u7528\u8D77\u6765\u903B\u8F91\u4E0D\u4F1A\u6DF7\u4E71\u3002
inner class AppLifecycle internal constructor()
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u5F53\u524D Hook APP \u7684\u751F\u547D\u5468\u671F\u5B9E\u4F8B\u5904\u7406\u7C7B\u3002
fun attachBaseContext(result: (baseContext: Context, hasCalledSuper: Boolean) -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.attachBaseContext
\u3002
fun onCreate(initiate: Application.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.onCreate
\u3002
fun onTerminate(initiate: Application.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.onTerminate
\u3002
fun onLowMemory(initiate: Application.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.onLowMemory
\u3002
fun onTrimMemory(result: (self: Application, level: Int) -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.onTrimMemory
\u3002
fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D
Application.onConfigurationChanged
\u3002
fun registerReceiver(vararg action: String, result: (context: Context, intent: Intent) -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
`,380),p=[l];function c(r,t){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","PackageParam.html.vue"]]);export{i as default};\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002