mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 02:35:40 +08:00
387 lines
169 KiB
HTML
387 lines
169 KiB
HTML
<!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>API 异常处理 | Yuki Hook API</title><meta name="description" content="一个使用 Kotlin 重构的轻量、高效、稳定的 Xposed Hook API">
|
||
<link rel="modulepreload" href="/YukiHookAPI/assets/app.78a03919.js"><link rel="modulepreload" href="/YukiHookAPI/assets/api-exception.html.685f08ac.js"><link rel="modulepreload" href="/YukiHookAPI/assets/api-exception.html.ac2a5859.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.1b76ac9e.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.872aa7a1.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.6cc32291.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.7638d3a2.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.dc4f16b3.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.5dc8225c.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.94bd226b.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.f6b9c2a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.47c311e0.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.72ebad13.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.c794f69e.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.15e04e11.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.cd65195d.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.a036bda1.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.f6f658d0.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.7104405e.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.78f39fa5.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.e309979a.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.ed4fa356.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.c0115524.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.9b79523f.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.3df7cacf.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.2cf8d6de.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.cad3998c.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.f5361b1b.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.0a59e2e0.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.683a5429.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.557dcdf1.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.13ac887a.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.4d8cac8a.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.1352f5de.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.508c5312.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.eacb83f2.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.d499d226.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.8e7a6aa7.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.412bbdd6.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.558aa5e4.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.ff24950f.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.96712a39.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.c35a7041.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.77802245.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.09c0b222.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.75871bba.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.2e612549.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.b798a8f8.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.5fd9a913.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.77b2a461.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.476693ca.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.56391530.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.16c29272.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.7b666428.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.52e59cf0.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.2486cf29.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.bd237fa4.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.d3b181da.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.8aaa9934.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.7c031771.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.61db5860.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.1a1820b0.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.99eec744.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.b19d4ad2.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.7a64d58c.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.cf9b500d.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.641fcd58.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.3a0e1ac6.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.486aa6ea.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.4f07fd98.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.7c81aa10.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.37dcaec4.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.46168b72.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.b68236f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.a7379f4b.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.64f654a6.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.7f1e9f81.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.f98d02d2.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.37aae471.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.5af05d7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.a3936b7c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.7da3eef4.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.8137c32c.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.d4c9dbd1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.57573770.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.75c012dd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.e0f278fe.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.b37a852b.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.0026a7b8.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.bfb4e259.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.612b6202.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.ba3bdd0b.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.550d3346.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.a386b8db.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.74e08a45.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.5eb62ec3.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.78a55860.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.a5dbb7a7.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.5d8e12f0.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.0c13dc47.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.4410e26c.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.97f89f93.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.e5c5fb30.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.4e23df75.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.afb6fb92.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.560fa41c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.f8f818f6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.2ddf88b6.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.dfd7c23c.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.764fecc3.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.8f275c85.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.78c5f805.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.7de4f560.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.25713065.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.03ce70ab.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.d8e27a7f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.0dadd8db.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.7b0a4824.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.a93ee4ef.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.194718a1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.0388bffd.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.d3cf97f9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.0c7dadc7.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.2d5ab94d.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.c36dff17.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.00ac96fb.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.d62bae6c.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.9b04521f.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.a071b3c6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.c10f9770.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.90d3c4e6.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.a20d9206.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.0879426b.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.2639d392.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.f7582dc2.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.47e512e4.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.09451ff7.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.dd9e40e9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.229a46ac.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.f8d7dd83.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.6858f0d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.b3e5d297.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.146b27be.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.e79843c3.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.58e81c94.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.c038a05a.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.55f39751.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.aa16a704.js"><link rel="prefetch" href="/YukiHookAPI/assets/index.html.af6eb268.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.c133ab9b.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.d07db195.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.1ad9a5aa.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.303f1d0e.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.c1359b2e.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.b9a6cf60.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-exception.html.4b8e3328.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.863beb53.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.c259bc54.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.978bb3ec.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.e3dc2bd2.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.563740c2.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.5b23b1c2.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.967e9c2d.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.7e7afe54.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.27b0786f.js"><link rel="prefetch" href="/YukiHookAPI/assets/about.html.273cd4eb.js"><link rel="prefetch" href="/YukiHookAPI/assets/changelog.html.ffbbfc9e.js"><link rel="prefetch" href="/YukiHookAPI/assets/contacts.html.2d37cab0.js"><link rel="prefetch" href="/YukiHookAPI/assets/future.html.817c4c65.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.7fb9c6cc.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-example.html.41b8aaea.js"><link rel="prefetch" href="/YukiHookAPI/assets/api-using.html.ec750707.js"><link rel="prefetch" href="/YukiHookAPI/assets/r8-proguard.html.e2ab75b1.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-using.html.8ca512fb.js"><link rel="prefetch" href="/YukiHookAPI/assets/example.html.996d9c27.js"><link rel="prefetch" href="/YukiHookAPI/assets/home.html.35e281a4.js"><link rel="prefetch" href="/YukiHookAPI/assets/knowledge.html.0410d34a.js"><link rel="prefetch" href="/YukiHookAPI/assets/move-to-new-api.html.da4424ff.js"><link rel="prefetch" href="/YukiHookAPI/assets/quick-start.html.5098e63e.js"><link rel="prefetch" href="/YukiHookAPI/assets/yukihookapi-projectbuilder.html.3b0cc666.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.7f7ea9aa.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.6ee5eca5.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.89115264.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.f2373edb.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.59d9b3c6.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.120ea003.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-inject.html.a718966f.js"><link rel="prefetch" href="/YukiHookAPI/assets/host-lifecycle.html.f6c41b98.js"><link rel="prefetch" href="/YukiHookAPI/assets/logger.html.30a1a599.js"><link rel="prefetch" href="/YukiHookAPI/assets/reflection.html.48572fb7.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-channel.html.ebba9a7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/xposed-storage.html.7fea19bd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.0f96fe6a.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookAPI.html.cde335a8.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.59f349bb.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.1f69e0e5.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.402e188e.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.29fd2556.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.5c38bcf7.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.0871d0a5.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.ff967da5.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.4e126d87.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.a5179da2.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.b068e66b.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.7ed53e27.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.2109b841.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.a7965e53.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.be8ed875.js"><link rel="prefetch" href="/YukiHookAPI/assets/InjectYukiHookWithXposed.html.7f87d690.js"><link rel="prefetch" href="/YukiHookAPI/assets/CurrentClass.html.104e3dce.js"><link rel="prefetch" href="/YukiHookAPI/assets/GenericClass.html.947207e7.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookClass.html.7b78d521.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookResources.html.a0842acc.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariousClass.html.e12a7b7f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiMemberHookCreator.html.d335b3bc.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResourcesHookCreator.html.242ec366.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiBaseHooker.html.76048498.js"><link rel="prefetch" href="/YukiHookAPI/assets/ReflectionFactory.html.2e89663c.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookFactory.html.ec49273c.js"><link rel="prefetch" href="/YukiHookAPI/assets/LoggerFactory.html.95aa8829.js"><link rel="prefetch" href="/YukiHookAPI/assets/HookParam.html.5f093e72.js"><link rel="prefetch" href="/YukiHookAPI/assets/PackageParam.html.082516eb.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.ec893628.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.f253fa89.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.464cfacd.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.cfbed096.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.d5c2bdd9.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.8752b893.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.71b435d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.c8619018.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.b262452e.js"><link rel="prefetch" href="/YukiHookAPI/assets/ComponentTypeFactory.html.667c7b6c.js"><link rel="prefetch" href="/YukiHookAPI/assets/GraphicsTypeFactory.html.1254afef.js"><link rel="prefetch" href="/YukiHookAPI/assets/ViewTypeFactory.html.0d421cc1.js"><link rel="prefetch" href="/YukiHookAPI/assets/DefinedTypeFactory.html.1cb6685e.js"><link rel="prefetch" href="/YukiHookAPI/assets/VariableTypeFactory.html.7fa34ed5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleApplication.html.c99895d9.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookDataChannel.html.b3a7cf7d.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiHookModulePrefs.html.093fd818.js"><link rel="prefetch" href="/YukiHookAPI/assets/IYukiHookXposedInit.html.0f35f82d.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.260adf68.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.8284d7bd.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.dc158543.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.4a02dfa9.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.96ce6914.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.47cbdbf5.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.1ccb7b67.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.6cab8178.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.37d130d1.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.60e568fc.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.a9a40ac4.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.4f65ef52.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.2af27a45.js"><link rel="prefetch" href="/YukiHookAPI/assets/BaseFinder.html.636f4434.js"><link rel="prefetch" href="/YukiHookAPI/assets/DexClassFinder.html.8a9cf648.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorFinder.html.b4db7f36.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldFinder.html.e2805500.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodFinder.html.4e337525.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiModuleResources.html.3db5459e.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResForwarder.html.bab3051f.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiResources.html.daf991dd.js"><link rel="prefetch" href="/YukiHookAPI/assets/YukiXposedEvent.html.4c122771.js"><link rel="prefetch" href="/YukiHookAPI/assets/ChannelData.html.41a6a4cf.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleClassLoader.html.03279636.js"><link rel="prefetch" href="/YukiHookAPI/assets/PrefsData.html.3dd00955.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModulePreferenceFragment.html.2a595ede.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.78332090.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.adfe4357.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.1eff8a9a.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.bc807361.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.6d3697f3.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.0b112842.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.c5c14951.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.36666473.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.72c129ec.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.313370d6.js"><link rel="prefetch" href="/YukiHookAPI/assets/CountRules.html.98229779.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModifierRules.html.97175de2.js"><link rel="prefetch" href="/YukiHookAPI/assets/NameRules.html.e0152e52.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppActivity.html.2b74e7fc.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleAppCompatActivity.html.37d22af5.js"><link rel="prefetch" href="/YukiHookAPI/assets/ModuleContextThemeWrapper.html.108cf254.js"><link rel="prefetch" href="/YukiHookAPI/assets/ConstructorRules.html.7dcdd8a6.js"><link rel="prefetch" href="/YukiHookAPI/assets/FieldRules.html.f4c39bb6.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRules.html.2a5fecc4.js"><link rel="prefetch" href="/YukiHookAPI/assets/MethodRules.html.1a83ecbb.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.2655e3a2.js"><link rel="prefetch" href="/YukiHookAPI/assets/MemberRulesResult.html.915ef063.js"><link rel="prefetch" href="/YukiHookAPI/assets/404.html.ad9261ab.js">
|
||
<link rel="stylesheet" href="/YukiHookAPI/assets/style.e115708c.css">
|
||
</head>
|
||
<body>
|
||
<div id="app"><!--[--><div class="theme-container hidden-anchor-page"><!--[--><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="router-link-active" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/xposed-using" class="" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-using" class="" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/r8-proguard" class="" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>工具</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder" class="" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>API 文档</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/home" class="" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI" class="" aria-label="Public API"><!--[--><!--]--> Public API <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/special-features/reflection" class="" aria-label="特色功能"><!--[--><!--]--> 特色功能 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>关于</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/changelog" class="" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/future" class="" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/about" class="" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/YukiHookAPI/en/config/api-exception.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/config/api-exception.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="router-link-active" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/xposed-using" class="" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/api-using" class="" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/config/r8-proguard" class="" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>工具</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder" class="" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>API 文档</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/home" class="" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI" class="" aria-label="Public API"><!--[--><!--]--> Public API <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/api/special-features/reflection" class="" aria-label="特色功能"><!--[--><!--]--> 特色功能 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="navbar-dropdown-item"><!--[--><h4 class="navbar-dropdown-subtitle"><span>关于</span></h4><ul class="navbar-dropdown-subitem-wrapper"><!--[--><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/changelog" class="" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/future" class="" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></li><li class="navbar-dropdown-subitem"><a href="/YukiHookAPI/zh-cn/about/about" class="" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul></div></div><div class="navbar-item"><a href="/YukiHookAPI/zh-cn/about/contacts" class="" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">简体中文 (CN)</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a href="/YukiHookAPI/en/config/api-exception.html" class="" aria-label="English"><!--[--><!--]--> English <!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a aria-current="page" href="/YukiHookAPI/zh-cn/config/api-exception.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 active collapsible">配置 <span class="down arrow"></span></p><ul style="" 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 aria-current="page" href="/YukiHookAPI/zh-cn/config/api-exception.html" class="router-link-active router-link-exact-active router-link-active sidebar-item active" aria-label="API 异常处理"><!--[--><!--]--> API 异常处理 <!--[--><!--]--></a><ul style="" class="sidebar-item-children"><!--[--><li><a aria-current="page" href="/YukiHookAPI/zh-cn/config/api-exception.html#非阻断异常" class="router-link-active router-link-exact-active sidebar-item" aria-label="非阻断异常"><!--[--><!--]--> 非阻断异常 <!--[--><!--]--></a><!----></li><li><a aria-current="page" href="/YukiHookAPI/zh-cn/config/api-exception.html#阻断异常" class="router-link-active router-link-exact-active sidebar-item" aria-label="阻断异常"><!--[--><!--]--> 阻断异常 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><a href="/YukiHookAPI/zh-cn/config/xposed-using.html" class="sidebar-item" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/api-using.html" class="sidebar-item" aria-label="作为 Hook API 使用的相关配置"><!--[--><!--]--> 作为 Hook API 使用的相关配置 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/config/r8-proguard.html" class="sidebar-item" aria-label="R8 与 Proguard 混淆"><!--[--><!--]--> R8 与 Proguard 混淆 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">工具 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/tools/yukihookapi-projectbuilder.html" class="sidebar-item" aria-label="YukiHookAPI 构建工具"><!--[--><!--]--> YukiHookAPI 构建工具 <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">API 文档 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/home.html" class="sidebar-item" aria-label="文档介绍"><!--[--><!--]--> 文档介绍 <!--[--><!--]--></a><!----></li><li><p tabindex="0" class="sidebar-item collapsible">Public API <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html" class="sidebar-item" aria-label="YukiHookAPI - object"><!--[--><!--]--> YukiHookAPI - object <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html" class="sidebar-item" aria-label="PackageParam - class"><!--[--><!--]--> PackageParam - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html" class="sidebar-item" aria-label="HookParam - class"><!--[--><!--]--> HookParam - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html" class="sidebar-item" aria-label="InjectYukiHookWithXposed - annotation"><!--[--><!--]--> InjectYukiHookWithXposed - annotation <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html" class="sidebar-item" aria-label="IYukiHookXposedInit - interface"><!--[--><!--]--> IYukiHookXposedInit - interface <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html" class="sidebar-item" aria-label="YukiHookModulePrefs - class"><!--[--><!--]--> YukiHookModulePrefs - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html" class="sidebar-item" aria-label="ModulePreferenceFragment - class"><!--[--><!--]--> ModulePreferenceFragment - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html" class="sidebar-item" aria-label="PrefsData - class"><!--[--><!--]--> PrefsData - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html" class="sidebar-item" aria-label="YukiHookDataChannel - class"><!--[--><!--]--> YukiHookDataChannel - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html" class="sidebar-item" aria-label="ChannelData - class"><!--[--><!--]--> ChannelData - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html" class="sidebar-item" aria-label="ModuleApplication - class"><!--[--><!--]--> ModuleApplication - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html" class="sidebar-item" aria-label="ModuleAppActivity - class"><!--[--><!--]--> ModuleAppActivity - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html" class="sidebar-item" aria-label="ModuleAppCompatActivity - class"><!--[--><!--]--> ModuleAppCompatActivity - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html" class="sidebar-item" aria-label="ModuleContextThemeWrapper - class"><!--[--><!--]--> ModuleContextThemeWrapper - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/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/dummy/YukiModuleResources.html" class="sidebar-item" aria-label="YukiModuleResources - class"><!--[--><!--]--> YukiModuleResources - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html" class="sidebar-item" aria-label="YukiResources - class"><!--[--><!--]--> YukiResources - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html" class="sidebar-item" aria-label="YukiResForwarder - class"><!--[--><!--]--> YukiResForwarder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html" class="sidebar-item" aria-label="YukiXposedEvent - object"><!--[--><!--]--> YukiXposedEvent - object <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html" class="sidebar-item" aria-label="ComponentTypeFactory - kt"><!--[--><!--]--> ComponentTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html" class="sidebar-item" aria-label="GraphicsTypeFactory - kt"><!--[--><!--]--> GraphicsTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html" class="sidebar-item" aria-label="ViewTypeFactory - kt"><!--[--><!--]--> ViewTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html" class="sidebar-item" aria-label="VariableTypeFactory - kt"><!--[--><!--]--> VariableTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html" class="sidebar-item" aria-label="DefinedTypeFactory - kt"><!--[--><!--]--> DefinedTypeFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html" class="sidebar-item" aria-label="LoggerFactory - kt"><!--[--><!--]--> LoggerFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html" class="sidebar-item" aria-label="ReflectionFactory - kt"><!--[--><!--]--> ReflectionFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html" class="sidebar-item" aria-label="YukiHookFactory - kt"><!--[--><!--]--> YukiHookFactory - kt <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html" class="sidebar-item" aria-label="YukiBaseHooker - class"><!--[--><!--]--> YukiBaseHooker - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html" class="sidebar-item" aria-label="YukiMemberHookCreator - class"><!--[--><!--]--> YukiMemberHookCreator - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html" class="sidebar-item" aria-label="YukiResourcesHookCreator - class"><!--[--><!--]--> YukiResourcesHookCreator - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html" class="sidebar-item" aria-label="MethodFinder - class"><!--[--><!--]--> MethodFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html" class="sidebar-item" aria-label="ConstructorFinder - class"><!--[--><!--]--> ConstructorFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html" class="sidebar-item" aria-label="FieldFinder - class"><!--[--><!--]--> FieldFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html" class="sidebar-item" aria-label="DexClassFinder - class"><!--[--><!--]--> DexClassFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html" class="sidebar-item" aria-label="MemberRulesResult - class"><!--[--><!--]--> MemberRulesResult - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html" class="sidebar-item" aria-label="MemberRules - class"><!--[--><!--]--> MemberRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html" class="sidebar-item" aria-label="FieldRules - class"><!--[--><!--]--> FieldRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html" class="sidebar-item" aria-label="MethodRules - class"><!--[--><!--]--> MethodRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html" class="sidebar-item" aria-label="ConstructorRules - class"><!--[--><!--]--> ConstructorRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html" class="sidebar-item" aria-label="BaseFinder - class"><!--[--><!--]--> BaseFinder - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html" class="sidebar-item" aria-label="CountRules - class"><!--[--><!--]--> CountRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html" class="sidebar-item" aria-label="ModifierRules - class"><!--[--><!--]--> ModifierRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html" class="sidebar-item" aria-label="NameRules - class"><!--[--><!--]--> NameRules - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html" class="sidebar-item" aria-label="HookClass - class"><!--[--><!--]--> HookClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html" class="sidebar-item" aria-label="VariousClass - class"><!--[--><!--]--> VariousClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html" class="sidebar-item" aria-label="CurrentClass - class"><!--[--><!--]--> CurrentClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html" class="sidebar-item" aria-label="GenericClass - class"><!--[--><!--]--> GenericClass - class <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html" class="sidebar-item" aria-label="HookResources - class"><!--[--><!--]--> HookResources - class <!--[--><!--]--></a><!----></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item collapsible">特色功能 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/api/special-features/reflection.html" class="sidebar-item" aria-label="字节码与反射扩展"><!--[--><!--]--> 字节码与反射扩展 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/logger.html" class="sidebar-item" aria-label="调试日志"><!--[--><!--]--> 调试日志 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/xposed-storage.html" class="sidebar-item" aria-label="Xposed 模块数据存储"><!--[--><!--]--> Xposed 模块数据存储 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/xposed-channel.html" class="sidebar-item" aria-label="Xposed 模块与宿主通讯桥"><!--[--><!--]--> Xposed 模块与宿主通讯桥 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/host-lifecycle.html" class="sidebar-item" aria-label="宿主生命周期扩展"><!--[--><!--]--> 宿主生命周期扩展 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/api/special-features/host-inject.html" class="sidebar-item" aria-label="宿主资源注入扩展"><!--[--><!--]--> 宿主资源注入扩展 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul></li><li><p tabindex="0" class="sidebar-item sidebar-heading collapsible">关于 <span class="right arrow"></span></p><ul style="display:none;" class="sidebar-item-children"><!--[--><li><a href="/YukiHookAPI/zh-cn/about/changelog.html" class="sidebar-item" aria-label="更新日志"><!--[--><!--]--> 更新日志 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/future.html" class="sidebar-item" aria-label="展望未来"><!--[--><!--]--> 展望未来 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/contacts.html" class="sidebar-item" aria-label="联系我们"><!--[--><!--]--> 联系我们 <!--[--><!--]--></a><!----></li><li><a href="/YukiHookAPI/zh-cn/about/about.html" class="sidebar-item" aria-label="关于此文档"><!--[--><!--]--> 关于此文档 <!--[--><!--]--></a><!----></li><!--]--></ul></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><!--]--><div><h1 id="api-异常处理" tabindex="-1"><a class="header-anchor" href="#api-异常处理" aria-hidden="true">#</a> API 异常处理</h1><blockquote><p>异常是在开发过程经常遇到的主要问题,这里介绍了 <code>YukiHookAPI</code> 在使用过程中可能遇到的常见异常以及处理方式。</p></blockquote><p>这里的异常说明只会同步最新的 API 版本,较旧的 API 版本的异常将不会再进行说明,请始终保持 API 版本为最新。</p><h2 id="非阻断异常" tabindex="-1"><a class="header-anchor" href="#非阻断异常" aria-hidden="true">#</a> 非阻断异常</h2><blockquote><p>这些异常不会导致 APP 停止运行(FC),但是会在控制台打印 <code>E</code> 级别的日志,也可能会停止继续执行相关功能。</p></blockquote><h6 id="exception" tabindex="-1"><a class="header-anchor" href="#exception" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Could not found XposedBridge in current space! Aborted</p></div><p><strong>异常原因</strong></p><p>你的 Hook Framework 未在工作或并未成功装载 <code>XposedBridge</code>。</p><p><strong>解决方案</strong></p><p>请确认你在正确的地方装载了 <code>YukiHookAPI</code> 的 <code>encase</code> 方法,详情请参考 <a href="../config/xposed-using">作为 Xposed 模块使用的相关配置</a> 以及 <a href="../config/api-using">作为 Hook API 使用的相关配置</a>。</p><h6 id="exception-1" tabindex="-1"><a class="header-anchor" href="#exception-1" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted</p></div><p><strong>异常原因</strong></p><p>你尝试在继承 <code>IYukiHookXposedInit</code> 的 Hook 入口类的 <code>onInit</code> 或 <code>onXposedEvent</code> 方法中装载了 <code>encase</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;">HookEntry</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">IYukiHookXposedInit</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;">onInit</span><span style="color:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗错误的使用方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#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;">onXposedEvent</span><span style="color:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗错误的使用方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#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;">onHook</span><span style="color:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><p><strong>解决方案</strong></p><p>请在 <code>onHook</code> 方法中装载 <code>encase</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;">HookEntry</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">IYukiHookXposedInit</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;">onInit</span><span style="color:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这里只能装载 configs 方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.configs {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#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;">onHook</span><span style="color:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 正确的使用方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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><h6 id="exception-2" tabindex="-1"><a class="header-anchor" href="#exception-2" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hooking Process exception occurred</p></div><p><strong>异常原因</strong></p><p><code>YukiHookAPI</code> 在进行自身初始化 Hook 过程中发生异常。</p><p><strong>解决方案</strong></p><p>通常情况下这种错误不会轻易发生,若一旦发生此错误,可直接提交日志进行反馈。</p><h6 id="exception-3" tabindex="-1"><a class="header-anchor" href="#exception-3" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>YukiHookAPI try to load HookEntryClass failed</p></div><p><strong>异常原因</strong></p><p><code>YukiHookAPI</code> 在尝试装载 Hook 入口类 <code>onInit</code> 或 <code>onHook</code> 方法时发生了不能处理的异常或找不到入口类。</p><p><strong>解决方案</strong></p><p>通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。</p><h6 id="exception-4" tabindex="-1"><a class="header-anchor" href="#exception-4" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>YukiHookAPI bind initZygote failed</p></div><p><strong>异常原因</strong></p><p><code>YukiHookAPI</code> 在尝试装载 Xposed 原生接口 <code>initZygote</code> 方法时发生了不能处理的异常。</p><p><strong>解决方案</strong></p><p>通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。</p><h6 id="exception-5" tabindex="-1"><a class="header-anchor" href="#exception-5" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Failed to execute method "<strong>NAME</strong>", maybe your Hook Framework not support Resources Hook</p></div><p><strong>异常原因</strong></p><p><code>YukiHookAPI</code> 在尝试进行 Resources Hook 时发生错误。</p><p><strong>解决方案</strong></p><p>请仔细检查错误日志的详细信息。</p><p>若发生 <code>Resources$NotFoundException</code> 则可能为你查找的 Resources Id 不正确。</p><p>若发生 <code>ClassNotFound</code> 或 <code>NoClassDefFoundError</code> 可能是 Hook Framework 不支持 Resources Hook(资源钩子)。</p><h6 id="exception-6" tabindex="-1"><a class="header-anchor" href="#exception-6" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>HookClass [<strong>NAME</strong>] not found</p></div><p><strong>异常原因</strong></p><p>当前被 Hook 的 <code>Class</code> 没有被找到。</p><p><strong>解决方案</strong></p><p>请检查目标 <code>Class</code> 是否存在,若想忽略此错误请使用 <code>ignoredHookClassNotFoundFailure</code> 方法。</p><h6 id="exception-7" tabindex="-1"><a class="header-anchor" href="#exception-7" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hook Member [<strong>NAME</strong>] failed</p></div><p><strong>异常原因</strong></p><p>Hook 目标方法、构造方法时发生错误。</p><p><strong>解决方案</strong></p><p>此问题通常由 Hook Framework 产生,请检查对应的日志内容,若问题持续出现请携带详细日志进行反馈。</p><h6 id="exception-8" tabindex="-1"><a class="header-anchor" href="#exception-8" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hooked Member with a finding error by <strong>CLASS</strong></p></div><p><strong>异常原因</strong></p><p>在 Hook 执行后被 Hook 的 <code>member</code> 为 <code>null</code> 且已经设置目标 Hook 方法、构造类。</p><p><strong>解决方案</strong></p><p>请检查此错误发生前的上一个错误日志,或许在查找方法、构造方法的时候发生了找不到方法、构造方法的错误。</p><h6 id="exception-9" tabindex="-1"><a class="header-anchor" href="#exception-9" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hooked Member cannot be non-null by <strong>CLASS</strong></p></div><p><strong>异常原因</strong></p><p>在 Hook 执行后被 Hook 的 <code>member</code> 为 <code>null</code> 且没有设置目标 Hook 方法、构造类。</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;"> </span><span style="color:#768390;">// 这里并没有设置需要 Hook 的方法、构造方法的查找条件</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><p><strong>解决方案</strong></p><p>请确认你已经在 Hook 之前正确设置了要 Hook 的方法、构造方法的查找方式。</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;"> </span><span style="color:#768390;">// ✅ 正确的使用方法举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> method {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><h6 id="exception-10" tabindex="-1"><a class="header-anchor" href="#exception-10" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hooked method return type match failed, required [<strong>TYPE</strong>] but got [<strong>TYPE</strong>]</p></div><p><strong>异常原因</strong></p><p>在 Hook 回调方法体中设置了 <code>HookParam.result</code> 或使用了 <code>replaceHook</code> 但是被 Hook 的方法返回值类型与原返回值类型不匹配。</p><blockquote><p>示例如下</p></blockquote><p>假设这个是被 Hook 的方法。</p><div class="language-java ext-java line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><span class="line"><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">boolean</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">test</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>下面是一个错误的案列。</p><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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> emptyParam()</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// <情景1> 设置了错误的类型,原类型为 Boolean</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> beforeHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> result </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// <情景2> 返回了错误的类型,原类型为 Boolean</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> replaceAny {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// <情景3> 直接使用了错误的类型,原类型为 Boolean</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> replaceTo(any </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container warning"><p class="custom-container-title">注意</p><p>若上述场景在 <strong>beforeHook</strong> 或 <strong>afterHook</strong> 中发生,则会造成被 Hook 的 APP (宿主) 由 <strong>XposedBridge</strong> 抛出异常 (会对其暴露被 Hook 的事实)。</p></div><p><strong>解决方案</strong></p><p>请确认当前被 Hook 方法的正确返回值类型,修改后再试一次。</p><h6 id="exception-11" tabindex="-1"><a class="header-anchor" href="#exception-11" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Hook initialization failed because got an Exception</p></div><p><strong>异常原因</strong></p><p>在准备 Hook 时发生了任意的异常。</p><p><strong>解决方案</strong></p><p>这是一个准备 Hook 阶段就发生异常的提醒,请仔细查看具体的异常是什么以重新确定问题。</p><h6 id="exception-12" tabindex="-1"><a class="header-anchor" href="#exception-12" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Try to hook <strong>NAME</strong>[<strong>NAME</strong>] got an Exception</p></div><p><strong>异常原因</strong></p><p>在 Hook 开始时发生了任意的异常。</p><p><strong>解决方案</strong></p><p>这是一个 Hook 开始就发生异常的提醒,请仔细查看具体的异常是什么以重新确定问题。</p><h6 id="exception-13" tabindex="-1"><a class="header-anchor" href="#exception-13" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Method/Constructor/Field match type "<strong>TYPE</strong>" not allowed</p></div><p><strong>异常原因</strong></p><p>在查找方法、构造方法以及变量时设置了不允许的参数类型。</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;">// 查找一个方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">method {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗设置了无效的类型举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#6CB6FF;">false</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">1</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">0</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗设置了无效的类型举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> returnType </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#768390;">// 查找一个变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">field {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗设置了无效的类型举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> type </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</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></div><p><strong>解决方案</strong></p><p>在查找中 <code>param</code>、<code>returnType</code>、<code>type</code> 中仅接受 <code>Class</code>、<code>String</code>、<code>VariousClass</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;">// 查找一个方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">method {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 正确的使用方法举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BooleanType</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">IntType</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">IntType</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 正确的使用方法举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> returnType </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">BooleanType</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 以下方案也是正确的</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> returnType </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"java.lang.Boolean"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#768390;">// 查找一个变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">field {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 正确的使用方法举例</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> type </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">BooleanType</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></div><h6 id="exception-14" tabindex="-1"><a class="header-anchor" href="#exception-14" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>NoSuchMethod/NoSuchConstructor/NoSuchField happend in [<strong>NAME</strong>]</p></div><p><strong>异常原因</strong></p><p>在查找方法、构造方法以及变量时并未找到目标方法、构造方法以及变量。</p><p><strong>解决方案</strong></p><p>请确认你的查找条件是否能正确匹配到目标 <code>Class</code> 中的指定方法、构造方法以及变量。</p><h6 id="exception-15" tabindex="-1"><a class="header-anchor" href="#exception-15" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Trying <strong>COUNT</strong> times and all failure by RemedyPlan</p></div><p><strong>异常原因</strong></p><p>使用 <code>RemedyPlan</code> 重新查找方法、构造方法、变量时依然没有找到方法、构造方法、变量。</p><p><strong>解决方案</strong></p><p>请确认你设置的 <code>RemedyPlan</code> 参数以及宿主内存在的 <code>Class</code>,再试一次。</p><h6 id="exception-16" tabindex="-1"><a class="header-anchor" href="#exception-16" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>You must set a condition when finding a Method/Constructor/Field</p></div><p><strong>异常原因</strong></p><p>在查找方法、构造方法以及变量时并未设置任何条件。</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;">method {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这里没有设置任何条件</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><strong>解决方案</strong></p><p>请将查找条件补充完整并再试一次。</p><h6 id="exception-17" tabindex="-1"><a class="header-anchor" href="#exception-17" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Can't find this Class in [<strong>CLASSLOADER</strong>]: <strong>CONTENT</strong> Generated by YukiHookAPI#ReflectionTool</p></div><p><strong>异常原因</strong></p><p>通过 <code>ClassLoader.searchClass</code> 或 <code>PackageParam.searchClass</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;">custom</span><span style="color:#F69D50;">ClassLoader?</span><span style="color:#ADBAC7;">.searchClass {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> from(...)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}.get()</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></div><p><strong>解决方案</strong></p><p>这是一个安全异常,请检查你设置的条件,使用相关工具查看所在 <strong>Dex</strong> 中的 <code>Class</code> 以及字节码对象特征,并再试一次。</p><h6 id="exception-18" tabindex="-1"><a class="header-anchor" href="#exception-18" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Can't find this Method/Constructor/Field in [<strong>CLASS</strong>]: <strong>CONTENT</strong> Generated by YukiHookAPI#ReflectionTool</p></div><p><strong>异常原因</strong></p><p>通过指定条件找不到需要查找的方法、构造方法以及变量。</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:#F69D50;">TargetClass</span><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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">BooleanType</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><p><strong>解决方案</strong></p><p>这是一个安全异常,请检查你设置的条件,使用相关工具查看所在 <code>Class</code> 中的字节码对象特征,并再试一次。</p><h6 id="exception-19" tabindex="-1"><a class="header-anchor" href="#exception-19" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>The number of VagueType must be at least less than the count of paramTypes</p></div><p><strong>异常原因</strong></p><p>在 <code>Method</code>、<code>Constructor</code> 查找条件中错误地使用了 <code>VagueType</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:#F69D50;">TargetClass</span><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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// <情景1></span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">VagueType</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// <情景2></span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">VagueType</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">VagueType</span><span style="color:#ADBAC7;"> ...)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>解决方案</strong></p><p><code>VagueType</code> 不能在方法、构造方法参数中完全填充,若存在这样的需求请使用 <code>paramCount</code>。</p><h6 id="exception-20" tabindex="-1"><a class="header-anchor" href="#exception-20" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Field match type class is not found</p></div><p><strong>异常原因</strong></p><p>在查找变量时所设置的查找条件中 <code>type</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;">field {</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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设这里设置的 type 的 Class 并不存在</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> type </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"com.example.TestClass"</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><strong>解决方案</strong></p><p>请检查查找条件中 <code>type</code> 的 <code>Class</code> 是否存在,然后再试一次。</p><h6 id="exception-21" tabindex="-1"><a class="header-anchor" href="#exception-21" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Method match returnType class is not found</p></div><p><strong>异常原因</strong></p><p>在查找方法时所设置的查找条件中 <code>returnType</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;">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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设这里设置的 returnType 的 Class 并不存在</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> returnType </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"com.example.TestClass"</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><strong>解决方案</strong></p><p>请检查查找条件中 <code>returnType</code> 的 <code>Class</code> 是否存在,然后再试一次。</p><h6 id="exception-22" tabindex="-1"><a class="header-anchor" href="#exception-22" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Method/Constructor match paramType[<strong>INDEX</strong>] class is not found</p></div><p><strong>异常原因</strong></p><p>在查找方法、构造方法时所设置的查找条件中 <code>param</code> 的 <code>index</code> 号下标的 <code>Class</code> 实例未被找到。</p><div class="language-kotlin ext-kt line-numbers-mode"><pre class="shiki" style="background-color:#22272e;"><code><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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设这里设置的 1 号下标的 Class 并不存在</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">StringType</span><span style="color:#ADBAC7;">, </span><span style="color:#96D0FF;">"com.example.TestClass"</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">BooleanType</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><strong>解决方案</strong></p><p>请检查查找条件中 <code>param</code> 的 <code>index</code> 号下标的 <code>Class</code> 是否存在,然后再试一次。</p><h6 id="exception-23" tabindex="-1"><a class="header-anchor" href="#exception-23" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Resources Hook condition name/type cannot be empty [<strong>TAG</strong>]</p></div><p><strong>异常原因</strong></p><p>在查找 Resources 时并未设置任何条件。</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;">// 情况 1</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">conditions {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这里没有设置任何条件</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"><span style="color:#768390;">// 情况 2</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">conditions {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 这里缺少了 type 条件</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><strong>解决方案</strong></p><p>Resources 的 Hook 并非类似方法的 Hook,其必须拥有完整的名称和类型描述才能查找成功,请将查找条件补充完整并再试一次。</p><h6 id="exception-24" tabindex="-1"><a class="header-anchor" href="#exception-24" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Resources Hook type is invalid [<strong>TAG</strong>]</p></div><p><strong>异常原因</strong></p><p>在 Hook Resources 时发生了类型错误的异常。</p><p><strong>解决方案</strong></p><p><code>YukiHookAPI</code> 会尝试在 <code>initZygote</code> 与 <code>handleInitPackageResources</code> 中装载 Resources Hook,若全部装载失败可能会发生此异常,当前 Hook Framework 需要支持并启用资源钩子(Resources Hook)功能,请检查后再试一次。</p><h6 id="exception-25" tabindex="-1"><a class="header-anchor" href="#exception-25" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Resources Hook got an Exception [<strong>TAG</strong>]</p></div><p><strong>异常原因</strong></p><p>在 Hook Resources 时发生了任意的异常。</p><p><strong>解决方案</strong></p><p>这是一个异常汇总,请自行向下查看日志具体的异常是什么,例如找不到 Resources Id 的问题。</p><h6 id="exception-26" tabindex="-1"><a class="header-anchor" href="#exception-26" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Received action "<strong>ACTION</strong>" failed</p></div><p><strong>异常原因</strong></p><p>使用 <code>YukiHookDataChannel</code> 时回调广播事件异常。</p><p><strong>解决方案</strong></p><p>一般情况下,此错误基本上不会发生,一旦发生错误,排除自身代码的问题后,请携带详细日志进行反馈。</p><h6 id="exception-27" tabindex="-1"><a class="header-anchor" href="#exception-27" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Failed to sendBroadcast like "<strong>KEY</strong>", because got null context in "<strong>PACKAGENAME</strong>"</p></div><p><strong>异常原因</strong></p><p>使用 <code>YukiHookDataChannel</code> 时发送广播取到了空的上下文实例。</p><p><strong>解决方案</strong></p><p>一般情况下,此错误基本上不会发生,在最新版本中已经修复宿主使用时可能发生的问题,若最新版本依然发生错误,排除自身代码的问题后,请携带详细日志进行反馈。</p><h6 id="exception-28" tabindex="-1"><a class="header-anchor" href="#exception-28" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Failed to inject module resources into [<strong>RESOURCES</strong>]</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>injectModuleAppResources</code> 注入模块资源时发生异常。</p><p><strong>解决方案</strong></p><p>一般情况下,此错误基本上不会发生,排除自身代码的问题后,请携带详细日志进行反馈。</p><h6 id="exception-29" tabindex="-1"><a class="header-anchor" href="#exception-29" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Activity Proxy initialization failed because got an Exception</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>registerModuleAppActivities</code> 注入模块 <code>Activity</code> 时发生异常。</p><p><strong>解决方案</strong></p><p>请检查此错误发生后的下一个错误日志,或许在配置参数上可能发生了一些问题,若找不到相关错误日志的说明,排除自身代码的问题后,请携带详细日志进行反馈。</p><h6 id="exception-30" tabindex="-1"><a class="header-anchor" href="#exception-30" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Activity Proxy got an Exception in msg.what [<strong>WHAT</strong>]</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>registerModuleAppActivities</code> 注入模块 <code>Activity</code> 时发生异常。</p><p><strong>解决方案</strong></p><p>一般情况下,此错误基本上不会发生,但根据系统版本差异性并未做详细测试,排除自身代码的问题后,请携带详细日志进行反馈。</p><h6 id="exception-31" tabindex="-1"><a class="header-anchor" href="#exception-31" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>This proxy [<strong>TYPE</strong>] type is not allowed</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>registerModuleAppActivities</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:#768390;">// ❗ 这里填入的内容仅为举例,其中 proxy 填入了不能理解的无效参数</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">registerModuleAppActivities(proxy </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">false</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 class="line-number"></div></div></div><p><strong>解决方案</strong></p><p>方法中的 <code>proxy</code> 参数只接受 <code>String</code>、<code>CharSequence</code>、<code>Class</code> 类型,请查看相关使用方法正确填入方法参数。</p><h6 id="exception-32" tabindex="-1"><a class="header-anchor" href="#exception-32" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Cound not got launch intent for package "<strong>NAME</strong>"</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>registerModuleAppActivities</code> 注入模块 <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:#768390;">// 使用了默认参数直接进行注册</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">registerModuleAppActivities()</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><strong>解决方案</strong></p><p>默认参数 (无参) 只能用于可被启动的 APP,若 APP 并未声明启动入口 <code>Activity</code>,你就需要手动指定方法的 <code>proxy</code> 参数。</p><h6 id="exception-33" tabindex="-1"><a class="header-anchor" href="#exception-33" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">loggerE</p><p>Could not found "<strong>NAME</strong>" or Class is not a type of Activity</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境中使用 <code>registerModuleAppActivities</code> 注入模块 <code>Activity</code> 时无法找到被填入参数 <code>proxy</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;">registerModuleAppActivities(proxy </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"com.demo.test.TestActivity"</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><strong>解决方案</strong></p><p>请确认你填入的 <code>Activity</code> 名称真实有效地存在于宿主中,且目标 <code>Class</code> 继承于 <code>Activity</code>。</p><h2 id="阻断异常" tabindex="-1"><a class="header-anchor" href="#阻断异常" aria-hidden="true">#</a> 阻断异常</h2><blockquote><p>这些异常会直接导致 APP 停止运行(FC),同时会在控制台打印 <code>E</code> 级别的日志,还会造成 Hook 进程“死掉”。</p></blockquote><h6 id="exception-34" tabindex="-1"><a class="header-anchor" href="#exception-34" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">RuntimeException</p><p>!!!DO NOT ALLOWED!!! You cannot hook or reflection to call the internal class of the YukiHookAPI itself, The called class is [<strong>CLASS</strong>]</p></div><p><strong>异常原因</strong></p><p>你使用 <code>YukiHookAPI</code> 的相关反射或 Hook 功能调用了 API 自身的 <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:#768390;">// <情景1></span></span>
|
||
<span class="line"><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.current()</span></span>
|
||
<span class="line"><span style="color:#768390;">// <情景2></span></span>
|
||
<span class="line"><span style="color:#F69D50;">PackageParam</span><span style="color:#ADBAC7;">::</span><span style="color:#6CB6FF;">class</span><span style="color:#ADBAC7;">.java.hook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"><span style="color:#768390;">// <情景3></span></span>
|
||
<span class="line"><span style="color:#F69D50;">MethodFinder</span><span style="color:#ADBAC7;">::</span><span style="color:#6CB6FF;">class</span><span style="color:#ADBAC7;">.java.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;">"name"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param(</span><span style="color:#F69D50;">StringType</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}.get().call(</span><span style="color:#96D0FF;">"name"</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#768390;">// ...</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><p><strong>解决方案</strong></p><p>请检查代码部分是否有错误,例如下面的情况。</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:#F69D50;">YourClass</span><span style="color:#ADBAC7;">.method {</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;">// ❗ 没有调用方法执行,这里实际调用的是 MethodFinder.Result 对象</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}.get(instance).current()</span></span>
|
||
<span class="line"><span style="color:#F69D50;">YourClass</span><span style="color:#ADBAC7;">.method {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ✅ 正确的使用方法,假设此方法无参</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}.get(instance).call().current()</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>不允许内联、反射、Hook <code>YukiHookAPI</code> 自身的 <code>Class</code> 以及内部功能,防止发生错误。</p><h6 id="exception-35" tabindex="-1"><a class="header-anchor" href="#exception-35" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">UnsupportedOperationException</p><p>!!!DANGEROUS!!! Hook [<strong>CLASS</strong>] Class is a dangerous behavior! [<strong>CONTENT</strong>] [<strong>SOLVE</strong>]</p></div><p><strong>异常原因</strong></p><p>你尝试 Hook 了处于危险行为列表中的 <code>Class</code> 对象,例如 <code>Class</code>、<code>ClassLoader</code>、<code>Method</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;">// <情景1></span></span>
|
||
<span class="line"><span style="color:#F69D50;">JavaClassLoader</span><span style="color:#ADBAC7;">.hook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"><span style="color:#768390;">// <情景2></span></span>
|
||
<span class="line"><span style="color:#F69D50;">JavaClass</span><span style="color:#ADBAC7;">.hook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"><span style="color:#768390;">// <情景3></span></span>
|
||
<span class="line"><span style="color:#F69D50;">JavaMethod</span><span style="color:#ADBAC7;">.hook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"><span style="color:#768390;">// ...</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></div><p><strong>解决方案</strong></p><p>这些功能是系统内部的,<u><strong>它们不应该被 Hook,在部分 Hook Framework 上可能不被支持,还会引发其它错误</strong></u>,请尝试更换 Hook 点。</p><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>若你仍要使用此功能,请参考 <a href="../api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator#usedangerousoperation-method">YukiMemberHookCreator.useDangerousOperation</a>。</p><p>但是<strong>强烈建议不要这样做,发生问题请不要反馈,<u>自行承担一切后果</u></strong>。</p></div><h6 id="exception-36" tabindex="-1"><a class="header-anchor" href="#exception-36" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">NoClassDefFoundError</p><p>Can't find this Class in [<strong>CLASSLOADER</strong>]: <strong>CONTENT</strong> Generated by YukiHookAPI#ReflectionTool</p></div><p><strong>异常原因</strong></p><p>通过 <code>String.toClass(...)</code> 或 <code>classOf<...>()</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:#96D0FF;">"com.demo.Test"</span><span style="color:#ADBAC7;">.toClass()</span></span>
|
||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p><strong>解决方案</strong></p><p>请检查当前字符串或实体匹配到的 <code>Class</code> 是否存在于当前 <code>ClassLoader</code>,并再试一次。</p><h6 id="exception-37" tabindex="-1"><a class="header-anchor" href="#exception-37" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>ClassLoader [<strong>CLASSLOADER</strong>] is not a DexClassLoader</p></div><p><strong>异常原因</strong></p><p>使用 <code>ClassLoader.searchClass</code> 或 <code>PackageParam.searchClass</code> 查找 <code>Class</code> 但是当前 <code>ClassLoader</code> 并不继承于 <code>BaseDexClassLoader</code>。</p><p><strong>解决方案</strong></p><p>这种情况基本不存在,除非当前 APP 引用了非 ART 平台的可执行文件 (但是这种情况还是不会存在) 或当前 <code>ClassLoader</code> 为空。</p><h6 id="exception-38" tabindex="-1"><a class="header-anchor" href="#exception-38" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Failed to got SystemContext</p></div><p><strong>异常原因</strong></p><p>在被 Hook 的宿主内调用了 <code>systemContext</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;">encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> systemContext...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<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></div><p><strong>解决方案</strong></p><p>这种情况不应该存在,由于 <code>systemContext</code> 通过反射从 <code>ActivityThread</code> 中得到,除非系统进程发生异常,否则获取到的对象不会为空。</p><h6 id="exception-39" tabindex="-1"><a class="header-anchor" href="#exception-39" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>App is dead, You cannot call to appContext</p></div><p><strong>异常原因</strong></p><blockquote><p>第一种情况</p></blockquote><p>在被 Hook 的宿主内调用了 <code>ModuleApplication</code> 的 <code>appContext</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;">encase {</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:#F69D50;">ModuleApplication</span><span style="color:#ADBAC7;">.appContext...</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></div><blockquote><p>第二种情况</p></blockquote><p>使用 <code>ModuleApplication</code> 时调用了 <code>appContext</code> 但是 APP 可能已经被销毁或没有正确启动。</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;">// 调用了此变量但是 APP 可能已被销毁或没有正确启动</span></span>
|
||
<span class="line"><span style="color:#F69D50;">ModuleApplication</span><span style="color:#ADBAC7;">.appContext...</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><strong>解决方案</strong></p><blockquote><p>第一种情况</p></blockquote><p>你只能在模块内使用 <code>ModuleApplication</code> 的 <code>appContext</code>,在宿主内请使用 <code>PackageParam</code> 中的 <code>appContext</code>,请确认你使用的是否正确。</p><blockquote><p>第二种情况</p></blockquote><p>这种情况基本不存在,由于 <code>appContext</code> 是在 <code>onCreate</code> 中被赋值的,除非遇到多进程并发启动或 APP 没有启动完成前被反射调用了父类的 <code>onCreate</code> 方法。</p><h6 id="exception-40" tabindex="-1"><a class="header-anchor" href="#exception-40" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>YukiHookModulePrefs not allowed in Custom Hook API</p></div><p><strong>异常原因</strong></p><p>在 Hook 自身 APP(非 Xposed 模块) 中使用了 <code>YukiHookModulePrefs</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;">MyApplication</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">Application</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;">attachBaseContext</span><span style="color:#ADBAC7;">(base</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Context?</span><span style="color:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.encase(base) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗不能在这种情况下使用 prefs</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> prefs.getBoolean(</span><span style="color:#96D0FF;">"test_data"</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:#6CB6FF;">super</span><span style="color:#ADBAC7;">.attachBaseContext(base)</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></div><p><strong>解决方案</strong></p><p>你只能在 <a href="../config/xposed-using">作为 Xposed 模块使用</a> 时使用 <code>YukiHookModulePrefs</code>,在 Hook 自身 APP 中请使用原生的 <code>Sp</code> 存储。</p><h6 id="exception-41" tabindex="-1"><a class="header-anchor" href="#exception-41" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Cannot load the XSharedPreferences, maybe is your Hook Framework not support it</p></div><p><strong>异常原因</strong></p><p>在 (Xposed) 宿主环境使用了 <code>YukiHookModulePrefs</code> 但是无法得到 <code>XSharedPreferences</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;">encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> prefs...</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></div><p><strong>解决方案</strong></p><p>一般情况下不会发生此问题,若持续无法获取 <code>XSharedPreferences</code> 对象则可能是你使用的 Hook Framework 不支持此功能或自身存在错误。</p><h6 id="exception-42" tabindex="-1"><a class="header-anchor" href="#exception-42" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>YukiHookDataChannel not allowed in Custom Hook API</p></div><p><strong>异常原因</strong></p><p>在 Hook 自身 APP(非 Xposed 模块) 中使用了 <code>YukiHookDataChannel</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;">MyApplication</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">Application</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;">attachBaseContext</span><span style="color:#ADBAC7;">(base</span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Context?</span><span style="color:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookAPI</span><span style="color:#ADBAC7;">.encase(base) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ❗不能在这种情况下使用 dataChannel</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> dataChannel.wait(key </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"test_data"</span><span style="color:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">super</span><span style="color:#ADBAC7;">.attachBaseContext(base)</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><p><strong>解决方案</strong></p><p>你只能在 <a href="../config/xposed-using">作为 Xposed 模块使用</a> 时使用 <code>YukiHookDataChannel</code>。</p><h6 id="exception-43" tabindex="-1"><a class="header-anchor" href="#exception-43" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>YukiHookDataChannel only support used on an Activity, but this current context is "<strong>CLASSNAME</strong>"</p></div><p><strong>异常原因</strong></p><p>在模块的非 <code>Activity</code> 环境中使用了 <code>YukiHookDataChannel</code>。</p><p><strong>解决方案</strong></p><p>你只能在 <code>Activity</code> 或 <code>Fragment</code> 中使用 <code>YukiHookDataChannel</code>。</p><h6 id="exception-44" tabindex="-1"><a class="header-anchor" href="#exception-44" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Xposed modulePackageName load failed, please reset and rebuild it</p></div><p><strong>异常原因</strong></p><p>在 Hook 过程中使用 <code>YukiHookModulePrefs</code> 或 <code>YukiHookDataChannel</code> 时无法读取装载时的 <code>modulePackageName</code> 导致不能确定自身模块的包名。</p><p><strong>解决方案</strong></p><p>请仔细阅读 <a href="../config/xposed-using#modulepackagename-%E5%8F%82%E6%95%B0">这里</a> 的帮助文档,正确配置模块的 Hook 入口类包名。</p><h6 id="exception-45" tabindex="-1"><a class="header-anchor" href="#exception-45" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>YukiHookModulePrefs missing Context instance</p></div><p><strong>异常原因</strong></p><p>在模块中使用了 <code>YukiHookModulePrefs</code> 存储数据但并未传入 <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:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MainActivity</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">AppCompatActivity</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;">// ❗错误的使用方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 构造方法已在 API 1.0.88 及以后的版本中设置为 private</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">YukiHookModulePrefs</span><span style="color:#ADBAC7;">().getBoolean(</span><span style="color:#96D0FF;">"test_data"</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><strong>解决方案</strong></p><p>在 <code>Activity</code> 中推荐使用 <code>modulePrefs</code> 方法来装载 <code>YukiHookModulePrefs</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;">MainActivity</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">:</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">AppCompatActivity</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;">// ✅ 正确的使用方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> modulePrefs.getBoolean(</span><span style="color:#96D0FF;">"test_data"</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><h6 id="exception-46" tabindex="-1"><a class="header-anchor" href="#exception-46" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Key-Value type <strong>TYPE</strong> is not allowed</p></div><p><strong>异常原因</strong></p><p>在使用 <code>YukiHookModulePrefs</code> 的 <code>get</code> 或 <code>put</code> 方法或 <code>YukiHookDataChannel</code> 的 <code>wait</code> 或 <code>put</code> 方法时传入了不支持的存储类型。</p><p><strong>解决方案</strong></p><p><code>YukiHookModulePrefs</code> 支持的类型只有 <code>String</code>、<code>Set<String></code>、<code>Int</code>、<code>Float</code>、<code>Long</code>、<code>Boolean</code>,请传入支持的类型。</p><p><code>YukiHookDataChannel</code> 支持的类型为 <code>Intent.putExtra</code> 限制的类型,请传入支持的类型。</p><h6 id="exception-47" tabindex="-1"><a class="header-anchor" href="#exception-47" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>YukiHookDataChannel cannot used in zygote</p></div><p><strong>异常原因</strong></p><p>在 <code>loadZygote</code> 中使用了 <code>YukiHookDataChannel</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;">loadZygote {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> dataChannel...</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></div><p><strong>解决方案</strong></p><p><code>YukiHookDataChannel</code> 只能在 <code>loadSystem</code>、<code>loadApp</code> 中使用。</p><h6 id="exception-48" tabindex="-1"><a class="header-anchor" href="#exception-48" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Custom Hooking Members is empty</p></div><p><strong>异常原因</strong></p><p>在 <code>MemberHookCreator</code> 中调用 <code>members()</code> 但是未设置需要 Hook 的 <code>Member</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;"> </span><span style="color:#768390;">// 括号里的方法参数被留空了</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> members()</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><p><strong>解决方案</strong></p><p>若要使用 <code>members()</code> 设置自定义 Hook 方法,你必须保证其方法参数里的 <code>Member</code> 数组对象不能为空。</p><h6 id="exception-49" tabindex="-1"><a class="header-anchor" href="#exception-49" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>HookParam Method args index must be >= 0</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>args().last()</code> 但是目标 <code>param</code> 为空或 <code>args</code> 中的 <code>index</code> 设置了小于 0 的数值。</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;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 假设 param 是空的</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> args().last()...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 设置了小于 0 的 index</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> args(index </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">-</span><span style="color:#6CB6FF;">5</span><span style="color:#ADBAC7;">)...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><strong>解决方案</strong></p><p>请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,且不能对 <code>args</code> 的下标设置小于 0 的数值。</p><h6 id="exception-50" tabindex="-1"><a class="header-anchor" href="#exception-50" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>HookParam instance got null! Is this a static member?</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>instance</code> 变量或 <code>instance</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;"> </span><span style="color:#768390;">// ...</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;"> instance...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此方法</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;"><</span><span style="color:#6CB6FF;">Any</span><span style="color:#F47067;">></span><span style="color:#ADBAC7;">()...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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><strong>解决方案</strong></p><p>请确认你 Hook 的方法是否为静态类型,静态类型的方法没有实例,不能使用此功能,若非静态方法,请检查实例是否已经销毁。</p><h6 id="exception-51" tabindex="-1"><a class="header-anchor" href="#exception-51" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Current hooked Member args is null</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>args</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;"> </span><span style="color:#768390;">// ...</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;"> args...</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></div><p><strong>解决方案</strong></p><p>这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。</p><h6 id="exception-52" tabindex="-1"><a class="header-anchor" href="#exception-52" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Current hooked Member is null</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>member</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;"> </span><span style="color:#768390;">// ...</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;"> member...</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></div><p><strong>解决方案</strong></p><p>这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。</p><h6 id="exception-53" tabindex="-1"><a class="header-anchor" href="#exception-53" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Current hooked Member is not a Method</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>method</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;"> </span><span style="color:#768390;">// ...</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;"> method...</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></div><p><strong>解决方案</strong></p><p>请确认你 Hook 的方法是构造方法还是普通方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 <code>member</code> 来获取。</p><h6 id="exception-54" tabindex="-1"><a class="header-anchor" href="#exception-54" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Current hooked Member is not a Constructor</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>constructor</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;"> </span><span style="color:#768390;">// ...</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:#DCBDFB;">constructor</span><span style="color:#ADBAC7;">...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><p><strong>解决方案</strong></p><p>请确认你 Hook 的方法是普通方法还是构造方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 <code>member</code> 来获取。</p><h6 id="exception-55" tabindex="-1"><a class="header-anchor" href="#exception-55" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>HookParam instance cannot cast to <strong>TYPE</strong></p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>instance</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;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 类型被 cast 为 Activity 但假设当前实例的类型并非此类型</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> instance</span><span style="color:#F47067;"><</span><span style="color:#F69D50;">Activity</span><span style="color:#F47067;">></span><span style="color:#ADBAC7;">()...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><p><strong>解决方案</strong></p><p>请确认当前 Hook 实例的正确类型并重新填写泛型中的类型,若不能确定请使用 <code>Any</code> 或直接使用 <code>instance</code> 变量。</p><h6 id="exception-56" tabindex="-1"><a class="header-anchor" href="#exception-56" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>HookParam Method args is empty, mabe not has args</p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>ArgsModifyer.set</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;"> </span><span style="color:#768390;">// ...</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;"> args(...).set(...)</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></div><p><strong>解决方案</strong></p><p>请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,否则你无法使用此功能。</p><h6 id="exception-57" tabindex="-1"><a class="header-anchor" href="#exception-57" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>HookParam Method args index out of bounds, max is <strong>NUMBER</strong></p></div><p><strong>异常原因</strong></p><p>在 <code>HookParam</code> 中调用 <code>ArgsModifyer.set</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;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> afterHook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 下标从 0 开始,假设原始的参数下标是 5 个,但是这里填写了 6</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> args(index </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">6</span><span style="color:#ADBAC7;">).set(...)</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></div><p><strong>解决方案</strong></p><p>请确认你 Hook 的目标方法、构造方法的方法参数个数,并重新设置数组下标。</p><h6 id="exception-58" tabindex="-1"><a class="header-anchor" href="#exception-58" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>PackageParam got null ClassLoader</p></div><p><strong>异常原因</strong></p><p>在 <code>PackageParam</code> 中调用了 <code>appClassLoader</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;">encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> appClassLoader...</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></div><p><strong>解决方案</strong></p><p>这种情况几乎不存在,除非模块被装载的宿主或目标 Hook Framework 自身存在问题,若真的发生了此问题,请携带详细日志进行反馈。</p><h6 id="exception-59" tabindex="-1"><a class="header-anchor" href="#exception-59" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Current Hook Framework not support moduleAppResources</p></div><p><strong>异常原因</strong></p><p>在 <code>PackageParam</code> 中调用了 <code>moduleAppResources</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;">encase {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> moduleAppResources...</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></div><p><strong>解决方案</strong></p><p><code>moduleAppResources</code> 需要当前 Hook Framework 支持 <code>initZygote</code> 功能,请检查后再试一次。</p><h6 id="exception-60" tabindex="-1"><a class="header-anchor" href="#exception-60" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>VariousClass match failed of those <strong>CLASSES</strong></p></div><p><strong>异常原因</strong></p><p>在使用 <code>VariousClass</code> 创建不确定的 <code>Class</code> 对象时全部的 <code>Class</code> 都没有被找到。</p><p><strong>解决方案</strong></p><p>检查当前 Hook 的宿主内是否存在其中能够匹配的 <code>Class</code> 后,再试一次。</p><h6 id="exception-61" tabindex="-1"><a class="header-anchor" href="#exception-61" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Cannot get hook class "<strong>NAME</strong>" cause <strong>THROWABLE</strong></p></div><p><strong>异常原因</strong></p><p>在 <code>hook</code> 方法体非 <code>onPrepareHook</code> 方法内调用了 <code>instanceClass</code> 变量且当前 Hook 的 <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:#F69D50;">TargetClass</span><span style="color:#ADBAC7;">.hook {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 可能的情况为在非 onPrepareHook 方法体内调用了 instanceClass 变量用于打印日志</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> loggerD(msg </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"$instanceClass hook start"</span><span style="color:#ADBAC7;">)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>解决方案</strong></p><p>在 <code>hook</code> 内直接使用 <code>instanceClass</code> 是很危险的,若 Class 不存在则会直接导致 Hook 进程“死掉”。</p><p>详情请参考 <a href="../guide/example#%E7%8A%B6%E6%80%81%E7%9B%91%E5%90%AC">状态监听</a>。</p><h6 id="exception-62" tabindex="-1"><a class="header-anchor" href="#exception-62" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>LayoutInflatedParam View instance got null</p></div><p><strong>异常原因</strong></p><p>在布局 Hook 回调中调用了 <code>currentView</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;">injectResource {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> conditions {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"activity_main"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> layout()</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> injectAsLayout {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> currentView...</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></div><p><strong>解决方案</strong></p><p>这种情况基本上不存在,除非被 Hook 的宿主当前 <code>Activity</code> 已经销毁或 Hook Framework 自身存在问题。</p><h6 id="exception-63" tabindex="-1"><a class="header-anchor" href="#exception-63" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>XResForwarder is invalid</p></div><p><strong>异常原因</strong></p><p>在 <code>YukiResForwarder</code> 中调用了 <code>resources</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;">// 调用了此变量</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">moduleAppResources.fwd(...).resources</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><strong>解决方案</strong></p><p>这种情况基本上不存在,除非 Hook Framework 自身存在问题。</p><h6 id="exception-64" tabindex="-1"><a class="header-anchor" href="#exception-64" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>paramTypes is empty, please use emptyParam() instead</p></div><p><strong>异常原因</strong></p><p>在查找方法、构造方法时保留了空的 <code>param</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;">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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 括号内没有填写任何参数</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> param()</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><strong>解决方案</strong></p><p>若要标识此方法、构造方法没有参数,你可以有如下设置方法。</p><p>第一种,设置 <code>emptyParam</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;">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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> emptyParam()</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></div><p>第二种,设置 <code>paramCount = 0</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;">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;">"test"</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> paramCount </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">0</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||
<span class="line"></span></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></div><h6 id="exception-65" tabindex="-1"><a class="header-anchor" href="#exception-65" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Invalid YukiHookCallback type</p></div><p><strong>异常原因</strong></p><p><code>YukiHookAPI</code> 的核心 Hook 功能发生故障。</p><p><strong>解决方案</strong></p><p>这种情况基本上不存在,若发生上述问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。</p><h6 id="exception-66" tabindex="-1"><a class="header-anchor" href="#exception-66" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>ModuleContextThemeWrapper already loaded</p></div><p><strong>异常原因</strong></p><p>在 <code>Context</code> 中使用 <code>applyModuleTheme</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;">// 假设这就是当前的 Context 对象</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;">context.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;">).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></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>解决方案</strong></p><p>在 <code>Context</code> 中只能创建一次 <code>ModuleContextThemeWrapper</code>,请检查代码是否有循环调用问题。</p><h6 id="exception-67" tabindex="-1"><a class="header-anchor" href="#exception-67" aria-hidden="true">#</a> exception</h6><div class="custom-container danger"><p class="custom-container-title">IllegalStateException</p><p>Cannot create classes cache for "android", please remove "name" param</p></div><p><strong>异常原因</strong></p><p>在系统框架 (android) 宿主使用了 <code>DexClassFinder</code> 的缓存功能 <code>searchClass(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;">loadSystem {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> searchClass(name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> from(...)</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||
<span class="line"><span style="color:#ADBAC7;"> }.get()</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></div><p><strong>解决方案</strong></p><p>由于缓存会将找到的 <code>Class</code> 名称存入 <code>SharedPreferences</code>,但是系统框架不存在 data 目录,所以请不要在系统框架中使用此功能。</p></div><!--[--><!--]--></div><footer class="page-meta"><div class="meta-item edit-link"><a class="external-link meta-item-label" href="https://github.com/fankes/YukiHookAPI/edit/master/docs-source/src/zh-cn/config/api-exception.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/config/api-example.html" class="" aria-label="API 基本配置"><!--[--><!--]--> API 基本配置 <!--[--><!--]--></a></span><span class="next"><a href="/YukiHookAPI/zh-cn/config/xposed-using.html" class="" aria-label="作为 Xposed 模块使用的相关配置"><!--[--><!--]--> 作为 Xposed 模块使用的相关配置 <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
||
<script type="module" src="/YukiHookAPI/assets/app.78a03919.js" defer></script>
|
||
</body>
|
||
</html>
|