refactor: big modified

- update dependencies
- migration reflection api to KavaRef
- merge to new api usage
This commit is contained in:
2025-06-16 17:05:06 +08:00
parent cca6e1d2a8
commit c8f1e3441e
191 changed files with 2794 additions and 583 deletions

View File

@@ -0,0 +1,76 @@
# 迁移到 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()
```