Files
YukiHookAPI/docs-source/src/zh-cn/config/move-to-api-1-3-x.md

82 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 迁移到 YukiHookAPI 1.3.x
`YukiHookAPI``1.3.0` 版本开始弃用了自身的反射 API你可以继续向下阅读以查看有哪些注意事项和新功能。
::: warning
如果你正在使用 `1.2.x` 及之前版本的 `YukiHookAPI`,建议先阅读 [迁移到 YukiHookAPI 1.2.x](move-to-api-1-2-x) 而不是此文档。
:::
## 自身反射 API 弃用
`YukiHookAPI``1.3.0` 版本开始弃用了自身的反射 API现在我们推荐所有开发者迁移到全新开发的
[KavaRef](https://github.com/HighCapable/KavaRef),我们不再推荐使用 `YukiHookAPI` 自身的反射 API这些 API 已被标记为弃用。
请参考 [这里](https://highcapable.github.io/KavaRef/zh-cn/config/migration) 的迁移文档,这将跳转到 `KavaRef` 的文档。
`YukiHookAPI` 目前已经实现了反射 API 的完全解耦合,其内部 API 使用的反射 API 同样迁移到了 `KavaRef`,且已经稳定测试通过。
在后期的 `2.0.0` 版本中,自身反射 API 将被完全移除,在此期间,你将有足够的时间来学习和迁移到这套全新的反射 API。
## FreeReflection 弃用
`YukiHookAPI``1.3.0` 版本开始弃用了 [FreeReflection](https://github.com/tiann/FreeReflection) 并迁移到由 LSPosed 团队维护的
[AndroidHiddenApiBypass](https://github.com/LSPosed/AndroidHiddenApiBypass)。
在反射系统隐藏 API 时,你不可以像之前那样直接进行反射,而是需要进行一些操作。
`YukiHookAPI` 内置了 `KavaRef``第三方 Member 解析器` 中的 `AndroidHiddenApiBypassResolver`,现在你可以在需要反射系统隐藏 API 的地方这样去使用它。
> 示例如下
```kotlin
"android.app.ActivityThread".toClass()
.resolve()
// 添加自定义 Member 解析器
.processor(AndroidHiddenApiBypassResolver.get())
.firstMethod {
name = "currentActivityThread"
emptyParameters()
}.invoke()
```
::: warning
`AndroidHiddenApiBypassResolver` 是暂定的功能,可能会在 `2.0.0` 版本迁移到单独的模块中,你也可以参考
[第三方 Member 解析器](https://highcapable.github.io/KavaRef/zh-cn/config/processor-resolvers) 自己实现一份,这将跳转到 `KavaRef` 的文档。
:::
## 方法原始调用
`Xposed` 提供了 `XposedBridge.invokeOriginalMethod` 功能,可以调用未经 Hook 的原始方法。
由于自身反射 API 的弃用,`method { ... }.get().original().call(...)` 的方式将不再可用。
所以,`YukiHookAPI``KavaRef` 添加了扩展功能,现在你依然可以实现这个功能。
`YukiHookAPI` 提供了以下方法来对接 `KavaRef` 的原始方法调用。
- `invokeOriginal(...)``invoke(...)`
- `invokeOriginalQuietly(...)``invokeQuietly(...)`
> 示例如下
```kotlin
// 假设这就是 Test 类的实例
val instance: Any
// 使用 KavaRef 的方法原始调用
"com.example.Test".toClass()
.resolve()
.firstMethod {
name = "test"
emptyParameters()
}.of(instance).invokeOriginal()
```
## 重复 Hook 限制弃用
`YukiHookAPI``1.3.0` 版本开始弃用了重复 Hook 的限制,现在,`YukiHookAPI` 不再限制重复 Hook 同一个方法,你可以在同一个方法上多次 Hook。
`YukiHookAPI` 同时弃用了 `hook { ... }``onAlreadyHooked` 方法,现在此方法将无作用且不会被回调,如有需要,请手动处理重复 Hook 的相关逻辑。