Files
YukiHookAPI/docs/assets/move-to-new-api.html.f0cc4092.js

185 lines
41 KiB
JavaScript

import{_ as t,r as c,o as p,c as i,d as l,w as n,a as r,b as s,e}from"./app.fb8271cf.js";const A={},y=r('<h1 id="migrate-from-xposed-api" tabindex="-1"><a class="header-anchor" href="#migrate-from-xposed-api" aria-hidden="true">#</a> Migrate from Xposed API</h1><blockquote><p>If you are familiar with Xposed API, you can refer to the same point below to quickly migrate your API to <code>YukiHookAPI</code>.</p></blockquote><h2 id="migrate-hook-entry-point" tabindex="-1"><a class="header-anchor" href="#migrate-hook-entry-point" aria-hidden="true">#</a> Migrate Hook Entry Point</h2><blockquote><p>Migrated from <code>XC_LoadPackage.LoadPackageParam</code> to <code>PackageParam</code>.</p></blockquote><p><code>YukiHookAPI</code> implements the <code>lambda</code> method body <code>this</code> usage for <code>PackageParam</code>, and the <code>PackageParam</code> object can be obtained globally in the <code>encase</code> method body.</p><blockquote><p>The API function differences are compared as follows</p></blockquote>',6),d=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the package name of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," packageName")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the ApplicationInfo of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," appInfo")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the system context object")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," systemContext")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the host Application lifecycle")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," appContext")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Hook specified app")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," loadApp(name "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.demo.test"'),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Class Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," findClass("),s("span",{style:{color:"#96D0FF"}},'"com.demo.test.TestClass"'),s("span",{style:{color:"#ADBAC7"}},").hook {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," injectMember {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," method {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," name "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"test"')]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param("),s("span",{style:{color:"#F69D50"}},"BooleanType"),s("span",{style:{color:"#ADBAC7"}},")")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," afterHook {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Resources Hook (fixed usage)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," resources().hook {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," injectResource {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," conditions {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," name "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"ic_launcher"')]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," mipmap()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," replaceToModuleResource("),s("span",{style:{color:"#F69D50"}},"R"),s("span",{style:{color:"#ADBAC7"}},".mipmap.ic_launcher)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),u=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"private"),s("span",{style:{color:"#ADBAC7"}}," lateinit "),s("span",{style:{color:"#F47067"}},"var"),s("span",{style:{color:"#ADBAC7"}}," moduleResources"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XModuleResources")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"initZygote"),s("span",{style:{color:"#ADBAC7"}},"(sparam"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"IXposedHookZygoteInit"),s("span",{style:{color:"#ADBAC7"}},"."),s("span",{style:{color:"#F69D50"}},"StartupParam"),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," moduleResources "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XModuleResources"),s("span",{style:{color:"#ADBAC7"}},".createInstance(sparam.modulePath, "),s("span",{style:{color:"#6CB6FF"}},"null"),s("span",{style:{color:"#ADBAC7"}},")")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"handleLoadPackage"),s("span",{style:{color:"#ADBAC7"}},"(lpparam"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XC_LoadPackage"),s("span",{style:{color:"#ADBAC7"}},"."),s("span",{style:{color:"#F69D50"}},"LoadPackageParam"),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the package name of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," lpparam.packageName")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the ApplicationInfo of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," lpparam.applicationInfo")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the system context object")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// There is no ready-made calling method in the native Xposed API, you need to reflect ActivityThread to achieve it")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the host Application lifecycle")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"AndroidAppHelper"),s("span",{style:{color:"#ADBAC7"}},".currentApplication()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Class Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"if"),s("span",{style:{color:"#ADBAC7"}},"(lpparam.packageName "),s("span",{style:{color:"#F47067"}},"=="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.demo.test"'),s("span",{style:{color:"#ADBAC7"}},")")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XposedHelpers"),s("span",{style:{color:"#ADBAC7"}},".findAndHookMethod(")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.demo.test.TestClass"'),s("span",{style:{color:"#ADBAC7"}},", lpparam.classLoader,")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"test"'),s("span",{style:{color:"#ADBAC7"}},", Boolean::"),s("span",{style:{color:"#6CB6FF"}},"class"),s("span",{style:{color:"#ADBAC7"}},".java,")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"object"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XC_MethodHook"),s("span",{style:{color:"#ADBAC7"}},"() {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," override fun afterHookedMethod(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"//"),s("span",{style:{color:"#ADBAC7"}}," ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," }")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," )")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"handleInitPackageResources"),s("span",{style:{color:"#ADBAC7"}},"(resparam"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XC_InitPackageResources"),s("span",{style:{color:"#ADBAC7"}},"."),s("span",{style:{color:"#F69D50"}},"InitPackageResourcesParam"),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the package name of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," resparam.packageName")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Resources Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," resparam.res.setReplacement(")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.demo.test"'),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#96D0FF"}},'"mipmap"'),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#96D0FF"}},'"ic_launcher"'),s("span",{style:{color:"#ADBAC7"}},",")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," moduleResources.fwd("),s("span",{style:{color:"#F69D50"}},"R"),s("span",{style:{color:"#ADBAC7"}},".mipmap.ic_launcher)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," )")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),m=r('<h2 id="migrate-hook-method-body" tabindex="-1"><a class="header-anchor" href="#migrate-hook-method-body" aria-hidden="true">#</a> Migrate Hook Method Body</h2><blockquote><p>Migrated from <code>XC_MethodHook.MethodHookParam</code> to <code>HookParam</code>.</p></blockquote><h3 id="before-after-hook" tabindex="-1"><a class="header-anchor" href="#before-after-hook" aria-hidden="true">#</a> Before/After Hook</h3><p><code>YukiHookAPI</code> also implements the <code>lambda</code> method body <code>this</code> usage for <code>HookParam</code>, and the <code>HookParam</code> object can be obtained globally in the method bodies such as <code>beforeHook</code> and <code>afterHook</code>.</p><blockquote><p>The API function differences are compared as follows</p></blockquote>',5),D=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"afterHook {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the current Hook instance")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," instance")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the Class instance of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," instanceClass")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get and cast the current Hook instance to the specified type T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," instance"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#F69D50"}},"T"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the method parameter array")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," args")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the first T of the method parameter")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," args().first().cast"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#F69D50"}},"T"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the last bit of the method parameter T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," args().last().cast"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#F69D50"}},"T"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get any subscript T of the method parameter, here is an example of 2")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," args(index "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"2"),s("span",{style:{color:"#ADBAC7"}},").cast"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#F69D50"}},"T"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Set any subscript of the method parameter, here is an example of 2")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," args(index "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"2"),s("span",{style:{color:"#ADBAC7"}},").set(...)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," result")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the return value and cast to T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," result"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#F69D50"}},"T"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Modify the content of the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," result "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Remove the content of the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," resultNull()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Throw an exception to the Hook app")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"Throwable"),s("span",{style:{color:"#ADBAC7"}},"("),s("span",{style:{color:"#96D0FF"}},'"Fatal"'),s("span",{style:{color:"#ADBAC7"}},").throwToApp()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Execute the original method without hook and call with the original method parameters, generics can be omitted")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," callOriginal"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#6CB6FF"}},"Any?"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Execute the original method without Hook and customize the method parameter call, the generic type can be omitted")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," invokeOriginal"),s("span",{style:{color:"#F47067"}},"<"),s("span",{style:{color:"#6CB6FF"}},"Any?"),s("span",{style:{color:"#F47067"}},">"),s("span",{style:{color:"#ADBAC7"}},"(...)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),C=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"afterHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},") {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the current Hook instance")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.thisObject")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the Class instance of the current Hook")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.thisObject.javaClass")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get and cast the current Hook instance to the specified type T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.thisObject "),s("span",{style:{color:"#F47067"}},"as"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the method parameter array")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.args")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the first T of the method parameter")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.args["),s("span",{style:{color:"#6CB6FF"}},"0"),s("span",{style:{color:"#ADBAC7"}},"] "),s("span",{style:{color:"#F47067"}},"as"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the last bit of the method parameter T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.args[param.args.lastIndex] "),s("span",{style:{color:"#F47067"}},"as"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get any subscript T of the method parameter, here is an example of 2")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.args["),s("span",{style:{color:"#6CB6FF"}},"2"),s("span",{style:{color:"#ADBAC7"}},"] "),s("span",{style:{color:"#F47067"}},"as"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Set any subscript of the method parameter, here is an example of 2")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.args["),s("span",{style:{color:"#6CB6FF"}},"2"),s("span",{style:{color:"#ADBAC7"}},"] "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.result")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the return value and cast to T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.result "),s("span",{style:{color:"#F47067"}},"as"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"T")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Modify the content of the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.result "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Remove the content of the return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.result "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"null")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Throw an exception to the Hook app")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param.throwable "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"Throwable"),s("span",{style:{color:"#ADBAC7"}},"("),s("span",{style:{color:"#96D0FF"}},'"Fatal"'),s("span",{style:{color:"#ADBAC7"}},")")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Execute the original method without hooking")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"XposedBridge"),s("span",{style:{color:"#ADBAC7"}},".invokeOriginalMethod(param.method, param.thisObject, ...)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),B=s("h3",{id:"replace-hook",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#replace-hook","aria-hidden":"true"},"#"),e(" Replace Hook")],-1),h=s("p",null,[e("The "),s("code",null,"replaceHook"),e(" method is special, and the "),s("code",null,"YukiHookAPI"),e(" makes a variety of forms for it to choose from.")],-1),b=s("blockquote",null,[s("p",null,"The API function differences are compared as follows")],-1),v=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// A method with no return value void")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"replaceUnit {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Implement the replaced logic directly here")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// A method with a return value")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"replaceAny {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Implement the replaced logic here")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Need to return the return value corresponding to the method, no need to write return, just put the parameter in the last digit")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Assuming the return value of this method is an Int, we just need to ensure that the last bit is the return value we need")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"0")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// For some methods, we just need to replace their return value, then there are the following implementations")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// It should be noted that the parameters passed in by the method of directly replacing the return value are fixed. If you want to dynamically replace the return value, please use the above replaceAny method body")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Replace with the return value you need")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"replaceTo(...)")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Replace with return value of type Boolean")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"replaceToTrue()")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Intercept return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"intercept()")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),F=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// A method with no return value void")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"replaceHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},")"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"Any?"),s("span",{style:{color:"#ADBAC7"}}," {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Implement the replaced logic directly here")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"return"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"null")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// A method with a return value")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"replaceHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},")"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"Int"),s("span",{style:{color:"#ADBAC7"}}," {")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Implement the replaced logic here")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Assume the return value of this method is an Int")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"return"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"0")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}},"}")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"/// For some methods, we just need to replace their return value, then there are the following implementations")]),e(`
`),s("span",{class:"line"}),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Replace with the return value you need")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"replaceHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},") "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," ...")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Replace with return value of type Boolean")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"replaceHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},") "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"true")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#768390"}},"// Intercept return value")]),e(`
`),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"replaceHookedMethod"),s("span",{style:{color:"#ADBAC7"}},"(param"),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"MethodHookParam"),s("span",{style:{color:"#ADBAC7"}},") "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"null")]),e(`
`),s("span",{class:"line"})])]),s("div",{class:"line-numbers","aria-hidden":"true"},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1),k=s("h2",{id:"migrate-other-features",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#migrate-other-features","aria-hidden":"true"},"#"),e(" Migrate Other Features")],-1),f=s("p",null,[s("code",null,"YukiHookAPI"),e(" is a complete rewrite of the Xposed API, you can refer to "),s("a",{href:"../api/home"},"API Document"),e(" and "),s("a",{href:"../api/special-features/reflection"},"Special Features"),e(" to determine some functional Migration and use.")],-1);function g(H,_){const a=c("CodeGroupItem"),o=c("CodeGroup");return p(),i("div",null,[y,l(o,null,{default:n(()=>[l(a,{title:"Yuki Hook API"},{default:n(()=>[d]),_:1}),l(a,{title:"Xposed API"},{default:n(()=>[u]),_:1})]),_:1}),m,l(o,null,{default:n(()=>[l(a,{title:"Yuki Hook API"},{default:n(()=>[D]),_:1}),l(a,{title:"Xposed API"},{default:n(()=>[C]),_:1})]),_:1}),B,h,b,l(o,null,{default:n(()=>[l(a,{title:"Yuki Hook API"},{default:n(()=>[v]),_:1}),l(a,{title:"Xposed API"},{default:n(()=>[F]),_:1})]),_:1}),k,f])}const I=t(A,[["render",g],["__file","move-to-new-api.html.vue"]]);export{I as default};