Files
YukiHookAPI/docs/config/api-using.md
2022-04-17 23:23:42 +08:00

108 lines
2.7 KiB
Markdown

# 作为 Hook API 使用的相关配置
> 作为 Hook API 通常为做自身 APP 热更新或功能需要以及产品测试的 Hook 操作。
## 依赖配置
你只需要集成 `com.highcapable.yukihookapi:api` 依赖即可。
然后请集成你目标使用的 `Hook Framework` 依赖。
## 入口配置
创建你的自定义 `Application`
`attachBaseContext` 中添加 `YukiHookAPI.encase` 方法。
> 示例如下
```kotlin
class MyApplication : Application() {
override fun attachBaseContext(base: Context?) {
// 装载 Hook Framework
//
// Your code here.
//
// 配置 YukiHookAPI
YukiHookApi.configs {
// Your code here.
}
// 装载 YukiHookAPI
YukiHookAPI.encase(base) {
// Your code here.
}
super.attachBaseContext(base)
}
}
```
这样,你就完成了 API 的相关配置。
你可以 [点击这里](config/api-example?id=作为-hook-api-使用需要注意的地方) 查看异同点和注意事项。
!> 你不能再使用 `loadApp` 进行包装,可直接开始编写你的 Hook 代码。
## Hook Framework
> 这里给出了一些较高使用率的 `Hook Framework` 如何对接 `YukiHookAPI` 的相关方式。
### [Pine](https://github.com/canyie/pine)
> **所需 Xposed API 依赖** `top.canyie.pine:xposed`
> 示例如下
```kotlin
override fun attachBaseContext(base: Context?) {
// 装载 Pine
PineConfig.debug = true
PineConfig.debuggable = BuildConfig.DEBUG
// 装载 YukiHookAPI
YukiHookAPI.encase(base) {
// Your code here.
}
super.attachBaseContext(base)
}
```
### [SandHook](https://github.com/asLody/SandHook)
> **所需 Xposed API 依赖** `com.swift.sandhook:xposedcompat` 或 `com.swift.sandhook:xposedcompat_new`
> 示例如下
```kotlin
override fun attachBaseContext(base: Context?) {
// 装载 SandHook
SandHookConfig.DEBUG = BuildConfig.DEBUG
XposedCompat.cacheDir = base?.cacheDir
XposedCompat.context = base
XposedCompat.classLoader = javaClass.classLoader
XposedCompat.isFirstApplication = base?.processName == base?.packageName
// 装载 YukiHookAPI
YukiHookAPI.encase(base) {
// Your code here.
}
super.attachBaseContext(base)
}
```
### [Whale](https://github.com/asLody/whale)
> **所需 Xposed API 依赖** `com.wind.xposed:xposed-on-whale`
请参考 [xposed-hook-based-on-whale](https://github.com/WindySha/xposed-hook-based-on-whale)。
> 示例如下
```kotlin
override fun attachBaseContext(base: Context?) {
// 装载 Whale 不需要任何配置
// 装载 YukiHookAPI
YukiHookAPI.encase(base) {
// Your code here.
}
super.attachBaseContext(base)
}
```