Files
YukiHookAPI/docs/zh-cn/guide/move-to-new-api.html

217 lines
96 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.51">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
<link rel="icon" href="/YukiHookAPI/images/logo.png"><title>从 Xposed API 迁移 | Yuki Hook API</title><meta name="description" content="一个使用 Kotlin 重构的轻量、高效、稳定的 Xposed Hook API">
<link rel="modulepreload" href="/YukiHookAPI/assets/app.b731fed0.js"><link rel="modulepreload" href="/YukiHookAPI/assets/move-to-new-api.html.80452ab8.js"><link rel="modulepreload" href="/YukiHookAPI/assets/move-to-new-api.html.508c5312.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.1b76ac9e.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.872aa7a1.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.6cc32291.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.7638d3a2.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.52177f62.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.5dc8225c.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.94bd226b.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.f6b9c2a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.47c311e0.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.72ebad13.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.c794f69e.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.15e04e11.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.cd65195d.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.a036bda1.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.f6f658d0.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.437816ed.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.78f39fa5.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.e309979a.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.ed4fa356.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.c0115524.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.33c07b8b.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.3df7cacf.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.2cf8d6de.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.cad3998c.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.f5361b1b.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.ac2a5859.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.0a59e2e0.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.683a5429.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.557dcdf1.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.13ac887a.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.4d8cac8a.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.1352f5de.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.eacb83f2.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.d499d226.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.c5fc5faf.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.412bbdd6.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.2d57680b.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.ff24950f.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.96712a39.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.c35a7041.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.83f072dc.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.09c0b222.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.e8fab6a3.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.2e612549.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.b798a8f8.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.5fd9a913.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.77b2a461.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.476693ca.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.56391530.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.16c29272.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.7b666428.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.52e59cf0.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.2486cf29.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.bd237fa4.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.d3b181da.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.8aaa9934.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.a9e6e2d7.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.61db5860.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.99eec744.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.914e1c34.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.b19d4ad2.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.7a64d58c.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.cf9b500d.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.641fcd58.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.3a0e1ac6.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.486aa6ea.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.4f07fd98.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.7c81aa10.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.37dcaec4.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.46168b72.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.b68236f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.f7b7c82c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.64f654a6.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.72d1861a.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.f98d02d2.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.37aae471.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.5af05d7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.a3936b7c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.7da3eef4.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.8137c32c.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.d4c9dbd1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.57573770.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.75c012dd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.e0f278fe.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.b37a852b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.0026a7b8.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.bfb4e259.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.612b6202.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.ba3bdd0b.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.550d3346.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.a386b8db.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.74e08a45.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.5eb62ec3.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.78a55860.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.a5dbb7a7.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.5d8e12f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.0c13dc47.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.4410e26c.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.97f89f93.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.e5c5fb30.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.4e23df75.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.afb6fb92.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.560fa41c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.f8f818f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.dfd7c23c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.764fecc3.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.8f275c85.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.78c5f805.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.7de4f560.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.25713065.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.03ce70ab.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.d8e27a7f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.0dadd8db.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.7b0a4824.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.a93ee4ef.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.194718a1.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.d3cf97f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.0c7dadc7.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.2d5ab94d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.c36dff17.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.00ac96fb.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.d62bae6c.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.9b04521f.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.a071b3c6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.c10f9770.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.90d3c4e6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.a20d9206.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.0879426b.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.2639d392.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.f7582dc2.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.47e512e4.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.f8d7dd83.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.6858f0d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.b3e5d297.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.146b27be.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.09451ff7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.dd9e40e9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.229a46ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.e79843c3.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.58e81c94.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.c038a05a.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.30ec715b.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.f88cff39.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.42c0d92b.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.a7e275c0.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.160393f4.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.a50ef7db.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.3c993d19.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.a10800a3.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.5371a703.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.4594138a.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.d6b6a19f.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.51bf2778.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.d2fdb5e5.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.8b80c114.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.c026b764.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.32727d0b.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.e78fb733.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.12cc69e8.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.10a6f79c.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.497eff00.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.ce7d7a6d.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.3e3defa4.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.24dd953a.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.7138af10.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.29fade2a.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.02163f8c.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.e1f430b8.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.8990765e.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.5b759f3f.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.b1dcdcab.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.b416866d.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.0514fbca.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.7f54d47b.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.ca11d73a.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.2ed20abd.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.6f740d7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.b67c3a92.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.dd031e9f.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.ed214c80.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.ab3c82b6.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.b96c7032.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.1c9c0ab9.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.5ab8f5fd.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.49ef1f4c.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.3ee76689.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.51164e16.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.92a62ae4.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.f823cec2.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.9f401843.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.3c019268.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.1647d68a.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.4ef825ce.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.440633f4.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.6be865e2.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.78d59a1f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.f343ad45.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.d42ba676.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.a56c4883.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.0d3a92a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.d55a57b6.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.822dea36.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.45ca7ca8.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.d801b21a.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.be1dd585.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.86d9dd0e.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.3298571a.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.d8f5bc51.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.ea2924f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.51f530ad.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.9d037bb0.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.d31228d5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.6f7a121a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.8919a28e.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.14f8bb19.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.cd059f23.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.41520f31.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.1e6bb024.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.f2ac0d70.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.fe2eb387.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.19d2afe3.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.14ceb0f3.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.15d9571a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.045c8198.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.c3362756.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.854c2b0b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.f0739f0f.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.bcf54841.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.c692a37c.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.13f30ec9.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.9e011e01.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.df3280ea.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.0743d859.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.7c338c15.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.32e67d15.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.d5ae8a63.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.71c7c35a.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.515fbc16.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.5f674f34.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.01d2cb6f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.4eb0d8d9.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.3277956e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.b7486192.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.8010ee17.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.cb8e415a.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.f230b8b5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.51d72087.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.d7ff845c.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.49cda7d7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.5854be1c.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.098b10ba.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.84f95685.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.5ba40bb2.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.aa3dd521.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.7ed648f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.0e2d73a9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.8c664946.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.3017847c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.c8900bd3.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.32c4bc6c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.eb24cbd1.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.c658b495.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.cc57d07e.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.6879a648.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.6fe47c0a.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.cd67b0cf.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.5d787d6b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.602eadaf.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.f3a073e6.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.ade58e77.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.e99f9a83.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.82c77a38.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.96350c0a.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.23d4b415.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.cc6731ab.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.aec883c1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.5b48df29.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.bd9db4d1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.3422983d.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.d22c0e3a.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.19953873.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.329e784b.js">
<link rel="stylesheet" href="/YukiHookAPI/assets/style.e115708c.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/YukiHookAPI/zh-cn/" class=""><img class="logo" src="/YukiHookAPI/images/logo.png" alt="Yuki Hook API"><span class="site-name can-hide">Yuki Hook API</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="导航"><span class="title">导航</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="导航"><span class="title">导航</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>入门</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/home" class="" aria-label="介绍"><!--[--><!--]--> 介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/knowledge" class="" aria-label="基础知识"><!--[--><!--]--> 基础知识 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/quick-start" class="" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/example" class="" aria-label="用法示例"><!--[--><!--]--> 用法示例 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/move-to-new-api" class="router-link-active" aria-label="从 Xposed API 迁移"><!--[--><!--]--> 从 Xposed API 迁移 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>配置</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-example" class="" aria-label="API 基本配置"><!--[--><!--]--> API 基本配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-exception" class="" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/xposed-using" class="" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-using" class="" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/r8-proguard" class="" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>工具</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder" class="" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>API 文档</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/home" class="" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI" class="" aria-label="Public API"><!--[--><!--]--> Public API <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/special-features/reflection" class="" aria-label="特色功能"><!--[--><!--]--> 特色功能 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>关于</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/changelog" class="" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/future" class="" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/about" class="" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/YukiHookAPI/en/guide/move-to-new-api.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html" class="router-link-active router-link-exact-active router-link-active" aria-label="简体中文"><!--[--><!--]--> 简体中文 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><a class="external-link" href="https://github.com/fankes/YukiHookAPI" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口中打开</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button class="toggle-color-mode-button" title="切换颜色模式"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><form class="search-box" role="search"><input type="search" placeholder="搜索" autocomplete="off" spellcheck="false" value><!----></form></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-items"><!--[--><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="导航"><span class="title">导航</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="导航"><span class="title">导航</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>入门</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/home" class="" aria-label="介绍"><!--[--><!--]--> 介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/knowledge" class="" aria-label="基础知识"><!--[--><!--]--> 基础知识 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/quick-start" class="" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/example" class="" aria-label="用法示例"><!--[--><!--]--> 用法示例 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/guide/move-to-new-api" class="router-link-active" aria-label="从 Xposed API 迁移"><!--[--><!--]--> 从 Xposed API 迁移 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>配置</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-example" class="" aria-label="API 基本配置"><!--[--><!--]--> API 基本配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-exception" class="" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/xposed-using" class="" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-using" class="" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/r8-proguard" class="" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>工具</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder" class="" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>API 文档</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/home" class="" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI" class="" aria-label="Public API"><!--[--><!--]--> Public API <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/special-features/reflection" class="" aria-label="特色功能"><!--[--><!--]--> 特色功能 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>关于</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/changelog" class="" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/future" class="" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/about" class="" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/YukiHookAPI/en/guide/move-to-new-api.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html" class="router-link-active router-link-exact-active router-link-active" aria-label="简体中文"><!--[--><!--]--> 简体中文 <!--[--><!--]--></a></li><!--]--></ul></div></div><div class="navbar-item"><a class="external-link" href="https://github.com/fankes/YukiHookAPI" rel="noopener noreferrer" target="_blank" aria-label="GitHub"><!--[--><!--]--> GitHub <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口中打开</span></span><!--[--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-items"><!--[--><li><p tabindex="0" class="sidebar-item sidebar-heading active collapsible">入门 <span class="down arrow"></span></p><ul style="" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/guide/home.html" class="sidebar-item" aria-label="介绍"><!--[--><!--]--> 介绍 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/guide/knowledge.html" class="sidebar-item" aria-label="基础知识"><!--[--><!--]--> 基础知识 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/guide/quick-start.html" class="sidebar-item" aria-label="快速开始"><!--[--><!--]--> 快速开始 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/guide/example.html" class="sidebar-item" aria-label="用法示例"><!--[--><!--]--> 用法示例 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="从 Xposed API 迁移"><!--[--><!--]--> 从 Xposed API 迁移 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html#迁移-hook-入口点" class="router-link-active router-link-exact-active sidebar-item" aria-label="迁移 Hook 入口点"><!--[--><!--]--> 迁移 Hook 入口点 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html#迁移-hook-方法体" class="router-link-active router-link-exact-active sidebar-item" aria-label="迁移 Hook 方法体"><!--[--><!--]--> 迁移 Hook 方法体 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html#before-after-hook" class="router-link-active router-link-exact-active sidebar-item" aria-label="Before/After Hook"><!--[--><!--]--> Before/After Hook <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html#replace-hook" class="router-link-active router-link-exact-active sidebar-item" aria-label="Replace Hook"><!--[--><!--]--> Replace Hook <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html#迁移其它功能" class="router-link-active router-link-exact-active sidebar-item" aria-label="迁移其它功能"><!--[--><!--]--> 迁移其它功能 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">配置 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/config/api-example.html" class="sidebar-item" aria-label="API 基本配置"><!--[--><!--]--> API 基本配置 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/api-exception.html" class="sidebar-item" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/xposed-using.html" class="sidebar-item" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/api-using.html" class="sidebar-item" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/r8-proguard.html" class="sidebar-item" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">工具 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder.html" class="sidebar-item" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">API 文档 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/home.html" class="sidebar-item" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item collapsible">Public API  <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html" class="sidebar-item" aria-label="YukiHookAPI - object"><!--[--><!--]--> YukiHookAPI - object <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html" class="sidebar-item" aria-label="PackageParam - class"><!--[--><!--]--> PackageParam - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html" class="sidebar-item" aria-label="HookParam - class"><!--[--><!--]--> HookParam - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html" class="sidebar-item" aria-label="InjectYukiHookWithXposed - annotation"><!--[--><!--]--> InjectYukiHookWithXposed - annotation <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html" class="sidebar-item" aria-label="IYukiHookXposedInit - interface"><!--[--><!--]--> IYukiHookXposedInit - interface <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html" class="sidebar-item" aria-label="YukiHookModulePrefs - class"><!--[--><!--]--> YukiHookModulePrefs - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html" class="sidebar-item" aria-label="ModulePreferenceFragment - class"><!--[--><!--]--> ModulePreferenceFragment - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html" class="sidebar-item" aria-label="PrefsData - class"><!--[--><!--]--> PrefsData - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html" class="sidebar-item" aria-label="YukiHookDataChannel - class"><!--[--><!--]--> YukiHookDataChannel - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html" class="sidebar-item" aria-label="ChannelData - class"><!--[--><!--]--> ChannelData - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html" class="sidebar-item" aria-label="ModuleApplication - class"><!--[--><!--]--> ModuleApplication - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html" class="sidebar-item" aria-label="ModuleAppActivity - class"><!--[--><!--]--> ModuleAppActivity - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html" class="sidebar-item" aria-label="ModuleAppCompatActivity - class"><!--[--><!--]--> ModuleAppCompatActivity - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html" class="sidebar-item" aria-label="ModuleContextThemeWrapper - class"><!--[--><!--]--> ModuleContextThemeWrapper - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html" class="sidebar-item" aria-label="YukiModuleResources - class"><!--[--><!--]--> YukiModuleResources - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html" class="sidebar-item" aria-label="YukiResources - class"><!--[--><!--]--> YukiResources - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html" class="sidebar-item" aria-label="YukiResForwarder - class"><!--[--><!--]--> YukiResForwarder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html" class="sidebar-item" aria-label="YukiXposedEvent - object"><!--[--><!--]--> YukiXposedEvent - object <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html" class="sidebar-item" aria-label="ComponentTypeFactory - kt"><!--[--><!--]--> ComponentTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html" class="sidebar-item" aria-label="GraphicsTypeFactory - kt"><!--[--><!--]--> GraphicsTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html" class="sidebar-item" aria-label="ViewTypeFactory - kt"><!--[--><!--]--> ViewTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html" class="sidebar-item" aria-label="VariableTypeFactory - kt"><!--[--><!--]--> VariableTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html" class="sidebar-item" aria-label="DefinedTypeFactory - kt"><!--[--><!--]--> DefinedTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html" class="sidebar-item" aria-label="LoggerFactory - kt"><!--[--><!--]--> LoggerFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html" class="sidebar-item" aria-label="ReflectionFactory - kt"><!--[--><!--]--> ReflectionFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html" class="sidebar-item" aria-label="YukiHookFactory - kt"><!--[--><!--]--> YukiHookFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html" class="sidebar-item" aria-label="YukiBaseHooker - class"><!--[--><!--]--> YukiBaseHooker - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html" class="sidebar-item" aria-label="YukiMemberHookCreator - class"><!--[--><!--]--> YukiMemberHookCreator - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html" class="sidebar-item" aria-label="YukiResourcesHookCreator - class"><!--[--><!--]--> YukiResourcesHookCreator - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html" class="sidebar-item" aria-label="MethodFinder - class"><!--[--><!--]--> MethodFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html" class="sidebar-item" aria-label="ConstructorFinder - class"><!--[--><!--]--> ConstructorFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html" class="sidebar-item" aria-label="FieldFinder - class"><!--[--><!--]--> FieldFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html" class="sidebar-item" aria-label="DexClassFinder - class"><!--[--><!--]--> DexClassFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html" class="sidebar-item" aria-label="MemberRulesResult - class"><!--[--><!--]--> MemberRulesResult - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html" class="sidebar-item" aria-label="MemberRules - class"><!--[--><!--]--> MemberRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html" class="sidebar-item" aria-label="FieldRules - class"><!--[--><!--]--> FieldRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html" class="sidebar-item" aria-label="MethodRules - class"><!--[--><!--]--> MethodRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html" class="sidebar-item" aria-label="ConstructorRules - class"><!--[--><!--]--> ConstructorRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html" class="sidebar-item" aria-label="BaseFinder - class"><!--[--><!--]--> BaseFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html" class="sidebar-item" aria-label="CountRules - class"><!--[--><!--]--> CountRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html" class="sidebar-item" aria-label="ModifierRules - class"><!--[--><!--]--> ModifierRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html" class="sidebar-item" aria-label="NameRules - class"><!--[--><!--]--> NameRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html" class="sidebar-item" aria-label="HookClass - class"><!--[--><!--]--> HookClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html" class="sidebar-item" aria-label="VariousClass - class"><!--[--><!--]--> VariousClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html" class="sidebar-item" aria-label="CurrentClass - class"><!--[--><!--]--> CurrentClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html" class="sidebar-item" aria-label="GenericClass - class"><!--[--><!--]--> GenericClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html" class="sidebar-item" aria-label="HookResources - class"><!--[--><!--]--> HookResources - class <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item collapsible">特色功能  <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/special-features/reflection.html" class="sidebar-item" aria-label="字节码与反射扩展"><!--[--><!--]--> 字节码与反射扩展 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/logger.html" class="sidebar-item" aria-label="调试日志"><!--[--><!--]--> 调试日志 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/xposed-storage.html" class="sidebar-item" aria-label="Xposed 模块数据存储"><!--[--><!--]--> Xposed 模块数据存储 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/xposed-channel.html" class="sidebar-item" aria-label="Xposed 模块与宿主通讯桥"><!--[--><!--]--> Xposed 模块与宿主通讯桥 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/host-lifecycle.html" class="sidebar-item" aria-label="宿主生命周期扩展"><!--[--><!--]--> 宿主生命周期扩展 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html" class="sidebar-item" aria-label="宿主资源注入扩展"><!--[--><!--]--> 宿主资源注入扩展 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">关于 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/about/changelog.html" class="sidebar-item" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/future.html" class="sidebar-item" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/contacts.html" class="sidebar-item" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/about.html" class="sidebar-item" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="从-xposed-api-迁移" tabindex="-1"><a class="header-anchor" href="#从-xposed-api-迁移" aria-hidden="true">#</a> 从 Xposed API 迁移</h1><blockquote><p>若你熟悉 Xposed API你可以参考下方的相同点将自己的 API 快速迁移到 <code>YukiHookAPI</code></p></blockquote><h2 id="迁移-hook-入口点" tabindex="-1"><a class="header-anchor" href="#迁移-hook-入口点" aria-hidden="true">#</a> 迁移 Hook 入口点</h2><blockquote><p><code>XC_LoadPackage.LoadPackageParam</code> 迁移至 <code>PackageParam</code></p></blockquote><p><code>YukiHookAPI</code><code>PackageParam</code> 实现了 <code>lambda</code> 方法体 <code>this</code> 用法,在 <code>encase</code> 方法体内即可全局得到 <code>PackageParam</code> 对象。</p><blockquote><p>API 功能差异对比如下</p></blockquote><div class="code-group"><div class="code-group__nav"><ul class="code-group__ul"><li class="code-group__li"><button class="code-group__nav-tab code-group__nav-tab-active" ariapressed="true" ariaexpanded="true">Yuki Hook API</button></li><li class="code-group__li"><button class="code-group__nav-tab" ariapressed="false" ariaexpanded="false">Xposed API</button></li></ul></div><!--[--><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">onHook</span><span style="color:#ADBAC7;">() </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> encase {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> packageName</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的 ApplicationInfo</span></span>
<span class="line"><span style="color:#ADBAC7;"> appInfo</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到系统上下文对象</span></span>
<span class="line"><span style="color:#ADBAC7;"> systemContext</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到宿主 Application 生命周期</span></span>
<span class="line"><span style="color:#ADBAC7;"> appContext</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Hook 指定的 APP</span></span>
<span class="line"><span style="color:#ADBAC7;"> loadApp(name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test&quot;</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Class Hook</span></span>
<span class="line"><span style="color:#ADBAC7;"> findClass(</span><span style="color:#96D0FF;">&quot;com.demo.test.TestClass&quot;</span><span style="color:#ADBAC7;">).hook {</span></span>
<span class="line"><span style="color:#ADBAC7;"> injectMember {</span></span>
<span class="line"><span style="color:#ADBAC7;"> method {</span></span>
<span class="line"><span style="color:#ADBAC7;"> name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;test&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BooleanType</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Resources Hook (固定用法)</span></span>
<span class="line"><span style="color:#ADBAC7;"> resources().hook {</span></span>
<span class="line"><span style="color:#ADBAC7;"> injectResource {</span></span>
<span class="line"><span style="color:#ADBAC7;"> conditions {</span></span>
<span class="line"><span style="color:#ADBAC7;"> name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;ic_launcher&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> mipmap()</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> replaceToModuleResource(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.mipmap.ic_launcher)</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> lateinit </span><span style="color:#F47067;">var</span><span style="color:#ADBAC7;"> moduleResources</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XModuleResources</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">initZygote</span><span style="color:#ADBAC7;">(sparam</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">IXposedHookZygoteInit</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">StartupParam</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> moduleResources </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XModuleResources</span><span style="color:#ADBAC7;">.createInstance(sparam.modulePath, </span><span style="color:#6CB6FF;">null</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">handleLoadPackage</span><span style="color:#ADBAC7;">(lpparam</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XC_LoadPackage</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">LoadPackageParam</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> lpparam.packageName</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的 ApplicationInfo</span></span>
<span class="line"><span style="color:#ADBAC7;"> lpparam.applicationInfo</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到系统上下文对象</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在原生 Xposed API 中没有现成的调用方法,你需要自行反射 ActivityThread 来实现</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到宿主 Application 生命周期</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">AndroidAppHelper</span><span style="color:#ADBAC7;">.currentApplication()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Class Hook</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">if</span><span style="color:#ADBAC7;">(lpparam.packageName </span><span style="color:#F47067;">==</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XposedHelpers</span><span style="color:#ADBAC7;">.findAndHookMethod(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test.TestClass&quot;</span><span style="color:#ADBAC7;">, lpparam.classLoader,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;test&quot;</span><span style="color:#ADBAC7;">, Boolean::</span><span style="color:#6CB6FF;">class</span><span style="color:#ADBAC7;">.java,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">object</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XC_MethodHook</span><span style="color:#ADBAC7;">() {</span></span>
<span class="line"><span style="color:#ADBAC7;"> override fun afterHookedMethod(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">//</span><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">handleInitPackageResources</span><span style="color:#ADBAC7;">(resparam</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XC_InitPackageResources</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">InitPackageResourcesParam</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的包名</span></span>
<span class="line"><span style="color:#ADBAC7;"> resparam.packageName</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Resources Hook</span></span>
<span class="line"><span style="color:#ADBAC7;"> resparam.res.setReplacement(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;mipmap&quot;</span><span style="color:#ADBAC7;">,</span><span style="color:#96D0FF;">&quot;ic_launcher&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> moduleResources.fwd(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.mipmap.ic_launcher)</span></span>
<span class="line"><span style="color:#ADBAC7;"> )</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><!--]--></div><h2 id="迁移-hook-方法体" tabindex="-1"><a class="header-anchor" href="#迁移-hook-方法体" aria-hidden="true">#</a> 迁移 Hook 方法体</h2><blockquote><p><code>XC_MethodHook.MethodHookParam</code> 迁移至 <code>HookParam</code></p></blockquote><h3 id="before-after-hook" tabindex="-1"><a class="header-anchor" href="#before-after-hook" aria-hidden="true">#</a> Before/After Hook</h3><p><code>YukiHookAPI</code> 同样对 <code>HookParam</code> 实现了 <code>lambda</code> 方法体 <code>this</code> 用法,在 <code>beforeHook</code><code>afterHook</code> 等方法体内即可全局得到 <code>HookParam</code> 对象。</p><blockquote><p>API 功能差异对比如下</p></blockquote><div class="code-group"><div class="code-group__nav"><ul class="code-group__ul"><li class="code-group__li"><button class="code-group__nav-tab code-group__nav-tab-active" ariapressed="true" ariaexpanded="true">Yuki Hook API</button></li><li class="code-group__li"><button class="code-group__nav-tab" ariapressed="false" ariaexpanded="false">Xposed API</button></li></ul></div><!--[--><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">afterHook {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的实例</span></span>
<span class="line"><span style="color:#ADBAC7;"> instance</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的 Class 实例</span></span>
<span class="line"><span style="color:#ADBAC7;"> instanceClass</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到并 cast 当前 Hook 的实例为指定类型 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">T</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数数组</span></span>
<span class="line"><span style="color:#ADBAC7;"> args</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的第一位 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> args().first().cast</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">T</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的最后一位 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> args().last().cast</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">T</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的任意下标 T这里用 2 举例</span></span>
<span class="line"><span style="color:#ADBAC7;"> args(index </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">2</span><span style="color:#ADBAC7;">).cast</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">T</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置方法参数的任意下标,这里用 2 举例</span></span>
<span class="line"><span style="color:#ADBAC7;"> args(index </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">2</span><span style="color:#ADBAC7;">).set(...)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到返回值</span></span>
<span class="line"><span style="color:#ADBAC7;"> result</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到返回值并 cast 为 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> result</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">T</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 修改返回值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> result </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 删除返回值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> resultNull()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 向 Hook APP 抛出异常</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Throwable</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;Fatal&quot;</span><span style="color:#ADBAC7;">).throwToApp()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 执行未经 Hook 的原始方法并使用原始方法参数调用,泛型可略</span></span>
<span class="line"><span style="color:#ADBAC7;"> callOriginal</span><span style="color:#F47067;">&lt;</span><span style="color:#6CB6FF;">Any?</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 执行未经 Hook 的原始方法并自定义方法参数调用,泛型可略</span></span>
<span class="line"><span style="color:#ADBAC7;"> invokeOriginal</span><span style="color:#F47067;">&lt;</span><span style="color:#6CB6FF;">Any?</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">(...)</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">afterHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的实例</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.thisObject</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到当前 Hook 的 Class 实例</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.thisObject.javaClass</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到并 cast 当前 Hook 的实例为指定类型 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.thisObject </span><span style="color:#F47067;">as</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数数组</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.args</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的第一位 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.args[</span><span style="color:#6CB6FF;">0</span><span style="color:#ADBAC7;">] </span><span style="color:#F47067;">as</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的最后一位 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.args[param.args.lastIndex] </span><span style="color:#F47067;">as</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到方法参数的任意下标 T这里用 2 举例</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.args[</span><span style="color:#6CB6FF;">2</span><span style="color:#ADBAC7;">] </span><span style="color:#F47067;">as</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置方法参数的任意下标,这里用 2 举例</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.args[</span><span style="color:#6CB6FF;">2</span><span style="color:#ADBAC7;">] </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到返回值</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.result</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到返回值并 cast 为 T</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.result </span><span style="color:#F47067;">as</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 修改返回值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.result </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 删除返回值内容</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.result </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">null</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 向 Hook APP 抛出异常</span></span>
<span class="line"><span style="color:#ADBAC7;"> param.throwable </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Throwable</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">&quot;Fatal&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 执行未经 Hook 的原始方法</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">XposedBridge</span><span style="color:#ADBAC7;">.invokeOriginalMethod(param.method, param.thisObject, ...)</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><!--]--></div><h3 id="replace-hook" tabindex="-1"><a class="header-anchor" href="#replace-hook" aria-hidden="true">#</a> Replace Hook</h3><p><code>replaceHook</code> 方法比较特殊,<code>YukiHookAPI</code> 为它做出了多种形式以供选择。</p><blockquote><p>API 功能差异对比如下</p></blockquote><div class="code-group"><div class="code-group__nav"><ul class="code-group__ul"><li class="code-group__li"><button class="code-group__nav-tab code-group__nav-tab-active" ariapressed="true" ariaexpanded="true">Yuki Hook API</button></li><li class="code-group__li"><button class="code-group__nav-tab" ariapressed="false" ariaexpanded="false">Xposed API</button></li></ul></div><!--[--><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#768390;">/// 无返回值的方法 void</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;">replaceUnit {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 直接在这里实现被替换的逻辑</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">/// 有返回值的方法</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;">replaceAny {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里实现被替换的逻辑</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 需要返回方法对应的返回值,无需写 return只需将参数放到最后一位</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设这个方法的返回值是 Int我们只需要保证最后一位是我们需要的返回值即可</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">/// 有些方法我们只需替换其返回值,则有如下实现</span></span>
<span class="line"><span style="color:#768390;">/// 需要注意的是:直接替换返回值的方法传入的参数是固定不变的,若想实现动态替换返回值请使用上面的 replaceAny 方法体</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// 替换为你需要的返回值</span></span>
<span class="line"><span style="color:#ADBAC7;">replaceTo(...)</span></span>
<span class="line"><span style="color:#768390;">// 替换为 Boolean 类型的返回值</span></span>
<span class="line"><span style="color:#ADBAC7;">replaceToTrue()</span></span>
<span class="line"><span style="color:#768390;">// 拦截返回值</span></span>
<span class="line"><span style="color:#ADBAC7;">intercept()</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><div class="code-group-item" aria-selected="false"><!--[--><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#768390;">/// 无返回值的方法 void</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replaceHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">)</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">Any?</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 直接在这里实现被替换的逻辑</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">return</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">null</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">/// 有返回值的方法</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replaceHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">)</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">Int</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 在这里实现被替换的逻辑</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设这个方法的返回值是 Int</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">return</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span></span>
<span class="line"><span style="color:#ADBAC7;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">/// 有些方法我们只需替换其返回值,则有如下实现</span></span>
<span class="line"></span>
<span class="line"><span style="color:#768390;">// 替换为你需要的返回值</span></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replaceHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> ...</span></span>
<span class="line"><span style="color:#768390;">// 替换为 Boolean 类型的返回值</span></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replaceHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span></span>
<span class="line"><span style="color:#768390;">// 拦截返回值</span></span>
<span class="line"><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">replaceHookedMethod</span><span style="color:#ADBAC7;">(param</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MethodHookParam</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">null</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><!--]--></div><!--]--></div><h2 id="迁移其它功能" tabindex="-1"><a class="header-anchor" href="#迁移其它功能" aria-hidden="true">#</a> 迁移其它功能</h2><p><code>YukiHookAPI</code> 对 Xposed API 进行了完全重写,你可以参考 <a href="../api/home">API 文档</a> 以及 <a href="../api/special-features/reflection">特色功能</a> 来决定一些功能性的迁移和使用。</p></div><!--[--><!--]--></div><footer class="page-meta"><div class="meta-item edit-link"><a class="external-link meta-item-label" href="https://github.com/fankes/YukiHookAPI/edit/master/docs-source/src/zh-cn/guide/move-to-new-api.md" rel="noopener noreferrer" target="_blank" aria-label="在 Github 上编辑此页"><!--[--><!--]--> 在 Github 上编辑此页 <span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口中打开</span></span><!--[--><!--]--></a></div><div class="meta-item last-updated"><span class="meta-item-label">上次更新: </span><!----></div><div class="meta-item contributors"><span class="meta-item-label">贡献者: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: qzmmcn@163.com">fankesyooni</span><!----><!--]--><!--]--></span></div></footer><nav class="page-nav"><p class="inner"><span class="prev"><a href="/YukiHookAPI/zh-cn/guide/example.html" class="" aria-label="用法示例"><!--[--><!--]--> 用法示例 <!--[--><!--]--></a></span><!----></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/YukiHookAPI/assets/app.b731fed0.js" defer></script>
</body>
</html>