import{_ as a,r as t,o as n,c as r,b as e,d as o,e as d,a as c}from"./app-CLu4Xwf8.js";const s={},h=e("h1",{id:"更新日志",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#更新日志","aria-hidden":"true"},"#"),o(" 更新日志")],-1),u=e("blockquote",null,[e("p",null,[o("这里记录了 "),e("code",null,"YukiHookAPI"),o(" 的版本更新历史。")])],-1),_=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"特别注意"),e("p",null,"我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。")],-1),k={id:"_1-3-1-2025-09-13",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-3-1-2025-09-13","aria-hidden":"true"},"#",-1),g=e("ul",null,[e("li",null,"更新依赖以解决与 BetterAndroid 冲突的问题"),e("li",null,"修复 Android 9 及以下系统 Activity 代理的问题"),e("li",null,[o("修复在 Hook 方法返回值为 "),e("code",null,"Object"),o(" 时依然检查返回值的问题")])],-1),f={id:"_1-3-0-2025-06-25",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-3-0-2025-06-25","aria-hidden":"true"},"#",-1),m={href:"https://highcapable.github.io/YukiHookAPI/zh-cn/config/move-to-api-1-3-x",target:"_blank",rel:"noopener noreferrer"},P=e("code",null,"YukiHookAPI",-1),b={href:"https://github.com/HighCapable/KavaRef",target:"_blank",rel:"noopener noreferrer"},A=c("
弃用了重复 Hook 的限制,现在你可以重复 Hook 同一个方法弃用了 ModuleAppActivity、ModuleAppCompatActivity,现在请使用 ModuleActivity 创建自己的代理 ActivityYLog 现已允许 msg 传入任意对象,将自动转换为字符串进行打印",3),C=e("code",null,"FreeReflection",-1),y={href:"https://github.com/LSPosed/AndroidHiddenApiBypass",target:"_blank",rel:"noopener noreferrer"},x={id:"_1-2-1-2024-06-20",tabindex:"-1"},Y=e("a",{class:"header-anchor",href:"#_1-2-1-2024-06-20","aria-hidden":"true"},"#",-1),v=e("li",null,"捕获单例 Hooker 中的异常,防止其阻断整个进程",-1),I={href:"https://github.com/zhufengning",target:"_blank",rel:"noopener noreferrer"},M={href:"https://github.com/HighCapable/YukiHookAPI/pull/70",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/xihan123",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/HighCapable/YukiHookAPI/pull/76",target:"_blank",rel:"noopener noreferrer"},S={id:"_1-2-0-2023-10-07",tabindex:"-1"},B=e("a",{class:"header-anchor",href:"#_1-2-0-2023-10-07","aria-hidden":"true"},"#",-1),F=e("li",null,[o("许可协议由 "),e("code",null,"MIT"),o(" 变更为 "),e("code",null,"Apache-2.0"),o(",在此之后的版本将由此许可协议进行分发,您在使用此版本后应变更相关许可协议")],-1),X={href:"https://highcapable.github.io/YukiHookAPI/zh-cn/config/move-to-api-1-2-x",target:"_blank",rel:"noopener noreferrer"},D={href:"https://github.com/BlueCat300",target:"_blank",rel:"noopener noreferrer"},E={href:"https://github.com/HighCapable/YukiHookAPI/pull/44",target:"_blank",rel:"noopener noreferrer"},O=e("code",null,"findAllInterfaces",-1),N={href:"https://github.com/buffcow",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/HighCapable/YukiHookAPI/pull/38",target:"_blank",rel:"noopener noreferrer"},W={href:"https://github.com/cesaryuan",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/HighCapable/YukiHookAPI/issues/47",target:"_blank",rel:"noopener noreferrer"},U={href:"https://github.com/HighCapable/YukiHookAPI/issues/36",target:"_blank",rel:"noopener noreferrer"},G=c("新增 YukiHookAPI.TAG作废了 YukiHookAPI.API_VERSION_NAME、YukiHookAPI.API_VERSION_CODE,统一合并到 YukiHookAPI.VERSION作废了 YukiMemberHookCreator 中的 useDangerousOperation 方法作废了 YukiMemberHookCreator 中的 instanceClass 功能,不再推荐使用修改 HookParam 中的 instanceClass 为空安全返回值类型分离全部使用 injectMember 创建的 Hook 对象到 LegacyCreator修改 PackageParam 中的 appClassLoader 为空安全返回值类型重构全部 logger... 方法到新用法 YLog移除了打印日志功能后方的 --> 样式修复并改进在使用 namespace 后通过 KSP 无法获取模块包名的问题是否启用模块激活状态等功能现已移动到 InjectYukiHookWithXposed 注解中",11),z={href:"https://github.com/tiann/FreeReflection",target:"_blank",rel:"noopener noreferrer"},V=c("新增重复 Hook 同一个方法时将自动打印警告日志作废了 PackageParam 中的 findClass(...) 方法,请迁移到 "...".toClass() 方法作废了 PackageParam 中的 String.hook { ... } 方法,推荐使用新方式进行 HookAppLifecycle 现在可以在不同 Hooker 中重复创建作废了旧版 Hook 优先级写法,统一迁移到 YukiHookPriority移除了 Hook 过程中的 tag 功能重构方法查找中的 remendy 功能,现在可以对其进行分步打印异常多重方法查找结果类型由 HashSet 改为 MutableList新增使用 method()、constructor()、field() 可直接获取到类中的所有对象功能constructor() 的行为不再是 constructor { emptyParam() }新增 lazyClass、lazyClassOrNull 方法,可延迟装载 Class",11),j={id:"_1-1-11-2023-04-25",tabindex:"-1"},K=e("a",{class:"header-anchor",href:"#_1-1-11-2023-04-25","aria-hidden":"true"},"#",-1),Z=e("code",null,"1.1.5",-1),J=e("code",null,"Member",-1),q={href:"https://github.com/Art-Chen",target:"_blank",rel:"noopener noreferrer"},Q=c("移除 Member 的直接缓存功能并作废 YukiHookAPI.Configs.isEnableMemberCache,保留 Class 的缓存功能对接查找功能到 Sequence,优化 Member 的查找速度与性能移除 YukiHookPrefsBridge 的直接键值缓存功能并移除 LruCache 相关功能作废了 YukiHookAPI.Configs.isEnablePrefsBridgeCache作废了 YukiHookPrefsBridge 中的 direct、clearCache 方法",5),$={id:"_1-1-10-2023-04-21",tabindex:"-1"},ee=e("a",{class:"header-anchor",href:"#_1-1-10-2023-04-21","aria-hidden":"true"},"#",-1),oe=c("Activity 代理功能新增每个被代理的 Activity 指定单独的代理 Activity 功能- 修复
YukiHookPrefsBridge 中的 contains、all 方法未判断 native 功能的问题 - 整合
YukiHookPrefsBridge 中的缓存功能到 PreferencesCacheManager 并使用 LruCache 作为键值对前置缓存 - 修改
YukiHookPrefsBridge 键值对缓存功能在所有环境中生效 (模块、宿主) - 修改部分用于缓存的
HashMap 到 ArrayMap 以减少内存消耗 - 修复一些其它可能出现的问题
",1),de={id:"_1-1-9-2023-04-17",tabindex:"-1"},ie=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),le=c("- 将依赖库的类型由 Java Library (jar) 修改为 Android Library (aar)
- 移除通过 Hook 或反射 API 内部方法、参数的检查功能
- 修复
YukiHookDataChannel 自动分段发送数据功能不能正常生效 (依然会抛出异常) 的问题 - 新增可以手动根据目标设备的限制修改
YukiHookDataChannel 允许一次发送的最大数据字节大小 - 移除
YukiHookDataChannel 只能在模块 Activity 中使用的限制,现在你可以在任何地方使用它 - 修改并规范
YukiHookDataChannel 使用的广播 Action 名称 - 修复
YukiHookDataChannel 在不同模块同一宿主的情况下出现 BadParcelableException 异常的问题 - 新增
ExecutorType,可以通过 YukiHookAPI.Status.Executor.type 来获取已知 Hook Framework 的类型 YukiHookModulePrefs 更名为 YukiHookPrefsBridge- 修改
YukiHookPrefsBridge 为非单例实现,作为单例可能发生数据混淆的问题 - 作废了
Context.modulePrefs(...) 方法,请迁移到 Context.prefs(...) YukiHookPrefsBridge 新增 native 方法,支持直接作为原生存储在模块和宿主中存储私有数据- 整合
YukiHookPrefsBridge 中的存储方法到 YukiHookPrefsBridge.Editor,请使用 edit 方法来存储数据 YukiHookPrefsBridge 新增 contains 方法- 缓存
YukiHookPrefsBridge 中动态创建的代理对象,尝试修复可能会导致宿主、模块出现 OOM 的问题 - 修改
Activity 代理功能的代理类为动态生成,防止不同模块注入宿主后造成冲突 - 修复一些其它可能出现的问题
",1),ce={id:"_1-1-8-2023-02-01",tabindex:"-1"},te=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),ae=e("code",null,"result",-1),ne={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},re={href:"https://github.com/HighCapable/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},se=c("移动 YukiHookAPI 自动生成的入口类名称文件 assets/yukihookapi_init 到 resources/META-INF/yukihookapi_init允许在仅打印异常堆栈时 msg 参数为空并可以不设置 msg 参数,留空 msg 参数的日志除非异常堆栈不为空否则将不会被记录修复 Hook 回调方法体内发生的异常打印的日志无具体方法信息的 BUGHookParam 新增 instanceOrNull 变量与方法,可以在不确定 Hook 实例是否为空的前提下使用以防止 Hook 实例为空抛出异常解耦合所有 Member 查找功能中的 Hooker 到 MemberBaseFinder.MemberHookerManager修改了 YukiMemberHookCreator 中的 by 条件用法,现在可以重复使用 by 方法设置多个条件移除了 Android type 中的错误 Class 对象声明PackageParam.AppLifecycle 中的 registerReceiver 方法新增直接使用 IntentFilter 创建系统广播监听的功能修复在 PackageParam.AppLifecycle 中可能存在多次注册生命周期的问题Revert: 1.1.7 版本由于有一个严重问题已经撤回,请直接更新到此版本即可 (更新日志同 1.1.7 版本)",10),he={id:"_1-1-6-2023-01-21",tabindex:"-1"},ue=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),_e=c("- 修复 Xposed 模块装载时可能存在同一个进程多个包名的情况导致
PackageParam 保持单例后 ClassLoader 不符的严重问题 - 新增同一个进程多个包名的情况下未区分包名时,停止装载单例化的子 Hooker 并打印警告信息
- 修复
HookParam.callOriginal、HookParam.invokeOriginal 等方法调用原始方法时参数个数不正确的问题 - 修改
MethodFinder、ConstructorFinder、ReflectionFactory 中反射调用的方法参数名 param 为 args - 新增 Xposed 模块自动处理程序中判断入口类构造方法参数功能,入口类需要保证其不存在任何构造方法参数
",1),ke={id:"_1-1-5-2023-01-13",tabindex:"-1"},pe=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),ge=c('- 规范并优化整体代码风格
- 对部分内部调用的 API 进行了私有化处理
- 底层 API 接口整体解耦合,为兼容更多 Hook Framework 做准备
- 将部分集成于 API 中的功能移动到
ksp-xposed 依赖 (解耦合),单独引入 api 依赖将不再包含第三方库等功能的引用 - 文档 快速开始 页面加入
YukiHookAPI.Configs.isDebug 何时需要关闭的说明 - 规范类型定义中的 Java 原始类型 (Primitive Type) 并同步更新到文档
- Java
type 新增 NumberClass 类型 - 改进了 (Xposed) 宿主环境的识别能力
- 接管了 Xposed 模块装载后的全部异常,若发生异常将会自动拦截并打印错误日志
- 修改类型定义中较低 Android 系统版本 (Android 5.0) 中不存在的
Class 为空安全类型 - 适配并支持原生 Xposed,最低推荐版本为 Android 7.0
- Hook 入口类新增支持声明为
object 类型 (单例) - 修复 Android 8 以下系统不支持
Executable 类型导致 Hook 失效的问题 - 修复 Android 9 以下系统在使用
Activity 代理功能时报错问题并限制此功能最低支持版本为 Android 7.0 - 新增禁止资源注入与
Activity 代理功能注入当前模块自身实例进程,防止发生问题 - 修复一个 Hook 过程中方法返回值的对象是目标的继承类和接口时被识别为返回值不符的严重错误
- 修复在当前 Hook 的实例对象是静态的情况下调用
HookParam.callOriginal、HookParam.invokeOriginal 出现对象为空问题 - 优化对太极激活方法相关判断功能以及同步更新文档相关说明
- 作废了
YukiHookAPI.Status.executorName、YukiHookAPI.Status.executorVersion,请迁移到 YukiHookAPI.Status.Executor - 适配了一些第三方 Hook Framework 的
YukiHookAPI.Status.Executor.name 名称显示功能 - 新增
Class.extends、Class.implements 等方法,可更加方便地判断当前 Class 的继承与接口关系 - 新增
Class.toClass、Class.toClassOrNull 等相关方法的同名泛型方法,可使用泛型来约束已知 Class 的实例对象类型 - 修改
classOf<T> 方法的返回值为泛型 T,以约束已知 Class 的实例对象类型 - 新增
Class 相关扩展方法的 initialize 参数,可控制在得到 Class 对象时是否同时初始化其静态方法块 - 变量、方法、构造方法查找功能中新增
param { ... }、type { ... } 等用法,可对查找的对象增加更加具体的条件判断 PackageParam 的 loadApp 方法新增 isExcludeSelf 参数,可用于排除 Hook 相关功能注入模块自身实例进程PackageParam 的 onAppLifecycle 方法新增 isOnFailureThrowToApp 参数,可将生命周期方法体内发生的异常直接抛给宿主- 修改
PackageParam 中的 appClassLoader 为可修改变量,可在 Hook 过程中动态设置宿主使用的 ClassLoader HookParam 中新增 dataExtra 功能,可用于临时存储 Hook 方法体中的数据- 作废
YukiHookModulePrefs 中的 isRunInNewXShareMode、isXSharePrefsReadable,统一合并到 isPreferencesAvailable Class.allFields、Class.allMethods 等相关方法新增 isAccessible 参数,可控制成员对象何时可被设置为可访问类型- 修复
YukiHookDataChannel 存在多个宿主时在一个 Activity 中接收相同键值数据时仅会回调最后一个方法体的问题 YukiHookDataChannel 的 wait 等相关方法中新增 priority 参数,可传入 ChannelPriority 来自定义回调数据结果的条件YukiHookDataChannel 新增发送数据时自动使用 ChannelDataWrapper 类型包装功能,提升使用体验并增强数据保护YukiHookDataChannel 新增限制一次性发送数据的最大字节大小功能,防止数据过大造成 APP 崩溃YukiHookDataChannel 新增发送数据过大时自动分段发送功能,仅支持 List、Map、Set、String 类型YukiHookLogger 新增 contents 方法与 saveToFile 的 data 参数,可传入自定义的调试日志数据进行格式化或保存到文件- 修复
YukiHookLogger 处理后的调试日志数据包名可能在 (Xposed) 宿主环境不正确的问题 - 修复 Xposed 模块装载资源钩子 (Resources Hook) 事件时在部分系统上 (部分系统 APP 中) 包名可能不正确的问题
',1),fe={id:"_1-1-4-2022-10-04",tabindex:"-1"},He=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),me=c("- 修复
YukiHookDataChannel 可能不能响应系统框架中响应广播事件的问题,在 Android 13 中复现 - 修复
YukiHookDataChannel 长达多个版本在 (Xposed) 宿主环境无法与模块通讯的问题 YukiHookDataChannel 中新增 obtainLoggerInMemoryData 方法,可在模块与宿主之间共享调试日志数据- 修改
YukiHookLogger.inMemoryData 的类型为 ArrayList 并修改 YukiLoggerData 为 data class - 修复
YukiLoggerData 在模块中包名为空打印空白的问题 PackageParam 中新增 loadApp、loadZygote、loadSystem、withProcess 的同名多参数方法- 修复了一些可能存在的 BUG
",1),Pe={id:"_1-1-3-2022-09-30",tabindex:"-1"},be=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),Ae=e("ul",null,[e("li",null,"修复一个无法自定义 Hook 入口类名的致命错误"),e("li",null,[o("添加 "),e("code",null,"LoggerFactory"),o(" 中的部分代码注释文案并更新特色功能文档")])],-1),Ce={id:"_1-1-2-2022-09-30",tabindex:"-1"},ye=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),xe=c('- 文档 基础知识 页面新增 English 版本友情链接
- 修复
YukiBaseHooker 注释中的 English 文档链接错误问题 - 修复
ModuleClassLoader 中的 ClassCastException 问题 - 修正并规范部分代码注释
- 新增
ModuleClassLoader 排除列表功能,可使用 excludeHostClasses 和 excludeModuleClasses 方法来自定义排除列表 - 新增
YukiLoggerData 实时日志数据类,可实时通过 YukiHookLogger.inMemoryData 获取日志数组 - 新增
ClassLoader.listOfClasses 方法,可直接获取当前 Dex 中的全部 Class
',1),Ye={id:"_1-1-1-2022-09-28",tabindex:"-1"},ve=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),Ie=e("ul",null,[e("li",null,[o("修复了文档 "),e("a",{href:"../guide/knowledge"},"基础知识"),o(" 页面友情链接错误的问题")]),e("li",null,[o("修复了文档 "),e("code",null,"favicon"),o(" 不显示的问题")]),e("li",null,[o("修复 "),e("code",null,"DexClassFinder"),o(" 查找条件中的 BUG")])],-1),Me={id:"_1-1-0-2022-09-28",tabindex:"-1"},Re=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),Le=e("li",null,[o("这是一次大版本更新,有关更新日志中提到的变化及用法请参考 "),e("a",{href:"../api/home"},"API 文档"),o(" 以及 "),e("a",{href:"../api/special-features/reflection"},"特色功能")],-1),Se={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},Be=c('统一并规范文档中的术语名词,例如“查询”一律更改为了“查找”,XposedHelper 拼写错误修改为了 XposedHelpers文档 基础知识 页面加入友情链接,仅限简体中文将 Hook App Demo 的 Class 与 Method 转为 Java 以提供更好的演示效果修正了 Hook Module Demo 中的代码注释命名重构了大量底层 Hook 逻辑及 Xposed API 的对接方式移除了 HookParamWrapper,现已将其直接与 YukiBridgeFactory 对接移动部分 YukiHookBridge 中的方法到 AppParasitics移除了 HookParam.args 与底层的直接对接方法 setArgs,直接获取并设置当前数组的对象优化自动处理程序,将引用的 jar 合并到 stub 项目',9),Fe={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Xe=c("对 API 私有工具类的方法进行了 internal 闭包处理,避免污染顶级命名空间修正了所有反射和 Hook 类的 Creater 命名到 Creator新增 YukiHookAPI.Status.compiledTimestamp 功能,可以在作为 Xposed 模块使用时获取编译完成的时间戳新增 YukiHookAPI.Status.isXposedEnvironment 功能,可以判断当前为 (Xposed) 宿主环境还是模块环境调试日志功能进行了大改版,现已将 YukiHookAPI.Configs.debugTag 等功能合并到 YukiHookLogger.Configs 中调试日志新增可指定打印使用的方法为 XposedBridge.log 或 Logd调试日志中默认加入当前宿主的包名以及当前用户 ID,以供调试,你可以在 debugLog 配置中自行更改新增 generic 功能,可对泛型进行反射和调用,你可以在 Class 或 CurrentClass 中使用它作废 buildOfAny 方法,现在请直接使用 buildOf 方法 (不带泛型) 来使用构造方法创建新对象并得到结果 Any修复 hasExtends 使用过程发生空指针异常的问题CurrentClass 新增非 lambda 方式的调用方法CurrentClass 新增 name 与 simpleName 功能完全重写 ReflectionTool 的核心方法,将不同的查找条件进行了整理分类修复 ReflectionTool 中可能的直接调用 declared 获取的 Member 抛出异常的问题修复 ReflectionTool 中 UndefinedType 未在 Method 与 Constructor 条件中正确判断的问题新增反射查找结果发生异常时的友好提示方式,可具体定位到指定条件找不到 Member 的问题反射查找 Method、Constructor 中新增 VagueType 条件,可使用在 param 条件中用于忽略你不想填写的参数反射查找 Method、Constructor 中新增 paramCount { ... } 条件,现在你可以直接拿到其中的 it 来自定义你的判断条件FieldFinder 结果中新增 current 方法,可直接对结果实例创建调用空间修改了反射查找功能中的 modifiers 条件以及 name 条件,现在你需要对此方法体结尾返回一个 Boolean 以使条件成立",20),De=e("code",null,"ModifierRules",-1),Ee=e("code",null,"as*",-1),Oe=e("code",null,"is*",-1),Ne={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Te=c("FieldFinder 中新增 RemedyPlan 功能新增 Dex 中的 Class 模糊查找功能 (Beta),你现在可以直接使用 searchClass 功能来使用指定条件模糊查找 Class",2),We=e("strong",null,"AA",-1),we={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Ue=e("code",null,"appClassLoader",-1),Ge={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ze=e("li",null,[o("修改了 "),e("code",null,"XposedBridge.invokeOriginalMethod"),o(" 的调用方式并在 "),e("code",null,"MethodFinder.Result.Instance"),o(" 中增加 "),e("code",null,"original"),o(" 功能")],-1),Ve=e("code",null,"YukiHookModulePrefs",-1),je=e("code",null,"getStringSet",-1),Ke={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},Ze={href:"https://github.com/HighCapable/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Je=e("li",null,[o("修改 "),e("code",null,"YukiHookModulePrefs"),o(",拦截 "),e("code",null,"XSharePreference"),o(" 可能不存在的异常")],-1),qe=e("li",null,[o("修复 "),e("code",null,"YukiHookDataChannel"),o(" 在某些第三方 ROM 系统框架中无法注册成功的问题")],-1),Qe=e("li",null,[o("安全化 "),e("code",null,"YukiHookDataChannel"),o(",现在它只能在来自指定包名的模块与宿主之间通信")],-1),$e=e("code",null,"SharedPreferences",-1),eo=e("code",null,"0664",-1),oo={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},io=c("新增 YukiHookAPI.Configs.isEnableHookSharedPreferences 功能,默认关闭,若 SharedPreferences 的权限错误可进行启用修复查找 Constructor 时无参构造方法在不填写查找条件时无法找到的 BUG,感谢 B5 KAKA 的反馈分离位于 injectMember 中 method、constructor 的 Result 实例到 Process在 Hook 过程中新增 useDangerousOperation 方法,未进行声明时在 Hook 危险列表中的功能后会自动停止 Hook 并打印错误新增模块资源注入与 Activity 代理功能,你可以调用 injectModuleAppResources 及 registerModuleAppActivities 来使用新增 ModuleContextThemeWrapper 功能,你可以调用 applyModuleTheme 在任意 Activity 中创建模块的 Context新增 ClassLoader.onLoadClass 功能,可用于监听 ClassLoader 的 loadClass 方法被调用的事件作废了 classOf 与 clazz 扩展方法,新增 toClass 以及 toClassOrNull 用法,请现在迁移到新的方法VariousClass 新增 getOrNull 方法,可在匹配不到 Class 的时候不抛出异常而是返回 nullPackageParam.hook 中移除了 isUseAppClassLoader 参数,修改为 isForceUseAbsolute 并自动匹配目标 ClassPackageParam 新增 systemContext 功能,你可以在任意时间调用此功能获取一个持久化的 Context不再对外开放 HookClass 中的任何方法HookParam 中新增 throwToApp 功能,可将异常直接抛给宿主Hook 回调中新增 onFailureThrowToApp 功能,可在发生异常时直接抛给宿主修改了调试日志的打印逻辑,反射查找功能中的耗时记录仅会在 Hook 过程中进行打印Hook 过程中新增解除 Hook 功能,可使用 remove 及 removeSelf 方法解除 Hook修复在 ReplaceHook 失败的时候导致宿主抛出异常的问题,现修改为调用原始方法保证宿主功能正常运行新增 Hook 过程中对方法返回值的检查功能,在返回值不匹配的情况下会根据情景自动抛出异常或打印错误",18),lo=e("code",null,"array",-1),co={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},to={href:"https://github.com/HighCapable/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},ao=e("li",null,[o("移动 "),e("code",null,"me.weishu.reflection"),o(" 到 "),e("code",null,"thirdparty"),o(" 防止同时引入的同名依赖冲突")],-1),no=e("li",null,"移除 Hook 方法体为空时抛出的异常,修改为打印警告日志",-1),ro=e("li",null,[o("修改 "),e("code",null,"AppLifecycle"),o(" 的异常处理逻辑,当其发生异常时直接抛给宿主")],-1),so=e("li",null,"更新 Demo 的 API 版本到 33",-1),ho={id:"_1-0-92-2022-05-31",tabindex:"-1"},uo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),_o=c("- 修正了大量方法中 callback 的命名方法
- 更换方案再次修复
YukiHookDataChannel 在低于 Android 12 的设备上不能回调当前 Activity 广播的问题 InjectYukiHookWithXposed 注解新增 isUsingResourcesHook 功能,现在你可以选择性关闭自动生成 IXposedHookInitPackageResources 的依赖接口了
",1),ko={id:"_1-0-91-2022-05-29",tabindex:"-1"},po=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),go=e("code",null,"ClassLoader",-1),fo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Ho=c("修复 YukiHookDataChannel 在 ZUI 以及低于 Android 12 的系统上不能回调当前 Activity 广播的问题整合 YukiHookModuleStatus 功能到 YukiHookAPI.Status,重写了大量方法,现在你可以在模块与宿主中双向判断模块激活等状态信息",2),mo={id:"_1-0-90-2022-05-27",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),bo=c("- 修复
YukiHookDataChannel 在模块设置监听回调时闪退的问题 - 修复
YukiHookDataChannel 在非当前 Activity 情况下依然会回调的问题 - 移除
YukiHookDataChannel 回调事件的默认值,没有即不回调 - 移除
YukiHookModulePrefs 在 XShare 不可读的情况下打印的警告 - 新增
YukiHookModulePrefs 中的 isXSharePrefsReadable 方法,可判断当前的 XShare 是否可用
",1),Ao={id:"_1-0-89-2022-05-26",tabindex:"-1"},Co=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),yo=c("- 修复
YukiHookDataChannel 不能重复设置监听的问题,并加入在模块不同 Activity 中重复响应和自动跟随 Activity 销毁监听功能 - 新增
YukiHookDataChannel 重复监听用例说明文档 - 加入
onAlreadyHooked 方法,可判断当前方法是否被重复 Hook - 修改部分重复添加 HashMap 的逻辑,移除
putIfAbsent 方法,允许覆盖添加 - 修复了几处可能的 BUG
",1),xo={id:"_1-0-88-2022-05-25",tabindex:"-1"},Yo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),vo=c("- 对 Xposed API 完全解耦合
- 增加了
type 中的 android 类型 - 将
YukiHookModuleStatus 从自动生成代码中分离,并加入 isEnableHookModuleStatus 的开关,由你决定是否启用 - 对 API 大量类的构造方法进行了 internal 闭包处理
- 将
YukiHookModulePrefs 设置为单例运行,防止重复创建浪费系统资源 - 修复自
1.0.80 版本后无法嵌套 Hook 的 BUG,并优化嵌套 Hook 相关功能 - 修改 Hooker 存储方案由 HashSet 到 HashMap,防止重复添加 Hooker 的问题
- 修改 Hook 核心实现方法,加入查重,避免重复 Hook 多次回调
HookParam 方法 MethodFinder 与 FieldFinder 加入查找模糊方法、变量名称功能,可调用 name { ... } 来设置查找条件,支持正则- 优化并修改
appContext 的获取方式,降低会取到空的问题的可能性 - 修改自动生成的代码中
logger 的打印 TAG 默认为你自定义的名称,方便进行调试 - 优化
YukiHookBridge 的 Hooker 实现方式,提升 Hook 性能 PackageParam 增加 onAppLifecycle 方法,可原生监听宿主的生命周期以及实现注册系统广播功能- 新增
YukiHookDataChannel 功能,可在模块与宿主保持存活的情况下使用系统无序广播进行通讯 YukiHookDataChannel 增加 checkingVersionEquals 方法,可通过监听来验证模块更新后宿主并未更新版本不匹配问题demo-module 的示例代码中新增 Java 版本的示例,仅供参考
",1),Io={id:"_1-0-87-2022-05-10",tabindex:"-1"},Mo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Ro=e("ul",null,[e("li",null,[o("新增 "),e("code",null,"refreshModuleAppResources"),o(" 功能,以适配语言区域、字体大小、分辨率改变等情况下的 Resources 刷新")]),e("li",null,[o("新增 "),e("code",null,"isEnableModuleAppResourcesCache"),o(" 功能,可自行设置是否自动缓存当前模块的 Resources")])],-1),Lo={id:"_1-0-86-2022-05-06",tabindex:"-1"},So=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Bo=e("ul",null,[e("li",null,[o("修复不支持 Resources Hook(资源钩子) 的情况下在 "),e("code",null,"initZygote"),o(" 时持续报错的问题,复现在 "),e("strong",null,"ZUI"),o("/"),e("strong",null,"LSPosed CI(1.8.3-6550)")]),e("li",null,"优化并对 Resources Hook 进行异常处理,只有被使用后不支持才会打印错误和警告")],-1),Fo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Do=c("- 修复无法 Hook 系统框架的严重问题,从
1.0.80 开始出现 - 调试日志中新增区分
initZygote 装载的包名为 android-zygote,packageName 保持 android 不变
",1),Eo={id:"_1-0-83-2022-05-04",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),No=e("ul",null,[e("li",null,[o("修复 "),e("code",null,"YukiHookModuleStatus"),o(" 在 "),e("code",null,"loadSystem"),o(" 后大量报错的问题")]),e("li",null,[o("新增 "),e("code",null,"type"),o(" 中的 "),e("code",null,"android"),o(" 类型")]),e("li",null,"更新帮助文档的示例说明")],-1),To={id:"_1-0-82-2022-05-04",tabindex:"-1"},Wo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),wo=e("ul",null,[e("li",null,[o("修复了一处概念混淆错误,区分 "),e("code",null,"initZygote"),o(" 与系统框架的关系,之前的注释和文档有问题,非常抱歉")]),e("li",null,[e("code",null,"PackageParam"),o(" 新增 "),e("code",null,"loadSystem"),o(" 方法,不需要再写 "),e("code",null,'loadApp(name = "android")'),o(" 即可 Hook 系统框架")])],-1),Uo={id:"_1-0-81-2022-05-04",tabindex:"-1"},Go=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),zo=e("ul",null,[e("li",null,[o("修复使用 "),e("code",null,"by"),o(" 方法设置条件后 Hook 方法体内查找不到的方法、构造方法依然输出错误日志的问题")]),e("li",null,"在执行 Hook 过程中加入全局日志显示当前 Hook APP 的包名,并修复一处错误日志打印样式的问题")],-1),Vo={id:"_1-0-80-2022-05-01",tabindex:"-1"},jo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),Ko=c("InjectYukiHookWithXposed 注解新增 entryClassName 功能,可自定义生成的 xposed_init 入口类名YukiHookXposedInitProxy 更名为 IYukiHookXposedInit,原接口名称已作废,将在后续版本中直接被删除新增 initZygote 与 Resources Hook 功能,支持 Hook Layout新增 onXposedEvent 方法,可监听原生 Xposed API 的全部事件对 Hook 功能的 lambda 进行 inline 处理,避免生成过碎的匿名类,提升编译后的运行性能修复 PrefsData 编译后的方法体复制过大的问题增加 XSharePreference 可读性测试,失败后会自动打印警告日志PackageParam 新增 appResources、moduleAppResources、moduleAppFilePath 功能PackageParam 的 loadApp 新增不写 name 功能,默认筛选全部 APPPackageParam 新增 loadZygote 方法,可直接 Hook 系统框架PackageParam 新增 resources().hook 功能优化方法、构造方法、变量查找功能,找不到的错误日志将优先显示已设置的查找条件增加 hasExtends 扩展方法,可判断当前 Class 是否有继承关系增加 isSupportResourcesHook 功能,判断当前是否支持资源钩子(Resources Hook)current 功能新增 superClass 方法调用父类查找方法、构造方法、变量新增 superClass 查找条件,可继续在父类中查找YukiHookAPI 大量方法与 Xposed API 解耦合新增 Xposed API 的原生 Hook 优先级功能修复 isFirstApplication 可能判断不准确的问题屏蔽 MIUI 系统上 MiuiCatcherPatch 重复调用 Hook 入口方法的问题优化 Hook 入口调用方法,避免因为 Hook Framework 问题导致多次调用",21),Zo=e("code",null,"ClassLoader",-1),Jo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},qo=e("li",null,[o("提升 "),e("code",null,"XC_Callback"),o(" 接口对接后的性能")],-1),Qo=e("li",null,[o("Java "),e("code",null,"type"),o(" 新增 "),e("code",null,"ClassLoader"),o(" 类型")],-1),$o=e("li",null,"优化 API 帮助文档,修复可能持续缓存页面的问题",-1),ed={id:"_1-0-78-2022-04-18",tabindex:"-1"},od=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),dd=c("YukiHookModulePrefs 新增 isRunInNewXShareMode 方法,可用于判断模块当前是否处于 New XSharePreference 模式修复 YukiHookModulePrefs 在 New XSharePreference 模式下工作的部分问题新增 ModulePreferenceFragment,现在,你可以完全替换掉 PreferenceFragmentCompat 并开始使用新的功能",3),id=e("code",null,"PreferenceFragmentCompat",-1),ld={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},cd=e("li",null,"更新自动处理程序以及 Kotlin 依赖到最新版本",-1),td=e("li",null,"修正部分文档和代码注释中的错误",-1),ad={id:"_1-0-77-2022-04-15",tabindex:"-1"},nd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),rd=e("code",null,"YukiHookModulePrefs",-1),sd=e("code",null,"clear",-1),hd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ud=c("YukiHookModulePrefs 新增 getStringSet、putStringSet、all 方法HookParam 的 args 增加 any 方法新增 ModuleApplication,可在模块中继承此类实现更多功能对接全部的 findClass 功能到 Xposed API,在非宿主环境继续使用原生 ClassLoader修复了一些可能存在的 BUG",5),_d={id:"_1-0-75-2022-04-13",tabindex:"-1"},kd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),pd={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},gd=c("修正一处文档注释的引用未更改的问题HookParam 中删除了 firstArgs 与 lastArgs 方法,现在你可以使用 args().first() 与 args().last() 来取代它HookParam 中删除了 args() 中的默认参数 index = 0,现在你可以使用 args().first() 或 args(index = 0) 来取代它HookParam 中 result 功能增加了泛型匹配,现在你可以使用 result<T> 来匹配你的目标方法已知返回值类型了方法、构造方法查找功能新增 emptyParam 条件,并完善了文档相关需要注意的查找条件误区增加了 type 中的 android 类型",6),fd=e("h3",{id:"_1-0-73-2022-04-10",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#"),o(" 1.0.73 | 2022.04.10")],-1),Hd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},md=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Pd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},bd=e("li",null,"修复一些已知的 BUG,提升 Hook 稳定性",-1),Ad={id:"_1-0-72-2022-04-09",tabindex:"-1"},Cd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),yd=e("ul",null,[e("li",null,"更新 API 文档到新的地址"),e("li",null,[e("code",null,"PackageParam"),o(" 中加入 "),e("code",null,"appContext"),o(" 功能")]),e("li",null,"修复一些已知的 BUG,提升 Hook 稳定性")],-1),xd={id:"_1-0-71-2022-04-04",tabindex:"-1"},Yd=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),vd=e("ul",null,[e("li",null,"修复 VariousClass 无法匹配时会停止 Hook 抛出异常的严重问题")],-1),Id={id:"_1-0-70-2022-04-04",tabindex:"-1"},Md=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Rd=e("li",null,[o("修复 "),e("code",null,"instanceClass"),o(" 在静态实例中调用后报错问题")],-1),Ld=e("code",null,"isUseAppClassLoader",-1),Sd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Bd=e("li",null,[o("加入 "),e("code",null,"withProcess"),o(" 功能,可根据 APP 当前指定进程进行 Hook")],-1),Fd=e("li",null,"修复查找方法、构造类和变量的严重逻辑错误问题",-1),Xd=e("li",null,"修复 Hook 目标类不存在的时候无法忽略异常输出的问题",-1),Dd=e("li",null,"修复部分情况下 APP 启动方法装载过快导致 Hook 不能生效的问题",-1),Ed=e("code",null,"allMethods",-1),Od={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Nd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Td=e("li",null,"修改 Xposed 入口注入类的方式,重新声明 API 的定义域",-1),Wd=e("code",null,"index",-1),wd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ud=e("li",null,[o("查找方法、变量时允许传入多种类型,例如 "),e("code",null,"String"),o(" 声明的类名和 "),e("code",null,"VariousClass")],-1),Gd=e("li",null,[o("加入全新的 "),e("code",null,"current"),o(" 功能,可对任意的类构建一个反射方法操作空间,方便地调用和修改其中的方法和变量")],-1),zd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Vd={id:"_1-0-69-2022-03-30",tabindex:"-1"},jd=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Kd=e("li",null,"添加并改进一些方法功能的注释",-1),Zd=e("li",null,"增加 Demo 中的更多示例 Hook 内容",-1),Jd=e("code",null,"allMethods",-1),qd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Qd={id:"_1-0-68-2022-03-29",tabindex:"-1"},$d=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),ei=c("- 增加 Demo 中的新用例和 LSPosed 作用域
- 增加
Member 查找缓存和查找缓存配置开关 - 移除和修改
MethodFinder、FieldFinder 以及 HookParam 相关方法的调用 - 增加更多
Finder 中的 cast 类型并支持 cast 为数组 - 整体的性能和稳定性提升
- 修复上一个版本可能存在的 BUG
",1),oi={id:"_1-0-67-2022-03-27",tabindex:"-1"},di=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),ii=c("- 增加三个
Finder 中的 modifiers 功能,可筛选 static、native、public、abstract 等诸多描述类型 - 增加方法和构造方法查找时可模糊方法参数类型为指定个数进行查找
- 增加
Member 的 hasModifiers 扩展功能 - 增加
MethodFinder 和 ConstructorFinder 中的 give 方法,可获得原始类型 - 增加
YukiHookModulePrefs 中的 PrefsData 模板功能 - 彻底对方法、构造方法及变量的查找方案进行重构
- 优化代码注释,修复了可能产生的 BUG
",1),li={id:"_1-0-66-2022-03-25",tabindex:"-1"},ci=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),ti=e("ul",null,[e("li",null,[o("修复 "),e("code",null,"MethodFinder"),o(" 中的一个严重问题")]),e("li",null,[o("增加 "),e("code",null,"hookParam"),o(" 中的 "),e("code",null,"args"),o(" 调用方法")]),e("li",null,"修复其它可能存在的问题以及修复部分类的注释问题")],-1),ai={id:"_1-0-65-2022-03-25",tabindex:"-1"},ni=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),ri=c("- 重新发布版本修复 Maven 仓库因为缓存问题新版本不正确的情况
- 增加
MethodFinder 与 FieldFinder 新的返回值调用方法 - 修复可能存在的问题,并修复太极使用过程中可能存在的问题
- 修复自动生成 Xposed 入口类可能发生的问题
- 增加了
type 中的 android 类型以及 Java 类型
",1),si={id:"_1-0-6-2022-03-20",tabindex:"-1"},hi=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),ui=c("- 修复
YukiHookModulePrefs 在使用一次 direct 忽略缓存后每次都忽略的 BUG - 增加新的 API,作废了
isActive 判断模块激活的传统用法 - 修复非 Xposed 环境使用 API 时打印调试日志的问题
- 修复查找
Field 时的日志输出问题和未拦截的异常问题 - 解耦合
ReflectionUtils 中的 Xposed API - 增加
YukiHookModuleStatus 方法名称的混淆,以精简模块生成的体积 - 装载模块自身 Hook 时将不再打印欢迎信息
- 修复上一个版本仍然存在的某些 BUG
",1),_i={id:"_1-0-55-2022-03-18",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),pi=e("ul",null,[e("li",null,"修正一处注释错误"),e("li",null,"临时修复一个 BUG"),e("li",null,[o("增加了 "),e("code",null,"type"),o(" 中的大量 "),e("code",null,"android"),o(" 类型以及少量 Java 类型")]),e("li",null,"修复新版与旧版 Kotlin APIs 的兼容性问题")],-1),gi={id:"_1-0-5-2022-03-18",tabindex:"-1"},fi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Hi=c("- 修复旧版本 LSPosed 框架情况下欢迎信息多次打印的问题
- 添加
onInit 方法来配置 YukiHookAPI - 新增
executorName 和 executorVersion 来获取当前 Hook Framework 的名称和版本号 - 新增
by 方法来设置 Hook 的时机和条件 YukiHookModulePrefs 新增可控制的键值缓存,可在宿主运行时模块动态更新数据- 修复了一些可能存在的 BUG
",1),mi={id:"_1-0-4-2022-03-06",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),bi=c("- 修复 LSPosed 在最新版本中启用“只有模块classloader可以使用Xposed API”选项后找不到
XposedBridge 的问题 - 添加
YukiHookAPI 的常量版本名称和版本号 - 新增
hasField 方法以及 isAllowPrintingLogs 配置参数 - 新增
isDebug 开启的情况下 API 将自动打印欢迎信息测试模块是否生效
",1),Ai={id:"_1-0-3-2022-03-02",tabindex:"-1"},Ci=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),yi=c("- 修复一个潜在性的异常未拦截 BUG
- 增加
ignoredError 功能 - 增加了
type 中的 android 类型 - 增加监听
hook 后的 ClassNotFound 功能
",1),xi={id:"_1-0-2-2022-02-18",tabindex:"-1"},Yi=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),vi=e("ul",null,[e("li",null,"修复 Windows 下无法找到项目路径的问题"),e("li",null,[o("移除部分反射 API,合并至 "),e("code",null,"BaseFinder"),o(" 进行整合")]),e("li",null,"增加直接使用字符串创建 Hook 的方法")],-1),Ii={id:"_1-0-1-2022-02-15",tabindex:"-1"},Mi=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Ri=e("ul",null,[e("li",null,[e("code",null,"RemedyPlan"),o(" 增加 "),e("code",null,"onFind"),o(" 功能")]),e("li",null,"整合并修改了部分反射 API 代码"),e("li",null,[o("增加了 "),e("code",null,"type"),o(" 中的 Java 类型")]),e("li",null,"修复忽略错误在控制台仍然输出的问题")],-1),Li={id:"_1-0-2022-02-14",tabindex:"-1"},Si=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Bi=e("ul",null,[e("li",null,"首个版本提交至 Maven")],-1);function Fi(Xi,Di){const i=t("Badge"),l=t("ExternalLinkIcon");return n(),r("div",null,[h,u,_,e("h3",k,[p,o(" 1.3.1 | 2025.09.13 "),d(i,{type:"tip",text:"最新",vertical:"middle"})]),g,e("h3",f,[H,o(" 1.3.0 | 2025.06.25 "),d(i,{type:"warning",text:"过旧",vertical:"middle"})]),e("ul",null,[e("li",null,[o("这是一次重大更新,详情请参考 "),e("a",m,[o("迁移到 YukiHookAPI 1.3.x"),d(l)])]),e("li",null,[o("弃用了 "),P,o(" 自身的反射 API,现在请迁移到全新的 "),e("a",b,[o("KavaRef"),d(l)])]),A,e("li",null,[C,o(" 已被弃用,现已切换至 "),e("a",y,[o("AndroidHiddenApiBypass"),d(l)])])]),e("h3",x,[Y,o(" 1.2.1 | 2024.06.20 "),d(i,{type:"warning",text:"过旧",vertical:"middle"})]),e("ul",null,[v,e("li",null,[o('在自动处理程序中添加自动使用 "`" 来修复 Kotlin 关键字为包名的情况,感谢 '),e("a",I,[o("Fengning Zhu"),d(l)]),o(" 的 "),e("a",M,[o("PR"),d(l)])]),e("li",null,[o("适配 Kotlin 2.0.0+,修复在自动处理过程中无法通过编译的问题,感谢 "),e("a",R,[o("xihan123"),d(l)]),o(" 的 "),e("a",L,[o("PR"),d(l)])])]),e("h3",S,[B,o(" 1.2.0 | 2023.10.07 "),d(i,{type:"warning",text:"过旧",vertical:"middle"})]),e("ul",null,[F,e("li",null,[o("这是一次重大更新,详情请参考 "),e("a",X,[o("迁移到 YukiHookAPI 1.2.x"),d(l)])]),e("li",null,[o("适配 Android 14,感谢 "),e("a",D,[o("BlueCat300"),d(l)]),o(" 的 "),e("a",E,[o("PR"),d(l)])]),e("li",null,[o("修复 "),O,o(" 相关问题,感谢 "),e("a",N,[o("buffcow"),d(l)]),o(" 的 "),e("a",T,[o("PR"),d(l)])]),e("li",null,[o("修复 Hook 过程中的延迟回调问题,感谢 "),e("a",W,[o("cesaryuan"),d(l)]),o(" 的 "),e("a",w,[o("Issue"),d(l)])]),e("li",null,[o("新增 Resources Hook 相关功能支持,详情请参考这个 "),e("a",U,[o("Issue"),d(l)])]),G,e("li",null,[o("分离 "),e("a",z,[o("FreeReflection"),d(l)]),o(" 不再自动生成,将作为依赖自动导入")]),V]),e("h3",j,[K,o(" 1.1.11 | 2023.04.25 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[e("li",null,[o("修复从 "),Z,o(" 版本开始的一个严重问题,"),J,o(" 缓存未生效且持续存储最终引发 APP 内存溢出 (OOM),感谢 "),e("a",q,[o("Art-Chen"),d(l)])]),Q]),e("h3",$,[ee,o(" 1.1.10 | 2023.04.21 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),oe,e("h3",de,[ie,o(" 1.1.9 | 2023.04.17 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),le,e("h3",ce,[te,o(" 1.1.8 | 2023.02.01 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[e("li",null,[o("修复底层 Hook 方法在回调时修改 "),ae,o(" 等参数时时不能同步更新修改后的状态问题,感谢 "),e("a",ne,[o("Yongzheng Lai"),d(l)]),o(" 的 "),e("a",re,[o("Issue"),d(l)])]),se]),e("h3",he,[ue,o(" 1.1.6 | 2023.01.21 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),_e,e("h3",ke,[pe,o(" 1.1.5 | 2023.01.13 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ge,e("h3",fe,[He,o(" 1.1.4 | 2022.10.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),me,e("h3",Pe,[be,o(" 1.1.3 | 2022.09.30 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Ae,e("h3",Ce,[ye,o(" 1.1.2 | 2022.09.30 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),xe,e("h3",Ye,[ve,o(" 1.1.1 | 2022.09.28 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Ie,e("h3",Me,[Re,o(" 1.1.0 | 2022.09.28 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[Le,e("li",null,[o("更换帮助文档框架到 "),e("a",Se,[o("VuePress"),d(l)])]),Be,e("li",null,[o("修复多项目打包时模块包名无法正确匹配的问题以及修改自动处理程序的模块包名匹配逻辑,感谢 "),e("a",Fe,[o("5ec1cff"),d(l)]),o(" 的反馈及提供的解决方案")]),Xe,e("li",null,[De,o(" 中的 "),Ee,o(" 功能改名为 "),Oe,o(",感谢 "),e("a",Ne,[o("Kitsune"),d(l)]),o(" 的建议")]),Te,e("li",null,[o("新增反射查找中的多重查找功能,可使用相对查找条件同时获取多个查找结果,感谢 "),We,o(" 以及 "),e("a",we,[o("Kitsune"),d(l)]),o(" 的建议")]),e("li",null,[o("修复 "),Ue,o(" 获取到的对象在某些系统中的系统应用中不正确的问题,感谢 "),e("a",Ge,[o("Luckyzyx"),d(l)]),o(" 的反馈")]),ze,e("li",null,[o("修复 "),Ve,o(" 中 "),je,o(" 方法取值错误的问题并优化代码风格,感谢 "),e("a",Ke,[o("Teddy_Zhu"),d(l)]),o(" 的 "),e("a",Ze,[o("PR"),d(l)])]),Je,qe,Qe,e("li",null,[o("新增自动 Hook "),$e,o(" 以修复部分系统中文件权限不是 "),eo,o(" 的问题,感谢 "),e("a",oo,[o("5ec1cff"),d(l)]),o(" 的反馈及提供的实现代码")]),io,e("li",null,[o("Resources Hook 中新增 "),lo,o(" 类型,感谢 "),e("a",co,[o("GSWXXN"),d(l)]),o(" 的 "),e("a",to,[o("PR"),d(l)])]),ao,no,ro,so]),e("h3",ho,[uo,o(" 1.0.92 | 2022.05.31 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),_o,e("h3",ko,[po,o(" 1.0.91 | 2022.05.29 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[e("li",null,[o("修复部分设备的定制系统在 LSPosed 环境下开机启动获取的 "),go,o(" 错误的问题,感谢 "),e("a",fo,[o("Luckyzyx"),d(l)]),o(" 的反馈")]),Ho]),e("h3",mo,[Po,o(" 1.0.90 | 2022.05.27 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),bo,e("h3",Ao,[Co,o(" 1.0.89 | 2022.05.26 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),yo,e("h3",xo,[Yo,o(" 1.0.88 | 2022.05.25 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),vo,e("h3",Io,[Mo,o(" 1.0.87 | 2022.05.10 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Ro,e("h3",Lo,[So,o(" 1.0.86 | 2022.05.06 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Bo,e("h3",Fo,[Xo,o(" 1.0.85 | 2022.05.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Do,e("h3",Eo,[Oo,o(" 1.0.83 | 2022.05.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),No,e("h3",To,[Wo,o(" 1.0.82 | 2022.05.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),wo,e("h3",Uo,[Go,o(" 1.0.81 | 2022.05.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),zo,e("h3",Vo,[jo,o(" 1.0.80 | 2022.05.01 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[Ko,e("li",null,[o("修复 Hook "),Zo,o(" 导致 Hook 卡死的问题,感谢 "),e("a",Jo,[o("WankkoRee"),d(l)]),o(" 的反馈")]),qo,Qo,$o]),e("h3",ed,[od,o(" 1.0.78 | 2022.04.18 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[dd,e("li",null,[o("适配 "),id,o(" 的 Sp 数据存储解决方案,感谢 "),e("a",ld,[o("mahoshojoHCG"),d(l)]),o(" 的反馈")]),cd,td]),e("h3",ad,[nd,o(" 1.0.77 | 2022.04.15 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[e("li",null,[rd,o(" 新增 "),sd,o(" 方法,感谢 "),e("a",hd,[o("WankkoRee"),d(l)]),o(" 的建议")]),ud]),e("h3",_d,[kd,o(" 1.0.75 | 2022.04.13 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[e("li",null,[o("更正了自动处理程序的逻辑识别部分,感谢 "),e("a",pd,[o("ApeaSuperz"),d(l)]),o(" 的贡献")]),gd]),fd,e("ul",null,[e("li",null,[o("修正几处文档的中文翻译错误,感谢 "),e("a",Hd,[o("WankkoRee"),d(l)]),o(" 的贡献")]),e("li",null,[o("修复在某些情况下 "),md,o(" 内容为空抛出异常的问题,感谢 "),e("a",Pd,[o("Luckyzyx"),d(l)]),o(" 的反馈")]),bd]),e("h3",Ad,[Cd,o(" 1.0.72 | 2022.04.09 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),yd,e("h3",xd,[Yd,o(" 1.0.71 | 2022.04.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),vd,e("h3",Id,[Md,o(" 1.0.70 | 2022.04.04 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[Rd,e("li",null,[o("在 Hook 过程中加入 "),Ld,o(" 功能,感谢 "),e("a",Sd,[o("WankkoRee"),d(l)]),o(" 的反馈")]),Bd,Fd,Xd,Dd,e("li",null,[o("修复 "),Ed,o(" 未 Hook 到方法时不会抛出异常的问题,感谢 "),e("a",Od,[o("WankkoRee"),d(l)]),o(" 的反馈")]),e("li",null,[o("加入 Hook 状态监听功能,感谢 "),e("a",Nd,[o("WankkoRee"),d(l)]),o(" 的建议")]),Td,e("li",null,[o("加入混淆的方法以及变量的查找功能,可使用不同类型筛选 "),Wd,o(" 定位指定的方法和变量,感谢 "),e("a",wd,[o("WankkoRee"),d(l)]),o(" 提供的思路")]),Ud,Gd,e("li",null,[o("修复了 Hook 过程中的大量 BUG,感谢 "),e("a",zd,[o("WankkoRee"),d(l)]),o(" 对此项目所做出的贡献")])]),e("h3",Vd,[jd,o(" 1.0.69 | 2022.03.30 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),e("ul",null,[Kd,Zd,e("li",null,[o("修复在一个 Hook 实例中,"),Jd,o(" 多次使用时只有最后一个生效的问题,感谢 "),e("a",qd,[o("WankkoRee"),d(l)]),o(" 的反馈")])]),e("h3",Qd,[$d,o(" 1.0.68 | 2022.03.29 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ei,e("h3",oi,[di,o(" 1.0.67 | 2022.03.27 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ii,e("h3",li,[ci,o(" 1.0.66 | 2022.03.25 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ti,e("h3",ai,[ni,o(" 1.0.65 | 2022.03.25 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ri,e("h3",si,[hi,o(" 1.0.6 | 2022.03.20 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),ui,e("h3",_i,[ki,o(" 1.0.55 | 2022.03.18 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),pi,e("h3",gi,[fi,o(" 1.0.5 | 2022.03.18 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Hi,e("h3",mi,[Pi,o(" 1.0.4 | 2022.03.06 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),bi,e("h3",Ai,[Ci,o(" 1.0.3 | 2022.03.02 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),yi,e("h3",xi,[Yi,o(" 1.0.2 | 2022.02.18 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),vi,e("h3",Ii,[Mi,o(" 1.0.1 | 2022.02.15 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Ri,e("h3",Li,[Si,o(" 1.0 | 2022.02.14 "),d(i,{type:"danger",text:"过期",vertical:"middle"})]),Bi])}const Oi=a(s,[["render",Fi],["__file","changelog.html.vue"]]);export{Oi as default};