import{_ as i,r as o,o as p,c as A,b as s,d as l,w as a,e,a as r}from"./app.71f0fa75.js";const d={},y=s("h1",{id:"introduce",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#introduce","aria-hidden":"true"},"#"),e(" Introduce")],-1),u=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),e(" is an integrated Hook API Framework, which does not provide any Hook functions, and needs the support of Xposed related basic APIs.")])],-1),D=s("h2",{id:"background",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),e(" Background")],-1),m=s("p",null,[e("This is an efficient Hook API rebuilt based on the Xposed API using "),s("code",null,"Kotlin"),e(", and creates rich function extensions for the development of Xposed Modules.")],-1),C=e("The name is taken from "),B={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},b=e('"\u3082\u3082\u304F\u308A" heroine Yuki Kurihara'),h=e("."),v=e("Formerly the Innocent Xposed API used in "),F={href:"https://github.com/fankes/TMore",target:"_blank",rel:"noopener noreferrer"},k=e("Development Learning Project"),_=e(", now renamed and open sourced."),f=r('
YukiHookAPI
is built entirely with Kotlin
lambda
syntax.
Abandoning the original less friendly XposedHelpers
, you can use it to easily create Xposed Modules and easily implement custom Hook API.
Please use Kotlin
, the framework part of the code composition is also compatible with Java
but the implementation of the basic Hook scene may not work at all.
All demo code in this document will be described using Kotlin
, if you don't know how to use Kotlin
then you may not be able to use YukiHookAPI
.
Previously, when we built an Xposed Module, we first needed to create an xposed_init
file under assets
.
Then, manually fill in your own entry class name into the file and use XposedHelpers
to implement our Hook logic.
Since Kotlin
is the main Android development language, this API is really not very elegant to use.
Is there any easy to use, light, elegant solution?
With this idea, YukiHookAPI
was born.
Now, we only need to write a small amount of code, and all the time and expense are handed over to automation.
With Kotlin
's elegant lambda
writing and YukiHookAPI
, you can make your Hook logic more beautiful and clear.
',9),X=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"}},"@InjectYukiHookWithXposed")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"object"),s("span",{style:{color:"#ADBAC7"}}," HookEntry "),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"IYukiHookXposedInit"),s("span",{style:{color:"#ADBAC7"}}," {")]),e(` `),s("span",{class:"line"}),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),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"}}," loadZygote {")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"ActivityClass"),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"}},'"onCreate"')]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param("),s("span",{style:{color:"#F69D50"}},"BundleClass"),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"}}," beforeHook {")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Your code here.")]),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"}},"// Your code here.")]),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"}}," 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"}},'"sym_def_app_icon"')]),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"}}," loadApp(name "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.android.browser"'),s("span",{style:{color:"#ADBAC7"}},") {")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"ActivityClass"),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"}},'"onCreate"')]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," param("),s("span",{style:{color:"#F69D50"}},"BundleClass"),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"}}," beforeHook {")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Your code here.")]),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"}},"// Your code here.")]),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"}}," 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("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"}),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=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"}},"class"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"HookEntry"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"IXposedHookZygoteInit"),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#F69D50"}},"IXposedHookLoadPackage"),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#F69D50"}},"IXposedHookInitPackageResources"),s("span",{style:{color:"#ADBAC7"}}," {")]),e(` `),s("span",{class:"line"}),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),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:"#ADBAC7"}}," "),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"}}," "),s("span",{style:{color:"#F69D50"}},"XResources"),s("span",{style:{color:"#ADBAC7"}},".setSystemWideReplacement(")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"android"'),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#96D0FF"}},'"mipmap"'),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#96D0FF"}},'"sym_def_app_icon"'),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"}}," "),s("span",{style:{color:"#F69D50"}},"XposedHelpers"),s("span",{style:{color:"#ADBAC7"}},".findAndHookMethod(")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," Activity::"),s("span",{style:{color:"#6CB6FF"}},"class"),s("span",{style:{color:"#ADBAC7"}},".java.name,")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"null"),s("span",{style:{color:"#ADBAC7"}},", "),s("span",{style:{color:"#96D0FF"}},'"onCreate"'),s("span",{style:{color:"#ADBAC7"}},",")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," Bundle::"),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 beforeHookedMethod(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"}}," "),s("span",{style:{color:"#F69D50"}},"Your"),s("span",{style:{color:"#ADBAC7"}}," code 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:"#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"}}," "),s("span",{style:{color:"#F69D50"}},"Your"),s("span",{style:{color:"#ADBAC7"}}," code here.")]),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:"#ADBAC7"}}," "),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:"#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.android.browser"'),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"}}," Activity::"),s("span",{style:{color:"#6CB6FF"}},"class"),s("span",{style:{color:"#ADBAC7"}},".java.name,")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," lpparam.classLoader, "),s("span",{style:{color:"#96D0FF"}},'"onCreate"'),s("span",{style:{color:"#ADBAC7"}},",")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," Bundle::"),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 beforeHookedMethod(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"}}," "),s("span",{style:{color:"#F69D50"}},"Your"),s("span",{style:{color:"#ADBAC7"}}," code 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:"#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"}}," "),s("span",{style:{color:"#F69D50"}},"Your"),s("span",{style:{color:"#ADBAC7"}}," code here.")]),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:"#ADBAC7"}}," "),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:"#F47067"}},"if"),s("span",{style:{color:"#ADBAC7"}}," (resparam.packageName "),s("span",{style:{color:"#F47067"}},"=="),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#96D0FF"}},'"com.android.browser"'),s("span",{style:{color:"#ADBAC7"}},")")]),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.android.browser"'),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("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"}),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),R=s("p",null,"Yes, you read that right, just needing these codes can completely replace the traditional Xposed API to achieve the same function.",-1),Y=s("p",null,[e("Now, with the help of the efficient and powerful "),s("code",null,"YukiHookAPI"),e(", you can implement a very simple Xposed Module.")],-1);function x(j,L){const n=o("ExternalLinkIcon"),c=o("CodeGroupItem"),t=o("CodeGroup");return p(),A("div",null,[y,u,D,m,s("p",null,[C,s("a",B,[b,l(n)]),h]),s("p",null,[v,s("a",F,[k,l(n)]),_]),f,s("p",null,[g,s("a",H,[I,l(n)]),P]),w,l(t,null,{default:a(()=>[l(c,{title:"Yuki Hook API"},{default:a(()=>[X]),_:1}),l(c,{title:"Rovo89 Xposed API"},{default:a(()=>[M]),_:1})]),_:1}),R,Y])}const N=i(d,[["render",x],["__file","home.html.vue"]]);export{N as default};The following example