import{_ as s,o as e,c as a,a as n}from"./app.99fcdd51.js";const o={},l=n(`
Here are the related configuration methods used by
YukiHookAPI
as an Xposed Module.
As an Xposed Module,
YukiHookAPI
provides an automatic builder.
You need to integrate the latest version of the com.highcapable.yukihookapi:ksp-xposed
dependency in your build.gradle
.
You can configure how
YukiHookAPI
will generate thexposed_init
entry point.
annotation class InjectYukiHookWithXposed(
val sourcePath: String,
val modulePackageName: String,
val entryClassName: String,
val isUsingResourcesHook: Boolean
)
The @InjectYukiHookWithXposed
annotation is an important annotation to mark the entry point of a Module App's Hook.
Pay Attention
The Class of the @InjectYukiHookWithXposed annotation must implements IYukiHookXposedInit interface.
All Class tags in your current project can only exist once, if there are multiple declaration automatic builder will throw an exception at compile time, you can customize its related parameters.
The sourcePath
parameter determines the important identifier for the automatic builder to automatically find and match your current project path.
The content of this parameter is a relative path match, and the default parameter is src/main
.
Pay Attention
If your project is not in ../src/main.. or you set the project path manually using sourceSets, you need to set the sourcePath parameter manually, otherwise the automatic builder will not recognize your project path and will throw an exception at compile time.
The following example
@InjectYukiHookWithXposed(sourcePath = "src/custom")
The file path separator used by sourcePath
will be automatically recognized according to Windows
and Unix
, either /
or \\
can be used.
modulePackageName
is the applicationId
of your current project, which is your module package name (the final generated application package name).
If left blank or not filled, the automatic builder will analyze and generate the current project file.
Notice
If you want to use the module package name to be automatically generated, you need to ensure that your project namespace has any of the following definitions in AndroidManifest.xml, build.gradle or build.gradle.kts.
Example namespace com.example.demo
, any one of the following definitions.
The following definitions are for reference only, usually as long as your project can generate the BuildConfig.java
file normally, no additional operations are required.
AndroidManifest.xml
example
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo">
build.gradle
example
android {
namespace 'com.example.demo'
}
build.gradle.kts
example
android {
namespace = "com.example.demo"
}
If your module package name is automatically generated by unconventional means, or you think it is necessary to manually define the module package name, then you can directly set the modulePackageName
parameter.
The following example
@InjectYukiHookWithXposed(modulePackageName = "com.example.demo")
As long as you customize the modulePackageName
parameter, you will get a warning at compile time.
The following example
You set the customize module package name to "com.example.demo", please check for yourself if it is correct
Notice
In addition to the format of the manually defined module package name, the automatic builder will no longer check whether the module package name is correct, and you need to confirm its validity by yourself.
entryClassName
determines how the automatic builder generates the entry class name in xposed_init
.
By default, it will use your entry class package name to insert the _YukiHookXposedInit
suffix for generation.
Suppose this is your entry class.
The following example
@InjectYukiHookWithXposed
class HookEntry: IYukiHookXposedInit
The Xposed entry class is handled as follows.
The following example
class HookEntry_YukiHookXposedInit: IXposedHookZygoteInit, IXposedHookLoadPackage, ...
The compiled class name structure is as follows.
The following example
...hook.HookEntry \u2190 Your entry class
...hook.HookEntry_Impl \u2190 Auto-generated Impl class
...hook.HookEntry_YukiHookXposedInit \u2190 Automatically generated Xposed entry class
We now define the entry class name as HookXposedEntry
.
The following example
@InjectYukiHookWithXposed(entryClassName = "HookXposedEntry")
class HookEntry: IYukiHookXposedInit
The Xposed entry class is handled as follows.
The following example
class HookXposedEntry: IXposedHookZygoteInit, IXposedHookLoadPackage, ...
The compiled class name structure is as follows.
The following example
...hook.HookEntry \u2190 Your entry class
...hook.HookEntry_Impl \u2190 Auto-generated Impl class
...hook.HookXposedEntry \u2190 Automatically generated Xposed entry class
Pay Attention
The entryClassName you define must not be the same as the class name in xposed_init, otherwise the automatic builder throws an exception at compile time.
isUsingResourcesHook
determines whether the automatic builder generates relevant code for the Resources Hook, this feature is enabled by default.
The generated entry class after enabling it will look like the following.
The following example
class _YukiHookXposedInit : IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources {
override fun initZygote(sparam: IXposedHookZygoteInit.StartupParam?) {
// ...
}
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
// ...
}
override fun handleInitPackageResources(resparam: XC_InitPackageResources.InitPackageResourcesParam?) {
// ...
}
}
If your current project does not need to use Reources Hook, you can set isUsingResourcesHook = false
to disable automatic generation.
The following example
@InjectYukiHookWithXposed(isUsingResourcesHook = false)
The resulting entry class after closing will look like the following.
The following example
class _YukiHookXposedInit : IXposedHookZygoteInit, IXposedHookLoadPackage {
override fun initZygote(sparam: IXposedHookZygoteInit.StartupParam?) {
// ...
}
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
// ...
}
}
The IYukiHookXposedInit
interface that your HookEntryClass
must implements it, which is the entry point for your Module App to start hooking.
Tips
For more functions, please refer to IYukiHookXposedInit.
When your Module App is loaded by Xposed, the onHook
method will be called back, you need to start using YukiHookAPI
in this method.
The basic calling process is
_YukiHookXposedInit
\u2192IYukiHookXposedInit.onXposedEvent
\u2192IYukiHookXposedInit.onInit
\u2192IYukiHookXposedInit.onHook
For details, please refer to API Basic Configs.
If your current Xposed Module uses third-party resources, but may not be able to transfer them in a short time, you can use onXposedEvent
to monitor all loading events of the native Xposed API.
The following example
@InjectYukiHookWithXposed
class HookEntry: IYukiHookXposedInit {
override fun onHook() {
// Your code here.
}
override fun onXposedEvent() {
// Listen to the loading events of the native Xposed API
YukiXposedEvent.events {
onInitZygote {
// The it object is [StartupParam]
}
onHandleLoadPackage {
// The it object is [LoadPackageParam]
}
onHandleInitPackageResources {
// The it object is [InitPackageResourcesParam]
}
}
}
}
onXposedEvent
and onHook
methods exist completely independently and do not affect each other. You can continue to use YukiHookAPI
in the onHook
method.
Tips
For more functions, please refer to the IYukiHookXposedInit.onXposedEvent method.