Files
YukiHookAPI/docs/zh-cn/api/special-features/host-inject.html

176 lines
99 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>宿主资源注入扩展 | Yuki Hook API</title><meta name="description" content="一个使用 Kotlin 构建的高效 Hook API 与 Xposed 模块解决方案">
<link rel="modulepreload" href="/YukiHookAPI/assets/app.3b272ad4.js"><link rel="modulepreload" href="/YukiHookAPI/assets/host-inject.html.9ce46c64.js"><link rel="modulepreload" href="/YukiHookAPI/assets/host-inject.html.0f378e76.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.1ad46905.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.962e6741.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.58270dd2.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.4de66a22.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.1027a0d9.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.20aa79de.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.3e784ab5.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.29a2e3ae.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.b279975a.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.73248b21.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.cad3998c.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.667f5444.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.ced3162e.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.830e8c66.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.4bf89a9b.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.bf02518e.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.d499d226.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.bb6da37d.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.ca5e9385.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.13983a8b.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.f91df01f.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.d9d91363.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.f6b9c2a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.bac55135.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.40ff2a93.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.78c116e0.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.290989e8.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.c60371a6.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.ba1743d2.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.09de8b71.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.ed4fa356.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.136055f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.ed51ab5d.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.eb335976.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.5dd91d68.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.909201c9.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.433c5f35.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.7e81cf29.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.a59ab5f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.850b6810.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.d35b34eb.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.bf4a811f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.2007a134.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.cf9b500d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.e217488d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.1f540f56.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.b68236f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.d78fe330.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.6555413e.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.ae54c997.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.641fcd58.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.5d4a2ffe.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.a490557a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.a450e578.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.9db30e67.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.83d09a1a.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.8f275c85.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.8e38ad6f.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.30e6d2df.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.9be50874.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.78c5f805.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.a386b8db.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.c8a74f24.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookPrefsBridge.html.35f775bb.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.78a55860.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.57f1d79e.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.bd3fae8e.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.a2b13a44.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.ba3bdd0b.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.5c25c0fb.js"><link rel="prefetch" href="/YukiHookAPI/assets/ExecutorType.html.3e98ffe1.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.34ee16d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ObjectRules.html.4b682129.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.f94281cf.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.153f4c39.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.7e0c1b2e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.2fa2ff0f.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.f8ba43ee.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.a499e892.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.b3e5d297.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.afeaf85e.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.d2d3ba9a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.0143ac70.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.52af0d44.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.61e05f29.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.cf48302c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.a93ee4ef.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.99eec744.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.46222277.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.70fb824b.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.8714bbf2.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.5ca343ea.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.343169a5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.0c7dadc7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelPriority.html.b460c4bc.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.98825c67.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.cb6ff63d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.87f19810.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.8137c32c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.0388bffd.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.07a0f5f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.57573770.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.2123b109.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.c4a0eeb4.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.e544662e.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.58e81c94.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookPrefsBridge.html.f76210ff.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.b37a852b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.229a46ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.a5dbb7a7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.282236a6.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.ce7337a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.9a97f14f.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.5d8e12f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.560fa41c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.90f23dcd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.65998e9e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.cc9ce9fb.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.1981f416.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.2ddf88b6.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.34c51103.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.764fecc3.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.e986a067.js"><link rel="prefetch" href="/YukiHookAPI/assets/ObjectRules.html.70d91cad.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelPriority.html.7d2ec81d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.c7161b83.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.c8edc48c.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.a071b3c6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.6c9a8df6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ExecutorType.html.7e3dd355.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.98cb78a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.4c0f53a9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.0879426b.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.e79843c3.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.c038a05a.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.73291e59.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.61143214.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.9dcfacf0.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.df0bf360.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.10738b5d.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.93cee19d.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.3dfea768.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.59c331e5.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.dba4c366.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.348f32e2.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.410814a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.6c501fdf.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.bb188a48.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.97c14e3d.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.dfbaea1e.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.4a295760.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.94567b05.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.0363708a.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.1909ac1b.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.85239d2b.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.669cc9be.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.2eaf3f92.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.303cfd77.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.0efca012.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.d551650f.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.88e71ea1.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.3097e34d.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.1d1d4c56.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.9e5911ff.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.923b91ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.f8e7bb9f.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.8c4e4614.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.1bf215bd.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.2009a302.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.0d3f1e1d.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.5f4b8d1d.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.9c8bdbca.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.715a90a2.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.30773b32.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.21899dc3.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.3ede471d.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.d80fdfc5.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.0a530e75.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.bc60f4ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.06eac57d.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.8ea4b254.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.f5fb4616.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.c9c88586.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.a2bd3270.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.1a144ef8.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.2ea25dad.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.9b13736d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.7a1c57ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.7fd8c02b.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.6c20ef87.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.8e6da0ea.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.29591d3c.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.b069e7df.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.cadaf91a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.98c564f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.acae7b44.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.96d132ed.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.1d83dc7b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.2dc166ba.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.441bc158.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.095fd1f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.7db63111.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.531a7a74.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.ca21ff6d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookPrefsBridge.html.282437a0.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.d877638d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.d39ecb78.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.445e16f7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.458683d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.c606bb23.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.4ca8d767.js"><link rel="prefetch" href="/YukiHookAPI/assets/ExecutorType.html.9e3dca37.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.bd0903d1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.473de27d.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.2f354790.js"><link rel="prefetch" href="/YukiHookAPI/assets/ObjectRules.html.1f8f88ca.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.307ffe35.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.1681a004.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.79e3d63e.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.0f9c0cca.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.16fd8dd5.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.b2505ecd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.fc2ad4e3.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.c3bb0967.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.23323e86.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.db980731.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.a1d28b5c.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.e54cf5c9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.5e269e5e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.232a29b3.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.81f71186.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.05fe7b9b.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.206d757e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.734acb3d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.e58af7e3.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.9bbb784c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.30422752.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.300c46c1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.6e955d3a.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.eb268b1d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.2b2ce882.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelPriority.html.3d7bce31.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.fd5e0d90.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.6674edd5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.d091a914.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.e8713bd0.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.8709cb52.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.06f290f4.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.c4852ac1.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.7aace439.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.a1b4038c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.ffba31a7.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.7143547b.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookPrefsBridge.html.1c590a52.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.9f68c0b6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.7280da1d.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.23df0253.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.430f5cde.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.292f6824.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.ef787e78.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.cc4deb09.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.71cfb78c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.4f80e169.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.2b158bc8.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.3cf9b1a3.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.fcd6c44b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.12b1ca27.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.d9b465ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.a1e0dc26.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.9a6ba264.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.de9694f8.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.47b4c1f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ObjectRules.html.62f924d7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelPriority.html.6c311d8b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.61b2803e.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.53ba4a7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.85d82241.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.cce346f5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ExecutorType.html.5fb6e4f8.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.f441280a.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.53220501.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.0bd92fbf.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.bb0739c2.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.fc11217e.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="" 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="router-link-active" 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/api/special-features/host-inject.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.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="" 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="router-link-active" 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/api/special-features/host-inject.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.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 collapsible">入门 <span class="right arrow"></span></p><ul style="display:none;" 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 href="/YukiHookAPI/zh-cn/guide/move-to-new-api.html" class="sidebar-item" aria-label="从 Xposed API 迁移"><!--[--><!--]--> 从 Xposed API 迁移 <!--[--><!--]--></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/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 active collapsible">API 文档 <span class="down arrow"></span></p><ul style="" 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/YukiHookPrefsBridge.html" class="sidebar-item" aria-label="YukiHookPrefsBridge - class"><!--[--><!--]--> YukiHookPrefsBridge - 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/channel/priority/ChannelPriority.html" class="sidebar-item" aria-label="ChannelPriority - class"><!--[--><!--]--> ChannelPriority - 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/parasitic/reference/ModuleClassLoader.html" class="sidebar-item" aria-label="ModuleClassLoader - class"><!--[--><!--]--> ModuleClassLoader - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/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/resources/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/resources/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/api/compat/type/ExecutorType.html" class="sidebar-item" aria-label="ExecutorType - class"><!--[--><!--]--> ExecutorType - 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/core/finder/base/rules/ObjectRules.html" class="sidebar-item" aria-label="ObjectRules - class"><!--[--><!--]--> ObjectRules - 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 active collapsible">特色功能  <span class="down arrow"></span></p><ul style="" 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 aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="宿主资源注入扩展"><!--[--><!--]--> 宿主资源注入扩展 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html#注入模块资源-resources" class="router-link-active router-link-exact-active sidebar-item" aria-label="注入模块资源 (Resources)"><!--[--><!--]--> 注入模块资源 (Resources) <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html#注册模块-activity" class="router-link-active router-link-exact-active sidebar-item" aria-label="注册模块 Activity"><!--[--><!--]--> 注册模块 Activity <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html#创建-contextthemewrapper-代理" class="router-link-active router-link-exact-active sidebar-item" aria-label="创建 ContextThemeWrapper 代理"><!--[--><!--]--> 创建 ContextThemeWrapper 代理 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html#classloader-冲突问题" class="router-link-active router-link-exact-active sidebar-item" aria-label="ClassLoader 冲突问题"><!--[--><!--]--> ClassLoader 冲突问题 <!--[--><!--]--></a><!----></li><!--]--></ul></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="宿主资源注入扩展" tabindex="-1"><a class="header-anchor" href="#宿主资源注入扩展" aria-hidden="true">#</a> 宿主资源注入扩展</h1><blockquote><p>这是一个将模块资源、<code>Activity</code> 组件以及 <code>Context</code> 主题注入到宿主的扩展功能。</p></blockquote><p>在使用以下功能之前,为防止资源 ID 互相冲突,你需要在当前 Xposed 模块项目的 <code>build.gradle</code> 中修改资源 ID。</p><ul><li>Kotlin Gradle DSL</li></ul><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">android {</span></span>
<span class="line"><span style="color:#ADBAC7;"> androidResources.additionalParameters(</span><span style="color:#96D0FF;">&quot;--allow-reserved-package-id&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;--package-id&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&quot;0x64&quot;</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></div><ul><li>Groovy</li></ul><div class="language-groovy ext-groovy line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">android {</span></span>
<span class="line"><span style="color:#ADBAC7;"> aaptOptions</span><span style="color:#F47067;">.</span><span style="color:#ADBAC7;">additionalParameters </span><span style="color:#96D0FF;">&#39;--allow-reserved-package-id&#39;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&#39;--package-id&#39;</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">&#39;0x64&#39;</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></div><div class="custom-container warning"><p class="custom-container-title">注意</p><p>提供的示例资源 ID 值仅供参考,不可使用 <strong>0x7f</strong>,默认为 <strong>0x64</strong>,为了防止当前宿主存在多个 Xposed 模块,建议自定义你自己的资源 ID。</p></div><h2 id="注入模块资源-resources" tabindex="-1"><a class="header-anchor" href="#注入模块资源-resources" aria-hidden="true">#</a> 注入模块资源 (Resources)</h2><p>在 Hook 宿主之后,我们可以直接在 Hooker 中得到的 <code>Context</code> 注入当前模块资源。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><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;onCreate&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BundleClass</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;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">().</span><span style="color:#6CB6FF;">also</span><span style="color:#ADBAC7;"> {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案1&gt; 通过 Context 注入模块资源</span></span>
<span class="line"><span style="color:#ADBAC7;"> it.injectModuleAppResources()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案2&gt; 直接得到宿主 Resources 注入模块资源</span></span>
<span class="line"><span style="color:#ADBAC7;"> it.resources.injectModuleAppResources()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 直接使用模块资源 ID</span></span>
<span class="line"><span style="color:#ADBAC7;"> it.getString(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.id.app_name)</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></div><p>你还可以直接在 <code>AppLifecycle</code> 中注入当前模块资源。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">onAppLifecycle {</span></span>
<span class="line"><span style="color:#ADBAC7;"> onCreate {</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;">// 类似 ImageView.setImageResource 这样的方法在 Activity 中需要单独注入</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案1&gt; 通过 Context 注入模块资源</span></span>
<span class="line"><span style="color:#ADBAC7;"> injectModuleAppResources()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案2&gt; 直接得到宿主 Resources 注入模块资源</span></span>
<span class="line"><span style="color:#ADBAC7;"> resources.injectModuleAppResources()</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 直接使用模块资源 ID</span></span>
<span class="line"><span style="color:#ADBAC7;"> getString(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.id.app_name)</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></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory#context-resources-injectmoduleappresources-ext-method">Context+Resources.injectModuleAppResources</a> 方法。</p></div><h2 id="注册模块-activity" tabindex="-1"><a class="header-anchor" href="#注册模块-activity" aria-hidden="true">#</a> 注册模块 Activity</h2><p>在 Android 系统中所有应用的 <code>Activity</code> 启动时,都需要在 <code>AndroidManifest.xml</code> 中进行注册,在 Hook 过程中,如果我们想通过宿主来直接启动模块中未注册的 <code>Activity</code> 要怎么做呢?</p><p>在 Hook 宿主之后,我们可以直接在 Hooker 中得到的 <code>Context</code> 注册当前模块的 <code>Activity</code> 代理。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><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;onCreate&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BundleClass</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;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">().registerModuleAppActivities()</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></div><p>你还可以直接在 <code>AppLifecycle</code> 中注册当前模块的 <code>Activity</code> 代理。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">onAppLifecycle {</span></span>
<span class="line"><span style="color:#ADBAC7;"> onCreate {</span></span>
<span class="line"><span style="color:#ADBAC7;"> registerModuleAppActivities()</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></div><p>如果没有填写 <code>proxy</code> 参数API 将会根据当前 <code>Context</code> 自动获取当前宿主的启动入口 <code>Activity</code> 进行代理。</p><p>通常情况下,它是有效的,但是以上情况在一些 APP 中会失效,例如一些 <code>Activity</code> 会在注册清单上加入启动参数,那么我们就需要使用另一种解决方案。</p><p>若未注册的 <code>Activity</code> 不能被正确启动,我们可以手动拿到宿主的 <code>AndroidManifest.xml</code> 进行分析,来得到一个注册过的 <code>Activity</code> 标签,获取其中的 <code>name</code></p><p>你需要选择一个当前宿主可能用不到的、不需要的 <code>Activity</code> 作为一个“傀儡”将其进行代理,通常是有效的。</p><p>比如我们已经找到了能够被代理的合适 <code>Activity</code></p><blockquote><p>示例如下</p></blockquote><div class="language-xml ext-xml line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">&lt;</span><span style="color:#8DDB8C;">activity</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">android:name</span><span style="color:#ADBAC7;">=</span><span style="color:#96D0FF;">&quot;com.demo.test.activity.TestActivity&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> ...&gt;</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></div><p>根据其中的 <code>name</code>,我们只需要在方法中加入这个参数进行注册即可。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">registerModuleAppActivities(proxy </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test.activity.TestActivity&quot;</span><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></div><p>另一种情况,如果你对宿主的类编写了一个 <code>stub</code>,那么你可以直接通过 <code>Class</code> 对象来进行注册。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#ADBAC7;">registerModuleAppActivities(TestActivity::</span><span style="color:#6CB6FF;">class</span><span style="color:#ADBAC7;">.java)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>注册完成后,请将你需要使用宿主启动的模块中的 <code>Activity</code> 继承于 <code>ModuleAppActivity</code><code>ModuleAppCompatActivity</code></p><p>这些 <code>Activity</code> 现在无需注册即可无缝存活于宿主中。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">HostTestActivity</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">ModuleAppActivity</span><span style="color:#ADBAC7;">() {</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><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;">onCreate</span><span style="color:#ADBAC7;">(savedInstanceState</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Bundle?</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">super</span><span style="color:#ADBAC7;">.onCreate(savedInstanceState)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 模块资源已被自动注入,可以直接使用 xml 装载布局</span></span>
<span class="line"><span style="color:#ADBAC7;"> setContentView(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.layout.activity_main)</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></div><p>若你需要继承于 <code>ModuleAppCompatActivity</code>,你需要手动设置 AppCompat 主题。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">HostTestActivity</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">ModuleAppCompatActivity</span><span style="color:#ADBAC7;">() {</span></span>
<span class="line"></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;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> moduleTheme get() </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">style</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">Theme_AppCompat</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><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;">onCreate</span><span style="color:#ADBAC7;">(savedInstanceState</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Bundle?</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">super</span><span style="color:#ADBAC7;">.onCreate(savedInstanceState)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 模块资源已被自动注入,可以直接使用 xml 装载布局</span></span>
<span class="line"><span style="color:#ADBAC7;"> setContentView(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.layout.activity_main)</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></div><p>以上步骤全部完成后,你就可以在 (Xposed) 宿主环境任意存在 <code>Context</code> 的地方愉快地调用 <code>startActivity</code> 了。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> context</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Context</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> ... </span><span style="color:#768390;">// 假设这就是你的 Context</span></span>
<span class="line"><span style="color:#ADBAC7;">context.startActivity(context, HostTestActivity::</span><span style="color:#6CB6FF;">class</span><span style="color:#ADBAC7;">.java)</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></div><p>上面我们在 <code>registerModuleAppActivities</code> 方法中设置的 <code>proxy</code> 参数为默认的全局代理 <code>Activity</code></p><p>如果你需要指定某个代理的 <code>Activity</code> 使用另外的宿主 <code>Activity</code> 进行代理,你可以参考如下方法。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">HostTestActivity</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">ModuleAppActivity</span><span style="color:#ADBAC7;">() {</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 指定一个另外的代理 Activity 类名,其也必须存在于宿主的 AndroidManifest 中</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">override</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> proxyClassName get() </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.test.activity.OtherActivity&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#ADBAC7;"> </span><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;">onCreate</span><span style="color:#ADBAC7;">(savedInstanceState</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Bundle?</span><span style="color:#ADBAC7;">) {</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">super</span><span style="color:#ADBAC7;">.onCreate(savedInstanceState)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 模块资源已被自动注入,可以直接使用 xml 装载布局</span></span>
<span class="line"><span style="color:#ADBAC7;"> setContentView(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.layout.activity_main)</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></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory#context-registermoduleappactivities-ext-method">Context.registerModuleAppActivities</a> 方法。</p></div><h2 id="创建-contextthemewrapper-代理" tabindex="-1"><a class="header-anchor" href="#创建-contextthemewrapper-代理" aria-hidden="true">#</a> 创建 ContextThemeWrapper 代理</h2><p>有时候,我们需要使用 <code>MaterialAlertDialogBuilder</code> 来美化自己在宿主中的对话框,但是拿不到 AppCompat 主题就无法创建。</p><ul><li>会得到如下异常</li></ul><div class="language-text ext-text"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#adbac7;">The style on this component requires your app theme to be Theme.AppCompat (or a descendant).</span></span>
<span class="line"><span style="color:#adbac7;"></span></span></code></pre></div><p>这时,我们想在宿主被 Hook 的当前 <code>Activity</code> 中使用 <code>MaterialAlertDialogBuilder</code> 来创建对话框,就可以有如下方法。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><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;onCreate&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BundleClass</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;">// 使用 applyModuleTheme 创建一个当前模块中的主题资源</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> appCompatContext </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">().applyModuleTheme(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">style</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">Theme_AppCompat</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 直接使用这个包装了模块主题后的 Context 创建对话框</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MaterialAlertDialogBuilder</span><span style="color:#ADBAC7;">(appCompatContext)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setTitle(</span><span style="color:#96D0FF;">&quot;AppCompat 主题对话框&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setMessage(</span><span style="color:#96D0FF;">&quot;我是一个在宿主中显示的 AppCompat 主题对话框。&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setPositiveButton(</span><span style="color:#96D0FF;">&quot;确定&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">null</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .show()</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></div><p>你还可以对当前 <code>Context</code> 通过 <code>uiMode</code> 设置原生的夜间模式和日间模式,至少需要 Android 10 及以上系统版本支持且当前主题包含夜间模式相关元素。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><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;onCreate&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BundleClass</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 style="color:#F47067;">var</span><span style="color:#ADBAC7;"> appCompatContext</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">ModuleContextThemeWrapper</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案1&gt; 直接得到 Configuration 对象进行设置</span></span>
<span class="line"><span style="color:#ADBAC7;"> appCompatContext </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">()</span></span>
<span class="line"><span style="color:#ADBAC7;"> .applyModuleTheme(</span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">style</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">Theme_AppCompat</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .applyConfiguration { uiMode </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Configuration</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">UI_MODE_NIGHT_YES</span><span style="color:#ADBAC7;"> }</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// &lt;方案2&gt; 创建一个新的 Configuration 对象</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 此方案会破坏当前宿主中原有的字体缩放大小等设置,你需要手动重新传递 densityDpi 等参数</span></span>
<span class="line"><span style="color:#ADBAC7;"> appCompatContext </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;">&lt;</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">&gt;</span><span style="color:#ADBAC7;">().applyModuleTheme(</span></span>
<span class="line"><span style="color:#ADBAC7;"> theme </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">R</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">style</span><span style="color:#F47067;">.</span><span style="color:#F69D50;">Theme_AppCompat</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> configuration </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Configuration</span><span style="color:#ADBAC7;">().</span><span style="color:#6CB6FF;">apply</span><span style="color:#ADBAC7;"> { uiMode </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Configuration</span><span style="color:#ADBAC7;">.</span><span style="color:#F69D50;">UI_MODE_NIGHT_YES</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 style="color:#768390;">// 直接使用这个包装了模块主题后的 Context 创建对话框</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MaterialAlertDialogBuilder</span><span style="color:#ADBAC7;">(appCompatContext)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setTitle(</span><span style="color:#96D0FF;">&quot;AppCompat 主题对话框&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setMessage(</span><span style="color:#96D0FF;">&quot;我是一个在宿主中显示的 AppCompat 主题对话框。&quot;</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .setPositiveButton(</span><span style="color:#96D0FF;">&quot;确定&quot;</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">null</span><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#ADBAC7;"> .show()</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></div><p>这样,我们就可以在宿主中非常简单地使用 <code>MaterialAlertDialogBuilder</code> 创建对话框了。</p><div class="custom-container warning"><p class="custom-container-title">可能存在的问题</p><p>由于一些 APP 自身使用的 <strong>androidx</strong> 依赖库或自定义主题可能会对当前 <strong>MaterialAlertDialog</strong> 实际样式造成干扰,例如对话框的按钮样式,这种情况你可以参考 <strong>模块 Demo</strong><a href="https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt" target="_blank" rel="noopener noreferrer">这里的示例代码<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> 来修复这个问题。</p><p>某些 APP 在创建时可能会发生 <strong>ClassCastException</strong> 异常,请手动指定新的 <strong>Configuration</strong> 实例来进行修复。</p></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory#context-applymoduletheme-ext-method">Context.applyModuleTheme</a> 方法。</p></div><h2 id="classloader-冲突问题" tabindex="-1"><a class="header-anchor" href="#classloader-冲突问题" aria-hidden="true">#</a> ClassLoader 冲突问题</h2><p>本页面所介绍的内容都是直接将模块的资源注入到了宿主,由于模块与宿主不在同一个进程 (同一个 <strong>APK</strong>) 中,其可能存在 <code>ClassLoader</code> 冲突的问题。</p><p>若发生了 <code>ClassLoader</code> 冲突,你可能会遇到 <code>ClassCastException</code> 异常。</p><p><code>YukiHookAPI</code> 默认已解决了可能冲突的问题,其余情况需要你自行配置排除列表。</p><p>排除列表决定了这些 <code>Class</code> 需要被模块还是宿主的 <code>ClassLoader</code> 进行装载。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#768390;">// 排除属于宿主的 Class 类名</span></span>
<span class="line"><span style="color:#768390;">// 它们将会被宿主的 ClassLoader 装载</span></span>
<span class="line"><span style="color:#768390;">// ❗以下内容仅供演示,不要直接使用,请以你的实际情况为准</span></span>
<span class="line"><span style="color:#F69D50;">ModuleClassLoader</span><span style="color:#ADBAC7;">.excludeHostClasses(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;androidx.core.app.ActivityCompat&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.Test&quot;</span></span>
<span class="line"><span style="color:#ADBAC7;">)</span></span>
<span class="line"><span style="color:#768390;">// 排除属于模块的 Class 类名</span></span>
<span class="line"><span style="color:#768390;">// 它们将会被模块 (当前 Hook 进程) 的 ClassLoader 装载</span></span>
<span class="line"><span style="color:#768390;">// ❗以下内容仅供演示,不要直接使用,请以你的实际情况为准</span></span>
<span class="line"><span style="color:#F69D50;">ModuleClassLoader</span><span style="color:#ADBAC7;">.excludeModuleClasses(</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.entry.HookEntry&quot;</span><span style="color:#ADBAC7;">,</span></span>
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">&quot;com.demo.controller.ModuleController&quot;</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></div><p>你需要在向宿主注入模块资源的方法执行之前进行设置才能生效。</p><p>此功能仅为解决宿主与模块中可能存在<strong>同名的 <code>Class</code></strong> 情况,例如共用的 SDK 以及依赖,在大部分情况下你不会用到此功能。</p><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>更多功能请参考 <a href="../public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader">ModuleClassLoader</a></p></div></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/api/special-features/host-inject.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/api/special-features/host-lifecycle.html" class="" aria-label="宿主生命周期扩展"><!--[--><!--]--> 宿主生命周期扩展 <!--[--><!--]--></a></span><!----></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script type="module" src="/YukiHookAPI/assets/app.3b272ad4.js" defer></script>
</body>
</html>