import{_ as c,r as a,o as l,c as s,b as e,d as o,e as t,a as n}from"./app-BpUB8-Q8.js";const r={},h=n('
Changelog
The version update history of YukiHookAPI
is recorded here.
Pay Attention
We will only maintain the latest API version, if you are using an outdate API version, you voluntarily renounce any possibility of maintenance.
Notice
To avoid translation time consumption, Changelog will use Google Translation from Chinese to English, please refer to the original text for actual reference.
Time zone of version release date: UTC+8
',4),u={id:"_1-3-0-2024-06-25",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-3-0-2024-06-25","aria-hidden":"true"},"#",-1),p={href:"https://highcapable.github.io/YukiHookAPI/zh-cn/config/move-to-api-1-3-x",target:"_blank",rel:"noopener noreferrer"},f=e("code",null,"YukiHookAPI",-1),g={href:"https://github.com/HighCapable/KavaRef",target:"_blank",rel:"noopener noreferrer"},_=n("The limitation of duplicate Hooks has been deprecated, now you can repeat the same method of the HookDeprecated ModuleAppActivity
, ModuleAppCompatActivity
, please use ModuleActivity
to create your own proxy Activity
YLog
is now allowed to pass msg
into any object and will be automatically converted to a string for printing",3),k=e("code",null,"FreeReflection",-1),b={href:"https://github.com/LSPosed/AndroidHiddenApiBypass",target:"_blank",rel:"noopener noreferrer"},y={id:"_1-2-1-2024-06-20",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-2-1-2024-06-20","aria-hidden":"true"},"#",-1),v=e("li",null,"Catch exceptions in singleton Hooker to prevent it from blocking the entire process",-1),w={href:"https://github.com/zhufengning",target:"_blank",rel:"noopener noreferrer"},A={href:"https://github.com/HighCapable/YukiHookAPI/pull/70",target:"_blank",rel:"noopener noreferrer"},H={href:"https://github.com/xihan123",target:"_blank",rel:"noopener noreferrer"},P={href:"https://github.com/HighCapable/YukiHookAPI/pull/76",target:"_blank",rel:"noopener noreferrer"},C={id:"_1-2-0-2023-10-07",tabindex:"-1"},F=e("a",{class:"header-anchor",href:"#_1-2-0-2023-10-07","aria-hidden":"true"},"#",-1),M=e("li",null,[o("The license agreement has been changed from "),e("code",null,"MIT"),o(" to "),e("code",null,"Apache-2.0"),o(", subsequent versions will be distributed under this license agreement, you should change the relevant license agreement after using this version")],-1),Y={href:"https://highcapable.github.io/YukiHookAPI/en/config/move-to-api-1-2-x",target:"_blank",rel:"noopener noreferrer"},I={href:"https://github.com/BlueCat300",target:"_blank",rel:"noopener noreferrer"},R={href:"https://github.com/HighCapable/YukiHookAPI/pull/44",target:"_blank",rel:"noopener noreferrer"},S=e("code",null,"findAllInterfaces",-1),D={href:"https://github.com/buffcow",target:"_blank",rel:"noopener noreferrer"},T={href:"https://github.com/HighCapable/YukiHookAPI/pull/38",target:"_blank",rel:"noopener noreferrer"},L={href:"https://github.com/cesaryuan",target:"_blank",rel:"noopener noreferrer"},z={href:"https://github.com/HighCapable/YukiHookAPI/issues/47",target:"_blank",rel:"noopener noreferrer"},X={href:"https://github.com/HighCapable/YukiHookAPI/issues/36",target:"_blank",rel:"noopener noreferrer"},j=n("Added YukiHookAPI.TAG
Deprecated YukiHookAPI.API_VERSION_NAME
, YukiHookAPI.API_VERSION_CODE
, merged into YukiHookAPI.VERSION
Added YukiHookAPI.TAG
Deprecated YukiHookAPI.API_VERSION_NAME
, YukiHookAPI.API_VERSION_CODE
, merged into YukiHookAPI.VERSION
Deprecated useDangerousOperation
method in YukiMemberHookCreator
Deprecated instanceClass
function in YukiMemberHookCreator
, it is no longer recommendedModify instanceClass
in HookParam
to be a null safe return value typeDetach all Hook objects created using injectMember
to LegacyCreator
Modify appClassLoader
in PackageParam
to be a null safe return value typeRefactor all logger...
methods to new usage YLog
Removed the -->
style behind the print log functionFixed and improved the problem that the module package name cannot be obtained through KSP after using namespace
Functions such as whether to enable module activation status have now been moved to the InjectYukiHookWithXposed
annotation",13),O={href:"https://github.com/tiann/FreeReflection",target:"_blank",rel:"noopener noreferrer"},B=n("Added a warning log that will be automatically printed when the same Hook method is repeatedThe findClass(...)
method in PackageParam
is obsolete, please migrate to the "...".toClass()
methodThe String.hook { ... }
method in PackageParam
is obsolete, and it is recommended to use a new method for HookAppLifecycle
can now be created repeatedly in different HookersThe old version of Hook priority writing is obsolete and migrated to YukiHookPriority
Removed the tag
function in the Hook processRefactored remendy
functionality in find methods, which now prints exceptions in stepsThe multi-method find result type is changed from HashSet
to MutableList
Added method()
, constructor()
, field()
to directly obtain all object functions in the classconstructor()
no longer behaves like constructor { emptyParam() }
Added lazyClass
and lazyClassOrNull
methods to lazily load Class
",11),E={id:"_1-1-11-2023-04-25",tabindex:"-1"},N=e("a",{class:"header-anchor",href:"#_1-1-11-2023-04-25","aria-hidden":"true"},"#",-1),W=e("code",null,"1.1.5",-1),q=e("code",null,"Member",-1),V={href:"https://github.com/Art-Chen",target:"_blank",rel:"noopener noreferrer"},K=n("Remove the direct cache function of Member
and deprecated YukiReflection.Configs.isEnableMemberCache
, keep the cache function of Class
Modified finder to Sequence
, optimize the finding speed and performance of Member
Remove the YukiHookPrefsBridge
's direct key-value cache function and removed LruCache
related functionsDeprecated YukiHookAPI.Configs.isEnablePrefsBridgeCache
Deprecated direct
, clearCache
functions in YukiHookPrefsBridge
",5),U={id:"_1-1-10-2023-04-21",tabindex:"-1"},Z=e("a",{class:"header-anchor",href:"#_1-1-10-2023-04-21","aria-hidden":"true"},"#",-1),G=n("- The
Activity
proxy function adds the function of specifying a separate proxy Activity
for each proxied Activity
- Fixed problem that the
contains
and all
methods in YukiHookPrefsBridge
did not judge the native
function - Integrate the cache function in
YukiHookPrefsBridge
into PreferencesCacheManager
and use LruCache
as a key-value pair cache - Modify
YukiHookPrefsBridge
key-value pair caching function to take effect in all environments (Module Apps, Host Apps) - Modify part of
HashMap
used for caching to ArrayMap
to reduce memory consumption - Fix some other possible problems
",1),J={id:"_1-1-9-2023-04-17",tabindex:"-1"},Q=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),$=n("- Change the type of dependent library from Java Library (jar) to Android Library (aar)
- Remove the inspection function of internal methods and parameters through Hook or reflection API
- Fixed the problem that
YukiHookDataChannel
automatically segmented data sending function could not work normally (exception would still be thrown) - Added the ability to manually modify the maximum data byte size allowed by
YukiHookDataChannel
to be sent at one time according to the limitations of the target device - Remove the restriction that
YukiHookDataChannel
can only be used in module Activity
, now you can use it anywhere - Modify and standardize the broadcast Action name used by
YukiHookDataChannel
- Fix the problem that
BadParcelableException
occurs when YukiHookDataChannel
has different modules with the same host - Added
ExecutorType
, you can get the type of known Hook Framework through YukiHookAPI.Status.Executor.type
YukiHookModulePrefs
renamed to YukiHookPrefsBridge
- Modify
YukiHookPrefsBridge
to be implemented as a non-singleton, as a singleton may cause data confusion - Deprecated
Context.modulePrefs(...)
method, please move to Context.prefs(...)
YukiHookPrefsBridge
adds native
method, which supports storing private data in modules and hosts directly as native storage- Integrate the storage method in
YukiHookPrefsBridge
to YukiHookPrefsBridge.Editor
, please use edit
method to store data YukiHookPrefsBridge
adds contains
method- Cache dynamically created proxy objects in
YukiHookPrefsBridge
, try to fix problems that may cause OOM in the host and modules - Modify the proxy class of the
Activity
proxy function to be dynamically generated to prevent conflicts caused by injecting different modules into the host - Fixed some other possible problems
",1),ee={id:"_1-1-8-2023-02-01",tabindex:"-1"},oe=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),te=e("code",null,"result",-1),de={href:"https://github.com/HighCapable/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},ie={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},ne=n("Move the entry class name file automatically generated by YukiHookAPI
from assets/yukihookapi_init
to resources/META-INF/yukihookapi_init
When only printing the exception stack, the msg
parameter is allowed to be empty and the msg
parameter can not be set, and the log with the msg
parameter left blank will not be logged unless the exception stack is not emptyFixed the bug that the log printed by the exception that occurs in the body of the Hook callback method has no specific method informationHookParam
adds instanceOrNull
variable and method, which can be used on the premise that the Hook instance is not sure whether it is empty to prevent the Hook instance from being empty and throw an exceptionDecoupled all hookers in Member
lookup functionality to MemberBaseFinder.MemberHookerManager
Modified the usage of by
condition in YukiMemberHookCreator
, now you can reuse by
method to set multiple conditionsRemoved wrong Class
object declaration in Android type
The registerReceiver
method in PackageParam.AppLifecycle
adds the function of directly using IntentFilter
to create a system broadcast listenerFixed the problem that there may be multiple registration lifecycles in PackageParam.AppLifecycle
Revert: The 1.1.7 version has been withdrawn due to a serious problem, please update to this version directly (the update log is the same as version 1.1.7)",10),ae={id:"_1-1-6-2023-01-21",tabindex:"-1"},ce=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),le=n("- Fixed the serious problem that
ClassLoader
does not match after PackageParam
keeps a single instance when there may be multiple package names in the same process when Xposed Module is loaded - When the package name is not distinguished when there are multiple package names in the same process, stop loading the singleton child Hooker and print a warning message
- Fixed the problem that the number of parameters is incorrect when methods such as
HookParam.callOriginal
, HookParam.invokeOriginal
call the original method - Modify the method parameter name
param
of reflection calls in MethodFinder
, ConstructorFinder
, ReflectionFactory
to args
- Added the function of judging the parameters of the entry class constructor in the automatic processing program of the Xposed Module, the entry class needs to ensure that it does not have any constructor parameters
",1),se={id:"_1-1-5-2023-01-13",tabindex:"-1"},re=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),he=n('- Standardize and optimize the overall code style
- Privatized some APIs called internally
- The underlying API interface is decoupled as a whole to prepare for compatibility with more Hook Frameworks
- Move some of the functions integrated in the API to
ksp-xposed
dependencies (decoupling), and the separate introduction of api
dependencies will no longer contain references to functions such as third-party libraries - Documentation Quick Start page added instructions on when
YukiHookAPI.Configs.isDebug
needs to be closed - Standardize Java Primitive Types in type definitions and sync update to docs
- Java
type
adds NumberClass
type - Improved (Xposed) Host environment recognition
- Take over all exceptions after loading the Xposed Module, if an exception occurs, it will automatically intercept and print the error log
- Modify the
Class
that does not exist in the lower Android system version (Android 5.0) in the type definition to be an empty safe type - Adapt and support native Xposed, the minimum recommended version is Android 7.0
- Added support for Hook entry class declared as
object
type (singleton) - Fixed the problem that the system below Android 8 does not support the
Executable
type, causing the Hook to fail - Fixed the problem of reporting an error when using the
Activity
proxy function for systems below Android 9 and limit the minimum supported version of this function to Android 7.0 - Added the prohibition of resource injection and
Activity
proxy function injection into the current module's own instance process to prevent problems - Fixed a serious error that the return value of a method in the Hook process is not consistent with the target's inherited class and interface.
- Fixed the problem that the object is empty when calling
HookParam.callOriginal
and HookParam.invokeOriginal
when the current Hook instance object is static - Optimize the function of judging the Tai Chi activation method and update the relevant instructions of the document synchronously
- Obsolete
YukiHookAPI.Status.executorName
, YukiHookAPI.Status.executorVersion
, please move to YukiHookAPI.Status.Executor
- Adapted the
YukiHookAPI.Status.Executor.name
name display function of some third-party Hook Frameworks - Added
Class.extends
, Class.implements
and other methods, which can more conveniently judge the inheritance and interface relationship of the current Class
- Added generic methods of the same name as
Class.toClass
, Class.toClassOrNull
and other related methods, you can use generics to constrain the instance object type of known Class
- Modify the return value of the
classOf<T>
method to the generic type T
to constrain the instance object type of the known Class
- Added
initialize
parameter of Class
related extension method, which can control whether to initialize its static method block at the same time when getting Class
object - Added
param { ... }
, type { ... }
and other usages in the variable, method, and construction method search functions, which can add more specific conditional judgments to the searched objects - The
loadApp
method of PackageParam
adds the isExcludeSelf
parameter, which can be used to exclude Hook-related functions from injecting into the module's own instance process - The
onAppLifecycle
method of PackageParam
adds the isOnFailureThrowToApp
parameter, which can directly throw the exception that occurs in the lifecycle method body to the host - Modify
appClassLoader
in PackageParam
to be a modifiable variable, which can dynamically set the ClassLoader
used by the host in the Hook process - Added
dataExtra
function in HookParam
, which can be used to temporarily store the data in the Hook method body - Obsolete
isRunInNewXShareMode
, isXSharePrefsReadable
in YukiHookModulePrefs
, merged into isPreferencesAvailable
Class.allFields
, Class.allMethods
and other related methods add the isAccessible
parameter, which can control when the member object can be set as an accessible type- Fixed the problem that only the last method body will be called back when receiving the same key-value data in an Activity when there are multiple hosts in
YukiHookDataChannel
- Added
priority
parameter in wait
and other related methods of YukiHookDataChannel
, you can pass in ChannelPriority
to customize the conditions for callback data results YukiHookDataChannel
adds the function of automatically using ChannelDataWrapper
type wrapper when sending data, which improves the user experience and enhances data protectionYukiHookDataChannel
has added the function of limiting the maximum byte size of data sent at one time to prevent the app from crashing due to excessive dataYukiHookDataChannel
has added the function of automatically segmenting when the sent data is too large, only supports List
, Map
, Set
, String
typesYukiHookLogger
adds the contents
method and the data
parameter of saveToFile
, which can be passed in custom debug log data for formatting or saving to a file- Fixed the problem that the debug log data package name processed by
YukiHookLogger
may be incorrect in the (Xposed) Host environment - Fixed the problem that the package name may be incorrect on some systems (in some system apps) when the Xposed Module loads the Resource Hook event
',1),ue={id:"_1-1-4-2022-10-04",tabindex:"-1"},me=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),pe=n("- Fixed the issue that
YukiHookDataChannel
may not respond to broadcast events in the system framework, reproduced in A13 - Fixed the issue that
YukiHookDataChannel
could not communicate with Module App in Host App for multiple versions - Added
obtainLoggerInMemoryData
method in YukiHookDataChannel
to share debug log data between module and host - Modify the type of
YukiHookLogger.inMemoryData
to ArrayList
and change YukiLoggerData
to data class
- Fixed
YukiLoggerData
printing blank when the package name is empty in the module - Added
loadApp
, loadZygote
, loadSystem
, withProcess
multi-parameter methods of the same name in PackageParam
- Fixed some possible bugs
",1),fe={id:"_1-1-3-2022-09-30",tabindex:"-1"},ge=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),_e=e("ul",null,[e("li",null,"Fixed a fatal bug where the Hook entry class name could not be customized"),e("li",null,[o("Added some code notes in "),e("code",null,"LoggerFactory"),o(" and updated special features documentation")])],-1),ke={id:"_1-1-2-2022-09-30",tabindex:"-1"},be=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),ye=n('- Documentation Basic Knowledge page add a friend link to the English version
- Fixed
YukiBaseHooker
comments in English code note link errors - Fixed
ClassCastException
in ModuleClassLoader
- Fixed and standardize some code notes
- Added
ModuleClassLoader
exclusion list function, you can use excludeHostClasses
and excludeModuleClasses
methods to customize the exclusion list - Added
YukiLoggerData
real-time log data class, you can get the log array in real time through YukiHookLogger.inMemoryData
- Added
ClassLoader.listOfClasses
method, which can directly get all Class
in the current Dex
',1),xe={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),we=e("ul",null,[e("li",null,[o("Fixed the problem of wrong document friend links in "),e("a",{href:"../guide/knowledge"},"Basic Knowledge"),o(" page")]),e("li",null,[o("Fixed document "),e("code",null,"favicon"),o(" not showing up")]),e("li",null,[o("Fixed bug in "),e("code",null,"DexClassFinder"),o(" search conditions")])],-1),Ae={id:"_1-1-0-2022-09-28",tabindex:"-1"},He=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),Pe=e("li",null,[o("This is a major version update, please refer to "),e("a",{href:"../api/home"},"API Document"),o(" and "),e("a",{href:"../api/special-features/reflection"},"Special Features"),o(" for the changes and usage mentioned in the changelog")],-1),Ce={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},Fe=n('Unify and standardize the terms and nouns in the document, for example, "query" is always changed to "find", XposedHelper
is misspelled and changed to XposedHelpers
Documentation Basic Knowledge page to add friend links, Simplified Chinese onlyConvert Class
and Method
of Hook App Demo to Java to provide better demo effectFixed code comment naming in Hook Module DemoRefactored a lot of low-level Hook logic and the docking method of Xposed APIRemoved HookParamWrapper
, it now interfaces directly with YukiBridgeFactory
Moved methods in section YukiHookBridge
to AppParasitics
Removed HookParam.args
and the underlying direct connection method setArgs
, directly get and set the object of the current arrayOptimized automatic handler to merge referenced jar
into stub
project',9),Me={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Ye=n("Internal closure processing for the methods of API private tool classes to avoid polluting the top-level namespaceFixed Creater
naming to Creator
for all reflection and Hook classesAdded YukiHookAPI.Status.compiledTimestamp
function, which can get the compilation completion timestamp when used as an Xposed moduleAdded YukiHookAPI.Status.isXposedEnvironment
function, which can determine whether the current (Xposed) host environment or module environment isThe debug logging function has been overhauled, and functions such as YukiHookAPI.Configs.debugTag
have been merged into YukiHookLogger.Configs
The debug log can be added to specify the printing method as XposedBridge.log
or Logd
The package name of the current host and the current user ID are added to the debug log by default for debugging, you can change it yourself in the debugLog
configurationAdded generic
function to reflect and call generics, you can use it in Class
or CurrentClass
obsolete the buildOfAny
method, now use the buildOf
method directly (without generics) to use the constructor to create a new object and get the result Any
Fixed the issue of null pointer exception when using hasExtends
CurrentClass
added non-lambda method of callingCurrentClass
adds name
and simpleName
functionsCompletely rewrite the core method of ReflectionTool
, sorting and classifying different search conditionsFixed the problem that Member
obtained by directly calling declared
in ReflectionTool
throws an exceptionFixed UndefinedType
in ReflectionTool
is not correctly judged in Method
and Constructor
conditionsAdded a friendly prompt method when the reflection search result is abnormal, which can specifically locate the problem that Member
cannot be found under specified conditionsAdded VagueType
condition in Method
and Constructor
for reflection search, which can be used in param
condition to ignore parameters you don't want to fill inAdded paramCount { ... }
condition in Method
and Constructor
of reflection search, now you can directly get it
in it to customize your judgment conditionThe current
method is added to the FieldFinder
result, which can directly create a call space for the result instanceModified the modifiers
condition and name
condition in the reflection lookup function, now you need to return a Boolean
at the end of the method body to make the condition true",20),Ie=e("code",null,"as*",-1),Re=e("code",null,"ModifierRules",-1),Se=e("code",null,"is*",-1),De={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Te=n("Added RemedyPlan
feature in FieldFinder
Added Class
fuzzy search function (Beta) in Dex
, you can now directly use searchClass
function to fuzzy search Class
with specified conditions",2),Le=e("strong",null,"AA",-1),ze={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Xe=e("code",null,"appClassLoader",-1),je={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Oe=e("li",null,[o("Modified the calling method of "),e("code",null,"XposedBridge.invokeOriginalMethod"),o(" and added "),e("code",null,"original"),o(" function in "),e("code",null,"MethodFinder.Result.Instance")],-1),Be=e("code",null,"getStringSet",-1),Ee=e("code",null,"YukiHookModulePrefs",-1),Ne={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},We={href:"https://github.com/HighCapable/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},qe=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),Ve=e("li",null,[o("Fixed the problem that "),e("code",null,"YukiHookDataChannel"),o(" could not be successfully registered in some third-party ROM system frameworks")],-1),Ke=e("li",null,[o("Secured "),e("code",null,"YukiHookDataChannel"),o(", now it can only communicate between modules from the specified package name and the host")],-1),Ue=e("code",null,"SharedPreferences",-1),Ze=e("code",null,"0664",-1),Ge={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Je=n("Added YukiHookAPI.Configs.isEnableHookSharedPreferences
function, which is disabled by default and can be enabled if the permission of SharedPreferences
is incorrectFixed the bug that the no-parameter construction method cannot be found when searching for Constructor
without filling in the search conditions, thanks B5 KAKA for the feedbackDetach Result
instances located in method
, constructor
in injectMember
to Process
Added the useDangerousOperation
method in the Hook process, which will automatically stop the Hook and print an error after the function in the Hook Dangerous List is not declaredAdded module resource injection and Activity
proxy functions, you can call injectModuleAppResources
and registerModuleAppActivities
to useAdded ModuleContextThemeWrapper
function, you can call applyModuleTheme
to create the Context
of a module in any Activity
Added ClassLoader.onLoadClass
function, which can be used to listen for events when the loadClass
method of ClassLoader
is calledobsolete classOf
and clazz
extension methods, add toClass
and toClassOrNull
usage, please move to the new method nowVariousClass
adds a getOrNull
method, which can return null
instead of throwing an exception when it can't match Class
Removed isUseAppClassLoader
parameter in PackageParam.hook
, changed it to isForceUseAbsolute
and automatically matched the target Class
PackageParam
adds systemContext
function, you can call this function at any time to get a persistent Context
no longer expose any methods in HookClass
Added throwToApp
function in HookParam
, which can throw exceptions directly to the hostThe onFailureThrowToApp
function is added to the Hook callback, which can be directly thrown to the host when an exception occursModified the printing logic of the debug log, the time-consuming records in the reflection search function will only be printed during the Hook processAdded the function of removing Hook in the Hook process, you can use the remove
and removeSelf
methods to remove the hookFixed the issue that caused the host to throw an exception when ReplaceHook failed, and now it is modified to call the original method to ensure the normal operation of the host functionAdded the function of checking the return value of the method in the Hook process. If the return value does not match, it will automatically throw an exception or print an error according to the situation",18),Qe=e("code",null,"array",-1),$e={href:"https://github.com/HighCapable/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},eo={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},oo=e("li",null,[o("Moved "),e("code",null,"me.weishu.reflection"),o(" to "),e("code",null,"thirdparty"),o(" to prevent conflicting dependencies of the same name introduced at the same time")],-1),to=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),io=e("li",null,[o("Modify the exception handling logic of "),e("code",null,"AppLifecycle"),o(" and throw it directly to the host when an exception occurs")],-1),no=e("li",null,"Updated Demo API version to 33",-1),ao={id:"_1-0-92-2022-05-31",tabindex:"-1"},co=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),lo=n("- Fixed the naming method of callback in a large number of methods
- Changed the solution to fix the problem that
YukiHookDataChannel
cannot call back the current Activity
broadcast on devices lower than Android 12 - The
InjectYukiHookWithXposed
annotation adds the isUsingResourcesHook
function, now you can selectively disable the dependency interface that automatically generates IXposedHookInitPackageResources
",1),so={id:"_1-0-91-2022-05-29",tabindex:"-1"},ro=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),ho=e("code",null,"ClassLoader",-1),uo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},mo=n("Fixed YukiHookDataChannel
not being able to call back the current Activity
broadcast on ZUI and systems below Android 12Integrate the YukiHookModuleStatus
function into YukiHookAPI.Status
, rewrite a lot of methods, now you can judge the status information such as module activation in the module and the host in both directions",2),po={id:"_1-0-90-2022-05-27",tabindex:"-1"},fo=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),go=n("- Fixed
YukiHookDataChannel
crashing when the module sets the listener callback - Fixed
YukiHookDataChannel
still calling back when not in current Activity
- Remove the default value of
YukiHookDataChannel
callback event, no callback - Removed
YukiHookModulePrefs
warning printed if XShare is unreadable - Added the
isXSharePrefsReadable
method in YukiHookModulePrefs
to determine whether the current XShare is available
",1),_o={id:"_1-0-89-2022-05-26",tabindex:"-1"},ko=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),bo=n("- Fixed the problem that
YukiHookDataChannel
cannot be repeatedly set to monitor, and added the function of repeating response in different Activity
modules and automatically following Activity
to destroy the monitor function - Added
YukiHookDataChannel
repeated listening use case description document - Add the
onAlreadyHooked
method to determine whether the current method is repeated Hook - Modify part of the logic of repeatedly adding HashMap, remove the
putIfAbsent
method, allow to override the addition - Fixed several possible bugs
",1),yo={id:"_1-0-88-2022-05-25",tabindex:"-1"},xo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),vo=n("- Fully decoupled from Xposed API
- Added
android
type in type
- Separate
YukiHookModuleStatus
from auto-generated code and add isEnableHookModuleStatus
switch, it is up to you to enable or not - Internal closure processing for the constructors of a large number of classes in the API
- Set
YukiHookModulePrefs
to run as a singleton to prevent repeated creation and waste of system resources - Fixed the bug that Hook cannot be nested since version
1.0.80
, and optimize the related functions of nested Hook - Modify the Hooker storage scheme from HashSet to HashMap to prevent the problem of repeatedly adding Hookers
- Modify the core implementation method of Hook, add duplicate checking to avoid repeating the Hook multiple callbacks to the
HookParam
method MethodFinder
and FieldFinder
add the function of finding fuzzy methods and variable names, you can call name { ... }
to set search conditions, and support regular expressions- Optimize and modify the way to get
appContext
to reduce the possibility of getting empty - Modify the print
TAG
of logger
in the automatically generated code to default to your custom name, which is convenient for debugging - Optimize the
Hooker
implementation of YukiHookBridge
to improve Hook performance PackageParam
adds the onAppLifecycle
method, which can natively monitor the life cycle of the host and implement the registration system broadcast function- Added
YukiHookDataChannel
function to communicate using system out-of-order broadcast while the module and the host remain alive YukiHookDataChannel
adds the checkingVersionEquals
method, which can be monitored to verify that the host has not updated the version mismatch problem after the module is updated- Added Java version example in the example code of
demo-module
for reference only
",1),wo={id:"_1-0-87-2022-05-10",tabindex:"-1"},Ao=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Ho=e("ul",null,[e("li",null,[o("Added "),e("code",null,"refreshModuleAppResources"),o(" function to adapt Resources refresh when the language region, font size, resolution changes, etc.")]),e("li",null,[o("Added "),e("code",null,"isEnableModuleAppResourcesCache"),o(" function, you can set whether to automatically cache the resources of the current module")])],-1),Po={id:"_1-0-86-2022-05-06",tabindex:"-1"},Co=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Fo=e("ul",null,[e("li",null,[o("Fixed the problem of continuous error reporting during "),e("code",null,"initZygote"),o(" when Resources Hook is not supported, reproduced in "),e("strong",null,"ZUI"),o("/"),e("strong",null,"LSPosed CI(1.8.3-6550)")]),e("li",null,"Optimize and handle exceptions for Resources Hook, only print errors and warnings if they are used and not supported")],-1),Mo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Yo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Io=e("ul",null,[e("li",null,[o("Fixed a serious problem of not being able to hook the system framework, since "),e("code",null,"1.0.80")]),e("li",null,[o("Added in the debug log to distinguish the package name loaded by "),e("code",null,"initZygote"),o(" as "),e("code",null,"android-zygote"),o(", "),e("code",null,"packageName"),o(" keeps "),e("code",null,"android"),o(" unchanged")])],-1),Ro={id:"_1-0-83-2022-05-04",tabindex:"-1"},So=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Do=e("ul",null,[e("li",null,[o("Fixed "),e("code",null,"YukiHookModuleStatus"),o(" reporting a lot of errors after "),e("code",null,"loadSystem")]),e("li",null,[o("Added "),e("code",null,"android"),o(" type in "),e("code",null,"type")]),e("li",null,"Updated example descriptions in help documentation")],-1),To={id:"_1-0-82-2022-05-04",tabindex:"-1"},Lo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),zo=e("ul",null,[e("li",null,[o("Fixed a concept confusion error, distinguishing the relationship between "),e("code",null,"initZygote"),o(" and the system framework, there are problems with the previous comments and documentation, I am very sorry")]),e("li",null,[e("code",null,"PackageParam"),o(" adds "),e("code",null,"loadSystem"),o(" method, no need to write "),e("code",null,'loadApp(name = "android")'),o(" to hook the system framework")])],-1),Xo={id:"_1-0-81-2022-05-04",tabindex:"-1"},jo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Oo=e("ul",null,[e("li",null,[o("Fixed the problem that the method and constructor that cannot be found in the Hook method body still output the error log after setting the condition using the "),e("code",null,"by"),o(" method")]),e("li",null,"Added a global log to display the package name of the current Hook APP during the execution of the Hook, and fixed a problem with the printing style of the error log")],-1),Bo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Eo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),No=n("The InjectYukiHookWithXposed
annotation adds the entryClassName
function, which can customize the generated xposed_init
entry class nameYukiHookXposedInitProxy
renamed to IYukiHookXposedInit
, the original interface name has been invalidated and will be deleted directly in subsequent versionsAdded initZygote
and Resources Hook functions to support Hook LayoutAdded onXposedEvent
method to listen to all events of native Xposed APIPerform inline
processing on the lambda of the Hook function to avoid generating excessively broken anonymous classes and improve the running performance after compilationFixed PrefsData
compiled method body copy is too largeAdded XSharePreference
readability test, which will automatically print a warning log if it failsPackageParam
adds appResources
, moduleAppResources
, moduleAppFilePath
functionsloadApp
of PackageParam
adds the function of not writing name
, and all APPs are filtered by defaultPackageParam
adds the loadZygote
method, which can directly hook the system frameworkPackageParam
added resources().hook
functionOptimization method, construction method, variable search function, the error log that cannot be found will display the set query conditions firstAdded hasExtends
extension method to determine whether the current Class
has an inheritance relationshipAdded isSupportResourcesHook
function to determine whether resource hooks are currently supported (Resources Hook)current
function adds superClass
method to call superclassNew superClass
query conditions for search methods, construction methods and variables, you can continue to search in the parent classYukiHookAPI
lots of methods are decoupled from Xposed APIAdded native Hook priority function of Xposed APIFixed the problem that isFirstApplication
may be inaccurateBlock the problem that MiuiCatcherPatch repeatedly calls the Hook entry method on the MIUI systemOptimize Hook entry calling method to avoid multiple calls due to Hook Framework issues",21),Wo=e("code",null,"ClassLoader",-1),qo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Vo=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),Ko=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),Uo=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),Zo={id:"_1-0-78-2022-04-18",tabindex:"-1"},Go=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Jo=n("YukiHookModulePrefs
adds isRunInNewXShareMode
method, which can be used to determine whether the module is currently in New XSharePreference
modeFixed YukiHookModulePrefs
working in New XSharePreference
modeAdded ModulePreferenceFragment
, now you can completely replace PreferenceFragmentCompat
and start using the new functionality",3),Qo=e("code",null,"PreferenceFragmentCompat",-1),$o={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},et=e("li",null,"Update autohandlers and Kotlin dependencies to the latest version",-1),ot=e("li",null,"Fixed some bugs in documentation and code comments",-1),tt={id:"_1-0-77-2022-04-15",tabindex:"-1"},dt=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),it=e("code",null,"YukiHookModulePrefs",-1),nt=e("code",null,"clear",-1),at={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ct=n("YukiHookModulePrefs
added getStringSet
, putStringSet
, all
methodsAdded any
method to args
of HookParam
Added ModuleApplication
, which can be inherited in modules to achieve more functionsConnect all findClass
functions to the Xposed API, and continue to use native ClassLoader
in non-hosted environmentsFixed some possible bugs",5),lt={id:"_1-0-75-2022-04-13",tabindex:"-1"},st=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),rt={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},ht=n("Fixed an issue where the reference to a doc comment was not changedfirstArgs
and lastArgs
methods have been removed from HookParam
, now you can use args().first()
and args().last()
instead of itRemoved default parameter index = 0
in args()
in HookParam
, now you can use args().first()
or args(index = 0)
to replace itThe result
function in HookParam
adds generic matching, now you can use result<T>
to match the known return value type of your target methodThe emptyParam
condition is added to the method and constructor query function, and the misunderstanding of the query condition that needs to be paid attention to in the document has been improvedAdded android
type in type
",6),ut={id:"_1-0-73-2022-04-10",tabindex:"-1"},mt=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),pt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ft=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),gt={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},_t=e("li",null,"Fixed some known bugs and improve Hook stability",-1),kt={id:"_1-0-72-2022-04-09",tabindex:"-1"},bt=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),yt=e("ul",null,[e("li",null,"Update API documentation to new address"),e("li",null,[o("Add "),e("code",null,"appContext"),o(" function to "),e("code",null,"PackageParam")]),e("li",null,"Fixed some known bugs and improve Hook stability")],-1),xt={id:"_1-0-71-2022-04-04",tabindex:"-1"},vt=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),wt=e("ul",null,[e("li",null,"Fixed a serious issue that would stop the Hook from throwing an exception when VariousClass could not be matched")],-1),At={id:"_1-0-70-2022-04-04",tabindex:"-1"},Ht=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Pt=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),Ct=e("code",null,"isUseAppClassLoader",-1),Ft={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Mt=e("li",null,[o("Added the "),e("code",null,"withProcess"),o(" function, which can be hooked according to the currently specified process of the APP")],-1),Yt=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),It=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),Rt=e("li",null,"Fixed the problem that the Hook could not take effect due to the fast loading of the APP startup method in some cases",-1),St=e("code",null,"allMethods",-1),Dt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Tt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Lt=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),zt=e("code",null,"index",-1),Xt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},jt=e("li",null,[o("When looking for methods and variables, multiple types are allowed, such as the class name declared by "),e("code",null,"String"),o(" and "),e("code",null,"VariousClass")],-1),Ot=e("li",null,[o("Add a new "),e("code",null,"current"),o(" function, which can build a reflection method operation space for any class, and easily call and modify the methods and variables in it")],-1),Bt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Et={id:"_1-0-69-2022-03-30",tabindex:"-1"},Nt=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Wt=e("li",null,"Added and improved annotations for some method functions",-1),qt=e("li",null,"Added more example Hook content in Demo",-1),Vt=e("code",null,"allMethods",-1),Kt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ut={id:"_1-0-68-2022-03-29",tabindex:"-1"},Zt=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),Gt=n("- Added new use case and LSPosed scope in Demo
- Added
Member
lookup cache and lookup cache configuration switches - Removed and modified
MethodFinder
, FieldFinder
and HookParam
related method calls - Add more
cast
types in Finder
and support cast
as array - Overall performance and stability improvements
- Fixed bugs that may exist in the previous version
",1),Jt={id:"_1-0-67-2022-03-27",tabindex:"-1"},Qt=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),$t=n("- Added three
modifiers
functions in Finder
, which can filter static
, native
, public
, abstract
and many other description types - When searching for methods and constructors, the method parameter type can be blurred to a specified number for searching
- Added
hasModifiers
extension for Member
- Added
give
method in MethodFinder
and ConstructorFinder
to get primitive types - Added
PrefsData
template function in YukiHookModulePrefs
- Completely refactored method, constructor and variable lookup scheme
- Optimized code comments and fixed possible bugs
",1),ed={id:"_1-0-66-2022-03-25",tabindex:"-1"},od=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),td=e("ul",null,[e("li",null,[o("Fixed a serious bug in "),e("code",null,"MethodFinder")]),e("li",null,[o("Added "),e("code",null,"args"),o(" call method in "),e("code",null,"hookParam")]),e("li",null,"Fixed other possible problems and fix some class annotation problems")],-1),dd={id:"_1-0-65-2022-03-25",tabindex:"-1"},id=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),nd=n("- Republished version to fix the incorrect new version of the Maven repository due to cache issues
- Added
MethodFinder
and FieldFinder
new return value calling methods - Fixed possible problems and fix possible problems during the use of Tai Chi
- Fixed possible problems with auto-generated Xposed entry classes
- Added
android
type and Java type in type
",1),ad={id:"_1-0-6-2022-03-20",tabindex:"-1"},cd=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),ld=n("- Fixed
YukiHookModulePrefs
being ignored every time after using direct
once to ignore cache - Added new API, abolished the traditional usage of
isActive
to judge module activation - Fixed the issue of printing debug logs when using the API in a non-Xposed environment
- Fixed log output issue and unintercepted exception issue when looking for
Field
- Decoupling Xposed API in
ReflectionUtils
- Added
YukiHookModuleStatus
method name confusion to reduce the size of module generation - The welcome message will no longer be printed when loading the module's own Hook
- Fixed some bugs that still exist in the previous version
",1),sd={id:"_1-0-55-2022-03-18",tabindex:"-1"},rd=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),hd=e("ul",null,[e("li",null,"Fixed an annotation error"),e("li",null,"Temporarily fix a bug"),e("li",null,[o("Added a large number of "),e("code",null,"android"),o(" types in "),e("code",null,"type"),o(" and a small number of Java types")]),e("li",null,"Fixed compatibility issues between new and old Kotlin APIs")],-1),ud={id:"_1-0-5-2022-03-18",tabindex:"-1"},md=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),pd=n("- Fixed the problem that the welcome message was printed multiple times in the case of the old version of the LSPosed framework
- Added
onInit
method to configure YukiHookAPI
- Added
executorName
and executorVersion
to get the name and version number of the current hook framework - Added
by
method to set the timing and condition of Hook YukiHookModulePrefs
adds a controllable key-value cache, which can dynamically update data when the host is running- Fixed some possible bugs
",1),fd={id:"_1-0-4-2022-03-06",tabindex:"-1"},gd=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),_d=n("- Fixed LSPosed cannot find
XposedBridge
after enabling "Only module classloader can use Xposed API" option in latest version - Added constant version name and version number for
YukiHookAPI
- Added
hasField
method and isAllowPrintingLogs
configuration parameter - Added
isDebug
to enable the API to automatically print the welcome message to test whether the module is valid
",1),kd={id:"_1-0-3-2022-03-02",tabindex:"-1"},bd=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),yd=n("- Fixed a potential exception not intercepted BUG
- Added
ignoredError
function - Added
android
type in type
- Added
ClassNotFound
function after listening to hook
",1),xd={id:"_1-0-2-2022-02-18",tabindex:"-1"},vd=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),wd=e("ul",null,[e("li",null,"Fixed the problem that the project path cannot be found under Windows"),e("li",null,[o("Remove part of reflection API, merge into "),e("code",null,"BaseFinder"),o(" for integration")]),e("li",null,"Add a method to create Hook directly using string")],-1),Ad={id:"_1-0-1-2022-02-15",tabindex:"-1"},Hd=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Pd=e("ul",null,[e("li",null,[e("code",null,"RemedyPlan"),o(" adds "),e("code",null,"onFind"),o(" function")]),e("li",null,"Integrate and modify some reflection API code"),e("li",null,[o("Added Java type in "),e("code",null,"type")]),e("li",null,"Fixed the issue that ignored errors still output in the console")],-1),Cd={id:"_1-0-2022-02-14",tabindex:"-1"},Fd=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Md=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function Yd(Id,Rd){const d=a("Badge"),i=a("ExternalLinkIcon");return l(),s("div",null,[h,e("h3",u,[m,o(" 1.3.0 | 2024.06.25 "),t(d,{type:"tip",text:"latest",vertical:"middle"})]),e("ul",null,[e("li",null,[o("This is a major update, please refer to "),e("a",p,[o("Migrate to YukiHookAPI 1.3.x"),t(i)])]),e("li",null,[o("The reflection API of "),f,o(" is deprecated, please move to the brand new "),e("a",g,[o("KavaRef"),t(i)])]),_,e("li",null,[k,o(" has been deprecated and has now switched to "),e("a",b,[o("AndroidHiddenApiBypass"),t(i)])])]),e("h3",y,[x,o(" 1.2.1 | 2024.06.20 "),t(d,{type:"warning",text:"stale",vertical:"middle"})]),e("ul",null,[v,e("li",null,[o('Add automatic use of "`" in the automatic handler to fix the situation where Kotlin keywords are package names, thanks to '),e("a",w,[o("Fengning Zhu"),t(i)]),o(" for "),e("a",A,[o("PR"),t(i)])]),e("li",null,[o("Adapt to Kotlin 2.0.0+, fix the problem that it cannot be compiled during automatic processing, thanks to "),e("a",H,[o("xihan123"),t(i)]),o(" for "),e("a",P,[o("PR"),t(i)])])]),e("h3",C,[F,o(" 1.2.0 | 2023.10.07 "),t(d,{type:"warning",text:"stale",vertical:"middle"})]),e("ul",null,[M,e("li",null,[o("This is a breaking update, please refer to "),e("a",Y,[o("Migrate to YukiHookAPI 1.2.x"),t(i)]),o(" for details")]),e("li",null,[o("Adapted to Android 14, thanks to "),e("a",I,[o("BlueCat300"),t(i)]),o(" for "),e("a",R,[o("PR"),t(i)])]),e("li",null,[o("Fixed "),S,o(" related issues, thanks to "),e("a",D,[o("buffcow"),t(i)]),o(" for "),e("a",T,[o("PR"),t(i)])]),e("li",null,[o("Fixed the delayed callback problem in the Hook process, thanks to "),e("a",L,[o("cesaryuan"),t(i)]),o(" for his "),e("a",z,[o("Issue"),t(i)])]),e("li",null,[o("Added support for Resources Hook related functions, please refer to this "),e("a",X,[o("Issue"),t(i)]),o(" for details")]),j,e("li",null,[o("Detached "),e("a",O,[o("FreeReflection"),t(i)]),o(" will no longer be automatically generated and will be automatically imported as a dependency")]),B]),e("h3",E,[N,o(" 1.1.11 | 2023.04.25 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[o("Fixed a critical issue since "),W,o(" version where the "),q,o(" cache did not take effect and persistent storage eventually caused app out of memory (OOM), thanks to "),e("a",V,[o("Art-Chen"),t(i)])]),K]),e("h3",U,[Z,o(" 1.1.10 | 2023.04.21 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),G,e("h3",J,[Q,o(" 1.1.9 | 2023.04.17 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),$,e("h3",ee,[oe,o(" 1.1.8 | 2023.02.01 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[o("Fixed the problem that the underlying Hook method cannot update the modified state synchronously when modifying parameters such as "),te,o(" during callback, thanks to the "),e("a",de,[o("Issue"),t(i)]),o(" of "),e("a",ie,[o("Yongzheng Lai"),t(i)])]),ne]),e("h3",ae,[ce,o(" 1.1.6 | 2023.01.21 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),le,e("h3",se,[re,o(" 1.1.5 | 2023.01.13 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),he,e("h3",ue,[me,o(" 1.1.4 | 2022.10.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),pe,e("h3",fe,[ge,o(" 1.1.3 | 2022.09.30 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),_e,e("h3",ke,[be,o(" 1.1.2 | 2022.09.30 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ye,e("h3",xe,[ve,o(" 1.1.1 | 2022.09.28 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),we,e("h3",Ae,[He,o(" 1.1.0 | 2022.09.28 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Pe,e("li",null,[o("Change the help documentation framework to "),e("a",Ce,[o("VuePress"),t(i)])]),Fe,e("li",null,[o("Fixed the problem that the module package name cannot be correctly matched when multi-project packaging, and modify the module package name matching logic of the automatic handler, thanks to "),e("a",Me,[o("5ec1cff"),t(i)]),o(" for the feedback and solutions provided")]),Ye,e("li",null,[Ie,o(" function in "),Re,o(" renamed to "),Se,o(", thanks to "),e("a",De,[o("Kitsune"),t(i)]),o(" suggestion")]),Te,e("li",null,[o("Added multiple search function in reflection search, you can use relative search conditions to obtain multiple search results at the same time, thanks to "),Le,o(" and "),e("a",ze,[o("Kitsune"),t(i)]),o(" for suggestions")]),e("li",null,[o("Fixed the problem that the object obtained by "),Xe,o(" is incorrect in system applications in some systems, thanks to "),e("a",je,[o("Luckyzyx"),t(i)]),o(" for the feedback")]),Oe,e("li",null,[o("Fixed the problem of wrong value of "),Be,o(" method in "),Ee,o(" and optimize the code style, thanks to "),e("a",Ne,[o("Teddy_Zhu"),t(i)]),o(),e("a",We,[o("PR"),t(i)])]),qe,Ve,Ke,e("li",null,[o("Added automatic hook "),Ue,o(" to fix the problem that file permissions are not "),Ze,o(" in some systems, thanks to "),e("a",Ge,[o("5ec1cff"),t(i)]),o(" for the feedback and implementation code provided")]),Je,e("li",null,[o("Added "),Qe,o(" type to Resources Hook, thanks to "),e("a",$e,[o("PR"),t(i)]),o(" of "),e("a",eo,[o("GSWXXN"),t(i)])]),oo,to,io,no]),e("h3",ao,[co,o(" 1.0.92 | 2022.05.31 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),lo,e("h3",so,[ro,o(" 1.0.91 | 2022.05.29 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[o("Fixed the "),ho,o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),e("a",uo,[o("Luckyzyx"),t(i)]),o(" for the feedback")]),mo]),e("h3",po,[fo,o(" 1.0.90 | 2022.05.27 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),go,e("h3",_o,[ko,o(" 1.0.89 | 2022.05.26 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),bo,e("h3",yo,[xo,o(" 1.0.88 | 2022.05.25 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),vo,e("h3",wo,[Ao,o(" 1.0.87 | 2022.05.10 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ho,e("h3",Po,[Co,o(" 1.0.86 | 2022.05.06 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Fo,e("h3",Mo,[Yo,o(" 1.0.85 | 2022.05.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Io,e("h3",Ro,[So,o(" 1.0.83 | 2022.05.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Do,e("h3",To,[Lo,o(" 1.0.82 | 2022.05.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),zo,e("h3",Xo,[jo,o(" 1.0.81 | 2022.05.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Oo,e("h3",Bo,[Eo,o(" 1.0.80 | 2022.05.01 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[No,e("li",null,[o("Fixed the problem that Hook "),Wo,o(" causes Hook to freeze, thanks to "),e("a",qo,[o("WankkoRee"),t(i)]),o(" for the feedback")]),Vo,Ko,Uo]),e("h3",Zo,[Go,o(" 1.0.78 | 2022.04.18 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Jo,e("li",null,[o("Adapt the Sp data storage solution of "),Qo,o(", thanks to "),e("a",$o,[o("mahoshojoHCG"),t(i)]),o(" for feedback")]),et,ot]),e("h3",tt,[dt,o(" 1.0.77 | 2022.04.15 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[it,o(" added "),nt,o(" method, thanks to "),e("a",at,[o("WankkoRee"),t(i)]),o(" for the suggestion")]),ct]),e("h3",lt,[st,o(" 1.0.75 | 2022.04.13 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[o("Corrected the logic recognition part of the automatic handler, thanks to "),e("a",rt,[o("ApeaSuperz"),t(i)]),o(" contribution")]),ht]),e("h3",ut,[mt,o(" 1.0.73 | 2022.04.10 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[o("Fixed some Chinese translation errors in documents, thanks to "),e("a",pt,[o("WankkoRee"),t(i)]),o(" for their contributions")]),e("li",null,[o("Fixed the problem that "),ft,o(" throws an exception when the content is empty in some cases, thanks to "),e("a",gt,[o("Luckyzyx"),t(i)]),o(" for the feedback")]),_t]),e("h3",kt,[bt,o(" 1.0.72 | 2022.04.09 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yt,e("h3",xt,[vt,o(" 1.0.71 | 2022.04.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),wt,e("h3",At,[Ht,o(" 1.0.70 | 2022.04.04 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Pt,e("li",null,[o("Add "),Ct,o(" function in Hook process, thanks to "),e("a",Ft,[o("WankkoRee"),t(i)]),o(" for feedback")]),Mt,Yt,It,Rt,e("li",null,[o("Fixed "),St,o(" not throwing an exception when it is not hooked to a method, thanks to "),e("a",Dt,[o("WankkoRee"),t(i)]),o(" for the feedback")]),e("li",null,[o("Added Hook status monitoring function, thanks to "),e("a",Tt,[o("WankkoRee"),t(i)]),o(" for the suggestion")]),Lt,e("li",null,[o("Added obfuscated method and variable lookup function, you can use different types of filter "),zt,o(" to locate the specified method and variable, thanks to "),e("a",Xt,[o("WankkoRee"),t(i)]),o(" for the ideas provided")]),jt,Ot,e("li",null,[o("Fixed a lot of bugs in the hook process, thanks to "),e("a",Bt,[o("WankkoRee"),t(i)]),o(" for contributing to this project")])]),e("h3",Et,[Nt,o(" 1.0.69 | 2022.03.30 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Wt,qt,e("li",null,[o("Fixed the issue that only the last one takes effect when "),Vt,o(" is used multiple times in a Hook instance, thanks to "),e("a",Kt,[o("WankkoRee"),t(i)]),o(" for the feedback")])]),e("h3",Ut,[Zt,o(" 1.0.68 | 2022.03.29 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Gt,e("h3",Jt,[Qt,o(" 1.0.67 | 2022.03.27 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),$t,e("h3",ed,[od,o(" 1.0.66 | 2022.03.25 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),td,e("h3",dd,[id,o(" 1.0.65 | 2022.03.25 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),nd,e("h3",ad,[cd,o(" 1.0.6 | 2022.03.20 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ld,e("h3",sd,[rd,o(" 1.0.55 | 2022.03.18 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),hd,e("h3",ud,[md,o(" 1.0.5 | 2022.03.18 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),pd,e("h3",fd,[gd,o(" 1.0.4 | 2022.03.06 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),_d,e("h3",kd,[bd,o(" 1.0.3 | 2022.03.02 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yd,e("h3",xd,[vd,o(" 1.0.2 | 2022.02.18 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),wd,e("h3",Ad,[Hd,o(" 1.0.1 | 2022.02.15 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Pd,e("h3",Cd,[Fd,o(" 1.0 | 2022.02.14 "),t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Md])}const Dd=c(r,[["render",Yd],["__file","changelog.html.vue"]]);export{Dd as default};