# 快速开始 | Yuki Hook API
一个使用 Kotlin 重构的轻量、高效、稳定的 Xposed Hook API

# # 快速开始

> 集成 `YukiHookAPI` 到你的项目中。

## # 环境要求

- Windows 7 及以上/macOS 10.14 及以上/Linux 发行版(Arch/Debian)

- Android Studio 2021.1 及以上

- IntelliJ IDEA 2021.1 及以上

- Kotlin 1.7.0 及以上

- Android Gradle Plugin 7.0 及以上

- Gradle 7.0 及以上

- Jvm 11 及以上 (Since API `1.0.80`)

## # 自动构建项目

`YukiHookAPI` 提供了一个自动化构建工具，它可以帮助你快速构建一个拥有 Xposed 模块依赖的 Android 标准项目模板，使用构建好的模板即可直接开始下一步工作。

你可以 点击这里 进行查看。

## # 手动配置项目

若你不想使用自动化构建工具，你依然可以按照以下方式手动配置项目依赖。

### # 创建项目

使用 `Android Studio` 或 `IntelliJ IDEA` 创建新的 Android 项目，并在 `Language` 一栏选择 `Kotlin` 以自动添加基础依赖。

### # 集成依赖

在你的项目 `build.gradle` 中添加依赖。

> 示例如下

    repositories {
        google()
        mavenCentral()
        // ❗若你的 Plugin 版本过低，作为 Xposed 模块使用务必添加，其它情况可选
        maven { url "https://dl.bintray.com/kotlin/kotlin-eap" }
        // ❗作为 Xposed 模块使用务必添加，其它情况可选
        maven { url "https://api.xposed.info/" }
        // MavenCentral 有 2 小时缓存，若无法集成最新版本请添加此地址
        maven { url "https://s01.oss.sonatype.org/content/repositories/releases" }
    }

在你的 app `build.gradle` 中添加 `plugin`。

> 示例如下

    plugins {
        // ❗作为 Xposed 模块使用务必添加，其它情况可选
        id 'com.google.devtools.ksp' version '<ksp-version>'
    }

在你的 app `build.gradle` 中添加依赖。

> 示例如下

    dependencies {
        // 基础依赖
        implementation 'com.highcapable.yukihookapi:api:<yuki-version>'
        // ❗作为 Xposed 模块使用务必添加，其它情况可选
        compileOnly 'de.robv.android.xposed:api:82'
        // ❗作为 Xposed 模块使用务必添加，其它情况可选
        ksp 'com.highcapable.yukihookapi:ksp-xposed:<yuki-version>'
    }

请将 <ksp-version> 修改为 这里
在新窗口中打开 的最新版本 (请注意选择你当前对应的 Kotlin 版本)。

请将 <yuki-version> 修改为 这里 的最新版本。

特别注意

YukiHookAPI 的 api 与 ksp-xposed 依赖的版本必须一一对应，否则将会造成版本不匹配错误。

在你的 app `build.gradle` 中修改 `Kotlin` 的 Jvm 版本为 11 及以上。

> 示例如下

    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
        kotlinOptions {
            jvmTarget = '11'
        }
    }

注意

自 API 1.0.80 版本后 Jvm 版本默认为 11，不再支持 1.8 及以下版本。

### # 作为 Xposed 模块使用

在你的 `AndroidManifest.xml` 中添加基础代码。

> 示例如下

    <!-- 设置为 Xposed 模块 -->
    <meta-data
        android:name="xposedmodule"
        android:value="true" />

    <!-- 设置你的模块描述 -->
    <meta-data
        android:name="xposeddescription"
        android:value="填写你的 Xposed 模块描述" />

    <!-- 最低 Xposed 版本号，若你正在使用 EdXposed/LSPosed，建议最低为 93 -->
    <meta-data
        android:name="xposedminversion"
        android:value="93" />

    <!-- 可选：配置支持 New XSharePrefs 可无需调整 xposedminversion 为 93 -->
    <meta-data
        android:name="xposedsharedprefs"
        android:value="true"/>

在你的项目中创建一个 Hook 入口类，继承于 `IYukiHookXposedInit` 并加入注解 `@InjectYukiHookWithXposed`。

> 示例如下

    @InjectYukiHookWithXposed
    class HookEntry : IYukiHookXposedInit {

        override fun onHook() = YukiHookAPI.encase {
            // Your code here.
        }
    }

建议

你可以将你的模块 APP 的 Application 继承于 ModuleApplication 以实现完整使用体验。

更多功能请参考 ModuleApplication。

然后，你就可以开始编写 Hook 代码了。

有关作为 Xposed 模块使用的相关配置详细内容，你可以 点击这里 继续阅读。

若你目前正在使用 Xposed API，你可以参考 从 Xposed API 迁移。

### # 作为 Hook API 使用

#### # 集成方式

创建你的自定义 `Application`。

特别注意

无论使用任何 Hook Framework，你都需要加入其对接的 Xposed 依赖支持。

若目标 Hook Framework 没有集成 Xposed API 你需要自行实现并对接 XposedBridge。

在 `attachBaseContext` 中添加 `YukiHookAPI.encase` 方法。

> 示例如下

    override fun attachBaseContext(base: Context?) {
        // 装载 Hook Framework
        //
        // Your code here.
        //
        // 装载 YukiHookAPI
        YukiHookAPI.encase(base) {
            // Your code here.
        }
        super.attachBaseContext(base)
    }

然后，你就可以开始编写 Hook 代码了，方式与作为 Xposed 模块使用基本一致。

有关作为 Hook API 使用的相关配置详细内容，你可以 点击这里 继续阅读。

注意

使用自定义的 Hook 框架而并非完整的 Xposed 模块时，YukiHookModuleStatus、YukiHookModulePrefs、YukiHookDataChannel 以及 Resources Hook 功能将失效。