import{_ as s,o,c as a,a as e}from"./app.fb8271cf.js";const n={},l=e(`

PackageParam - class

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

appClassLoader - field

val appClassLoader\uFF1AClassLoader

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D Hook APP \u7684 ClassLoader\u3002

appInfo - field

val appInfo: ApplicationInfo

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D Hook APP \u7684 ApplicationInfo\u3002

appUserId - field

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

appContext - field

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

appResources - field

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

systemContext - field

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

processName - field

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

packageName - field

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

isFirstApplication - field

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

mainProcessName - field

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

moduleAppFilePath - field

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

moduleAppResources - field

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

prefs - field

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

prefs - method

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

dataChannel - field

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

resources - method

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

refreshModuleAppResources - method

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

onAppLifecycle - method

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

loadApp - method

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)

loadZygote - method

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

loadSystem - method

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

withProcess - method

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

loadHooker - method

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

searchClass - method

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\u7684 Class\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

String+VariousClass.clazz - i-ext-field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4F5C\u5E9F

\u8BF7\u8F6C\u79FB\u5230 toClass(...) \u65B9\u6CD5

String.hasClass - i-ext-field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4F5C\u5E9F

\u8BF7\u8F6C\u79FB\u5230 hasClass(...) \u65B9\u6CD5

String+VariousClass.toClass - i-ext-method

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\u3001VariousClass \u8F6C\u6362\u4E3A loader \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)

String+VariousClass.toClassOrNull - i-ext-method

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\u3001VariousClass \u8F6C\u6362\u4E3A loader \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

String.hasClass - i-ext-method

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.
}

findClass - method

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 findClass(various: VariousClass) \u65B9\u6CD5

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)

String+Class+VariousClass+HookClass.hook - i-ext-method

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 isUseAppClassLoader \u53C2\u6570

\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.
}

HookResources.hook - i-ext-method

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

AppLifecycle - class

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

attachBaseContext - method

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

onCreate - method

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

onTerminate - method

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

onLowMemory - method

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

onTrimMemory - method

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

onConfigurationChanged - method

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

registerReceiver - method

fun registerReceiver(vararg action: String, result: (context: Context, intent: Intent) -> Unit)

\u53D8\u66F4\u8BB0\u5F55

v1.0.88 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002

`,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};