import{_ as o,r as p,o as i,c,b as n,d as a,a as l,e as s}from"./app.cd7e6496.js";const t={},r=l('
Integrate
YukiHookAPI
into your project.
Windows 7 and above / macOS 10.14 and above / Linux distributions (Arch/Debian)
Android Studio 2021.1 and above
IntelliJ IDEA 2021.1 and above
Kotlin 1.7.0 and above
Android Gradle Plugin 7.0 and above
Gradle 7.0 and above
Java 11 and above (Since API 1.0.80
)
YukiHookAPI
provides an automated build tool that can help you quickly build an Android standard project template with Xposed Module dependencies, and use the built template to start the next step directly.
You can click here to check it out.
If you don't want to use automated build tools, you can still manually configure project dependencies as follows.
Use Android Studio
or IntelliJ IDEA
to create a new Android project and select Kotlin
in the Language
column to automatically add basic dependencies.
Add the repositories and dependencies in your project's SweetDependency
configuration file.
The following example
repositories:
# \u2757Must be added when used as an Xposed Module, otherwise optional
rovo89-xposed-api:
url: https://api.xposed.info/
# MavenCentral has a 2-hour cache,
# if the latest version cannot be integrated, please add this
sonatype-oss-releases:
plugins:
# \u2757Must be added when used as an Xposed Module, otherwise optional
com.google.devtools.ksp:
version: +
...
libraries:
# \u2757Must be added when used as an Xposed Module, otherwise optional
de.robv.android.xposed:
api:
version: 82
repositories:
rovo89-xposed-api
com.highcapable.yukihookapi:
api:
version: +
# \u2757Must be added when used as an Xposed Module, otherwise optional
ksp-xposed:
version-ref: <this>::api
...
After adding it, run Gradle Sync and all dependencies will be autowired.
Next, deploy plugins in your project build.gradle.kts
.
The following example
plugins {
// \u2757Must be added when used as an Xposed Module, otherwise optional
autowire(libs.plugins.com.google.devtools.ksp)
// ...
}
Then, deploy dependencies in your project build.gradle.kts
.
The following example
dependencies {
// Basic dependencies
implementation(com.highcapable.yukihookapi.api)
// \u2757Must be added when used as an Xposed Module, otherwise optional
compileOnly(de.robv.android.xposed.api)
// \u2757Must be added when used as an Xposed Module, otherwise optional
ksp(com.highcapable.yukihookapi.ksp.xposed)
}
Add repositories in your project build.gradle.kts
or build.gradle
.
Kotlin DSL
repositories {
google()
mavenCentral()
// \u2757Must be added when used as an Xposed Module, otherwise optional
maven { url("https://api.xposed.info/") }
// MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
maven { url("https://s01.oss.sonatype.org/content/repositories/releases/") }
}
Groovy DSL
repositories {
google()
mavenCentral()
// \u2757Must be added when used as an Xposed Module, otherwise optional
maven { url 'https://api.xposed.info/' }
// MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
}
Add plugins in your project build.gradle.kts
or build.gradle
.
Kotlin DSL
plugins {
// \u2757Must be added when used as an Xposed Module, otherwise optional
id("com.google.devtools.ksp") version "<ksp-version>"
}
Groovy DSL
plugins {
// \u2757Must be added when used as an Xposed Module, otherwise optional
id 'com.google.devtools.ksp' version '<ksp-version>'
}
Add dependencies in your project build.gradle.kts
or build.gradle
.
Kotlin DSL
dependencies {
// Basic dependency
implementation("com.highcapable.yukihookapi:api:<yuki-version>")
// \u2757Must be added when used as an Xposed Module, otherwise optional
compileOnly("de.robv.android.xposed:api:82")
// \u2757Must be added when used as an Xposed Module, otherwise optional
ksp("com.highcapable.yukihookapi:ksp-xposed:<yuki-version>")
}
Groovy DSL
dependencies {
// Basic dependency
implementation 'com.highcapable.yukihookapi:api:<yuki-version>'
// \u2757Must be added when used as an Xposed Module, otherwise optional
compileOnly 'de.robv.android.xposed:api:82'
// \u2757Must be added when used as an Xposed Module, otherwise optional
ksp 'com.highcapable.yukihookapi:ksp-xposed:<yuki-version>'
}
Modify the Java version of Kotlin in your project build.gradle.kts
or build.gradle
to 11 or above.
Kotlin DSL
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
Groovy DSL
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
}
Notice
Since API 1.0.80, the Java version used by Kotlin defaults to 11, and versions 1.8 and below are no longer supported.
Add the base code to your AndroidManifest.xml
.
The following example
<!-- Set as Xposed Module -->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- Set your Xposed Module description -->
<meta-data
android:name="xposeddescription"
android:value="Fill in your Xposed Module description" />
<!-- The minimum Xposed version number -->
<!-- If you are using EdXposed/LSPosed, the minimum recommended is 93 -->
<meta-data
android:name="xposedminversion"
android:value="93" />
<!-- Optional: Configure support for New XSharedPreferences without adjusting xposedminversion to 93 -->
<meta-data
android:name="xposedsharedprefs"
android:value="true"/>
Create a Hook entry class in your project, implements IYukiHookXposedInit
and add the annotation @InjectYukiHookWithXposed
.
The following example
@InjectYukiHookWithXposed
object HookEntry : IYukiHookXposedInit {
override fun onHook() = YukiHookAPI.encase {
// Your code here.
}
}
Suggestion
Please configure YukiHookAPI in the onInit method and set the isDebug mode to the following form.
The following example
override fun onInit() = configs {
isDebug = BuildConfig.DEBUG
}
YukiHookAPI will print all logs for debugging by default.
For a release build, be sure to turn off debugging to prevent a lot of log stuffing on the user's device.
You can also extends Application of your Module App from ModuleApplication to achieve a complete user experience.
For more functions, please refer to ModuleApplication.
Then, you can start writing Hook code.
For configuration details related to use as an Xposed Module, you can click here to continue reading.
If you are currently using Xposed API, you can refer to Migrate from Xposed API.
Create your custom Application
.
Pay Attention
Regardless of the Hook Framework you use, you need to add its docking Xposed dependency support.
If the target Hook Framework does not integrate Xposed API, you need to implement and connect XposedBridge by yourself.
Add YukiHookAPI.encase
method to attachBaseContext
.
The following example
override fun attachBaseContext(base: Context?) {
// Load Hook Framework
//
// Your code here.
//
// Load YukiHookAPI
YukiHookAPI.encase(base) {
// Your code here.
}
super.attachBaseContext(base)
}
Then, you can start writing Hook code in much the same way you would use it as an Xposed Module.
For configuration details related to use as a Hook API, you can click here to continue reading.
Notice
YukiHookPrefsBridge, YukiHookDataChannel and Resources Hook functionality will not work when using a custom Hook Framework instead of the full Xposed Module.