diff --git a/docs/404.html b/docs/404.html index d3604020f..c23e3aab0 100644 --- a/docs/404.html +++ b/docs/404.html @@ -23,11 +23,11 @@ } Yuki Hook API - + -

404

There's nothing here.
Take me home
- +

404

How did we get here?
Take me home
+ diff --git a/docs/assets/404.html.1bb03b33.js b/docs/assets/404.html.dccdcb64.js similarity index 63% rename from docs/assets/404.html.1bb03b33.js rename to docs/assets/404.html.dccdcb64.js index d279122aa..dd9fd56e7 100644 --- a/docs/assets/404.html.1bb03b33.js +++ b/docs/assets/404.html.dccdcb64.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.a3fd8dd4.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; +import{_ as e,o as c,c as t}from"./app.2bc5d8f3.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/docs/assets/BaseFinder.html.ecaafaf7.js b/docs/assets/BaseFinder.html.78fe026a.js similarity index 99% rename from docs/assets/BaseFinder.html.ecaafaf7.js rename to docs/assets/BaseFinder.html.78fe026a.js index 2bffe19b3..71eac677e 100644 --- a/docs/assets/BaseFinder.html.ecaafaf7.js +++ b/docs/assets/BaseFinder.html.78fe026a.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a as n}from"./app.a3fd8dd4.js";const a={},p=n(`

BaseFinder - class

abstract class BaseFinder
+import{_ as s,o as e,c as o,a as n}from"./app.2bc5d8f3.js";const a={},p=n(`

BaseFinder - class

abstract class BaseFinder
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.70 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u5206\u79BB\u539F\u59CB\u547D\u540D BaseFinder \u4E2D\u7684\u90E8\u5206\u65B9\u6CD5\u4E0E\u53C2\u6570\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F Class \u4E0E Member \u67E5\u627E\u7C7B\u529F\u80FD\u7684\u57FA\u672C\u7C7B\u5B9E\u73B0\u3002

BaseFinder.IndexTypeCondition - class

inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.70 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5B57\u8282\u7801\u4E0B\u6807\u7B5B\u9009\u5B9E\u73B0\u7C7B\u3002

index - method

fun index(num: Int)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.70 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u4E0B\u6807\u3002

\u82E5 index \u5C0F\u4E8E\u96F6\u5219\u4E3A\u5012\u5E8F\uFF0C\u6B64\u65F6\u53EF\u4EE5\u4F7F\u7528 IndexTypeConditionSort.reverse \u65B9\u6CD5\u5B9E\u73B0\u3002

\u53EF\u4F7F\u7528 IndexTypeConditionSort.first \u548C IndexTypeConditionSort.last \u8BBE\u7F6E\u9996\u4F4D\u548C\u672B\u4F4D\u7B5B\u9009\u6761\u4EF6\u3002

index - method

fun index(): IndexTypeConditionSort
diff --git a/docs/assets/BaseFinder.html.2d08335d.js b/docs/assets/BaseFinder.html.b35514a7.js
similarity index 99%
rename from docs/assets/BaseFinder.html.2d08335d.js
rename to docs/assets/BaseFinder.html.b35514a7.js
index cf8a0f9ea..b31880edf 100644
--- a/docs/assets/BaseFinder.html.2d08335d.js
+++ b/docs/assets/BaseFinder.html.b35514a7.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as n,a as o}from"./app.a3fd8dd4.js";const a={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

BaseFinder - class

abstract class BaseFinder
+import{_ as s,o as e,c as n,a as o}from"./app.2bc5d8f3.js";const a={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

BaseFinder - class

abstract class BaseFinder
 

Change Records

v1.0.70 added

v1.1.0 modified

\u5206\u79BB\u539F\u59CB\u547D\u540D BaseFinder \u4E2D\u7684\u90E8\u5206\u65B9\u6CD5\u4E0E\u53C2\u6570\u5230 MemberBaseFinder

Function Illustrate

\u8FD9\u662F Class \u4E0E Member \u67E5\u627E\u7C7B\u529F\u80FD\u7684\u57FA\u672C\u7C7B\u5B9E\u73B0\u3002

BaseFinder.IndexTypeCondition - class

inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
 

Change Records

v1.0.70 added

Function Illustrate

\u5B57\u8282\u7801\u4E0B\u6807\u7B5B\u9009\u5B9E\u73B0\u7C7B\u3002

index - method

fun index(num: Int)
 

Change Records

v1.0.70 added

Function Illustrate

\u8BBE\u7F6E\u4E0B\u6807\u3002

\u82E5 index \u5C0F\u4E8E\u96F6\u5219\u4E3A\u5012\u5E8F\uFF0C\u6B64\u65F6\u53EF\u4EE5\u4F7F\u7528 IndexTypeConditionSort.reverse \u65B9\u6CD5\u5B9E\u73B0\u3002

\u53EF\u4F7F\u7528 IndexTypeConditionSort.first \u548C IndexTypeConditionSort.last \u8BBE\u7F6E\u9996\u4F4D\u548C\u672B\u4F4D\u7B5B\u9009\u6761\u4EF6\u3002

index - method

fun index(): IndexTypeConditionSort
diff --git a/docs/assets/ChannelData.html.3886a803.js b/docs/assets/ChannelData.html.0cfc2a2d.js
similarity index 99%
rename from docs/assets/ChannelData.html.3886a803.js
rename to docs/assets/ChannelData.html.0cfc2a2d.js
index 76a9ccfbd..ff8652e0b 100644
--- a/docs/assets/ChannelData.html.3886a803.js
+++ b/docs/assets/ChannelData.html.0cfc2a2d.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ChannelData - class

data class ChannelData<T>(var key: String, var value: T?) : Serializable
+import{_ as s,o as a,c as n,a as l}from"./app.2bc5d8f3.js";const e={},o=l(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ChannelData - class

data class ChannelData<T>(var key: String, var value: T?) : Serializable
 

Change Records

v1.0.88 added

v1.1.5 modified

\u5B9E\u73B0\u4E86 Serializable \u63A5\u53E3

Function Illustrate

\u6570\u636E\u901A\u8BAF\u6865\u952E\u503C\u6784\u9020\u7C7B\u3002

\u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookDataChannel \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

Function Example

\u5EFA\u7ACB\u4E00\u4E2A\u6A21\u677F\u7C7B\u5B9A\u4E49\u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u53D1\u9001\u7684\u952E\u503C\u6570\u636E\u3002

The following example

object DataConst {
 
     val TEST_KV_DATA_1 = ChannelData("test_data_1", "defalut value")
diff --git a/docs/assets/ChannelData.html.d014b5aa.js b/docs/assets/ChannelData.html.938d0196.js
similarity index 99%
rename from docs/assets/ChannelData.html.d014b5aa.js
rename to docs/assets/ChannelData.html.938d0196.js
index 1457d49dc..b5178bd1e 100644
--- a/docs/assets/ChannelData.html.d014b5aa.js
+++ b/docs/assets/ChannelData.html.938d0196.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

ChannelData - class

data class ChannelData<T>(var key: String, var value: T?) : Serializable
+import{_ as s,o as a,c as n,a as l}from"./app.2bc5d8f3.js";const e={},o=l(`

ChannelData - class

data class ChannelData<T>(var key: String, var value: T?) : Serializable
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.88 \u65B0\u589E

v1.1.5 \u4FEE\u6539

\u5B9E\u73B0\u4E86 Serializable \u63A5\u53E3

\u529F\u80FD\u63CF\u8FF0

\u6570\u636E\u901A\u8BAF\u6865\u952E\u503C\u6784\u9020\u7C7B\u3002

\u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookDataChannel \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

\u529F\u80FD\u793A\u4F8B

\u5EFA\u7ACB\u4E00\u4E2A\u6A21\u677F\u7C7B\u5B9A\u4E49\u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u53D1\u9001\u7684\u952E\u503C\u6570\u636E\u3002

\u793A\u4F8B\u5982\u4E0B

object DataConst {
 
     val TEST_KV_DATA_1 = ChannelData("test_data_1", "defalut value")
diff --git a/docs/assets/ChannelPriority.html.91f495ea.js b/docs/assets/ChannelPriority.html.986fe0e7.js
similarity index 96%
rename from docs/assets/ChannelPriority.html.91f495ea.js
rename to docs/assets/ChannelPriority.html.986fe0e7.js
index f81e86248..6a3171c89 100644
--- a/docs/assets/ChannelPriority.html.91f495ea.js
+++ b/docs/assets/ChannelPriority.html.986fe0e7.js
@@ -1,2 +1,2 @@
-import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},t=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ChannelPriority - class

class ChannelPriority(private val conditions: () -> Boolean)
+import{_ as s,o as n,c as o,a}from"./app.2bc5d8f3.js";const e={},t=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ChannelPriority - class

class ChannelPriority(private val conditions: () -> Boolean)
 

Change Records

v1.1.5 added

Function Illustrate

\u6570\u636E\u901A\u8BAF\u6865\u54CD\u5E94\u4F18\u5148\u7EA7\u6784\u9020\u7C7B\u3002

\u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookDataChannel \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

`,8),l=[t];function c(r,p){return n(),o("div",null,l)}const d=s(e,[["render",c],["__file","ChannelPriority.html.vue"]]);export{d as default}; diff --git a/docs/assets/ChannelPriority.html.9fd0762c.js b/docs/assets/ChannelPriority.html.98985126.js similarity index 95% rename from docs/assets/ChannelPriority.html.9fd0762c.js rename to docs/assets/ChannelPriority.html.98985126.js index e97f4e20f..16ce3254c 100644 --- a/docs/assets/ChannelPriority.html.9fd0762c.js +++ b/docs/assets/ChannelPriority.html.98985126.js @@ -1,2 +1,2 @@ -import{_ as s,o as a,c as o,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

ChannelPriority - class

class ChannelPriority(private val conditions: () -> Boolean)
+import{_ as s,o as a,c as o,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

ChannelPriority - class

class ChannelPriority(private val conditions: () -> Boolean)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.5 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6570\u636E\u901A\u8BAF\u6865\u54CD\u5E94\u4F18\u5148\u7EA7\u6784\u9020\u7C7B\u3002

\u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookDataChannel \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

`,7),c=[l];function t(p,r){return a(),o("div",null,c)}const d=s(e,[["render",t],["__file","ChannelPriority.html.vue"]]);export{d as default}; diff --git a/docs/assets/ComponentTypeFactory.html.fcb0f2f2.js b/docs/assets/ComponentTypeFactory.html.0e696f3b.js similarity index 94% rename from docs/assets/ComponentTypeFactory.html.fcb0f2f2.js rename to docs/assets/ComponentTypeFactory.html.0e696f3b.js index 65b47f809..e35775e46 100644 --- a/docs/assets/ComponentTypeFactory.html.fcb0f2f2.js +++ b/docs/assets/ComponentTypeFactory.html.0e696f3b.js @@ -1 +1 @@ -import{_ as n,r as c,o as a,c as r,b as e,d as s,a as p,e as o}from"./app.a3fd8dd4.js";const d={},i=p('

ComponentTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),l=o("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=o("\u70B9\u51FB\u8FD9\u91CC"),k=o(" \u8FDB\u884C\u67E5\u770B\u3002");function m(y,f){const t=c("ExternalLinkIcon");return a(),r("div",null,[i,e("p",null,[l,e("a",_,[h,s(t)]),k])])}const b=n(d,[["render",m],["__file","ComponentTypeFactory.html.vue"]]);export{b as default}; +import{_ as n,r as c,o as a,c as r,b as e,d as s,a as p,e as o}from"./app.2bc5d8f3.js";const d={},i=p('

ComponentTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),l=o("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=o("\u70B9\u51FB\u8FD9\u91CC"),k=o(" \u8FDB\u884C\u67E5\u770B\u3002");function m(y,f){const t=c("ExternalLinkIcon");return a(),r("div",null,[i,e("p",null,[l,e("a",_,[h,s(t)]),k])])}const b=n(d,[["render",m],["__file","ComponentTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/ComponentTypeFactory.html.21e53322.js b/docs/assets/ComponentTypeFactory.html.d2ac1ebe.js similarity index 95% rename from docs/assets/ComponentTypeFactory.html.21e53322.js rename to docs/assets/ComponentTypeFactory.html.d2ac1ebe.js index 4907c1344..390303cb1 100644 --- a/docs/assets/ComponentTypeFactory.html.21e53322.js +++ b/docs/assets/ComponentTypeFactory.html.d2ac1ebe.js @@ -1 +1 @@ -import{_ as n,r as a,o as c,c as s,b as e,d as r,a as i,e as o}from"./app.a3fd8dd4.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ComponentTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=o("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=o("\u70B9\u51FB\u8FD9\u91CC"),m=o(" \u8FDB\u884C\u67E5\u770B\u3002");function u(k,f){const t=a("ExternalLinkIcon");return c(),s("div",null,[l,e("p",null,[d,e("a",h,[_,r(t)]),m])])}const g=n(p,[["render",u],["__file","ComponentTypeFactory.html.vue"]]);export{g as default}; +import{_ as n,r as a,o as c,c as s,b as e,d as r,a as i,e as o}from"./app.2bc5d8f3.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ComponentTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=o("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=o("\u70B9\u51FB\u8FD9\u91CC"),m=o(" \u8FDB\u884C\u67E5\u770B\u3002");function u(k,f){const t=a("ExternalLinkIcon");return c(),s("div",null,[l,e("p",null,[d,e("a",h,[_,r(t)]),m])])}const g=n(p,[["render",u],["__file","ComponentTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/ConstructorFinder.html.bd11174d.js b/docs/assets/ConstructorFinder.html.7d970fbe.js similarity index 96% rename from docs/assets/ConstructorFinder.html.bd11174d.js rename to docs/assets/ConstructorFinder.html.7d970fbe.js index e4888fa43..3644789fc 100644 --- a/docs/assets/ConstructorFinder.html.bd11174d.js +++ b/docs/assets/ConstructorFinder.html.7d970fbe.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-1e2cbc9c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method-1","link":"#onnosuchconstructor-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1672424460000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-1e2cbc9c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method-1","link":"#onnosuchconstructor-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"}');export{e as data}; diff --git a/docs/assets/ConstructorFinder.html.8e8acbb3.js b/docs/assets/ConstructorFinder.html.992a648b.js similarity index 96% rename from docs/assets/ConstructorFinder.html.8e8acbb3.js rename to docs/assets/ConstructorFinder.html.992a648b.js index 5c2da3d09..66e5efed5 100644 --- a/docs/assets/ConstructorFinder.html.8e8acbb3.js +++ b/docs/assets/ConstructorFinder.html.992a648b.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorFinder - class

class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o as n,c as o,a}from"./app.2bc5d8f3.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorFinder - class

class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Constructor \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Constructor \u6216\u4E00\u7EC4 Constructor\u3002

paramCount - field

var paramCount: Int
 

Change Records

v1.0.67 added

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
 

Change Records

v1.0.67 added

v1.0.80 modified

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

v1.1.0 modified

\u5408\u5E76\u5230 ModifierConditions

Function Illustrate

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\uFF0C\u9ED8\u8BA4\u6A21\u7CCA\u67E5\u627E\u5E76\u53D6\u7B2C\u4E00\u4E2A\u5339\u914D\u7684 Constructor\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
@@ -83,6 +83,6 @@ import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

onNoSuchConstructor - method

inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
 

Change Records

v1.0 first

v1.0.80 modified

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Constructor \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
 

Change Records

v1.1.0 added

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u82E5 isNotIgnoredHookingFailure \u4E3A false \u5219\u81EA\u52A8\u5FFD\u7565\u3002

Notice

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchConstructor \u65B9\u6CD5\u3002

ignoredError - method

Change Records

v1.0.3 added

v1.1.0 deprecated

\u8BF7\u8F6C\u79FB\u5230\u65B0\u65B9\u6CD5 ignored()

Instance - class

inner class Instance internal constructor(private val constructor: Constructor<*>?)
-

Change Records

v1.0.2 added

v1.1.0 modified

\u65B0\u589E constructor \u53C2\u6570

Function Illustrate

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg param: Any?): Any?
-

Change Records

v1.0.2 added

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg param: Any?): T?
-

Change Records

v1.0.2 added

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,295),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","ConstructorFinder.html.vue"]]);export{i as default}; +

Change Records

v1.0.2 added

v1.1.0 modified

\u65B0\u589E constructor \u53C2\u6570

Function Illustrate

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
+

Change Records

v1.0.2 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg args: Any?): T?
+

Change Records

v1.0.2 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,299),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","ConstructorFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorFinder.html.5d3a6cdd.js b/docs/assets/ConstructorFinder.html.f20afbf5.js similarity index 94% rename from docs/assets/ConstructorFinder.html.5d3a6cdd.js rename to docs/assets/ConstructorFinder.html.f20afbf5.js index ae325ca40..8faabbb97 100644 --- a/docs/assets/ConstructorFinder.html.5d3a6cdd.js +++ b/docs/assets/ConstructorFinder.html.f20afbf5.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-a71937aa","path":"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method-1","link":"#onnosuchconstructor-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1672424460000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-a71937aa","path":"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method-1","link":"#onnosuchconstructor-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"}');export{e as data}; diff --git a/docs/assets/ConstructorFinder.html.a0eb34b8.js b/docs/assets/ConstructorFinder.html.f9c8541f.js similarity index 93% rename from docs/assets/ConstructorFinder.html.a0eb34b8.js rename to docs/assets/ConstructorFinder.html.f9c8541f.js index ce02d6d28..df9c1306e 100644 --- a/docs/assets/ConstructorFinder.html.a0eb34b8.js +++ b/docs/assets/ConstructorFinder.html.f9c8541f.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

ConstructorFinder - class

class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o,c as n,a}from"./app.2bc5d8f3.js";const e={},l=a(`

ConstructorFinder - class

class ConstructorFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Constructor \u6216\u4E00\u7EC4 Constructor\u3002

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

v1.0.80 \u4FEE\u6539

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 ModifierConditions

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\uFF0C\u9ED8\u8BA4\u6A21\u7CCA\u67E5\u627E\u5E76\u53D6\u7B2C\u4E00\u4E2A\u5339\u914D\u7684 Constructor\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
@@ -83,6 +83,6 @@ import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

onNoSuchConstructor - method

inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.80 \u4FEE\u6539

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Constructor \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u82E5 isNotIgnoredHookingFailure \u4E3A false \u5219\u81EA\u52A8\u5FFD\u7565\u3002

\u6CE8\u610F

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchConstructor \u65B9\u6CD5\u3002

ignoredError - method

\u53D8\u66F4\u8BB0\u5F55

v1.0.3 \u65B0\u589E

v1.1.0 \u4F5C\u5E9F

\u8BF7\u8F6C\u79FB\u5230\u65B0\u65B9\u6CD5 ignored()

Instance - class

inner class Instance internal constructor(private val constructor: Constructor<*>?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u65B0\u589E constructor \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg param: Any?): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg param: Any?): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,294),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","ConstructorFinder.html.vue"]]);export{i as default}; +

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u65B0\u589E constructor \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg args: Any?): T?
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,298),p=[l];function c(t,r){return o(),n("div",null,p)}const i=s(e,[["render",c],["__file","ConstructorFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorRules.html.ed5d13d6.js b/docs/assets/ConstructorRules.html.4bf9cde4.js similarity index 99% rename from docs/assets/ConstructorRules.html.ed5d13d6.js rename to docs/assets/ConstructorRules.html.4bf9cde4.js index 07b814fa9..011bf5b77 100644 --- a/docs/assets/ConstructorRules.html.ed5d13d6.js +++ b/docs/assets/ConstructorRules.html.4bf9cde4.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},p=n(`

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
+import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},p=n(`

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
diff --git a/docs/assets/ConstructorRules.html.78b8984a.js b/docs/assets/ConstructorRules.html.c9fab517.js
similarity index 99%
rename from docs/assets/ConstructorRules.html.78b8984a.js
rename to docs/assets/ConstructorRules.html.c9fab517.js
index 0097d0d4b..a8c546ebe 100644
--- a/docs/assets/ConstructorRules.html.78b8984a.js
+++ b/docs/assets/ConstructorRules.html.c9fab517.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},t=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
+import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},t=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
 

Change Records

v1.1.0 added

Function Illustrate

Constructor \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

paramCount - field

var paramCount: Int
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
diff --git a/docs/assets/CountRules.html.9e942ea0.js b/docs/assets/CountRules.html.3c02ecf2.js
similarity index 98%
rename from docs/assets/CountRules.html.9e942ea0.js
rename to docs/assets/CountRules.html.3c02ecf2.js
index 91775a628..83f9fd8a6 100644
--- a/docs/assets/CountRules.html.9e942ea0.js
+++ b/docs/assets/CountRules.html.3c02ecf2.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as o,a as e}from"./app.a3fd8dd4.js";const a={},t=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CountRules - class

class CountRules private constructor()
+import{_ as s,o as n,c as o,a as e}from"./app.2bc5d8f3.js";const a={},t=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CountRules - class

class CountRules private constructor()
 

Change Records

v1.1.0 added

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u6570\u7EC4 (\u4E0B\u6807) \u4E2A\u6570\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
 

Change Records

v1.1.0 added

Function Illustrate

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
 

Change Records

v1.1.0 added

Function Illustrate

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
diff --git a/docs/assets/CountRules.html.8056c7de.js b/docs/assets/CountRules.html.d0cc8434.js
similarity index 98%
rename from docs/assets/CountRules.html.8056c7de.js
rename to docs/assets/CountRules.html.d0cc8434.js
index 6b7069944..796add034 100644
--- a/docs/assets/CountRules.html.8056c7de.js
+++ b/docs/assets/CountRules.html.d0cc8434.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

CountRules - class

class CountRules private constructor()
+import{_ as s,o,c as n,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

CountRules - class

class CountRules private constructor()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u6570\u7EC4 (\u4E0B\u6807) \u4E2A\u6570\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
diff --git a/docs/assets/CurrentClass.html.74aeee57.js b/docs/assets/CurrentClass.html.4feebd58.js
similarity index 99%
rename from docs/assets/CurrentClass.html.74aeee57.js
rename to docs/assets/CurrentClass.html.4feebd58.js
index 74f52b408..7fed28cdf 100644
--- a/docs/assets/CurrentClass.html.74aeee57.js
+++ b/docs/assets/CurrentClass.html.4feebd58.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as e,a as n}from"./app.a3fd8dd4.js";const o={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
+import{_ as s,o as a,c as e,a as n}from"./app.2bc5d8f3.js";const o={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
 

Change Records

v1.0.70 added

v1.1.0 modified

\u8C03\u6574\u4E86\u6784\u9020\u65B9\u6CD5\u7684\u53C2\u6570\u540D\u79F0

Function Illustrate

\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
 

Change Records

v1.1.0 added

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getName\u3002

simpleName - field

val simpleName: String
 

Change Records

v1.1.0 added

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
diff --git a/docs/assets/CurrentClass.html.690247a4.js b/docs/assets/CurrentClass.html.fc02b099.js
similarity index 99%
rename from docs/assets/CurrentClass.html.690247a4.js
rename to docs/assets/CurrentClass.html.fc02b099.js
index 67c112c6b..f6f560453 100644
--- a/docs/assets/CurrentClass.html.690247a4.js
+++ b/docs/assets/CurrentClass.html.fc02b099.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as o}from"./app.a3fd8dd4.js";const e={},l=o(`

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
+import{_ as s,o as a,c as n,a as o}from"./app.2bc5d8f3.js";const e={},l=o(`

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.70 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u8C03\u6574\u4E86\u6784\u9020\u65B9\u6CD5\u7684\u53C2\u6570\u540D\u79F0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getName\u3002

simpleName - field

val simpleName: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
diff --git a/docs/assets/DefinedTypeFactory.html.9d8e771c.js b/docs/assets/DefinedTypeFactory.html.18122aff.js
similarity index 96%
rename from docs/assets/DefinedTypeFactory.html.9d8e771c.js
rename to docs/assets/DefinedTypeFactory.html.18122aff.js
index 0c55c03db..b87717290 100644
--- a/docs/assets/DefinedTypeFactory.html.9d8e771c.js
+++ b/docs/assets/DefinedTypeFactory.html.18122aff.js
@@ -1,2 +1,2 @@
-import{_ as e,o as s,c as o,a}from"./app.a3fd8dd4.js";const t={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DefinedTypeFactory - kt

Change Records

v1.1.0 added

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
+import{_ as e,o as s,c as o,a}from"./app.2bc5d8f3.js";const t={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DefinedTypeFactory - kt

Change Records

v1.1.0 added

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
 

Change Records

v1.1.0 added

Function Illustrate

\u5F97\u5230\u6A21\u7CCA\u7C7B\u578B\u3002

`,12),c=[n];function r(l,p){return s(),o("div",null,c)}const i=e(t,[["render",r],["__file","DefinedTypeFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/DefinedTypeFactory.html.dc18ac09.js b/docs/assets/DefinedTypeFactory.html.f501cdb3.js similarity index 95% rename from docs/assets/DefinedTypeFactory.html.dc18ac09.js rename to docs/assets/DefinedTypeFactory.html.f501cdb3.js index 7c698fcdf..6c122d799 100644 --- a/docs/assets/DefinedTypeFactory.html.dc18ac09.js +++ b/docs/assets/DefinedTypeFactory.html.f501cdb3.js @@ -1,2 +1,2 @@ -import{_ as e,o as s,c as a,a as o}from"./app.a3fd8dd4.js";const t={},n=o(`

DefinedTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
+import{_ as e,o as s,c as a,a as o}from"./app.2bc5d8f3.js";const t={},n=o(`

DefinedTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u6A21\u7CCA\u7C7B\u578B\u3002

`,11),c=[n];function p(l,r){return s(),a("div",null,c)}const i=e(t,[["render",p],["__file","DefinedTypeFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/DexClassFinder.html.a39c3b0d.js b/docs/assets/DexClassFinder.html.20b00e52.js similarity index 99% rename from docs/assets/DexClassFinder.html.a39c3b0d.js rename to docs/assets/DexClassFinder.html.20b00e52.js index 452d1e14d..3ba9dbdc0 100644 --- a/docs/assets/DexClassFinder.html.a39c3b0d.js +++ b/docs/assets/DexClassFinder.html.20b00e52.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},l=e(`

DexClassFinder - class

class DexClassFinder internal constructor(
+import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},l=e(`

DexClassFinder - class

class DexClassFinder internal constructor(
     internal var name: String,
     internal var async: Boolean,
     override val loaderSet: ClassLoader?
diff --git a/docs/assets/DexClassFinder.html.e1b50295.js b/docs/assets/DexClassFinder.html.eeff73ba.js
similarity index 99%
rename from docs/assets/DexClassFinder.html.e1b50295.js
rename to docs/assets/DexClassFinder.html.eeff73ba.js
index 986b745e9..4242dec4d 100644
--- a/docs/assets/DexClassFinder.html.e1b50295.js
+++ b/docs/assets/DexClassFinder.html.eeff73ba.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DexClassFinder - class

class DexClassFinder internal constructor(
+import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DexClassFinder - class

class DexClassFinder internal constructor(
     internal var name: String,
     internal var async: Boolean,
     override val loaderSet: ClassLoader?
diff --git a/docs/assets/FieldFinder.html.ec139e7b.js b/docs/assets/FieldFinder.html.1d409314.js
similarity index 99%
rename from docs/assets/FieldFinder.html.ec139e7b.js
rename to docs/assets/FieldFinder.html.1d409314.js
index cd13e6028..e98326bdb 100644
--- a/docs/assets/FieldFinder.html.ec139e7b.js
+++ b/docs/assets/FieldFinder.html.1d409314.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a as n}from"./app.a3fd8dd4.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldFinder - class

class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
+import{_ as s,o,c as e,a as n}from"./app.2bc5d8f3.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldFinder - class

class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Field \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Field \u6216\u4E00\u7EC4 Field\u3002

classSet - field

Change Records

v1.0 first

v1.0.2 removed

name - field

var name: String
 

Change Records

v1.0 first

v1.0.70 modified

\u5141\u8BB8\u4E0D\u586B\u5199\u540D\u79F0

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

type - field

var type: Any?
 

Change Records

v1.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
diff --git a/docs/assets/FieldFinder.html.ec12b90a.js b/docs/assets/FieldFinder.html.907e1e03.js
similarity index 99%
rename from docs/assets/FieldFinder.html.ec12b90a.js
rename to docs/assets/FieldFinder.html.907e1e03.js
index 4645363fe..72b802e01 100644
--- a/docs/assets/FieldFinder.html.ec12b90a.js
+++ b/docs/assets/FieldFinder.html.907e1e03.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

FieldFinder - class

class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
+import{_ as s,o,c as n,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

FieldFinder - class

class FieldFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>?) : MemberBaseFinder
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Field \u6216\u4E00\u7EC4 Field\u3002

classSet - field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u79FB\u9664

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.70 \u4FEE\u6539

\u5141\u8BB8\u4E0D\u586B\u5199\u540D\u79F0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

type - field

var type: Any?
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
diff --git a/docs/assets/FieldRules.html.24eb25e9.js b/docs/assets/FieldRules.html.b73735ea.js
similarity index 98%
rename from docs/assets/FieldRules.html.24eb25e9.js
rename to docs/assets/FieldRules.html.b73735ea.js
index 78961f116..1a2dcc398 100644
--- a/docs/assets/FieldRules.html.24eb25e9.js
+++ b/docs/assets/FieldRules.html.b73735ea.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
+import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
 

Change Records

v1.1.0 added

Function Illustrate

Field \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

type - field

var type: Any?
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
diff --git a/docs/assets/FieldRules.html.485bb6e0.js b/docs/assets/FieldRules.html.f98ab1a1.js
similarity index 98%
rename from docs/assets/FieldRules.html.485bb6e0.js
rename to docs/assets/FieldRules.html.f98ab1a1.js
index eadec69f6..94ed2660f 100644
--- a/docs/assets/FieldRules.html.485bb6e0.js
+++ b/docs/assets/FieldRules.html.f98ab1a1.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},l=a(`

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
+import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},l=a(`

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

type - field

var type: Any?
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
diff --git a/docs/assets/GenericClass.html.0a9ee744.js b/docs/assets/GenericClass.html.d170aabe.js
similarity index 98%
rename from docs/assets/GenericClass.html.0a9ee744.js
rename to docs/assets/GenericClass.html.d170aabe.js
index b364d24f5..952313808 100644
--- a/docs/assets/GenericClass.html.0a9ee744.js
+++ b/docs/assets/GenericClass.html.d170aabe.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as o}from"./app.a3fd8dd4.js";const l={},e=o(`

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
+import{_ as s,o as a,c as n,a as o}from"./app.2bc5d8f3.js";const l={},e=o(`

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

argument - method

fun argument(index: Int): Class<*>
 
inline fun <reified T> argument(index: Int): Class<T>
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

v1.1.5 \u4FEE\u6539

\u65B0\u589E\u6CDB\u578B\u8FD4\u56DE\u503C Class<T> \u65B9\u6CD5

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u6CDB\u578B\u53C2\u6570\u6570\u7EC4\u4E0B\u6807\u7684 Class \u5B9E\u4F8B\u3002

`,15),p=[e];function c(t,r){return a(),n("div",null,p)}const y=s(l,[["render",c],["__file","GenericClass.html.vue"]]);export{y as default}; diff --git a/docs/assets/GenericClass.html.b3633ffa.js b/docs/assets/GenericClass.html.f91f2af7.js similarity index 98% rename from docs/assets/GenericClass.html.b3633ffa.js rename to docs/assets/GenericClass.html.f91f2af7.js index 04d1d7569..e4181ed82 100644 --- a/docs/assets/GenericClass.html.b3633ffa.js +++ b/docs/assets/GenericClass.html.f91f2af7.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a as o}from"./app.a3fd8dd4.js";const e={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
+import{_ as s,o as a,c as n,a as o}from"./app.2bc5d8f3.js";const e={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
 

Change Records

v1.1.0 added

Function Illustrate

\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

argument - method

fun argument(index: Int): Class<*>
 
inline fun <reified T> argument(index: Int): Class<T>
 

Change Records

v1.1.0 added

v1.1.5 modified

\u65B0\u589E\u6CDB\u578B\u8FD4\u56DE\u503C Class<T> \u65B9\u6CD5

Function Illustrate

\u83B7\u5F97\u6CDB\u578B\u53C2\u6570\u6570\u7EC4\u4E0B\u6807\u7684 Class \u5B9E\u4F8B\u3002

`,16),p=[l];function t(c,r){return a(),n("div",null,p)}const d=s(e,[["render",t],["__file","GenericClass.html.vue"]]);export{d as default}; diff --git a/docs/assets/GraphicsTypeFactory.html.20efc476.js b/docs/assets/GraphicsTypeFactory.html.3a8e0974.js similarity index 94% rename from docs/assets/GraphicsTypeFactory.html.20efc476.js rename to docs/assets/GraphicsTypeFactory.html.3a8e0974.js index 5e42eecfb..ffa26ae59 100644 --- a/docs/assets/GraphicsTypeFactory.html.20efc476.js +++ b/docs/assets/GraphicsTypeFactory.html.3a8e0974.js @@ -1 +1 @@ -import{_ as c,r as a,o as r,c as s,b as o,d as n,a as p,e}from"./app.a3fd8dd4.js";const i={},d=p('

GraphicsTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),h=e("\u8BE6\u60C5\u53EF "),l={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(f,u){const t=a("ExternalLinkIcon");return r(),s("div",null,[d,o("p",null,[h,o("a",l,[_,n(t)]),k])])}const b=c(i,[["render",y],["__file","GraphicsTypeFactory.html.vue"]]);export{b as default}; +import{_ as c,r as a,o as r,c as s,b as o,d as n,a as p,e}from"./app.2bc5d8f3.js";const i={},d=p('

GraphicsTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),h=e("\u8BE6\u60C5\u53EF "),l={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(f,u){const t=a("ExternalLinkIcon");return r(),s("div",null,[d,o("p",null,[h,o("a",l,[_,n(t)]),k])])}const b=c(i,[["render",y],["__file","GraphicsTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/GraphicsTypeFactory.html.5a89b685.js b/docs/assets/GraphicsTypeFactory.html.e7bc3f71.js similarity index 95% rename from docs/assets/GraphicsTypeFactory.html.5a89b685.js rename to docs/assets/GraphicsTypeFactory.html.e7bc3f71.js index 27305fbbd..4d3587f92 100644 --- a/docs/assets/GraphicsTypeFactory.html.5a89b685.js +++ b/docs/assets/GraphicsTypeFactory.html.e7bc3f71.js @@ -1 +1 @@ -import{_ as a,r as c,o as s,c as r,b as o,d as n,a as i,e}from"./app.a3fd8dd4.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GraphicsTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,g){const t=c("ExternalLinkIcon");return s(),r("div",null,[l,o("p",null,[d,o("a",h,[_,n(t)]),u])])}const y=a(p,[["render",k],["__file","GraphicsTypeFactory.html.vue"]]);export{y as default}; +import{_ as a,r as c,o as s,c as r,b as o,d as n,a as i,e}from"./app.2bc5d8f3.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GraphicsTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,g){const t=c("ExternalLinkIcon");return s(),r("div",null,[l,o("p",null,[d,o("a",h,[_,n(t)]),u])])}const y=a(p,[["render",k],["__file","GraphicsTypeFactory.html.vue"]]);export{y as default}; diff --git a/docs/assets/HookClass.html.a2a3a962.js b/docs/assets/HookClass.html.32798492.js similarity index 97% rename from docs/assets/HookClass.html.a2a3a962.js rename to docs/assets/HookClass.html.32798492.js index f4796286c..fc2876f14 100644 --- a/docs/assets/HookClass.html.a2a3a962.js +++ b/docs/assets/HookClass.html.32798492.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookClass - class

class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
+import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookClass - class

class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
 

Change Records

v1.0 first

v1.1.0 modified

HookClass \u76F8\u5173\u529F\u80FD\u4E0D\u518D\u5BF9\u5916\u5F00\u653E

Function Illustrate

\u521B\u5EFA\u4E00\u4E2A\u5F53\u524D Hook \u7684 Class \u63A5\u7BA1\u7C7B\u3002

instance \u4E3A\u5B9E\u4F8B\uFF0Cname \u4E3A\u5B9E\u4F8B\u5B8C\u6574\u5305\u540D\uFF0Cthrowable \u4E3A\u627E\u4E0D\u5230\u5B9E\u4F8B\u7684\u65F6\u5019\u629B\u51FA\u7684\u5F02\u5E38\u3002

`,10),t=[l];function c(p,r){return o(),a("div",null,t)}const d=s(e,[["render",c],["__file","HookClass.html.vue"]]);export{d as default}; diff --git a/docs/assets/HookClass.html.313ccadf.js b/docs/assets/HookClass.html.eafc5336.js similarity index 97% rename from docs/assets/HookClass.html.313ccadf.js rename to docs/assets/HookClass.html.eafc5336.js index 14e3f4f23..d2f3581bc 100644 --- a/docs/assets/HookClass.html.313ccadf.js +++ b/docs/assets/HookClass.html.eafc5336.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const l={},e=n(`

HookClass - class

class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
+import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const l={},e=n(`

HookClass - class

class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

HookClass \u76F8\u5173\u529F\u80FD\u4E0D\u518D\u5BF9\u5916\u5F00\u653E

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u4E00\u4E2A\u5F53\u524D Hook \u7684 Class \u63A5\u7BA1\u7C7B\u3002

instance \u4E3A\u5B9E\u4F8B\uFF0Cname \u4E3A\u5B9E\u4F8B\u5B8C\u6574\u5305\u540D\uFF0Cthrowable \u4E3A\u627E\u4E0D\u5230\u5B9E\u4F8B\u7684\u65F6\u5019\u629B\u51FA\u7684\u5F02\u5E38\u3002

`,9),p=[e];function c(t,r){return o(),a("div",null,p)}const y=s(l,[["render",c],["__file","HookClass.html.vue"]]);export{y as default}; diff --git a/docs/assets/HookParam.html.274f2827.js b/docs/assets/HookParam.html.5ee4b669.js similarity index 99% rename from docs/assets/HookParam.html.274f2827.js rename to docs/assets/HookParam.html.5ee4b669.js index 4ba898730..3a78ae2a0 100644 --- a/docs/assets/HookParam.html.274f2827.js +++ b/docs/assets/HookParam.html.5ee4b669.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookParam - class

class HookParam internal constructor(
+import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookParam - class

class HookParam internal constructor(
     private val creatorInstance: YukiMemberHookCreator,
     private var paramId: String,
     private var param: YukiHookCallback.Param?
diff --git a/docs/assets/HookParam.html.9cd06d5e.js b/docs/assets/HookParam.html.ce4dd26d.js
similarity index 99%
rename from docs/assets/HookParam.html.9cd06d5e.js
rename to docs/assets/HookParam.html.ce4dd26d.js
index 2a044759d..2a0b3fdfa 100644
--- a/docs/assets/HookParam.html.9cd06d5e.js
+++ b/docs/assets/HookParam.html.ce4dd26d.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

HookParam - class

class HookParam internal constructor(
+import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

HookParam - class

class HookParam internal constructor(
     private val creatorInstance: YukiMemberHookCreator,
     private var paramId: String,
     private var param: YukiHookCallback.Param?
diff --git a/docs/assets/HookResources.html.9d793590.js b/docs/assets/HookResources.html.d614b772.js
similarity index 95%
rename from docs/assets/HookResources.html.9d793590.js
rename to docs/assets/HookResources.html.d614b772.js
index 61e578ed4..4adc4f46c 100644
--- a/docs/assets/HookResources.html.9d793590.js
+++ b/docs/assets/HookResources.html.d614b772.js
@@ -1,2 +1,2 @@
-import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const c={},n=a(`

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
+import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const c={},n=a(`

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.80 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u4E00\u4E2A\u5F53\u524D Hook \u7684 YukiResources \u63A5\u7BA1\u7C7B\u3002

`,6),l=[n];function r(t,p){return o(),e("div",null,l)}const i=s(c,[["render",r],["__file","HookResources.html.vue"]]);export{i as default}; diff --git a/docs/assets/HookResources.html.df1896fb.js b/docs/assets/HookResources.html.dc50c8a1.js similarity index 96% rename from docs/assets/HookResources.html.df1896fb.js rename to docs/assets/HookResources.html.dc50c8a1.js index dde3ceaed..d3ca0f638 100644 --- a/docs/assets/HookResources.html.df1896fb.js +++ b/docs/assets/HookResources.html.dc50c8a1.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as e,a as n}from"./app.a3fd8dd4.js";const a={},c=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
+import{_ as s,o,c as e,a as n}from"./app.2bc5d8f3.js";const a={},c=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
 

Change Records

v1.0.80 added

Function Illustrate

\u521B\u5EFA\u4E00\u4E2A\u5F53\u524D Hook \u7684 YukiResources \u63A5\u7BA1\u7C7B\u3002

`,7),t=[c];function r(l,p){return o(),e("div",null,t)}const u=s(a,[["render",r],["__file","HookResources.html.vue"]]);export{u as default}; diff --git a/docs/assets/IYukiHookXposedInit.html.ddece200.js b/docs/assets/IYukiHookXposedInit.html.1edb2ab0.js similarity index 98% rename from docs/assets/IYukiHookXposedInit.html.ddece200.js rename to docs/assets/IYukiHookXposedInit.html.1edb2ab0.js index eb1e30d88..a92cb5e23 100644 --- a/docs/assets/IYukiHookXposedInit.html.ddece200.js +++ b/docs/assets/IYukiHookXposedInit.html.1edb2ab0.js @@ -1,4 +1,4 @@ -import{_ as o,o as e,c as s,a as n}from"./app.a3fd8dd4.js";const a={},t=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
+import{_ as o,o as e,c as s,a as n}from"./app.2bc5d8f3.js";const a={},t=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
 

Change Records

v1.0 first

v1.0.80 modified deprecated

\u4F5C\u5E9F\u4E86 YukiHookXposedInitProxy \u540D\u79F0\u4F46\u4FDD\u7559\u63A5\u53E3

\u8F6C\u79FB\u5230 IYukiHookXposedInit \u65B0\u540D\u79F0

Function Illustrate

YukiHookAPI \u7684 Xposed \u88C5\u8F7D API \u8C03\u7528\u63A5\u53E3\u3002

onInit - method

fun onInit()
 

Change Records

v1.0.5 added

Function Illustrate

\u914D\u7F6E YukiHookAPI.Configs \u7684\u521D\u59CB\u5316\u65B9\u6CD5\u3002

Pay Attention

\u5728\u8FD9\u91CC\u53EA\u80FD\u8FDB\u884C\u521D\u59CB\u5316\u914D\u7F6E\uFF0C\u4E0D\u80FD\u8FDB\u884C Hook \u64CD\u4F5C\u3002

\u6B64\u65B9\u6CD5\u53EF\u9009\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u9009\u62E9\u4E0D\u5BF9 YukiHookAPI.Configs \u8FDB\u884C\u914D\u7F6E\u3002

onHook - method

fun onHook()
 

Change Records

v1.0 first

Function Illustrate

Xposed API \u7684\u6A21\u5757\u88C5\u8F7D\u8C03\u7528\u5165\u53E3\u65B9\u6CD5\u3002

onXposedEvent - method

fun onXposedEvent()
diff --git a/docs/assets/IYukiHookXposedInit.html.7e1c7b54.js b/docs/assets/IYukiHookXposedInit.html.f9c45ab7.js
similarity index 98%
rename from docs/assets/IYukiHookXposedInit.html.7e1c7b54.js
rename to docs/assets/IYukiHookXposedInit.html.f9c45ab7.js
index 3cd39a818..73c8debc5 100644
--- a/docs/assets/IYukiHookXposedInit.html.7e1c7b54.js
+++ b/docs/assets/IYukiHookXposedInit.html.f9c45ab7.js
@@ -1,4 +1,4 @@
-import{_ as o,o as e,c as s,a as n}from"./app.a3fd8dd4.js";const p={},a=n(`

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
+import{_ as o,o as e,c as s,a as n}from"./app.2bc5d8f3.js";const p={},a=n(`

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.80 \u4FEE\u6539 \u4F5C\u5E9F

\u4F5C\u5E9F\u4E86 YukiHookXposedInitProxy \u540D\u79F0\u4F46\u4FDD\u7559\u63A5\u53E3

\u8F6C\u79FB\u5230 IYukiHookXposedInit \u65B0\u540D\u79F0

\u529F\u80FD\u63CF\u8FF0

YukiHookAPI \u7684 Xposed \u88C5\u8F7D API \u8C03\u7528\u63A5\u53E3\u3002

onInit - method

fun onInit()
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.5 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u914D\u7F6E YukiHookAPI.Configs \u7684\u521D\u59CB\u5316\u65B9\u6CD5\u3002

\u7279\u522B\u6CE8\u610F

\u5728\u8FD9\u91CC\u53EA\u80FD\u8FDB\u884C\u521D\u59CB\u5316\u914D\u7F6E\uFF0C\u4E0D\u80FD\u8FDB\u884C Hook \u64CD\u4F5C\u3002

\u6B64\u65B9\u6CD5\u53EF\u9009\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u9009\u62E9\u4E0D\u5BF9 YukiHookAPI.Configs \u8FDB\u884C\u914D\u7F6E\u3002

onHook - method

fun onHook()
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Xposed API \u7684\u6A21\u5757\u88C5\u8F7D\u8C03\u7528\u5165\u53E3\u65B9\u6CD5\u3002

onXposedEvent - method

fun onXposedEvent()
diff --git a/docs/assets/InjectYukiHookWithXposed.html.bf8054c0.js b/docs/assets/InjectYukiHookWithXposed.html.29e4e02e.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.bf8054c0.js
rename to docs/assets/InjectYukiHookWithXposed.html.29e4e02e.js
index 505502304..4f9aa1167 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.bf8054c0.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.29e4e02e.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},t=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
+import{_ as s,o,c as n,a}from"./app.2bc5d8f3.js";const e={},t=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
     val sourcePath: String,
     val modulePackageName: String,
     val entryClassName: String,
diff --git a/docs/assets/InjectYukiHookWithXposed.html.7724ef42.js b/docs/assets/InjectYukiHookWithXposed.html.88a6587a.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.7724ef42.js
rename to docs/assets/InjectYukiHookWithXposed.html.88a6587a.js
index 437599cc7..43f180a09 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.7724ef42.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.88a6587a.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},p=a(`

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
+import{_ as s,o,c as n,a}from"./app.2bc5d8f3.js";const e={},p=a(`

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
     val sourcePath: String,
     val modulePackageName: String,
     val entryClassName: String,
diff --git a/docs/assets/LoggerFactory.html.462e22e1.js b/docs/assets/LoggerFactory.html.0582c443.js
similarity index 99%
rename from docs/assets/LoggerFactory.html.462e22e1.js
rename to docs/assets/LoggerFactory.html.0582c443.js
index f476fca99..4a57bf271 100644
--- a/docs/assets/LoggerFactory.html.462e22e1.js
+++ b/docs/assets/LoggerFactory.html.0582c443.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},p=e(`

LoggerFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F YukiHookAPI \u7684\u65E5\u5FD7\u5C01\u88C5\u7C7B\uFF0C\u53EF\u5B9E\u73B0\u540C\u65F6\u5411 Logcat \u548C (Xposed) \u5BBF\u4E3B\u73AF\u5883\u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

enum class LoggerType
+import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},p=e(`

LoggerFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F YukiHookAPI \u7684\u65E5\u5FD7\u5C01\u88C5\u7C7B\uFF0C\u53EF\u5B9E\u73B0\u540C\u65F6\u5411 Logcat \u548C (Xposed) \u5BBF\u4E3B\u73AF\u5883\u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

enum class LoggerType
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u9700\u8981\u6253\u5370\u7684\u65E5\u5FD7\u7C7B\u578B\u3002

\u51B3\u5B9A\u4E8E\u6A21\u5757\u4E0E (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u7684\u6253\u5370\u65B9\u5F0F\u3002

LOGD - enum

LOGD
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EC5\u4F7F\u7528 android.util.Log\u3002

XPOSEDBRIDGE - enum

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

v1.1.5 \u4F5C\u5E9F

\u8BF7\u8F6C\u79FB\u5230 XPOSED_ENVIRONMENT

XPOSED_ENVIRONMENT - enum

XPOSED_ENVIRONMENT
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.5 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EC5\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u3002

\u7279\u522B\u6CE8\u610F

\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\uFF0C\u6A21\u5757\u73AF\u5883\u5C06\u4E0D\u751F\u6548\u3002

SCOPE - enum

SCOPE
diff --git a/docs/assets/LoggerFactory.html.880b2c32.js b/docs/assets/LoggerFactory.html.418c9971.js
similarity index 99%
rename from docs/assets/LoggerFactory.html.880b2c32.js
rename to docs/assets/LoggerFactory.html.418c9971.js
index 7d7c29fa5..74147d818 100644
--- a/docs/assets/LoggerFactory.html.880b2c32.js
+++ b/docs/assets/LoggerFactory.html.418c9971.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

LoggerFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F YukiHookAPI \u7684\u65E5\u5FD7\u5C01\u88C5\u7C7B\uFF0C\u53EF\u5B9E\u73B0\u540C\u65F6\u5411 Logcat \u548C (Xposed) \u5BBF\u4E3B\u73AF\u5883\u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

enum class LoggerType
+import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

LoggerFactory - kt

Change Records

v1.0 first

Function Illustrate

\u8FD9\u662F YukiHookAPI \u7684\u65E5\u5FD7\u5C01\u88C5\u7C7B\uFF0C\u53EF\u5B9E\u73B0\u540C\u65F6\u5411 Logcat \u548C (Xposed) \u5BBF\u4E3B\u73AF\u5883\u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

enum class LoggerType
 

Change Records

v1.1.0 added

Function Illustrate

\u9700\u8981\u6253\u5370\u7684\u65E5\u5FD7\u7C7B\u578B\u3002

\u51B3\u5B9A\u4E8E\u6A21\u5757\u4E0E (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u7684\u6253\u5370\u65B9\u5F0F\u3002

LOGD - enum

LOGD
 

Change Records

v1.1.0 added

Function Illustrate

\u4EC5\u4F7F\u7528 android.util.Log\u3002

XPOSEDBRIDGE - enum

Change Records

v1.1.0 added

v1.1.5 deprecated

\u8BF7\u8F6C\u79FB\u5230 XPOSED_ENVIRONMENT

XPOSED_ENVIRONMENT - enum

XPOSED_ENVIRONMENT
 

Change Records

v1.1.5 added

Function Illustrate

\u4EC5\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u3002

Pay Attention

\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\uFF0C\u6A21\u5757\u73AF\u5883\u5C06\u4E0D\u751F\u6548\u3002

SCOPE - enum

SCOPE
diff --git a/docs/assets/MemberRules.html.19e4c81e.js b/docs/assets/MemberRules.html.83da42b1.js
similarity index 97%
rename from docs/assets/MemberRules.html.19e4c81e.js
rename to docs/assets/MemberRules.html.83da42b1.js
index 84fd2a575..f74cfec56 100644
--- a/docs/assets/MemberRules.html.19e4c81e.js
+++ b/docs/assets/MemberRules.html.83da42b1.js
@@ -1,3 +1,3 @@
-import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
+import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

Member \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Member \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

`,13),p=[l];function c(r,t){return e(),o("div",null,p)}const i=s(n,[["render",c],["__file","MemberRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/MemberRules.html.b8bf96eb.js b/docs/assets/MemberRules.html.c7598764.js similarity index 97% rename from docs/assets/MemberRules.html.b8bf96eb.js rename to docs/assets/MemberRules.html.c7598764.js index e25558d5f..ac6e1bc1e 100644 --- a/docs/assets/MemberRules.html.b8bf96eb.js +++ b/docs/assets/MemberRules.html.c7598764.js @@ -1,3 +1,3 @@ -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
+import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
 

Change Records

v1.1.0 added

Function Illustrate

Member \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Member \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

`,14),t=[l];function r(c,p){return e(),o("div",null,t)}const d=s(n,[["render",r],["__file","MemberRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/MemberRulesResult.html.a7dd50c0.js b/docs/assets/MemberRulesResult.html.9948f9b1.js similarity index 98% rename from docs/assets/MemberRulesResult.html.a7dd50c0.js rename to docs/assets/MemberRulesResult.html.9948f9b1.js index d2b27ff29..107037388 100644 --- a/docs/assets/MemberRulesResult.html.a7dd50c0.js +++ b/docs/assets/MemberRulesResult.html.9948f9b1.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a as n}from"./app.a3fd8dd4.js";const a={},l=n(`

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
+import{_ as s,o,c as e,a as n}from"./app.2bc5d8f3.js";const a={},l=n(`

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Member \u67E5\u627E\u6761\u4EF6\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

none - method

fun none(): MemberRulesResult
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u4E2A\u6570\u4E3A 0\u3002

count - method

fun count(num: Int): MemberRulesResult
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u3002

count - method

fun count(numRange: IntRange): MemberRulesResult
diff --git a/docs/assets/MemberRulesResult.html.e8ee62fa.js b/docs/assets/MemberRulesResult.html.b2aa86ec.js
similarity index 98%
rename from docs/assets/MemberRulesResult.html.e8ee62fa.js
rename to docs/assets/MemberRulesResult.html.b2aa86ec.js
index 5cf7873a2..1a7181d36 100644
--- a/docs/assets/MemberRulesResult.html.e8ee62fa.js
+++ b/docs/assets/MemberRulesResult.html.b2aa86ec.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a as n}from"./app.a3fd8dd4.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
+import{_ as s,o as e,c as o,a as n}from"./app.2bc5d8f3.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
 

Change Records

v1.1.0 added

Function Illustrate

\u5F53\u524D Member \u67E5\u627E\u6761\u4EF6\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

none - method

fun none(): MemberRulesResult
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u4E2A\u6570\u4E3A 0\u3002

count - method

fun count(num: Int): MemberRulesResult
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u3002

count - method

fun count(numRange: IntRange): MemberRulesResult
diff --git a/docs/assets/MethodFinder.html.5687c2d0.js b/docs/assets/MethodFinder.html.312994ef.js
similarity index 82%
rename from docs/assets/MethodFinder.html.5687c2d0.js
rename to docs/assets/MethodFinder.html.312994ef.js
index a3559e729..73b721568 100644
--- a/docs/assets/MethodFinder.html.5687c2d0.js
+++ b/docs/assets/MethodFinder.html.312994ef.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},l=a(`

MethodFinder - class

class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o,c as n,a}from"./app.2bc5d8f3.js";const e={},p=a(`

MethodFinder - class

class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Method \u6216\u4E00\u7EC4 Method\u3002

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.70 \u4FEE\u6539

\u5141\u8BB8\u4E0D\u586B\u5199\u540D\u79F0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
@@ -88,17 +88,17 @@ import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},l=a(`

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.80 \u4FEE\u6539

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Method \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u82E5 isNotIgnoredHookingFailure \u4E3A false \u5219\u81EA\u52A8\u5FFD\u7565\u3002

\u6CE8\u610F

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchMethod \u65B9\u6CD5\u3002

ignoredError - method

\u53D8\u66F4\u8BB0\u5F55

v1.0.3 \u65B0\u589E

v1.1.0 \u4F5C\u5E9F

\u8BF7\u8F6C\u79FB\u5230\u65B0\u65B9\u6CD5 ignored()

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u65B0\u589E method \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

original - method

fun original(): Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6807\u8BC6\u9700\u8981\u8C03\u7528\u5F53\u524D Method \u672A\u7ECF Hook \u7684\u539F\u59CB\u65B9\u6CD5\u3002

\u82E5\u5F53\u524D Method \u5E76\u672A Hook \u5219\u4F1A\u4F7F\u7528\u539F\u59CB\u7684 Method.invoke \u65B9\u6CD5\u8C03\u7528\u3002

\u7279\u522B\u6CE8\u610F

\u4F60\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

call - method

fun call(vararg param: Any?): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg param: Any?): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg param: Any?): Byte?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg param: Any?): Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callInt \u4E3A int

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg param: Any?): Long
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callLong \u4E3A long

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg param: Any?): Short
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callShort \u4E3A short

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg param: Any?): Double
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callDouble \u4E3A double

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg param: Any?): Float
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callFloat \u4E3A float

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg param: Any?): String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callString \u4E3A string

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg param: Any?): Char
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg param: Any?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callBoolean \u4E3A boolean

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg param: Any?): Array<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg param: Any?): List<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,432),p=[l];function c(t,r){return o(),n("div",null,p)}const i=s(e,[["render",c],["__file","MethodFinder.html.vue"]]);export{i as default}; +

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6807\u8BC6\u9700\u8981\u8C03\u7528\u5F53\u524D Method \u672A\u7ECF Hook \u7684\u539F\u59CB\u65B9\u6CD5\u3002

\u82E5\u5F53\u524D Method \u5E76\u672A Hook \u5219\u4F1A\u4F7F\u7528\u539F\u59CB\u7684 Method.invoke \u65B9\u6CD5\u8C03\u7528\u3002

\u7279\u522B\u6CE8\u610F

\u4F60\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

call - method

fun call(vararg args: Any?): Any?
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg args: Any?): T?
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.2 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg args: Any?): Byte?
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg args: Any?): Int
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callInt \u4E3A int

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg args: Any?): Long
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callLong \u4E3A long

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg args: Any?): Short
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callShort \u4E3A short

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg args: Any?): Double
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callDouble \u4E3A double

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg args: Any?): Float
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callFloat \u4E3A float

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg args: Any?): String
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callString \u4E3A string

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg args: Any?): Char
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg args: Any?): Boolean
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.65 \u65B0\u589E

v1.0.68 \u4FEE\u6539

\u4FEE\u6539 callBoolean \u4E3A boolean

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg args: Any?): Array<T>
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg args: Any?): List<T>
+

\u53D8\u66F4\u8BB0\u5F55

v1.0.68 \u65B0\u589E

v1.1.6 \u4FEE\u6539

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,458),l=[p];function c(t,r){return o(),n("div",null,l)}const i=s(e,[["render",c],["__file","MethodFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/MethodFinder.html.99f87a1e.js b/docs/assets/MethodFinder.html.427f6cec.js similarity index 97% rename from docs/assets/MethodFinder.html.99f87a1e.js rename to docs/assets/MethodFinder.html.427f6cec.js index 3aa3d0988..205a8781d 100644 --- a/docs/assets/MethodFinder.html.99f87a1e.js +++ b/docs/assets/MethodFinder.html.427f6cec.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-a4aa4d00","path":"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method-1","link":"#onnosuchmethod-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1672424460000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-a4aa4d00","path":"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method-1","link":"#onnosuchmethod-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"}');export{e as data}; diff --git a/docs/assets/MethodFinder.html.ede3f1a0.js b/docs/assets/MethodFinder.html.6be2b6ee.js similarity index 97% rename from docs/assets/MethodFinder.html.ede3f1a0.js rename to docs/assets/MethodFinder.html.6be2b6ee.js index 04043417d..61f06bb0a 100644 --- a/docs/assets/MethodFinder.html.ede3f1a0.js +++ b/docs/assets/MethodFinder.html.6be2b6ee.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-fd738322","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method-1","link":"#onnosuchmethod-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1672424460000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-fd738322","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Process - class","slug":"process-class","link":"#process-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method-1","link":"#result-method-1","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method-1","link":"#remedys-method-1","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method-1","link":"#onnosuchmethod-method-1","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"}');export{e as data}; diff --git a/docs/assets/MethodFinder.html.ea788a24.js b/docs/assets/MethodFinder.html.c72ff241.js similarity index 80% rename from docs/assets/MethodFinder.html.ea788a24.js rename to docs/assets/MethodFinder.html.c72ff241.js index b3ff829e5..8a7ce0522 100644 --- a/docs/assets/MethodFinder.html.ea788a24.js +++ b/docs/assets/MethodFinder.html.c72ff241.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodFinder - class

class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o,c as n,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodFinder - class

class MethodFinder internal constructor(override val hookInstance: YukiMemberHookCreator.MemberHookCreator?, override val classSet: Class<*>) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Method \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Method \u6216\u4E00\u7EC4 Method\u3002

name - field

var name: String
 

Change Records

v1.0 first

v1.0.70 modified

\u5141\u8BB8\u4E0D\u586B\u5199\u540D\u79F0

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

paramCount - field

var paramCount: Int
 

Change Records

v1.0.67 added

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
@@ -88,17 +88,17 @@ import{_ as s,o,c as n,a}from"./app.a3fd8dd4.js";const e={},l=a(`

Change Records

v1.0 first

v1.0.80 modified

\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Method \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
 

Change Records

v1.1.0 added

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u82E5 isNotIgnoredHookingFailure \u4E3A false \u5219\u81EA\u52A8\u5FFD\u7565\u3002

Notice

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchMethod \u65B9\u6CD5\u3002

ignoredError - method

Change Records

v1.0.3 added

v1.1.0 deprecated

\u8BF7\u8F6C\u79FB\u5230\u65B0\u65B9\u6CD5 ignored()

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
 

Change Records

v1.0.2 added

v1.1.0 modified

\u65B0\u589E method \u53C2\u6570

Function Illustrate

Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

original - method

fun original(): Instance
-

Change Records

v1.1.0 added

Function Illustrate

\u6807\u8BC6\u9700\u8981\u8C03\u7528\u5F53\u524D Method \u672A\u7ECF Hook \u7684\u539F\u59CB\u65B9\u6CD5\u3002

\u82E5\u5F53\u524D Method \u5E76\u672A Hook \u5219\u4F1A\u4F7F\u7528\u539F\u59CB\u7684 Method.invoke \u65B9\u6CD5\u8C03\u7528\u3002

Pay Attention

\u4F60\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

call - method

fun call(vararg param: Any?): Any?
-

Change Records

v1.0.2 added

Function Illustrate

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg param: Any?): T?
-

Change Records

v1.0.2 added

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg param: Any?): Byte?
-

Change Records

v1.0.68 added

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg param: Any?): Int
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callInt \u4E3A int

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg param: Any?): Long
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callLong \u4E3A long

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg param: Any?): Short
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callShort \u4E3A short

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg param: Any?): Double
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callDouble \u4E3A double

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg param: Any?): Float
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callFloat \u4E3A float

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg param: Any?): String
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callString \u4E3A string

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg param: Any?): Char
-

Change Records

v1.0.68 added

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg param: Any?): Boolean
-

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callBoolean \u4E3A boolean

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg param: Any?): Array<T>
-

Change Records

v1.0.68 added

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg param: Any?): List<T>
-

Change Records

v1.0.68 added

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,433),p=[l];function c(t,r){return o(),n("div",null,p)}const i=s(e,[["render",c],["__file","MethodFinder.html.vue"]]);export{i as default}; +

Change Records

v1.1.0 added

Function Illustrate

\u6807\u8BC6\u9700\u8981\u8C03\u7528\u5F53\u524D Method \u672A\u7ECF Hook \u7684\u539F\u59CB\u65B9\u6CD5\u3002

\u82E5\u5F53\u524D Method \u5E76\u672A Hook \u5219\u4F1A\u4F7F\u7528\u539F\u59CB\u7684 Method.invoke \u65B9\u6CD5\u8C03\u7528\u3002

Pay Attention

\u4F60\u53EA\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

call - method

fun call(vararg args: Any?): Any?
+

Change Records

v1.0.2 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg args: Any?): T?
+

Change Records

v1.0.2 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg args: Any?): Byte?
+

Change Records

v1.0.68 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg args: Any?): Int
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callInt \u4E3A int

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg args: Any?): Long
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callLong \u4E3A long

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg args: Any?): Short
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callShort \u4E3A short

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg args: Any?): Double
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callDouble \u4E3A double

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg args: Any?): Float
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callFloat \u4E3A float

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg args: Any?): String
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callString \u4E3A string

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg args: Any?): Char
+

Change Records

v1.0.68 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg args: Any?): Boolean
+

Change Records

v1.0.65 added

v1.0.68 modified

\u4FEE\u6539 callBoolean \u4E3A boolean

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg args: Any?): Array<T>
+

Change Records

v1.0.68 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg args: Any?): List<T>
+

Change Records

v1.0.68 added

v1.1.6 modified

\u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,459),p=[l];function c(t,r){return o(),n("div",null,p)}const i=s(a,[["render",c],["__file","MethodFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/MethodRules.html.d04abbd7.js b/docs/assets/MethodRules.html.917c7957.js similarity index 99% rename from docs/assets/MethodRules.html.d04abbd7.js rename to docs/assets/MethodRules.html.917c7957.js index fa03e1a90..0dd2dbbda 100644 --- a/docs/assets/MethodRules.html.d04abbd7.js +++ b/docs/assets/MethodRules.html.917c7957.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},p=e(`

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
+import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},p=e(`

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
diff --git a/docs/assets/MethodRules.html.d3ab5e09.js b/docs/assets/MethodRules.html.fc0b2ab3.js
similarity index 99%
rename from docs/assets/MethodRules.html.d3ab5e09.js
rename to docs/assets/MethodRules.html.fc0b2ab3.js
index 169ce3eb5..161f3fb39 100644
--- a/docs/assets/MethodRules.html.d3ab5e09.js
+++ b/docs/assets/MethodRules.html.fc0b2ab3.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},p=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
+import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},p=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
 

Change Records

v1.1.0 added

Function Illustrate

Method \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

paramCount - field

var paramCount: Int
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
diff --git a/docs/assets/ModifierRules.html.12fcbe10.js b/docs/assets/ModifierRules.html.2887f814.js
similarity index 99%
rename from docs/assets/ModifierRules.html.12fcbe10.js
rename to docs/assets/ModifierRules.html.2887f814.js
index 9a988bea0..80ec4dfdf 100644
--- a/docs/assets/ModifierRules.html.12fcbe10.js
+++ b/docs/assets/ModifierRules.html.2887f814.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.a3fd8dd4.js";const c={},n=a(`

ModifierRules - class

class ModifierRules private constructor()
+import{_ as e,o as s,c as o,a}from"./app.2bc5d8f3.js";const c={},n=a(`

ModifierRules - class

class ModifierRules private constructor()
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u65B0\u589E Class \u7684\u63CF\u8FF0\u7B26\u5224\u65AD

\u4F5C\u4E3A lambda \u6574\u4F53\u5224\u65AD\u6761\u4EF6\u4F7F\u7528

\u79FB\u52A8\u5230 base \u5305\u540D

\u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A Class\u3001Member \u63CF\u8FF0\u7B26\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

isPublic - i-ext-field

val isPublic: Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B public\u3002

isPrivate - i-ext-field

val isPrivate: Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

v1.1.0 \u4FEE\u6539

\u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B private\u3002

isProtected - i-ext-field

val isProtected: Boolean
diff --git a/docs/assets/ModifierRules.html.825b90af.js b/docs/assets/ModifierRules.html.da6cc7d4.js
similarity index 99%
rename from docs/assets/ModifierRules.html.825b90af.js
rename to docs/assets/ModifierRules.html.da6cc7d4.js
index 667a26063..924f6650c 100644
--- a/docs/assets/ModifierRules.html.825b90af.js
+++ b/docs/assets/ModifierRules.html.da6cc7d4.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.a3fd8dd4.js";const c={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModifierRules - class

class ModifierRules private constructor()
+import{_ as e,o as s,c as o,a}from"./app.2bc5d8f3.js";const c={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModifierRules - class

class ModifierRules private constructor()
 

Change Records

v1.0.67 added

v1.1.0 modified

\u65B0\u589E Class \u7684\u63CF\u8FF0\u7B26\u5224\u65AD

\u4F5C\u4E3A lambda \u6574\u4F53\u5224\u65AD\u6761\u4EF6\u4F7F\u7528

\u79FB\u52A8\u5230 base \u5305\u540D

\u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A Class\u3001Member \u63CF\u8FF0\u7B26\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

isPublic - i-ext-field

val isPublic: Boolean
 

Change Records

v1.0.67 added

v1.1.0 modified

\u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B public\u3002

isPrivate - i-ext-field

val isPrivate: Boolean
 

Change Records

v1.0.67 added

v1.1.0 modified

\u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B private\u3002

isProtected - i-ext-field

val isProtected: Boolean
diff --git a/docs/assets/ModuleAppActivity.html.bc565ff4.js b/docs/assets/ModuleAppActivity.html.27e14f60.js
similarity index 96%
rename from docs/assets/ModuleAppActivity.html.bc565ff4.js
rename to docs/assets/ModuleAppActivity.html.27e14f60.js
index b0c2c4b48..b30870e39 100644
--- a/docs/assets/ModuleAppActivity.html.bc565ff4.js
+++ b/docs/assets/ModuleAppActivity.html.27e14f60.js
@@ -1,2 +1,2 @@
-import{_ as e,o as s,c as o,a as t}from"./app.a3fd8dd4.js";const a={},n=t(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
+import{_ as e,o as s,c as o,a as t}from"./app.2bc5d8f3.js";const a={},n=t(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
 

Change Records

v1.1.0 added

Function Illustrate

\u4EE3\u7406 Activity\u3002

\u7EE7\u627F\u4E8E\u6B64\u7C7B\u7684 Activity \u53EF\u4EE5\u540C\u65F6\u5728\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u542F\u52A8\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u5728\u5BBF\u4E3B\u542F\u52A8\u65F6\u8C03\u7528 Context.registerModuleAppActivities \u8FDB\u884C\u6CE8\u518C\u3002

`,9),c=[n];function p(l,i){return s(),o("div",null,c)}const d=e(a,[["render",p],["__file","ModuleAppActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppActivity.html.ac6b4458.js b/docs/assets/ModuleAppActivity.html.c911508b.js similarity index 95% rename from docs/assets/ModuleAppActivity.html.ac6b4458.js rename to docs/assets/ModuleAppActivity.html.c911508b.js index ed835fabd..c09d67b79 100644 --- a/docs/assets/ModuleAppActivity.html.ac6b4458.js +++ b/docs/assets/ModuleAppActivity.html.c911508b.js @@ -1,2 +1,2 @@ -import{_ as s,o as e,c as o,a as t}from"./app.a3fd8dd4.js";const c={},a=t(`

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
+import{_ as s,o as e,c as o,a as t}from"./app.2bc5d8f3.js";const c={},a=t(`

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EE3\u7406 Activity\u3002

\u7EE7\u627F\u4E8E\u6B64\u7C7B\u7684 Activity \u53EF\u4EE5\u540C\u65F6\u5728\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u542F\u52A8\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u5728\u5BBF\u4E3B\u542F\u52A8\u65F6\u8C03\u7528 Context.registerModuleAppActivities \u8FDB\u884C\u6CE8\u518C\u3002

`,8),p=[a];function l(n,i){return e(),o("div",null,p)}const d=s(c,[["render",l],["__file","ModuleAppActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppCompatActivity.html.1a5f59d3.js b/docs/assets/ModuleAppCompatActivity.html.93f4410f.js similarity index 97% rename from docs/assets/ModuleAppCompatActivity.html.1a5f59d3.js rename to docs/assets/ModuleAppCompatActivity.html.93f4410f.js index 36a3f877e..7ee4ee89d 100644 --- a/docs/assets/ModuleAppCompatActivity.html.1a5f59d3.js +++ b/docs/assets/ModuleAppCompatActivity.html.93f4410f.js @@ -1,3 +1,3 @@ -import{_ as e,o,c as s,a}from"./app.a3fd8dd4.js";const t={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
+import{_ as e,o,c as s,a}from"./app.2bc5d8f3.js";const t={},n=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
 

Change Records

v1.1.0 added

Function Illustrate

\u4EE3\u7406 AppCompatActivity\u3002

\u7EE7\u627F\u4E8E\u6B64\u7C7B\u7684 Activity \u53EF\u4EE5\u540C\u65F6\u5728\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u542F\u52A8\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u5728\u5BBF\u4E3B\u542F\u52A8\u65F6\u8C03\u7528 Context.registerModuleAppActivities \u8FDB\u884C\u6CE8\u518C\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u91CD\u5199 moduleTheme \u8BBE\u7F6E AppCompat \u4E3B\u9898\uFF0C\u5426\u5219\u4F1A\u65E0\u6CD5\u542F\u52A8\u3002

moduleTheme - field

open val moduleTheme: Int
 

Change Records

v1.1.0 added

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u4E3B\u9898\u3002

`,16),p=[n];function c(l,r){return o(),s("div",null,p)}const d=e(t,[["render",c],["__file","ModuleAppCompatActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppCompatActivity.html.cc649b6e.js b/docs/assets/ModuleAppCompatActivity.html.9b20eb11.js similarity index 97% rename from docs/assets/ModuleAppCompatActivity.html.cc649b6e.js rename to docs/assets/ModuleAppCompatActivity.html.9b20eb11.js index 5f5e0bd76..f6f63f310 100644 --- a/docs/assets/ModuleAppCompatActivity.html.cc649b6e.js +++ b/docs/assets/ModuleAppCompatActivity.html.9b20eb11.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a as p}from"./app.a3fd8dd4.js";const a={},t=p(`

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
+import{_ as s,o,c as e,a as p}from"./app.2bc5d8f3.js";const a={},t=p(`

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EE3\u7406 AppCompatActivity\u3002

\u7EE7\u627F\u4E8E\u6B64\u7C7B\u7684 Activity \u53EF\u4EE5\u540C\u65F6\u5728\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u542F\u52A8\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u5728\u5BBF\u4E3B\u542F\u52A8\u65F6\u8C03\u7528 Context.registerModuleAppActivities \u8FDB\u884C\u6CE8\u518C\u3002

\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u9700\u8981\u91CD\u5199 moduleTheme \u8BBE\u7F6E AppCompat \u4E3B\u9898\uFF0C\u5426\u5219\u4F1A\u65E0\u6CD5\u542F\u52A8\u3002

moduleTheme - field

open val moduleTheme: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u4E3B\u9898\u3002

`,15),c=[t];function l(n,d){return o(),e("div",null,c)}const r=s(a,[["render",l],["__file","ModuleAppCompatActivity.html.vue"]]);export{r as default}; diff --git a/docs/assets/ModuleApplication.html.56763d78.js b/docs/assets/ModuleApplication.html.9b13ba2a.js similarity index 99% rename from docs/assets/ModuleApplication.html.56763d78.js rename to docs/assets/ModuleApplication.html.9b13ba2a.js index 0495bbce3..9e70521ee 100644 --- a/docs/assets/ModuleApplication.html.56763d78.js +++ b/docs/assets/ModuleApplication.html.9b13ba2a.js @@ -1,4 +1,4 @@ -import{_ as a,r as l,o as p,c,b as s,d as i,a as e,e as n}from"./app.a3fd8dd4.js";const t={},d=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleApplication - class

open class ModuleApplication: Application()
+import{_ as a,r as l,o as p,c,b as s,d as i,a as e,e as n}from"./app.2bc5d8f3.js";const t={},d=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModuleApplication - class

open class ModuleApplication: Application()
 

Change Records

v1.0.77 added

Function Illustrate

\u8FD9\u662F\u5BF9\u4F7F\u7528 YukiHookAPI Xposed \u6A21\u5757\u5B9E\u73B0\u4E2D\u7684\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\u3002

\u5728\u4F60\u7684 Xposed \u6A21\u5757\u7684 Application \u4E2D\u7EE7\u627F\u6B64\u7C7B\u3002

\u6216\u5728 AndroidManifest.xml \u7684 application \u6807\u7B7E\u4E2D\u6307\u5B9A\u6B64\u7C7B\u3002

\u76EE\u524D\u53EF\u5B9E\u73B0\u529F\u80FD\u5982\u4E0B

`,10),r=e("
  • \u5168\u5C40\u5171\u4EAB\u6A21\u5757\u4E2D\u9759\u6001\u7684 appContext

  • \u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u88C5\u8F7D YukiHookAPI.Config \u4EE5\u786E\u4FDD YukiHookAPI.Configs.debugTag \u4E0D\u9700\u8981\u91CD\u590D\u5B9A\u4E49

  • \u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u4F7F\u7528 YukiHookDataChannel \u8FDB\u884C\u901A\u8BAF

  • ",3),u=n("\u5728\u6A21\u5757\u4E2D\u4F7F\u7528\u7CFB\u7EDF\u9690\u85CF API\uFF0C\u6838\u5FC3\u6280\u672F\u5F15\u7528\u4E86\u5F00\u6E90\u9879\u76EE "),A={href:"https://github.com/tiann/FreeReflection",target:"_blank",rel:"noopener noreferrer"},y=n("FreeReflection"),m=s("li",null,[s("p",null,[n("\u5728\u6A21\u5757\u4E2D\u4F7F\u7528 "),s("code",null,"YukiHookAPI.Status.isTaiChiModuleActive"),n(" \u5224\u65AD\u592A\u6781\u3001\u65E0\u6781\u6FC0\u6D3B\u72B6\u6001")])],-1),v=e(`

    Function Example

    \u5C06\u6B64\u7C7B\u7EE7\u627F\u5230\u4F60\u7684\u81EA\u5B9A\u4E49 Application \u4E0A\u3002

    The following example

    package com.demo
     
     class MyApplication: ModuleApplication() {
    diff --git a/docs/assets/ModuleApplication.html.c370bb02.js b/docs/assets/ModuleApplication.html.a3116103.js
    similarity index 99%
    rename from docs/assets/ModuleApplication.html.c370bb02.js
    rename to docs/assets/ModuleApplication.html.a3116103.js
    index be6030702..b5495e42b 100644
    --- a/docs/assets/ModuleApplication.html.c370bb02.js
    +++ b/docs/assets/ModuleApplication.html.a3116103.js
    @@ -1,4 +1,4 @@
    -import{_ as a,r as l,o as p,c,b as s,d as i,a as o,e as n}from"./app.a3fd8dd4.js";const t={},d=o(`

    ModuleApplication - class

    open class ModuleApplication: Application()
    +import{_ as a,r as l,o as p,c,b as s,d as i,a as o,e as n}from"./app.2bc5d8f3.js";const t={},d=o(`

    ModuleApplication - class

    open class ModuleApplication: Application()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.77 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u5BF9\u4F7F\u7528 YukiHookAPI Xposed \u6A21\u5757\u5B9E\u73B0\u4E2D\u7684\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\u3002

    \u5728\u4F60\u7684 Xposed \u6A21\u5757\u7684 Application \u4E2D\u7EE7\u627F\u6B64\u7C7B\u3002

    \u6216\u5728 AndroidManifest.xml \u7684 application \u6807\u7B7E\u4E2D\u6307\u5B9A\u6B64\u7C7B\u3002

    \u76EE\u524D\u53EF\u5B9E\u73B0\u529F\u80FD\u5982\u4E0B

    `,9),r=o("
  • \u5168\u5C40\u5171\u4EAB\u6A21\u5757\u4E2D\u9759\u6001\u7684 appContext

  • \u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u88C5\u8F7D YukiHookAPI.Config \u4EE5\u786E\u4FDD YukiHookAPI.Configs.debugTag \u4E0D\u9700\u8981\u91CD\u590D\u5B9A\u4E49

  • \u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u4F7F\u7528 YukiHookDataChannel \u8FDB\u884C\u901A\u8BAF

  • ",3),u=n("\u5728\u6A21\u5757\u4E2D\u4F7F\u7528\u7CFB\u7EDF\u9690\u85CF API\uFF0C\u6838\u5FC3\u6280\u672F\u5F15\u7528\u4E86\u5F00\u6E90\u9879\u76EE "),A={href:"https://github.com/tiann/FreeReflection",target:"_blank",rel:"noopener noreferrer"},y=n("FreeReflection"),v=s("li",null,[s("p",null,[n("\u5728\u6A21\u5757\u4E2D\u4F7F\u7528 "),s("code",null,"YukiHookAPI.Status.isTaiChiModuleActive"),n(" \u5224\u65AD\u592A\u6781\u3001\u65E0\u6781\u6FC0\u6D3B\u72B6\u6001")])],-1),m=o(`

    \u529F\u80FD\u793A\u4F8B

    \u5C06\u6B64\u7C7B\u7EE7\u627F\u5230\u4F60\u7684\u81EA\u5B9A\u4E49 Application \u4E0A\u3002

    \u793A\u4F8B\u5982\u4E0B

    package com.demo
     
     class MyApplication: ModuleApplication() {
    diff --git a/docs/assets/ModuleClassLoader.html.783ae260.js b/docs/assets/ModuleClassLoader.html.bd0161de.js
    similarity index 98%
    rename from docs/assets/ModuleClassLoader.html.783ae260.js
    rename to docs/assets/ModuleClassLoader.html.bd0161de.js
    index 931f7f507..5eb61a707 100644
    --- a/docs/assets/ModuleClassLoader.html.783ae260.js
    +++ b/docs/assets/ModuleClassLoader.html.bd0161de.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const l={},n=a(`

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
    +import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const l={},n=a(`

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.2 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u81EA\u52A8\u5904\u7406 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0E\u6A21\u5757\u73AF\u5883\u7684 ClassLoader\u3002

    companion object - object

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.2 \u65B0\u589E

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.2 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6DFB\u52A0\u5230 Hook APP (\u5BBF\u4E3B) Class \u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u4E2D\u7684 Class \u5C06\u4F1A\u4F7F\u7528\u5BBF\u4E3B\u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    \u7279\u522B\u6CE8\u610F

    \u6392\u9664\u5217\u8868\u4EC5\u4F1A\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u751F\u6548\u3002

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.2 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6DFB\u52A0\u5230\u6A21\u5757 Class \u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u4E2D\u7684 Class \u5C06\u4F1A\u4F7F\u7528\u6A21\u5757 (\u5F53\u524D\u5BBF\u4E3B\u73AF\u5883\u7684\u6A21\u5757\u6CE8\u5165\u8FDB\u7A0B) \u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    \u7279\u522B\u6CE8\u610F

    \u6392\u9664\u5217\u8868\u4EC5\u4F1A\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u751F\u6548\u3002

    `,25),c=[n];function p(t,d){return o(),e("div",null,c)}const i=s(l,[["render",p],["__file","ModuleClassLoader.html.vue"]]);export{i as default}; diff --git a/docs/assets/ModuleClassLoader.html.57fbf415.js b/docs/assets/ModuleClassLoader.html.d2aca34b.js similarity index 98% rename from docs/assets/ModuleClassLoader.html.57fbf415.js rename to docs/assets/ModuleClassLoader.html.d2aca34b.js index 3e665b523..2cd0dede1 100644 --- a/docs/assets/ModuleClassLoader.html.57fbf415.js +++ b/docs/assets/ModuleClassLoader.html.d2aca34b.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
     

    Change Records

    v1.1.2 added

    Function Illustrate

    \u81EA\u52A8\u5904\u7406 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0E\u6A21\u5757\u73AF\u5883\u7684 ClassLoader\u3002

    companion object - object

    Change Records

    v1.1.2 added

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    \u6DFB\u52A0\u5230 Hook APP (\u5BBF\u4E3B) Class \u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u4E2D\u7684 Class \u5C06\u4F1A\u4F7F\u7528\u5BBF\u4E3B\u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    Pay Attention

    \u6392\u9664\u5217\u8868\u4EC5\u4F1A\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u751F\u6548\u3002

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    \u6DFB\u52A0\u5230\u6A21\u5757 Class \u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u4E2D\u7684 Class \u5C06\u4F1A\u4F7F\u7528\u6A21\u5757 (\u5F53\u524D\u5BBF\u4E3B\u73AF\u5883\u7684\u6A21\u5757\u6CE8\u5165\u8FDB\u7A0B) \u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    Pay Attention

    \u6392\u9664\u5217\u8868\u4EC5\u4F1A\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u751F\u6548\u3002

    `,26),c=[l];function t(p,r){return e(),o("div",null,c)}const i=s(n,[["render",t],["__file","ModuleClassLoader.html.vue"]]);export{i as default}; diff --git a/docs/assets/ModuleContextThemeWrapper.html.f660d72d.js b/docs/assets/ModuleContextThemeWrapper.html.732168b1.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.f660d72d.js rename to docs/assets/ModuleContextThemeWrapper.html.732168b1.js index 0ef2463e2..1ef95dfc7 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.f660d72d.js +++ b/docs/assets/ModuleContextThemeWrapper.html.732168b1.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a as n}from"./app.a3fd8dd4.js";const a={},t=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
    +import{_ as s,o,c as e,a as n}from"./app.2bc5d8f3.js";const a={},t=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u4EE3\u7406 ContextThemeWrapper\u3002

    \u901A\u8FC7\u5305\u88C5\uFF0C\u4F60\u53EF\u4EE5\u8F7B\u677E\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u6765\u81EA\u6A21\u5757\u7684\u4E3B\u9898\u8D44\u6E90\u3002

    applyConfiguration - method

    fun applyConfiguration(initiate: Configuration.() -> Unit): ModuleContextThemeWrapper
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u8BBE\u7F6E\u5F53\u524D ModuleContextThemeWrapper \u7684 Configuration\u3002

    \u8BBE\u7F6E\u540E\u4F1A\u81EA\u52A8\u8C03\u7528 Resources.updateConfiguration\u3002

    `,15),p=[t];function l(r,c){return o(),e("div",null,p)}const d=s(a,[["render",l],["__file","ModuleContextThemeWrapper.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleContextThemeWrapper.html.499dab73.js b/docs/assets/ModuleContextThemeWrapper.html.c1c75c5f.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.499dab73.js rename to docs/assets/ModuleContextThemeWrapper.html.c1c75c5f.js index 9b84c5beb..82b6d58ca 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.499dab73.js +++ b/docs/assets/ModuleContextThemeWrapper.html.c1c75c5f.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},p=a(`

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
    +import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},p=a(`

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u4EE3\u7406 ContextThemeWrapper\u3002

    \u901A\u8FC7\u5305\u88C5\uFF0C\u4F60\u53EF\u4EE5\u8F7B\u677E\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528\u6765\u81EA\u6A21\u5757\u7684\u4E3B\u9898\u8D44\u6E90\u3002

    applyConfiguration - method

    fun applyConfiguration(initiate: Configuration.() -> Unit): ModuleContextThemeWrapper
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u8BBE\u7F6E\u5F53\u524D ModuleContextThemeWrapper \u7684 Configuration\u3002

    \u8BBE\u7F6E\u540E\u4F1A\u81EA\u52A8\u8C03\u7528 Resources.updateConfiguration\u3002

    `,14),l=[p];function t(c,r){return o(),e("div",null,l)}const i=s(n,[["render",t],["__file","ModuleContextThemeWrapper.html.vue"]]);export{i as default}; diff --git a/docs/assets/ModulePreferenceFragment.html.63b6fc54.js b/docs/assets/ModulePreferenceFragment.html.80fe7649.js similarity index 99% rename from docs/assets/ModulePreferenceFragment.html.63b6fc54.js rename to docs/assets/ModulePreferenceFragment.html.80fe7649.js index 21e94df84..7804adb6d 100644 --- a/docs/assets/ModulePreferenceFragment.html.63b6fc54.js +++ b/docs/assets/ModulePreferenceFragment.html.80fe7649.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as n,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModulePreferenceFragment - class

    abstract class ModulePreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener
    +import{_ as s,o as e,c as n,a}from"./app.2bc5d8f3.js";const o={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModulePreferenceFragment - class

    abstract class ModulePreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener
     

    Change Records

    v1.0.78 added

    Function Illustrate

    \u8FD9\u662F\u5BF9\u4F7F\u7528 YukiHookAPI Xposed \u6A21\u5757\u5B9E\u73B0\u4E2D\u7684\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\u3002

    \u6B64\u7C7B\u63A5\u7BA1\u4E86 PreferenceFragmentCompat \u5E76\u5BF9\u5176\u5B9E\u73B0\u4E86 Sp \u5B58\u50A8\u5728 Xposed \u6A21\u5757\u4E2D\u7684\u5168\u5C40\u53EF\u8BFB\u53EF\u5199\u3002

    \u5728\u4F60\u4F7F\u7528 PreferenceFragmentCompat \u7684\u5B9E\u4F8B\u4E2D\uFF0C\u5C06\u7EE7\u627F\u5BF9\u8C61\u6362\u6210\u6B64\u7C7B\u3002

    \u7136\u540E\u8BF7\u5C06\u91CD\u5199\u65B9\u6CD5\u7531 onCreatePreferences \u66FF\u6362\u4E3A onCreatePreferencesInModuleApp \u5373\u53EF\u3002

    Function Example

    \u4F7F\u7528 ModulePreferenceFragment \u521B\u5EFA\u4E00\u4E2A PreferenceFragmentCompat \u5BF9\u8C61\u3002

    The following example

    class SettingsFragment : ModulePreferenceFragment() {
     
         override fun onCreatePreferencesInModuleApp(savedInstanceState: Bundle?, rootKey: String?) {
    diff --git a/docs/assets/ModulePreferenceFragment.html.e99a60b4.js b/docs/assets/ModulePreferenceFragment.html.d3dacf6a.js
    similarity index 99%
    rename from docs/assets/ModulePreferenceFragment.html.e99a60b4.js
    rename to docs/assets/ModulePreferenceFragment.html.d3dacf6a.js
    index 5ae035cf4..10c7214b1 100644
    --- a/docs/assets/ModulePreferenceFragment.html.e99a60b4.js
    +++ b/docs/assets/ModulePreferenceFragment.html.d3dacf6a.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as n,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    ModulePreferenceFragment - class

    abstract class ModulePreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener
    +import{_ as s,o as e,c as n,a}from"./app.2bc5d8f3.js";const o={},l=a(`

    ModulePreferenceFragment - class

    abstract class ModulePreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.78 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u5BF9\u4F7F\u7528 YukiHookAPI Xposed \u6A21\u5757\u5B9E\u73B0\u4E2D\u7684\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\u3002

    \u6B64\u7C7B\u63A5\u7BA1\u4E86 PreferenceFragmentCompat \u5E76\u5BF9\u5176\u5B9E\u73B0\u4E86 Sp \u5B58\u50A8\u5728 Xposed \u6A21\u5757\u4E2D\u7684\u5168\u5C40\u53EF\u8BFB\u53EF\u5199\u3002

    \u5728\u4F60\u4F7F\u7528 PreferenceFragmentCompat \u7684\u5B9E\u4F8B\u4E2D\uFF0C\u5C06\u7EE7\u627F\u5BF9\u8C61\u6362\u6210\u6B64\u7C7B\u3002

    \u7136\u540E\u8BF7\u5C06\u91CD\u5199\u65B9\u6CD5\u7531 onCreatePreferences \u66FF\u6362\u4E3A onCreatePreferencesInModuleApp \u5373\u53EF\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F7F\u7528 ModulePreferenceFragment \u521B\u5EFA\u4E00\u4E2A PreferenceFragmentCompat \u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    class SettingsFragment : ModulePreferenceFragment() {
     
         override fun onCreatePreferencesInModuleApp(savedInstanceState: Bundle?, rootKey: String?) {
    diff --git a/docs/assets/NameRules.html.4c8bc236.js b/docs/assets/NameRules.html.e6a7dfc2.js
    similarity index 99%
    rename from docs/assets/NameRules.html.4c8bc236.js
    rename to docs/assets/NameRules.html.e6a7dfc2.js
    index cdc3be2bd..22e2a7d60 100644
    --- a/docs/assets/NameRules.html.4c8bc236.js
    +++ b/docs/assets/NameRules.html.e6a7dfc2.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.a3fd8dd4.js";const a={},p=n(`

    NameRules - class

    class NameRules private constructor()
    +import{_ as s,o as e,c as o,a as n}from"./app.2bc5d8f3.js";const a={},p=n(`

    NameRules - class

    class NameRules private constructor()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.1.0 \u4FEE\u6539

    NameConditions \u66F4\u540D\u4E3A NameRules

    \u4F5C\u4E3A lambda \u6574\u4F53\u5224\u65AD\u6761\u4EF6\u4F7F\u7528

    \u79FB\u52A8\u5230 base \u5305\u540D

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u540D\u79F0\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

    \u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

    String.isSynthetic - i-ext-method

    fun String.isSynthetic(index: Int): Boolean
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.1.0 \u4FEE\u6539

    \u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u4E3A\u533F\u540D\u7C7B\u7684\u4E3B\u7C7B\u8C03\u7528\u5BF9\u8C61\u3002

    String.isOnlySymbols - i-ext-method

    fun String.isOnlySymbols(): Boolean
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.1.0 \u4FEE\u6539

    \u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u53EA\u6709\u7B26\u53F7\u3002

    String.isOnlyLetters - i-ext-method

    fun String.isOnlyLetters(): Boolean
    diff --git a/docs/assets/NameRules.html.6356236a.js b/docs/assets/NameRules.html.fcda0658.js
    similarity index 99%
    rename from docs/assets/NameRules.html.6356236a.js
    rename to docs/assets/NameRules.html.fcda0658.js
    index c75b415e4..763f1a85c 100644
    --- a/docs/assets/NameRules.html.6356236a.js
    +++ b/docs/assets/NameRules.html.fcda0658.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.a3fd8dd4.js";const a={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    NameRules - class

    class NameRules private constructor()
    +import{_ as s,o as e,c as o,a as n}from"./app.2bc5d8f3.js";const a={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    NameRules - class

    class NameRules private constructor()
     

    Change Records

    v1.0.88 added

    v1.1.0 modified

    NameConditions \u66F4\u540D\u4E3A NameRules

    \u4F5C\u4E3A lambda \u6574\u4F53\u5224\u65AD\u6761\u4EF6\u4F7F\u7528

    \u79FB\u52A8\u5230 base \u5305\u540D

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u540D\u79F0\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

    \u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

    String.isSynthetic - i-ext-method

    fun String.isSynthetic(index: Int): Boolean
     

    Change Records

    v1.0.88 added

    v1.1.0 modified

    \u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

    Function Illustrate

    \u662F\u5426\u4E3A\u533F\u540D\u7C7B\u7684\u4E3B\u7C7B\u8C03\u7528\u5BF9\u8C61\u3002

    String.isOnlySymbols - i-ext-method

    fun String.isOnlySymbols(): Boolean
     

    Change Records

    v1.0.88 added

    v1.1.0 modified

    \u7EDF\u4E00\u5408\u5E76\u5230\u6269\u5C55\u65B9\u6CD5\u5E76\u6539\u540D

    Function Illustrate

    \u662F\u5426\u53EA\u6709\u7B26\u53F7\u3002

    String.isOnlyLetters - i-ext-method

    fun String.isOnlyLetters(): Boolean
    diff --git a/docs/assets/ObjectRules.html.a00891c0.js b/docs/assets/ObjectRules.html.438e617b.js
    similarity index 96%
    rename from docs/assets/ObjectRules.html.a00891c0.js
    rename to docs/assets/ObjectRules.html.438e617b.js
    index 5f25d01f7..c094c853b 100644
    --- a/docs/assets/ObjectRules.html.a00891c0.js
    +++ b/docs/assets/ObjectRules.html.438e617b.js
    @@ -1,2 +1,2 @@
    -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const l={},n=a(`

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const l={},n=a(`

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.5 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u4EFB\u610F\u5BF9\u8C61\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

    \u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

    `,7),c=[n];function t(p,r){return e(),o("div",null,c)}const i=s(l,[["render",t],["__file","ObjectRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/ObjectRules.html.bc713297.js b/docs/assets/ObjectRules.html.5191cd07.js similarity index 96% rename from docs/assets/ObjectRules.html.bc713297.js rename to docs/assets/ObjectRules.html.5191cd07.js index bccd20505..8a2b77826 100644 --- a/docs/assets/ObjectRules.html.bc713297.js +++ b/docs/assets/ObjectRules.html.5191cd07.js @@ -1,2 +1,2 @@ -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
     

    Change Records

    v1.1.5 added

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u4EFB\u610F\u5BF9\u8C61\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

    \u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

    `,8),c=[t];function l(r,p){return e(),o("div",null,c)}const d=s(n,[["render",l],["__file","ObjectRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/PackageParam.html.f53431ac.js b/docs/assets/PackageParam.html.1c042abc.js similarity index 99% rename from docs/assets/PackageParam.html.f53431ac.js rename to docs/assets/PackageParam.html.1c042abc.js index 087b95569..6a25057c3 100644 --- a/docs/assets/PackageParam.html.f53431ac.js +++ b/docs/assets/PackageParam.html.1c042abc.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
    +import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
     

    Change Records

    v1.0 first

    Function Illustrate

    \u88C5\u8F7D Hook \u7684\u76EE\u6807 APP \u5165\u53E3\u5BF9\u8C61\u5B9E\u73B0\u7C7B\u3002

    appClassLoader - field

    var appClassLoader\uFF1AClassLoader
     

    Change Records

    v1.0 first

    v1.1.5 modified

    \u53EF\u4EE5\u52A8\u6001\u4FEE\u6539\u6B64\u53D8\u91CF\u7684\u503C

    Function Illustrate

    \u83B7\u53D6\u3001\u8BBE\u7F6E\u5F53\u524D Hook APP \u7684 ClassLoader\u3002

    \u4F60\u53EF\u4EE5\u5728\u8FD9\u91CC\u624B\u52A8\u8BBE\u7F6E\u5F53\u524D Hook APP \u7684 ClassLoader\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u81EA\u52A8\u83B7\u53D6\u3002

    Pay Attention

    \u5982\u679C\u8BBE\u7F6E\u4E86\u9519\u8BEF\u6216\u65E0\u6548\u7684 ClassLoader \u4F1A\u9020\u6210\u529F\u80FD\u5F02\u5E38\uFF0C\u8BF7\u8C28\u614E\u64CD\u4F5C\u3002

    appInfo - field

    val appInfo: ApplicationInfo
     

    Change Records

    v1.0 first

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D Hook APP \u7684 ApplicationInfo\u3002

    appUserId - field

    val appUserId: Int
    diff --git a/docs/assets/PackageParam.html.3685b04f.js b/docs/assets/PackageParam.html.43f71eb0.js
    similarity index 99%
    rename from docs/assets/PackageParam.html.3685b04f.js
    rename to docs/assets/PackageParam.html.43f71eb0.js
    index 4fb714396..a4337c518 100644
    --- a/docs/assets/PackageParam.html.3685b04f.js
    +++ b/docs/assets/PackageParam.html.43f71eb0.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
    +import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D Hook \u7684\u76EE\u6807 APP \u5165\u53E3\u5BF9\u8C61\u5B9E\u73B0\u7C7B\u3002

    appClassLoader - field

    var appClassLoader\uFF1AClassLoader
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.5 \u4FEE\u6539

    \u53EF\u4EE5\u52A8\u6001\u4FEE\u6539\u6B64\u53D8\u91CF\u7684\u503C

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u3001\u8BBE\u7F6E\u5F53\u524D Hook APP \u7684 ClassLoader\u3002

    \u4F60\u53EF\u4EE5\u5728\u8FD9\u91CC\u624B\u52A8\u8BBE\u7F6E\u5F53\u524D Hook APP \u7684 ClassLoader\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4F1A\u81EA\u52A8\u83B7\u53D6\u3002

    \u7279\u522B\u6CE8\u610F

    \u5982\u679C\u8BBE\u7F6E\u4E86\u9519\u8BEF\u6216\u65E0\u6548\u7684 ClassLoader \u4F1A\u9020\u6210\u529F\u80FD\u5F02\u5E38\uFF0C\u8BF7\u8C28\u614E\u64CD\u4F5C\u3002

    appInfo - field

    val appInfo: ApplicationInfo
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D Hook APP \u7684 ApplicationInfo\u3002

    appUserId - field

    val appUserId: Int
    diff --git a/docs/assets/PrefsData.html.a355ca36.js b/docs/assets/PrefsData.html.6dad6201.js
    similarity index 99%
    rename from docs/assets/PrefsData.html.a355ca36.js
    rename to docs/assets/PrefsData.html.6dad6201.js
    index d35515032..7bc773ab1 100644
    --- a/docs/assets/PrefsData.html.a355ca36.js
    +++ b/docs/assets/PrefsData.html.6dad6201.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as l}from"./app.a3fd8dd4.js";const o={},e=l(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    PrefsData - class

    data class PrefsData<T>(var key: String, var value: T) : Serializable
    +import{_ as s,o as a,c as n,a as l}from"./app.2bc5d8f3.js";const o={},e=l(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    PrefsData - class

    data class PrefsData<T>(var key: String, var value: T) : Serializable
     

    Change Records

    v1.0.67 added

    v1.1.5 modified

    \u5B9E\u73B0\u4E86 Serializable \u63A5\u53E3

    Function Illustrate

    \u952E\u503C\u5BF9\u5B58\u50A8\u6784\u9020\u7C7B\u3002

    \u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookModulePrefs \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

    Function Example

    \u5EFA\u7ACB\u4E00\u4E2A\u6A21\u677F\u7C7B\u5B9A\u4E49\u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4F7F\u7528\u7684\u952E\u503C\u6570\u636E\u3002

    The following example

    object DataConst {
     
         val TEST_KV_DATA_1 = PrefsData("test_data_1", "defalut value")
    diff --git a/docs/assets/PrefsData.html.e31fcb01.js b/docs/assets/PrefsData.html.8780748d.js
    similarity index 99%
    rename from docs/assets/PrefsData.html.e31fcb01.js
    rename to docs/assets/PrefsData.html.8780748d.js
    index 1303ab92d..c0317d591 100644
    --- a/docs/assets/PrefsData.html.e31fcb01.js
    +++ b/docs/assets/PrefsData.html.8780748d.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as l}from"./app.a3fd8dd4.js";const o={},p=l(`

    PrefsData - class

    data class PrefsData<T>(var key: String, var value: T) : Serializable
    +import{_ as s,o as a,c as n,a as l}from"./app.2bc5d8f3.js";const o={},p=l(`

    PrefsData - class

    data class PrefsData<T>(var key: String, var value: T) : Serializable
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.67 \u65B0\u589E

    v1.1.5 \u4FEE\u6539

    \u5B9E\u73B0\u4E86 Serializable \u63A5\u53E3

    \u529F\u80FD\u63CF\u8FF0

    \u952E\u503C\u5BF9\u5B58\u50A8\u6784\u9020\u7C7B\u3002

    \u8FD9\u4E2A\u7C7B\u662F\u5BF9 YukiHookModulePrefs \u7684\u4E00\u4E2A\u6269\u5C55\u7528\u6CD5\u3002

    \u529F\u80FD\u793A\u4F8B

    \u5EFA\u7ACB\u4E00\u4E2A\u6A21\u677F\u7C7B\u5B9A\u4E49\u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4F7F\u7528\u7684\u952E\u503C\u6570\u636E\u3002

    \u793A\u4F8B\u5982\u4E0B

    object DataConst {
     
         val TEST_KV_DATA_1 = PrefsData("test_data_1", "defalut value")
    diff --git a/docs/assets/ReflectionFactory.html.a7e1e6d3.js b/docs/assets/ReflectionFactory.html.6c3686a2.js
    similarity index 96%
    rename from docs/assets/ReflectionFactory.html.a7e1e6d3.js
    rename to docs/assets/ReflectionFactory.html.6c3686a2.js
    index 0cde70487..47666c2d9 100644
    --- a/docs/assets/ReflectionFactory.html.a7e1e6d3.js
    +++ b/docs/assets/ReflectionFactory.html.6c3686a2.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const l={},e=n(`

    ReflectionFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

    MembersType - class

    enum class MembersType
    +import{_ as s,o,c as a,a as n}from"./app.2bc5d8f3.js";const l={},e=n(`

    ReflectionFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

    MembersType - class

    enum class MembersType
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5B9A\u4E49\u4E00\u4E2A Class \u4E2D\u7684 Member \u7C7B\u578B

    ALL - enum

    ALL
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5168\u90E8 Method \u4E0E Constructor\u3002

    METHOD - enum

    METHOD
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5168\u90E8 Method\u3002

    CONSTRUCTOR - enum

    CONSTRUCTOR
    @@ -101,9 +101,9 @@ import{_ as s,o,c as a,a as n}from"./app.a3fd8dd4.js";const l={},e=n(`

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

    \u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

    \u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
     
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.1.0 \u65B0\u589E

    \u65B0\u589E ignored \u53C2\u6570\uFF0C\u53EF\u4EE5\u5FFD\u7565\u5728 CurrentClass \u4E2D\u51FA\u73B0\u7684\u5F02\u5E38

    \u65B0\u589E\u4E0D\u4F7F\u7528 current { ... } \u8C03\u7528\u57DF\u76F4\u63A5\u4F7F\u7528 current() \u5F97\u5230\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

    Class.buildOfAny - ext-method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 buildOf \u65B9\u6CD5

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): T?
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 \u4FEE\u6539

    \u52A0\u5165\u65E0\u6CDB\u578B\u65B9\u6CD5 buildOf

    \u529F\u80FD\u63CF\u8FF0

    \u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.1.0 \u65B0\u589E

    \u65B0\u589E ignored \u53C2\u6570\uFF0C\u53EF\u4EE5\u5FFD\u7565\u5728 CurrentClass \u4E2D\u51FA\u73B0\u7684\u5F02\u5E38

    \u65B0\u589E\u4E0D\u4F7F\u7528 current { ... } \u8C03\u7528\u57DF\u76F4\u63A5\u4F7F\u7528 current() \u5F97\u5230\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

    Class.buildOfAny - ext-method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 buildOf \u65B9\u6CD5

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    +
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 \u4FEE\u6539

    \u52A0\u5165\u65E0\u6CDB\u578B\u65B9\u6CD5 buildOf

    v1.1.6 \u4FEE\u6539

    \u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

    \u529F\u80FD\u63CF\u8FF0

    \u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E isAccessible \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u65B9\u6CD5\u3002

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E isAccessible \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u6784\u9020\u65B9\u6CD5\u3002

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E isAccessible \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

    `,396),p=[e];function c(t,r){return o(),a("div",null,p)}const i=s(l,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default}; +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E isAccessible \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

    `,398),p=[e];function c(t,r){return o(),a("div",null,p)}const i=s(l,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/ReflectionFactory.html.8e45139d.js b/docs/assets/ReflectionFactory.html.8d867f57.js similarity index 96% rename from docs/assets/ReflectionFactory.html.8e45139d.js rename to docs/assets/ReflectionFactory.html.8d867f57.js index 52c0a97eb..cfe7311a3 100644 --- a/docs/assets/ReflectionFactory.html.8e45139d.js +++ b/docs/assets/ReflectionFactory.html.8d867f57.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ReflectionFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

    MembersType - class

    enum class MembersType
    +import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ReflectionFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

    MembersType - class

    enum class MembersType
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u5B9A\u4E49\u4E00\u4E2A Class \u4E2D\u7684 Member \u7C7B\u578B

    ALL - enum

    ALL
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u5168\u90E8 Method \u4E0E Constructor\u3002

    METHOD - enum

    METHOD
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u5168\u90E8 Method\u3002

    CONSTRUCTOR - enum

    CONSTRUCTOR
    @@ -101,9 +101,9 @@ import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},l=e(`

    Change Records

    v1.1.0 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

    \u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

    \u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
     
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    Change Records

    v1.0.70 added

    v1.1.0 added

    \u65B0\u589E ignored \u53C2\u6570\uFF0C\u53EF\u4EE5\u5FFD\u7565\u5728 CurrentClass \u4E2D\u51FA\u73B0\u7684\u5F02\u5E38

    \u65B0\u589E\u4E0D\u4F7F\u7528 current { ... } \u8C03\u7528\u57DF\u76F4\u63A5\u4F7F\u7528 current() \u5F97\u5230\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

    Class.buildOfAny - ext-method

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 deprecated

    \u8BF7\u8F6C\u79FB\u5230 buildOf \u65B9\u6CD5

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): T?
    -

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 modified

    \u52A0\u5165\u65E0\u6CDB\u578B\u65B9\u6CD5 buildOf

    Function Illustrate

    \u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    +

    Change Records

    v1.0.70 added

    v1.1.0 added

    \u65B0\u589E ignored \u53C2\u6570\uFF0C\u53EF\u4EE5\u5FFD\u7565\u5728 CurrentClass \u4E2D\u51FA\u73B0\u7684\u5F02\u5E38

    \u65B0\u589E\u4E0D\u4F7F\u7528 current { ... } \u8C03\u7528\u57DF\u76F4\u63A5\u4F7F\u7528 current() \u5F97\u5230\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

    Class.buildOfAny - ext-method

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 deprecated

    \u8BF7\u8F6C\u79FB\u5230 buildOf \u65B9\u6CD5

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    +
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    +

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.0 modified

    \u52A0\u5165\u65E0\u6CDB\u578B\u65B9\u6CD5 buildOf

    v1.1.6 modified

    \u4FEE\u6539\u53C2\u6570\u547D\u540D param \u4E3A args

    Function Illustrate

    \u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 modified

    \u65B0\u589E isAccessible \u53C2\u6570

    Function Illustrate

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u65B9\u6CD5\u3002

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 modified

    \u65B0\u589E isAccessible \u53C2\u6570

    Function Illustrate

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u6784\u9020\u65B9\u6CD5\u3002

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
    -

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 modified

    \u65B0\u589E isAccessible \u53C2\u6570

    Function Illustrate

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

    `,397),p=[l];function c(t,r){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default}; +

    Change Records

    v1.0.70 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    v1.1.5 modified

    \u65B0\u589E isAccessible \u53C2\u6570

    Function Illustrate

    \u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

    `,399),p=[l];function c(t,r){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/ReflectionFactory.html.b0131cbd.js b/docs/assets/ReflectionFactory.html.98ec6704.js similarity index 97% rename from docs/assets/ReflectionFactory.html.b0131cbd.js rename to docs/assets/ReflectionFactory.html.98ec6704.js index d443d9421..d41d482da 100644 --- a/docs/assets/ReflectionFactory.html.b0131cbd.js +++ b/docs/assets/ReflectionFactory.html.98ec6704.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-0d0fcec2","path":"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"MembersType - class","slug":"memberstype-class","link":"#memberstype-class","children":[{"level":3,"title":"ALL - enum","slug":"all-enum","link":"#all-enum","children":[]},{"level":3,"title":"METHOD - enum","slug":"method-enum","link":"#method-enum","children":[]},{"level":3,"title":"CONSTRUCTOR - enum","slug":"constructor-enum","link":"#constructor-enum","children":[]}]},{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"ClassLoader.onLoadClass - ext-method","slug":"classloader-onloadclass-ext-method","link":"#classloader-onloadclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1672581903000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-0d0fcec2","path":"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"MembersType - class","slug":"memberstype-class","link":"#memberstype-class","children":[{"level":3,"title":"ALL - enum","slug":"all-enum","link":"#all-enum","children":[]},{"level":3,"title":"METHOD - enum","slug":"method-enum","link":"#method-enum","children":[]},{"level":3,"title":"CONSTRUCTOR - enum","slug":"constructor-enum","link":"#constructor-enum","children":[]}]},{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"ClassLoader.onLoadClass - ext-method","slug":"classloader-onloadclass-ext-method","link":"#classloader-onloadclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":8}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"}');export{e as data}; diff --git a/docs/assets/ReflectionFactory.html.fc39b155.js b/docs/assets/ReflectionFactory.html.a8284201.js similarity index 97% rename from docs/assets/ReflectionFactory.html.fc39b155.js rename to docs/assets/ReflectionFactory.html.a8284201.js index 409c2b1d7..c1effffc9 100644 --- a/docs/assets/ReflectionFactory.html.fc39b155.js +++ b/docs/assets/ReflectionFactory.html.a8284201.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-213d88b3","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"MembersType - class","slug":"memberstype-class","link":"#memberstype-class","children":[{"level":3,"title":"ALL - enum","slug":"all-enum","link":"#all-enum","children":[]},{"level":3,"title":"METHOD - enum","slug":"method-enum","link":"#method-enum","children":[]},{"level":3,"title":"CONSTRUCTOR - enum","slug":"constructor-enum","link":"#constructor-enum","children":[]}]},{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"ClassLoader.onLoadClass - ext-method","slug":"classloader-onloadclass-ext-method","link":"#classloader-onloadclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1672581903000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":11}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-213d88b3","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"MembersType - class","slug":"memberstype-class","link":"#memberstype-class","children":[{"level":3,"title":"ALL - enum","slug":"all-enum","link":"#all-enum","children":[]},{"level":3,"title":"METHOD - enum","slug":"method-enum","link":"#method-enum","children":[]},{"level":3,"title":"CONSTRUCTOR - enum","slug":"constructor-enum","link":"#constructor-enum","children":[]}]},{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"ClassLoader.onLoadClass - ext-method","slug":"classloader-onloadclass-ext-method","link":"#classloader-onloadclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1674218600000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":12}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"}');export{e as data}; diff --git a/docs/assets/VariableTypeFactory.html.33a241fb.js b/docs/assets/VariableTypeFactory.html.3fcff96b.js similarity index 94% rename from docs/assets/VariableTypeFactory.html.33a241fb.js rename to docs/assets/VariableTypeFactory.html.3fcff96b.js index 578d47269..6a61015e3 100644 --- a/docs/assets/VariableTypeFactory.html.33a241fb.js +++ b/docs/assets/VariableTypeFactory.html.3fcff96b.js @@ -1 +1 @@ -import{_ as t,r as c,o as r,c as s,b as o,d as n,a as i,e}from"./app.a3fd8dd4.js";const l={},p=i('

    VariableTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',5),d=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function b(y,f){const a=c("ExternalLinkIcon");return r(),s("div",null,[p,o("p",null,[d,o("a",_,[h,n(a)]),k])])}const m=t(l,[["render",b],["__file","VariableTypeFactory.html.vue"]]);export{m as default}; +import{_ as t,r as c,o as r,c as s,b as o,d as n,a as i,e}from"./app.2bc5d8f3.js";const l={},p=i('

    VariableTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',5),d=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function b(y,f){const a=c("ExternalLinkIcon");return r(),s("div",null,[p,o("p",null,[d,o("a",_,[h,n(a)]),k])])}const m=t(l,[["render",b],["__file","VariableTypeFactory.html.vue"]]);export{m as default}; diff --git a/docs/assets/VariableTypeFactory.html.8564dbdd.js b/docs/assets/VariableTypeFactory.html.7765e062.js similarity index 95% rename from docs/assets/VariableTypeFactory.html.8564dbdd.js rename to docs/assets/VariableTypeFactory.html.7765e062.js index 38d2ac349..efc155c4f 100644 --- a/docs/assets/VariableTypeFactory.html.8564dbdd.js +++ b/docs/assets/VariableTypeFactory.html.7765e062.js @@ -1 +1 @@ -import{_ as a,r as n,o as r,c as s,b as o,d as c,a as i,e}from"./app.a3fd8dd4.js";const l={},p=i('

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(b,f){const t=n("ExternalLinkIcon");return r(),s("div",null,[p,o("p",null,[d,o("a",h,[_,c(t)]),u])])}const y=a(l,[["render",k],["__file","VariableTypeFactory.html.vue"]]);export{y as default}; +import{_ as a,r as n,o as r,c as s,b as o,d as c,a as i,e}from"./app.2bc5d8f3.js";const l={},p=i('

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(b,f){const t=n("ExternalLinkIcon");return r(),s("div",null,[p,o("p",null,[d,o("a",h,[_,c(t)]),u])])}const y=a(l,[["render",k],["__file","VariableTypeFactory.html.vue"]]);export{y as default}; diff --git a/docs/assets/VariousClass.html.1ec15192.js b/docs/assets/VariousClass.html.cad1a85c.js similarity index 98% rename from docs/assets/VariousClass.html.1ec15192.js rename to docs/assets/VariousClass.html.cad1a85c.js index 04c9e5317..d0b87d41c 100644 --- a/docs/assets/VariousClass.html.1ec15192.js +++ b/docs/assets/VariousClass.html.cad1a85c.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariousClass - class

    class VariousClass(private vararg val name: String)
    +import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariousClass - class

    class VariousClass(private vararg val name: String)
     

    Change Records

    v1.0 first

    v1.1.5 modified

    \u79C1\u6709\u5316 name \u53C2\u6570\u5E76\u8BBE\u7F6E\u4E3A\u4E0D\u53EF\u4FEE\u6539

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u4E0D\u786E\u5B9A\u6027 Class \u7C7B\u540D\u88C5\u8F7D\u5668\uFF0C\u901A\u8FC7 name \u88C5\u8F7D Class \u540D\u79F0\u6570\u7EC4\u3002

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
     

    Change Records

    v1.0.70 added

    v1.1.5 modified

    \u65B0\u589E initialize \u53C2\u6570

    Function Illustrate

    \u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

    \u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
     

    Change Records

    v1.1.0 added

    v1.1.5 modified

    \u65B0\u589E initialize \u53C2\u6570

    Function Illustrate

    \u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

    \u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

    \u5339\u914D\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

    `,28),p=[l];function c(t,r){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","VariousClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/VariousClass.html.e05b3bfe.js b/docs/assets/VariousClass.html.f1bd2745.js similarity index 98% rename from docs/assets/VariousClass.html.e05b3bfe.js rename to docs/assets/VariousClass.html.f1bd2745.js index 94142d8a3..abddfb02a 100644 --- a/docs/assets/VariousClass.html.e05b3bfe.js +++ b/docs/assets/VariousClass.html.f1bd2745.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as l}from"./app.a3fd8dd4.js";const e={},n=l(`

    VariousClass - class

    class VariousClass(private vararg val name: String)
    +import{_ as s,o,c as a,a as l}from"./app.2bc5d8f3.js";const e={},n=l(`

    VariousClass - class

    class VariousClass(private vararg val name: String)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.5 \u4FEE\u6539

    \u79C1\u6709\u5316 name \u53C2\u6570\u5E76\u8BBE\u7F6E\u4E3A\u4E0D\u53EF\u4FEE\u6539

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u4E0D\u786E\u5B9A\u6027 Class \u7C7B\u540D\u88C5\u8F7D\u5668\uFF0C\u901A\u8FC7 name \u88C5\u8F7D Class \u540D\u79F0\u6570\u7EC4\u3002

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E initialize \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

    \u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    v1.1.5 \u4FEE\u6539

    \u65B0\u589E initialize \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

    \u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

    \u5339\u914D\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

    `,27),p=[n];function c(t,r){return o(),a("div",null,p)}const i=s(e,[["render",c],["__file","VariousClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/ViewTypeFactory.html.78709475.js b/docs/assets/ViewTypeFactory.html.6f1ad277.js similarity index 94% rename from docs/assets/ViewTypeFactory.html.78709475.js rename to docs/assets/ViewTypeFactory.html.6f1ad277.js index 90251bd1f..4ac5f3d34 100644 --- a/docs/assets/ViewTypeFactory.html.78709475.js +++ b/docs/assets/ViewTypeFactory.html.6f1ad277.js @@ -1 +1 @@ -import{_ as c,r as a,o as r,c as n,b as o,d as s,a as i,e}from"./app.a3fd8dd4.js";const d={},p=i('

    ViewTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',5),l=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(f,u){const t=a("ExternalLinkIcon");return r(),n("div",null,[p,o("p",null,[l,o("a",_,[h,s(t)]),k])])}const b=c(d,[["render",y],["__file","ViewTypeFactory.html.vue"]]);export{b as default}; +import{_ as c,r as a,o as r,c as n,b as o,d as s,a as i,e}from"./app.2bc5d8f3.js";const d={},p=i('

    ViewTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',5),l=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(f,u){const t=a("ExternalLinkIcon");return r(),n("div",null,[p,o("p",null,[l,o("a",_,[h,s(t)]),k])])}const b=c(d,[["render",y],["__file","ViewTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/ViewTypeFactory.html.03e8ea8c.js b/docs/assets/ViewTypeFactory.html.8d3d974b.js similarity index 95% rename from docs/assets/ViewTypeFactory.html.03e8ea8c.js rename to docs/assets/ViewTypeFactory.html.8d3d974b.js index 470cb650a..bbed8bfa6 100644 --- a/docs/assets/ViewTypeFactory.html.03e8ea8c.js +++ b/docs/assets/ViewTypeFactory.html.8d3d974b.js @@ -1 +1 @@ -import{_ as a,r as n,o as c,c as s,b as o,d as r,a as i,e}from"./app.a3fd8dd4.js";const p={},d=i('

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',6),l=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,m){const t=n("ExternalLinkIcon");return c(),s("div",null,[d,o("p",null,[l,o("a",h,[_,r(t)]),u])])}const g=a(p,[["render",k],["__file","ViewTypeFactory.html.vue"]]);export{g as default}; +import{_ as a,r as n,o as c,c as s,b as o,d as r,a as i,e}from"./app.2bc5d8f3.js";const p={},d=i('

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E Hook \u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

    ',6),l=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,m){const t=n("ExternalLinkIcon");return c(),s("div",null,[d,o("p",null,[l,o("a",h,[_,r(t)]),u])])}const g=a(p,[["render",k],["__file","ViewTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/YukiBaseHooker.html.01048374.js b/docs/assets/YukiBaseHooker.html.4d8ae614.js similarity index 97% rename from docs/assets/YukiBaseHooker.html.01048374.js rename to docs/assets/YukiBaseHooker.html.4d8ae614.js index d0993d50c..b26bbe48e 100644 --- a/docs/assets/YukiBaseHooker.html.01048374.js +++ b/docs/assets/YukiBaseHooker.html.4d8ae614.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
    +import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    Change Records

    v1.0 first

    Function Illustrate

    YukiHookAPI \u7684\u5B50\u7C7B Hooker \u5B9E\u73B0\u3002

    onHook - method

    fun onHook()
     

    Change Records

    v1.0 first

    Function Illustrate

    \u5B50\u7C7B Hook \u5F00\u59CB\u3002

    `,13),c=[t];function l(r,p){return o(),e("div",null,c)}const d=s(n,[["render",l],["__file","YukiBaseHooker.html.vue"]]);export{d as default}; diff --git a/docs/assets/YukiBaseHooker.html.a164cd96.js b/docs/assets/YukiBaseHooker.html.da0106a6.js similarity index 96% rename from docs/assets/YukiBaseHooker.html.a164cd96.js rename to docs/assets/YukiBaseHooker.html.da0106a6.js index 7a2c0aca5..6447dc820 100644 --- a/docs/assets/YukiBaseHooker.html.a164cd96.js +++ b/docs/assets/YukiBaseHooker.html.da0106a6.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},c=e(`

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
    +import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},c=e(`

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u7684\u5B50\u7C7B Hooker \u5B9E\u73B0\u3002

    onHook - method

    fun onHook()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5B50\u7C7B Hook \u5F00\u59CB\u3002

    `,12),l=[c];function p(t,r){return o(),a("div",null,l)}const i=s(n,[["render",p],["__file","YukiBaseHooker.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiHookAPI.html.2b409e9b.js b/docs/assets/YukiHookAPI.html.45b0b07e.js similarity index 94% rename from docs/assets/YukiHookAPI.html.2b409e9b.js rename to docs/assets/YukiHookAPI.html.45b0b07e.js index cce1f5cab..cbecabb55 100644 --- a/docs/assets/YukiHookAPI.html.2b409e9b.js +++ b/docs/assets/YukiHookAPI.html.45b0b07e.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookAPI - object

    object YukiHookAPI
    +import{_ as s,o as n,c as o,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookAPI - object

    object YukiHookAPI
     

    Change Records

    v1.0 first

    Function Illustrate

    \u8FD9\u662F YukiHookAPI \u7684 API \u8C03\u7528\u603B\u7C7B\uFF0CHook \u76F8\u5173\u529F\u80FD\u7684\u5F00\u59CB\u3001Hook \u76F8\u5173\u529F\u80FD\u7684\u914D\u7F6E\u90FD\u5728\u8FD9\u91CC\u3002

    API_VERSION_NAME - field

    const val API_VERSION_NAME: String
     

    Change Records

    v1.0.4 added

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D YukiHookAPI \u7684\u7248\u672C\u3002

    API_VERSION_CODE - field

    const val API_VERSION_CODE: Int
     

    Change Records

    v1.0.4 added

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D YukiHookAPI \u7684\u7248\u672C\u53F7\u3002

    executorName - field

    Change Records

    v1.0.5 added

    v1.0.91 removed

    \u8BF7\u8F6C\u79FB\u5230 Status.Executor.name

    executorVersion - field

    Change Records

    v1.0.5 added

    v1.0.91 removed

    \u8BF7\u8F6C\u79FB\u5230 Status.Executor.apiLevel\u3001Status.Executor.versionName\u3001Status.Executor.versionCode

    Status - object

    object Status
    @@ -22,8 +22,8 @@ import{_ as s,o as n,c as o,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

    Change Records

    v1.0.88 added

    Function Illustrate

    \u662F\u5426\u542F\u7528 Hook Xposed \u6A21\u5757\u6FC0\u6D3B\u7B49\u72B6\u6001\u529F\u80FD.

    \u4E3A\u539F\u751F\u652F\u6301 Xposed \u6A21\u5757\u6FC0\u6D3B\u72B6\u6001\u68C0\u6D4B\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    Notice

    \u5173\u95ED\u540E\u4F60\u5C06\u4E0D\u80FD\u518D\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 YukiHookAPI.Status \u4E2D\u7684\u6FC0\u6D3B\u72B6\u6001\u5224\u65AD\u529F\u80FD\u3002

    isEnableHookSharedPreferences - field

    var isEnableHookSharedPreferences: Boolean
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u662F\u5426\u542F\u7528 Hook SharedPreferences\u3002

    \u542F\u7528\u540E\u5C06\u5728\u6A21\u5757\u542F\u52A8\u65F6\u5F3A\u5236\u5C06 SharedPreferences \u6587\u4EF6\u6743\u9650\u8C03\u6574\u4E3A Context.MODE_WORLD_READABLE (0664)\u3002

    Notice

    \u8FD9\u662F\u4E00\u4E2A\u53EF\u9009\u7684\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u4E0D\u542F\u7528\u3002

    \u4EC5\u7528\u4E8E\u4FEE\u590D\u67D0\u4E9B\u7CFB\u7EDF\u53EF\u80FD\u4F1A\u51FA\u73B0\u5728\u542F\u7528\u4E86 New XSharedPreferences \u540E\u4F9D\u7136\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u82E5\u4F60\u80FD\u6B63\u5E38\u4F7F\u7528 YukiHookModulePrefs \u5C31\u4E0D\u5EFA\u8BAE\u542F\u7528\u6B64\u529F\u80FD\u3002

    isEnableDataChannel - field

    var isEnableDataChannel: Boolean
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u662F\u5426\u542F\u7528\u5F53\u524D Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4EA4\u4E92\u7684 YukiHookDataChannel \u529F\u80FD\u3002

    \u8BF7\u786E\u4FDD Xposed \u6A21\u5757\u7684 Application \u7EE7\u627F\u4E8E ModuleApplication \u624D\u80FD\u6709\u6548\u3002

    \u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\uFF0C\u5173\u95ED\u540E\u5C06\u4E0D\u4F1A\u5728\u529F\u80FD\u521D\u59CB\u5316\u7684\u65F6\u5019\u88C5\u8F7D YukiHookDataChannel\u3002

    isEnableMemberCache - field

    var isEnableMemberCache: Boolean
    -

    Change Records

    v1.0.68 added

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u662F\u5426\u542F\u7528 Member \u7F13\u5B58\u529F\u80FD\u3002

    \u4E3A\u9632\u6B62 Member \u590D\u7528\u8FC7\u9AD8\u9020\u6210\u7684\u7CFB\u7EDF GC \u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    \u542F\u7528\u540E\u4F1A\u7F13\u5B58\u5DF2\u7ECF\u627E\u5230\u7684 Method\u3001Constructor\u3001Field\u3002

    \u7F13\u5B58\u7684 Member \u90FD\u5C06\u5904\u4E8E MemberCacheStore \u7684\u5168\u5C40\u9759\u6001\u5B9E\u4F8B\u4E2D\u3002

    \u63A8\u8350\u4F7F\u7528 MethodFinder\u3001ConstructorFinder\u3001FieldFinder \u6765\u83B7\u53D6 Member\u3002

    \u9664\u975E\u7F13\u5B58\u7684 Member \u53D1\u751F\u4E86\u6DF7\u6DC6\u7684\u95EE\u9898\uFF0C\u4F8B\u5982\u4F7F\u7528 R8 \u6DF7\u6DC6\u540E\u7684 APP \u7684\u76EE\u6807 Member\uFF0C\u5426\u5219\u5EFA\u8BAE\u542F\u7528\u3002

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    Change Records

    v1.0 first

    Function Illustrate

    \u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

    \u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

    Function Example

    \u4F60\u53EF\u4EE5\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u65B9\u6CD5\u4E2D\u8C03\u7528 configs \u65B9\u6CD5\u548C debugLog \u65B9\u6CD5\u5B8C\u6210\u5BF9 API \u7684\u529F\u80FD\u914D\u7F6E\uFF0C\u5B9E\u65F6\u751F\u6548\u3002

    The following example

    object HookEntry : IYukiHookXposedInit {
    +

    Change Records

    v1.0.68 added

    Function Illustrate

    \u662F\u5426\u542F\u7528 Member \u7F13\u5B58\u529F\u80FD\u3002

    \u4E3A\u9632\u6B62 Member \u590D\u7528\u8FC7\u9AD8\u9020\u6210\u7684\u7CFB\u7EDF GC \u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    \u542F\u7528\u540E\u4F1A\u7F13\u5B58\u5DF2\u7ECF\u627E\u5230\u7684 Method\u3001Constructor\u3001Field\u3002

    \u7F13\u5B58\u7684 Member \u90FD\u5C06\u5904\u4E8E MemberCacheStore \u7684\u5168\u5C40\u9759\u6001\u5B9E\u4F8B\u4E2D\u3002

    \u63A8\u8350\u4F7F\u7528 MethodFinder\u3001ConstructorFinder\u3001FieldFinder \u6765\u83B7\u53D6 Member\u3002

    \u9664\u975E\u7F13\u5B58\u7684 Member \u53D1\u751F\u4E86\u6DF7\u6DC6\u7684\u95EE\u9898\uFF0C\u4F8B\u5982\u4F7F\u7528 R8 \u6DF7\u6DC6\u540E\u7684 APP \u7684\u76EE\u6807 Member\uFF0C\u5426\u5219\u5EFA\u8BAE\u542F\u7528\u3002

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    +

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

    \u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

    Function Example

    \u4F60\u53EF\u4EE5\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u65B9\u6CD5\u4E2D\u8C03\u7528 configs \u65B9\u6CD5\u548C debugLog \u65B9\u6CD5\u5B8C\u6210\u5BF9 API \u7684\u529F\u80FD\u914D\u7F6E\uFF0C\u5B9E\u65F6\u751F\u6548\u3002

    The following example

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             YukiHookAPI.configs {
    diff --git a/docs/assets/YukiHookAPI.html.2ba08be8.js b/docs/assets/YukiHookAPI.html.57a95a9b.js
    similarity index 95%
    rename from docs/assets/YukiHookAPI.html.2ba08be8.js
    rename to docs/assets/YukiHookAPI.html.57a95a9b.js
    index aca53bef5..0d1643c64 100644
    --- a/docs/assets/YukiHookAPI.html.2ba08be8.js
    +++ b/docs/assets/YukiHookAPI.html.57a95a9b.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-053599a5","path":"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html","title":"YukiHookAPI - object","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Status - object","slug":"status-object","link":"#status-object","children":[{"level":3,"title":"compiledTimestamp - field","slug":"compiledtimestamp-field","link":"#compiledtimestamp-field","children":[]},{"level":3,"title":"isXposedEnvironment - field","slug":"isxposedenvironment-field","link":"#isxposedenvironment-field","children":[]},{"level":3,"title":"isModuleActive - field","slug":"ismoduleactive-field","link":"#ismoduleactive-field","children":[]},{"level":3,"title":"isXposedModuleActive - field","slug":"isxposedmoduleactive-field","link":"#isxposedmoduleactive-field","children":[]},{"level":3,"title":"isTaiChiModuleActive - field","slug":"istaichimoduleactive-field","link":"#istaichimoduleactive-field","children":[]},{"level":3,"title":"isSupportResourcesHook - field","slug":"issupportresourceshook-field","link":"#issupportresourceshook-field","children":[]},{"level":3,"title":"Executor - object","slug":"executor-object","link":"#executor-object","children":[]}]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugLog - method","slug":"debuglog-method","link":"#debuglog-method","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isEnableModulePrefsCache - field","slug":"isenablemoduleprefscache-field","link":"#isenablemoduleprefscache-field","children":[]},{"level":3,"title":"isEnableModuleAppResourcesCache - field","slug":"isenablemoduleappresourcescache-field","link":"#isenablemoduleappresourcescache-field","children":[]},{"level":3,"title":"isEnableHookModuleStatus - field","slug":"isenablehookmodulestatus-field","link":"#isenablehookmodulestatus-field","children":[]},{"level":3,"title":"isEnableHookSharedPreferences - field","slug":"isenablehooksharedpreferences-field","link":"#isenablehooksharedpreferences-field","children":[]},{"level":3,"title":"isEnableDataChannel - field","slug":"isenabledatachannel-field","link":"#isenabledatachannel-field","children":[]},{"level":3,"title":"isEnableMemberCache - field","slug":"isenablemembercache-field","link":"#isenablemembercache-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]},{"level":2,"title":"encase - method","slug":"encase-method","link":"#encase-method","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-053599a5","path":"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html","title":"YukiHookAPI - object","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Status - object","slug":"status-object","link":"#status-object","children":[{"level":3,"title":"compiledTimestamp - field","slug":"compiledtimestamp-field","link":"#compiledtimestamp-field","children":[]},{"level":3,"title":"isXposedEnvironment - field","slug":"isxposedenvironment-field","link":"#isxposedenvironment-field","children":[]},{"level":3,"title":"isModuleActive - field","slug":"ismoduleactive-field","link":"#ismoduleactive-field","children":[]},{"level":3,"title":"isXposedModuleActive - field","slug":"isxposedmoduleactive-field","link":"#isxposedmoduleactive-field","children":[]},{"level":3,"title":"isTaiChiModuleActive - field","slug":"istaichimoduleactive-field","link":"#istaichimoduleactive-field","children":[]},{"level":3,"title":"isSupportResourcesHook - field","slug":"issupportresourceshook-field","link":"#issupportresourceshook-field","children":[]},{"level":3,"title":"Executor - object","slug":"executor-object","link":"#executor-object","children":[]}]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugLog - method","slug":"debuglog-method","link":"#debuglog-method","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isEnableModulePrefsCache - field","slug":"isenablemoduleprefscache-field","link":"#isenablemoduleprefscache-field","children":[]},{"level":3,"title":"isEnableModuleAppResourcesCache - field","slug":"isenablemoduleappresourcescache-field","link":"#isenablemoduleappresourcescache-field","children":[]},{"level":3,"title":"isEnableHookModuleStatus - field","slug":"isenablehookmodulestatus-field","link":"#isenablehookmodulestatus-field","children":[]},{"level":3,"title":"isEnableHookSharedPreferences - field","slug":"isenablehooksharedpreferences-field","link":"#isenablehooksharedpreferences-field","children":[]},{"level":3,"title":"isEnableDataChannel - field","slug":"isenabledatachannel-field","link":"#isenabledatachannel-field","children":[]},{"level":3,"title":"isEnableMemberCache - field","slug":"isenablemembercache-field","link":"#isenablemembercache-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]},{"level":2,"title":"encase - method","slug":"encase-method","link":"#encase-method","children":[]}],"git":{"updatedTime":1674218970000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"}');export{e as data};
    diff --git a/docs/assets/YukiHookAPI.html.4cc2205d.js b/docs/assets/YukiHookAPI.html.78e39167.js
    similarity index 95%
    rename from docs/assets/YukiHookAPI.html.4cc2205d.js
    rename to docs/assets/YukiHookAPI.html.78e39167.js
    index e3c7f643f..376cd45e1 100644
    --- a/docs/assets/YukiHookAPI.html.4cc2205d.js
    +++ b/docs/assets/YukiHookAPI.html.78e39167.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-6931cb54","path":"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html","title":"YukiHookAPI - object","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Status - object","slug":"status-object","link":"#status-object","children":[{"level":3,"title":"compiledTimestamp - field","slug":"compiledtimestamp-field","link":"#compiledtimestamp-field","children":[]},{"level":3,"title":"isXposedEnvironment - field","slug":"isxposedenvironment-field","link":"#isxposedenvironment-field","children":[]},{"level":3,"title":"isModuleActive - field","slug":"ismoduleactive-field","link":"#ismoduleactive-field","children":[]},{"level":3,"title":"isXposedModuleActive - field","slug":"isxposedmoduleactive-field","link":"#isxposedmoduleactive-field","children":[]},{"level":3,"title":"isTaiChiModuleActive - field","slug":"istaichimoduleactive-field","link":"#istaichimoduleactive-field","children":[]},{"level":3,"title":"isSupportResourcesHook - field","slug":"issupportresourceshook-field","link":"#issupportresourceshook-field","children":[]},{"level":3,"title":"Executor - object","slug":"executor-object","link":"#executor-object","children":[]}]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugLog - method","slug":"debuglog-method","link":"#debuglog-method","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isEnableModulePrefsCache - field","slug":"isenablemoduleprefscache-field","link":"#isenablemoduleprefscache-field","children":[]},{"level":3,"title":"isEnableModuleAppResourcesCache - field","slug":"isenablemoduleappresourcescache-field","link":"#isenablemoduleappresourcescache-field","children":[]},{"level":3,"title":"isEnableHookModuleStatus - field","slug":"isenablehookmodulestatus-field","link":"#isenablehookmodulestatus-field","children":[]},{"level":3,"title":"isEnableHookSharedPreferences - field","slug":"isenablehooksharedpreferences-field","link":"#isenablehooksharedpreferences-field","children":[]},{"level":3,"title":"isEnableDataChannel - field","slug":"isenabledatachannel-field","link":"#isenabledatachannel-field","children":[]},{"level":3,"title":"isEnableMemberCache - field","slug":"isenablemembercache-field","link":"#isenablemembercache-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]},{"level":2,"title":"encase - method","slug":"encase-method","link":"#encase-method","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-6931cb54","path":"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html","title":"YukiHookAPI - object","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Status - object","slug":"status-object","link":"#status-object","children":[{"level":3,"title":"compiledTimestamp - field","slug":"compiledtimestamp-field","link":"#compiledtimestamp-field","children":[]},{"level":3,"title":"isXposedEnvironment - field","slug":"isxposedenvironment-field","link":"#isxposedenvironment-field","children":[]},{"level":3,"title":"isModuleActive - field","slug":"ismoduleactive-field","link":"#ismoduleactive-field","children":[]},{"level":3,"title":"isXposedModuleActive - field","slug":"isxposedmoduleactive-field","link":"#isxposedmoduleactive-field","children":[]},{"level":3,"title":"isTaiChiModuleActive - field","slug":"istaichimoduleactive-field","link":"#istaichimoduleactive-field","children":[]},{"level":3,"title":"isSupportResourcesHook - field","slug":"issupportresourceshook-field","link":"#issupportresourceshook-field","children":[]},{"level":3,"title":"Executor - object","slug":"executor-object","link":"#executor-object","children":[]}]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugLog - method","slug":"debuglog-method","link":"#debuglog-method","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isEnableModulePrefsCache - field","slug":"isenablemoduleprefscache-field","link":"#isenablemoduleprefscache-field","children":[]},{"level":3,"title":"isEnableModuleAppResourcesCache - field","slug":"isenablemoduleappresourcescache-field","link":"#isenablemoduleappresourcescache-field","children":[]},{"level":3,"title":"isEnableHookModuleStatus - field","slug":"isenablehookmodulestatus-field","link":"#isenablehookmodulestatus-field","children":[]},{"level":3,"title":"isEnableHookSharedPreferences - field","slug":"isenablehooksharedpreferences-field","link":"#isenablehooksharedpreferences-field","children":[]},{"level":3,"title":"isEnableDataChannel - field","slug":"isenabledatachannel-field","link":"#isenabledatachannel-field","children":[]},{"level":3,"title":"isEnableMemberCache - field","slug":"isenablemembercache-field","link":"#isenablemembercache-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]},{"level":2,"title":"encase - method","slug":"encase-method","link":"#encase-method","children":[]}],"git":{"updatedTime":1674218970000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":8}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"}');export{e as data};
    diff --git a/docs/assets/YukiHookAPI.html.ac46d9ea.js b/docs/assets/YukiHookAPI.html.e04848a7.js
    similarity index 93%
    rename from docs/assets/YukiHookAPI.html.ac46d9ea.js
    rename to docs/assets/YukiHookAPI.html.e04848a7.js
    index f58b06afc..6c726dc5a 100644
    --- a/docs/assets/YukiHookAPI.html.ac46d9ea.js
    +++ b/docs/assets/YukiHookAPI.html.e04848a7.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

    YukiHookAPI - object

    object YukiHookAPI
    +import{_ as s,o as n,c as o,a}from"./app.2bc5d8f3.js";const e={},l=a(`

    YukiHookAPI - object

    object YukiHookAPI
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F YukiHookAPI \u7684 API \u8C03\u7528\u603B\u7C7B\uFF0CHook \u76F8\u5173\u529F\u80FD\u7684\u5F00\u59CB\u3001Hook \u76F8\u5173\u529F\u80FD\u7684\u914D\u7F6E\u90FD\u5728\u8FD9\u91CC\u3002

    API_VERSION_NAME - field

    const val API_VERSION_NAME: String
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.4 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D YukiHookAPI \u7684\u7248\u672C\u3002

    API_VERSION_CODE - field

    const val API_VERSION_CODE: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.4 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D YukiHookAPI \u7684\u7248\u672C\u53F7\u3002

    executorName - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.5 \u65B0\u589E

    v1.0.91 \u79FB\u9664

    \u8BF7\u8F6C\u79FB\u5230 Status.Executor.name

    executorVersion - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.5 \u65B0\u589E

    v1.0.91 \u79FB\u9664

    \u8BF7\u8F6C\u79FB\u5230 Status.Executor.apiLevel\u3001Status.Executor.versionName\u3001Status.Executor.versionCode

    Status - object

    object Status
    @@ -22,8 +22,8 @@ import{_ as s,o as n,c as o,a}from"./app.a3fd8dd4.js";const e={},l=a(`

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u542F\u7528 Hook Xposed \u6A21\u5757\u6FC0\u6D3B\u7B49\u72B6\u6001\u529F\u80FD.

    \u4E3A\u539F\u751F\u652F\u6301 Xposed \u6A21\u5757\u6FC0\u6D3B\u72B6\u6001\u68C0\u6D4B\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    \u6CE8\u610F

    \u5173\u95ED\u540E\u4F60\u5C06\u4E0D\u80FD\u518D\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 YukiHookAPI.Status \u4E2D\u7684\u6FC0\u6D3B\u72B6\u6001\u5224\u65AD\u529F\u80FD\u3002

    isEnableHookSharedPreferences - field

    var isEnableHookSharedPreferences: Boolean
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u542F\u7528 Hook SharedPreferences\u3002

    \u542F\u7528\u540E\u5C06\u5728\u6A21\u5757\u542F\u52A8\u65F6\u5F3A\u5236\u5C06 SharedPreferences \u6587\u4EF6\u6743\u9650\u8C03\u6574\u4E3A Context.MODE_WORLD_READABLE (0664)\u3002

    \u6CE8\u610F

    \u8FD9\u662F\u4E00\u4E2A\u53EF\u9009\u7684\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u4E0D\u542F\u7528\u3002

    \u4EC5\u7528\u4E8E\u4FEE\u590D\u67D0\u4E9B\u7CFB\u7EDF\u53EF\u80FD\u4F1A\u51FA\u73B0\u5728\u542F\u7528\u4E86 New XSharedPreferences \u540E\u4F9D\u7136\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u82E5\u4F60\u80FD\u6B63\u5E38\u4F7F\u7528 YukiHookModulePrefs \u5C31\u4E0D\u5EFA\u8BAE\u542F\u7528\u6B64\u529F\u80FD\u3002

    isEnableDataChannel - field

    var isEnableDataChannel: Boolean
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u542F\u7528\u5F53\u524D Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4EA4\u4E92\u7684 YukiHookDataChannel \u529F\u80FD\u3002

    \u8BF7\u786E\u4FDD Xposed \u6A21\u5757\u7684 Application \u7EE7\u627F\u4E8E ModuleApplication \u624D\u80FD\u6709\u6548\u3002

    \u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\uFF0C\u5173\u95ED\u540E\u5C06\u4E0D\u4F1A\u5728\u529F\u80FD\u521D\u59CB\u5316\u7684\u65F6\u5019\u88C5\u8F7D YukiHookDataChannel\u3002

    isEnableMemberCache - field

    var isEnableMemberCache: Boolean
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.68 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u542F\u7528 Member \u7F13\u5B58\u529F\u80FD\u3002

    \u4E3A\u9632\u6B62 Member \u590D\u7528\u8FC7\u9AD8\u9020\u6210\u7684\u7CFB\u7EDF GC \u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    \u542F\u7528\u540E\u4F1A\u7F13\u5B58\u5DF2\u7ECF\u627E\u5230\u7684 Method\u3001Constructor\u3001Field\u3002

    \u7F13\u5B58\u7684 Member \u90FD\u5C06\u5904\u4E8E MemberCacheStore \u7684\u5168\u5C40\u9759\u6001\u5B9E\u4F8B\u4E2D\u3002

    \u63A8\u8350\u4F7F\u7528 MethodFinder\u3001ConstructorFinder\u3001FieldFinder \u6765\u83B7\u53D6 Member\u3002

    \u9664\u975E\u7F13\u5B58\u7684 Member \u53D1\u751F\u4E86\u6DF7\u6DC6\u7684\u95EE\u9898\uFF0C\u4F8B\u5982\u4F7F\u7528 R8 \u6DF7\u6DC6\u540E\u7684 APP \u7684\u76EE\u6807 Member\uFF0C\u5426\u5219\u5EFA\u8BAE\u542F\u7528\u3002

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

    \u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F60\u53EF\u4EE5\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u65B9\u6CD5\u4E2D\u8C03\u7528 configs \u65B9\u6CD5\u548C debugLog \u65B9\u6CD5\u5B8C\u6210\u5BF9 API \u7684\u529F\u80FD\u914D\u7F6E\uFF0C\u5B9E\u65F6\u751F\u6548\u3002

    \u793A\u4F8B\u5982\u4E0B

    object HookEntry : IYukiHookXposedInit {
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.68 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u662F\u5426\u542F\u7528 Member \u7F13\u5B58\u529F\u80FD\u3002

    \u4E3A\u9632\u6B62 Member \u590D\u7528\u8FC7\u9AD8\u9020\u6210\u7684\u7CFB\u7EDF GC \u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002

    \u542F\u7528\u540E\u4F1A\u7F13\u5B58\u5DF2\u7ECF\u627E\u5230\u7684 Method\u3001Constructor\u3001Field\u3002

    \u7F13\u5B58\u7684 Member \u90FD\u5C06\u5904\u4E8E MemberCacheStore \u7684\u5168\u5C40\u9759\u6001\u5B9E\u4F8B\u4E2D\u3002

    \u63A8\u8350\u4F7F\u7528 MethodFinder\u3001ConstructorFinder\u3001FieldFinder \u6765\u83B7\u53D6 Member\u3002

    \u9664\u975E\u7F13\u5B58\u7684 Member \u53D1\u751F\u4E86\u6DF7\u6DC6\u7684\u95EE\u9898\uFF0C\u4F8B\u5982\u4F7F\u7528 R8 \u6DF7\u6DC6\u540E\u7684 APP \u7684\u76EE\u6807 Member\uFF0C\u5426\u5219\u5EFA\u8BAE\u542F\u7528\u3002

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

    \u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F60\u53EF\u4EE5\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u65B9\u6CD5\u4E2D\u8C03\u7528 configs \u65B9\u6CD5\u548C debugLog \u65B9\u6CD5\u5B8C\u6210\u5BF9 API \u7684\u529F\u80FD\u914D\u7F6E\uFF0C\u5B9E\u65F6\u751F\u6548\u3002

    \u793A\u4F8B\u5982\u4E0B

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             YukiHookAPI.configs {
    diff --git a/docs/assets/YukiHookDataChannel.html.e4cfba74.js b/docs/assets/YukiHookDataChannel.html.3ba39a72.js
    similarity index 99%
    rename from docs/assets/YukiHookDataChannel.html.e4cfba74.js
    rename to docs/assets/YukiHookDataChannel.html.3ba39a72.js
    index 7abbcf19b..0f7fd5213 100644
    --- a/docs/assets/YukiHookDataChannel.html.e4cfba74.js
    +++ b/docs/assets/YukiHookDataChannel.html.3ba39a72.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +import{_ as s,o as a,c as o,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u901A\u8BAF\u6865\u3002

    \u901A\u8FC7\u6A21\u5757\u4E0E\u5BBF\u4E3B\u76F8\u4E92\u6CE8\u518C BroadcastReceiver \u6765\u5B9E\u73B0\u6570\u636E\u7684\u4EA4\u4E92\u3002

    \u6A21\u5757\u9700\u8981\u5C06 Application \u7EE7\u627F\u4E8E ModuleApplication \u6765\u5B9E\u73B0\u6B64\u529F\u80FD\u3002

    Pay Attention

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002

    NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String, private val isSecure: Boolean)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    \u65B0\u589E isSecure \u53C2\u6570

    Function Illustrate

    YukiHookDataChannel \u547D\u540D\u7A7A\u95F4\u3002

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u521B\u5EFA\u4E00\u4E2A\u8C03\u7528\u7A7A\u95F4\u3002

    allowSendTooLargeData - method

    fun allowSendTooLargeData(): NameSpace
    diff --git a/docs/assets/YukiHookDataChannel.html.b5dfff48.js b/docs/assets/YukiHookDataChannel.html.4dfa5cde.js
    similarity index 99%
    rename from docs/assets/YukiHookDataChannel.html.b5dfff48.js
    rename to docs/assets/YukiHookDataChannel.html.4dfa5cde.js
    index 8f3c330a5..278cb5dcb 100644
    --- a/docs/assets/YukiHookDataChannel.html.b5dfff48.js
    +++ b/docs/assets/YukiHookDataChannel.html.4dfa5cde.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.a3fd8dd4.js";const p={},l=n(`

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +import{_ as s,o as a,c as o,a as n}from"./app.2bc5d8f3.js";const p={},l=n(`

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u901A\u8BAF\u6865\u3002

    \u901A\u8FC7\u6A21\u5757\u4E0E\u5BBF\u4E3B\u76F8\u4E92\u6CE8\u518C BroadcastReceiver \u6765\u5B9E\u73B0\u6570\u636E\u7684\u4EA4\u4E92\u3002

    \u6A21\u5757\u9700\u8981\u5C06 Application \u7EE7\u627F\u4E8E ModuleApplication \u6765\u5B9E\u73B0\u6B64\u529F\u80FD\u3002

    \u7279\u522B\u6CE8\u610F

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002

    NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String, private val isSecure: Boolean)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.0.90 \u4FEE\u6539

    \u65B0\u589E isSecure \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    YukiHookDataChannel \u547D\u540D\u7A7A\u95F4\u3002

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u4E00\u4E2A\u8C03\u7528\u7A7A\u95F4\u3002

    allowSendTooLargeData - method

    fun allowSendTooLargeData(): NameSpace
    diff --git a/docs/assets/YukiHookFactory.html.a2cb6ab9.js b/docs/assets/YukiHookFactory.html.38772f52.js
    similarity index 99%
    rename from docs/assets/YukiHookFactory.html.a2cb6ab9.js
    rename to docs/assets/YukiHookFactory.html.38772f52.js
    index bf3997398..3f896459e 100644
    --- a/docs/assets/YukiHookFactory.html.a2cb6ab9.js
    +++ b/docs/assets/YukiHookFactory.html.38772f52.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o,c as s,a as n}from"./app.a3fd8dd4.js";const a={},t=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookFactory - kt

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
    +import{_ as e,o,c as s,a as n}from"./app.2bc5d8f3.js";const a={},t=n(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookFactory - kt

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
     

    Change Records

    v1.0.1 added

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit

    Function Illustrate

    \u5728 IYukiHookXposedInit \u4E2D\u914D\u7F6E Configs\u3002

    IYukiHookXposedInit.encase - ext-method

    fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit)
     
    fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker)
     

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit

    Function Illustrate

    \u5728 IYukiHookXposedInit \u4E2D\u8C03\u7528 YukiHookAPI\u3002

    Context.modulePrefs - ext-field

    val Context.modulePrefs: YukiHookModulePrefs
    diff --git a/docs/assets/YukiHookFactory.html.a75f1642.js b/docs/assets/YukiHookFactory.html.ec297325.js
    similarity index 99%
    rename from docs/assets/YukiHookFactory.html.a75f1642.js
    rename to docs/assets/YukiHookFactory.html.ec297325.js
    index 0e601e89c..b08752b6d 100644
    --- a/docs/assets/YukiHookFactory.html.a75f1642.js
    +++ b/docs/assets/YukiHookFactory.html.ec297325.js
    @@ -1,4 +1,4 @@
    -import{_ as o,o as e,c as s,a as n}from"./app.a3fd8dd4.js";const a={},p=n(`

    YukiHookFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
    +import{_ as o,o as e,c as s,a as n}from"./app.2bc5d8f3.js";const a={},p=n(`

    YukiHookFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.1 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit

    \u529F\u80FD\u63CF\u8FF0

    \u5728 IYukiHookXposedInit \u4E2D\u914D\u7F6E Configs\u3002

    IYukiHookXposedInit.encase - ext-method

    fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit)
     
    fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit

    \u529F\u80FD\u63CF\u8FF0

    \u5728 IYukiHookXposedInit \u4E2D\u8C03\u7528 YukiHookAPI\u3002

    Context.modulePrefs - ext-field

    val Context.modulePrefs: YukiHookModulePrefs
    diff --git a/docs/assets/YukiHookModulePrefs.html.c58899ea.js b/docs/assets/YukiHookModulePrefs.html.6686d264.js
    similarity index 99%
    rename from docs/assets/YukiHookModulePrefs.html.c58899ea.js
    rename to docs/assets/YukiHookModulePrefs.html.6686d264.js
    index 2a6ec9b4a..637edca56 100644
    --- a/docs/assets/YukiHookModulePrefs.html.c58899ea.js
    +++ b/docs/assets/YukiHookModulePrefs.html.6686d264.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.a3fd8dd4.js";const r={},d=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
    +import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.2bc5d8f3.js";const r={},d=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
     

    Change Records

    v1.0 first

    Function Illustrate

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u5B58\u53D6\uFF0C\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    Pay Attention

    \u6B64\u529F\u80FD\u4E3A\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u4EC5\u5728 LSPosed \u73AF\u5883\u6D4B\u8BD5\u901A\u8FC7\uFF0CEdXposed \u7406\u8BBA\u4E5F\u53EF\u4EE5\u4F7F\u7528\u4F46\u4E0D\u518D\u63A8\u8350\u3002

    \u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5728 AndroidManifests.xml \u4E2D\u5C06 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\u3002

    `,10),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},u=s("New XSharedPreferences"),g=s("\u3002"),h=o("p",null,[s("\u82E5\u4F60\u5728\u6309\u7167\u89C4\u5B9A\u914D\u7F6E\u540E\u4F9D\u7136\u65E0\u6CD5\u4F7F\u7528\u6216\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u53EF\u4EE5\u53C2\u8003 "),o("a",{href:"../../../YukiHookAPI#isenablehooksharedpreferences-field"},"isEnableHookSharedPreferences"),s("\u3002")],-1),A=o("p",null,[s("\u672A\u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5C06\u4F60\u7684\u6A21\u5757 "),o("code",null,"API"),s(" \u964D\u81F3 "),o("code",null,"26"),s(" \u4EE5\u4E0B\uFF0C"),o("code",null,"YukiHookAPI"),s(" \u5C06\u4F1A\u5C1D\u8BD5\u4F7F\u7528 "),o("code",null,"makeWorldReadable"),s(" \u4F46\u4ECD\u6709\u53EF\u80FD\u4E0D\u6210\u529F\u3002")],-1),F=s("\u592A\u6781\u8BF7\u53C2\u9605 "),B={href:"https://taichi.cool/zh/doc/for-xposed-dev.html#%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90-%E9%85%8D%E7%BD%AE-xsharedpreference",target:"_blank",rel:"noopener noreferrer"},C=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),D=s("\u3002"),k=a('

    Pay Attention

    \u5F53\u4F60\u5728 Xposed \u6A21\u5757\u4E2D\u5B58\u53D6\u6570\u636E\u7684\u65F6\u5019 context \u5FC5\u987B\u4E0D\u80FD\u662F\u7A7A\u7684\u3002

    \u82E5\u4F60\u6B63\u5728\u4F7F\u7528 PreferenceFragmentCompat\uFF0C\u8BF7\u8FC1\u79FB\u5230 ModulePreferenceFragment \u4EE5\u9002\u914D\u4E0A\u8FF0\u529F\u80FD\u7279\u6027\u3002

    Optional Configuration

    \u82E5\u4F60\u4E0D\u60F3\u5C06\u4F60\u7684\u6A21\u5757\u7684 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\uFF0C\u4F60\u53EF\u4EE5\u5728 AndroidManifest.xml \u4E2D\u6DFB\u52A0 xposedsharedprefs \u6765\u5B9E\u73B0\u652F\u6301\u3002

    ',4),m=s("\u8BE6\u89C1 "),v={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},b=s("New XSharedPreferences"),f=s("\u3002"),x=a(`

    The following example

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
    diff --git a/docs/assets/YukiHookModulePrefs.html.1b090cbd.js b/docs/assets/YukiHookModulePrefs.html.fd9769b9.js
    similarity index 99%
    rename from docs/assets/YukiHookModulePrefs.html.1b090cbd.js
    rename to docs/assets/YukiHookModulePrefs.html.fd9769b9.js
    index 241cc9a88..6699be6ad 100644
    --- a/docs/assets/YukiHookModulePrefs.html.1b090cbd.js
    +++ b/docs/assets/YukiHookModulePrefs.html.fd9769b9.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.a3fd8dd4.js";const r={},d=a(`

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
    +import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.2bc5d8f3.js";const r={},d=a(`

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u5B58\u53D6\uFF0C\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    \u7279\u522B\u6CE8\u610F

    \u6B64\u529F\u80FD\u4E3A\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u4EC5\u5728 LSPosed \u73AF\u5883\u6D4B\u8BD5\u901A\u8FC7\uFF0CEdXposed \u7406\u8BBA\u4E5F\u53EF\u4EE5\u4F7F\u7528\u4F46\u4E0D\u518D\u63A8\u8350\u3002

    \u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5728 AndroidManifests.xml \u4E2D\u5C06 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\u3002

    `,9),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},A=s("New XSharedPreferences"),g=s("\u3002"),h=o("p",null,[s("\u82E5\u4F60\u5728\u6309\u7167\u89C4\u5B9A\u914D\u7F6E\u540E\u4F9D\u7136\u65E0\u6CD5\u4F7F\u7528\u6216\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u53EF\u4EE5\u53C2\u8003 "),o("a",{href:"../../../YukiHookAPI#isenablehooksharedpreferences-field"},"isEnableHookSharedPreferences"),s("\u3002")],-1),u=o("p",null,[s("\u672A\u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5C06\u4F60\u7684\u6A21\u5757 "),o("code",null,"API"),s(" \u964D\u81F3 "),o("code",null,"26"),s(" \u4EE5\u4E0B\uFF0C"),o("code",null,"YukiHookAPI"),s(" \u5C06\u4F1A\u5C1D\u8BD5\u4F7F\u7528 "),o("code",null,"makeWorldReadable"),s(" \u4F46\u4ECD\u6709\u53EF\u80FD\u4E0D\u6210\u529F\u3002")],-1),B=s("\u592A\u6781\u8BF7\u53C2\u9605 "),F={href:"https://taichi.cool/zh/doc/for-xposed-dev.html#%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90-%E9%85%8D%E7%BD%AE-xsharedpreference",target:"_blank",rel:"noopener noreferrer"},D=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),C=s("\u3002"),k=a('

    \u7279\u522B\u6CE8\u610F

    \u5F53\u4F60\u5728 Xposed \u6A21\u5757\u4E2D\u5B58\u53D6\u6570\u636E\u7684\u65F6\u5019 context \u5FC5\u987B\u4E0D\u80FD\u662F\u7A7A\u7684\u3002

    \u82E5\u4F60\u6B63\u5728\u4F7F\u7528 PreferenceFragmentCompat\uFF0C\u8BF7\u8FC1\u79FB\u5230 ModulePreferenceFragment \u4EE5\u9002\u914D\u4E0A\u8FF0\u529F\u80FD\u7279\u6027\u3002

    \u53EF\u9009\u914D\u7F6E

    \u82E5\u4F60\u4E0D\u60F3\u5C06\u4F60\u7684\u6A21\u5757\u7684 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\uFF0C\u4F60\u53EF\u4EE5\u5728 AndroidManifest.xml \u4E2D\u6DFB\u52A0 xposedsharedprefs \u6765\u5B9E\u73B0\u652F\u6301\u3002

    ',4),m=s("\u8BE6\u89C1 "),v={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},b=s("New XSharedPreferences"),f=s("\u3002"),x=a(`

    \u793A\u4F8B\u5982\u4E0B

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
    diff --git a/docs/assets/YukiMemberHookCreator.html.d265d63a.js b/docs/assets/YukiMemberHookCreator.html.1b4194a5.js
    similarity index 99%
    rename from docs/assets/YukiMemberHookCreator.html.d265d63a.js
    rename to docs/assets/YukiMemberHookCreator.html.1b4194a5.js
    index e41aed31e..b54082fbf 100644
    --- a/docs/assets/YukiMemberHookCreator.html.d265d63a.js
    +++ b/docs/assets/YukiMemberHookCreator.html.1b4194a5.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as n,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

    YukiMemberHookCreator - class

    class YukiMemberHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookClass: HookClass)
    +import{_ as s,o,c as n,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

    YukiMemberHookCreator - class

    class YukiMemberHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookClass: HookClass)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5BF9 hookClass \u8FDB\u884C inline \u5904\u7406

    v1.1.0 \u4FEE\u6539

    \u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 Creater \u547D\u540D\u5230 Creator

    v1.1.5 \u4FEE\u6539

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u7684 Member \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    PRIORITY_DEFAULT - field

    val PRIORITY_DEFAULT: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u9ED8\u8BA4 Hook \u56DE\u8C03\u4F18\u5148\u7EA7\u3002

    PRIORITY_LOWEST - field

    val PRIORITY_LOWEST: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5EF6\u8FDF\u56DE\u8C03 Hook \u65B9\u6CD5\u7ED3\u679C\u3002

    PRIORITY_HIGHEST - field

    val PRIORITY_HIGHEST: Int
    diff --git a/docs/assets/YukiMemberHookCreator.html.d320e714.js b/docs/assets/YukiMemberHookCreator.html.97050a12.js
    similarity index 99%
    rename from docs/assets/YukiMemberHookCreator.html.d320e714.js
    rename to docs/assets/YukiMemberHookCreator.html.97050a12.js
    index c859aa0e7..11dbc6351 100644
    --- a/docs/assets/YukiMemberHookCreator.html.d320e714.js
    +++ b/docs/assets/YukiMemberHookCreator.html.97050a12.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as n,a as e}from"./app.a3fd8dd4.js";const a={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiMemberHookCreator - class

    class YukiMemberHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookClass: HookClass)
    +import{_ as s,o,c as n,a as e}from"./app.2bc5d8f3.js";const a={},l=e(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiMemberHookCreator - class

    class YukiMemberHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookClass: HookClass)
     

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5BF9 hookClass \u8FDB\u884C inline \u5904\u7406

    v1.1.0 modified

    \u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 Creater \u547D\u540D\u5230 Creator

    v1.1.5 modified

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    Function Illustrate

    YukiHookAPI \u7684 Member \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    PRIORITY_DEFAULT - field

    val PRIORITY_DEFAULT: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u9ED8\u8BA4 Hook \u56DE\u8C03\u4F18\u5148\u7EA7\u3002

    PRIORITY_LOWEST - field

    val PRIORITY_LOWEST: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5EF6\u8FDF\u56DE\u8C03 Hook \u65B9\u6CD5\u7ED3\u679C\u3002

    PRIORITY_HIGHEST - field

    val PRIORITY_HIGHEST: Int
    diff --git a/docs/assets/YukiModuleResources.html.352c99bd.js b/docs/assets/YukiModuleResources.html.0a43c689.js
    similarity index 97%
    rename from docs/assets/YukiModuleResources.html.352c99bd.js
    rename to docs/assets/YukiModuleResources.html.0a43c689.js
    index 23db2bc9e..90810a21a 100644
    --- a/docs/assets/YukiModuleResources.html.352c99bd.js
    +++ b/docs/assets/YukiModuleResources.html.0a43c689.js
    @@ -1,3 +1,3 @@
    -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XModuleResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    fwd - method

    fun fwd(resId: Int): YukiResForwarder
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XModuleResources.fwd \u65B9\u6CD5\u3002

    \u521B\u5EFA YukiResForwarder \u4E0E XResForwarder \u5B9E\u4F8B\u3002

    `,14),c=[l];function t(r,p){return e(),o("div",null,c)}const i=s(n,[["render",t],["__file","YukiModuleResources.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiModuleResources.html.748f40e7.js b/docs/assets/YukiModuleResources.html.1f1ce066.js similarity index 97% rename from docs/assets/YukiModuleResources.html.748f40e7.js rename to docs/assets/YukiModuleResources.html.1f1ce066.js index 9f6ea181f..36d6771c2 100644 --- a/docs/assets/YukiModuleResources.html.748f40e7.js +++ b/docs/assets/YukiModuleResources.html.1f1ce066.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.a3fd8dd4.js";const n={},l=a(`

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
    +import{_ as s,o,c as e,a}from"./app.2bc5d8f3.js";const n={},l=a(`

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XModuleResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    fwd - method

    fun fwd(resId: Int): YukiResForwarder
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XModuleResources.fwd \u65B9\u6CD5\u3002

    \u521B\u5EFA YukiResForwarder \u4E0E XResForwarder \u5B9E\u4F8B\u3002

    `,13),c=[l];function p(r,t){return o(),e("div",null,c)}const u=s(n,[["render",p],["__file","YukiModuleResources.html.vue"]]);export{u as default}; diff --git a/docs/assets/YukiResForwarder.html.21027be7.js b/docs/assets/YukiResForwarder.html.1d498972.js similarity index 98% rename from docs/assets/YukiResForwarder.html.21027be7.js rename to docs/assets/YukiResForwarder.html.1d498972.js index a00f72c25..6c5aca633 100644 --- a/docs/assets/YukiResForwarder.html.21027be7.js +++ b/docs/assets/YukiResForwarder.html.1d498972.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},c=a(`

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},c=a(`

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XResForwarder \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    instance - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    v1.1.0 \u4F5C\u5E9F

    \u4E0D\u518D\u5BF9\u5916\u516C\u5F00 instance \u53C2\u6570

    id - field

    val id: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources Id\u3002

    resources - field

    val resources: Resources
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources\u3002

    `,23),l=[c];function r(p,t){return e(),o("div",null,l)}const i=s(n,[["render",r],["__file","YukiResForwarder.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiResForwarder.html.885164cb.js b/docs/assets/YukiResForwarder.html.fb57132b.js similarity index 98% rename from docs/assets/YukiResForwarder.html.885164cb.js rename to docs/assets/YukiResForwarder.html.fb57132b.js index 54b5d0192..34e34eab5 100644 --- a/docs/assets/YukiResForwarder.html.885164cb.js +++ b/docs/assets/YukiResForwarder.html.fb57132b.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},r=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},r=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XResForwarder \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    instance - field

    Change Records

    v1.0.80 added

    v1.1.0 deprecated

    \u4E0D\u518D\u5BF9\u5916\u516C\u5F00 instance \u53C2\u6570

    id - field

    val id: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources Id\u3002

    resources - field

    val resources: Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources\u3002

    `,24),c=[r];function l(t,p){return e(),o("div",null,c)}const i=s(n,[["render",l],["__file","YukiResForwarder.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiResources.html.ee310877.js b/docs/assets/YukiResources.html.6eec1ea3.js similarity index 99% rename from docs/assets/YukiResources.html.ee310877.js rename to docs/assets/YukiResources.html.6eec1ea3.js index ef48dbcab..d2cf77ee8 100644 --- a/docs/assets/YukiResources.html.ee310877.js +++ b/docs/assets/YukiResources.html.6eec1ea3.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as o,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
    +import{_ as s,o as a,c as o,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    LayoutInflatedParam - class

    class LayoutInflatedParam(internal val baseParam: XC_LayoutInflated.LayoutInflatedParam)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D Hook APP \u7684\u76EE\u6807\u5E03\u5C40 Resources \u5B9E\u73B0\u7C7B\u3002

    variantName - field

    val variantName: String
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D\u88AB Hook \u7684\u5E03\u5C40\u88C5\u8F7D\u76EE\u5F55\u540D\u79F0\u3002

    \u4F8B\u5982\uFF1Alayout\u3001layout-land\u3001layout-sw600dp\u3002

    currentView - field

    val currentView: View
    diff --git a/docs/assets/YukiResources.html.4cfc0e93.js b/docs/assets/YukiResources.html.cc7d79ef.js
    similarity index 99%
    rename from docs/assets/YukiResources.html.4cfc0e93.js
    rename to docs/assets/YukiResources.html.cc7d79ef.js
    index 9f583ea40..1686b9b91 100644
    --- a/docs/assets/YukiResources.html.4cfc0e93.js
    +++ b/docs/assets/YukiResources.html.cc7d79ef.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as o}from"./app.a3fd8dd4.js";const e={},l=o(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
    +import{_ as s,o as a,c as n,a as o}from"./app.2bc5d8f3.js";const e={},l=o(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    LayoutInflatedParam - class

    class LayoutInflatedParam(internal val baseParam: XC_LayoutInflated.LayoutInflatedParam)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u88C5\u8F7D Hook APP \u7684\u76EE\u6807\u5E03\u5C40 Resources \u5B9E\u73B0\u7C7B\u3002

    variantName - field

    val variantName: String
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D\u88AB Hook \u7684\u5E03\u5C40\u88C5\u8F7D\u76EE\u5F55\u540D\u79F0\u3002

    \u4F8B\u5982\uFF1Alayout\u3001layout-land\u3001layout-sw600dp\u3002

    currentView - field

    val currentView: View
    diff --git a/docs/assets/YukiResourcesHookCreator.html.982a55e8.js b/docs/assets/YukiResourcesHookCreator.html.24822774.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.982a55e8.js
    rename to docs/assets/YukiResourcesHookCreator.html.24822774.js
    index 0d709f93f..1ae75e8ad 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.982a55e8.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.24822774.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookResources: HookResources)
    +import{_ as s,o as n,c as e,a}from"./app.2bc5d8f3.js";const o={},l=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookResources: HookResources)
     

    Change Records

    v1.0.80 added

    v1.1.0 modified

    \u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 Creater \u547D\u540D\u5230 Creator

    v1.1.5 modified

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    Function Illustrate

    YukiHookAPI \u7684 Resources \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    injectResource - method

    inline fun injectResource(tag: String, initiate: ResourceHookCreator.() -> Unit): ResourceHookCreator.Result
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u6CE8\u5165\u8981 Hook \u7684 Resources\u3002

    Function Example

    \u4F60\u53EF\u4EE5\u6CE8\u5165\u4EFB\u610F Resources\uFF0C\u4F7F\u7528 injectResource \u5373\u53EF\u521B\u5EFA\u4E00\u4E2A Hook \u5BF9\u8C61\u3002

    The following example

    injectResource {
         // Your code here.
    diff --git a/docs/assets/YukiResourcesHookCreator.html.32321c47.js b/docs/assets/YukiResourcesHookCreator.html.26b7c236.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.32321c47.js
    rename to docs/assets/YukiResourcesHookCreator.html.26b7c236.js
    index 31412e81a..a1b51c430 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.32321c47.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.26b7c236.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as o}from"./app.a3fd8dd4.js";const e={},l=o(`

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookResources: HookResources)
    +import{_ as s,o as n,c as a,a as o}from"./app.2bc5d8f3.js";const e={},l=o(`

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookResources: HookResources)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    v1.1.0 \u4FEE\u6539

    \u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 Creater \u547D\u540D\u5230 Creator

    v1.1.5 \u4FEE\u6539

    \u79C1\u6709\u5316\u6784\u9020\u65B9\u6CD5

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u7684 Resources \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    injectResource - method

    inline fun injectResource(tag: String, initiate: ResourceHookCreator.() -> Unit): ResourceHookCreator.Result
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6CE8\u5165\u8981 Hook \u7684 Resources\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F60\u53EF\u4EE5\u6CE8\u5165\u4EFB\u610F Resources\uFF0C\u4F7F\u7528 injectResource \u5373\u53EF\u521B\u5EFA\u4E00\u4E2A Hook \u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectResource {
         // Your code here.
    diff --git a/docs/assets/YukiXposedEvent.html.b582e0e6.js b/docs/assets/YukiXposedEvent.html.04b564bf.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.b582e0e6.js
    rename to docs/assets/YukiXposedEvent.html.04b564bf.js
    index e744303f1..abd80888d 100644
    --- a/docs/assets/YukiXposedEvent.html.b582e0e6.js
    +++ b/docs/assets/YukiXposedEvent.html.04b564bf.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiXposedEvent - object

    object YukiXposedEvent
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},t=a(`

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiXposedEvent - object

    object YukiXposedEvent
     

    Change Records

    v1.0.80 first

    Function Illustrate

    \u5B9E\u73B0\u5BF9\u539F\u751F Xposed API \u7684\u88C5\u8F7D\u4E8B\u4EF6\u76D1\u542C\u3002

    events - method

    inline fun events(initiate: YukiXposedEvent.() -> Unit)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9 YukiXposedEvent \u521B\u5EFA\u4E00\u4E2A\u65B9\u6CD5\u4F53\u3002

    onInitZygote - method

    fun onInitZygote(result: (StartupParam) -> Unit)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u8BBE\u7F6E initZygote \u4E8B\u4EF6\u76D1\u542C\u3002

    onHandleLoadPackage - method

    fun onHandleLoadPackage(result: (LoadPackageParam) -> Unit)
    diff --git a/docs/assets/YukiXposedEvent.html.74b25a5c.js b/docs/assets/YukiXposedEvent.html.650e86ef.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.74b25a5c.js
    rename to docs/assets/YukiXposedEvent.html.650e86ef.js
    index 9d18c8af5..ea38b361d 100644
    --- a/docs/assets/YukiXposedEvent.html.74b25a5c.js
    +++ b/docs/assets/YukiXposedEvent.html.650e86ef.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.a3fd8dd4.js";const n={},l=e(`

    YukiXposedEvent - object

    object YukiXposedEvent
    +import{_ as s,o,c as a,a as e}from"./app.2bc5d8f3.js";const n={},l=e(`

    YukiXposedEvent - object

    object YukiXposedEvent
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5B9E\u73B0\u5BF9\u539F\u751F Xposed API \u7684\u88C5\u8F7D\u4E8B\u4EF6\u76D1\u542C\u3002

    events - method

    inline fun events(initiate: YukiXposedEvent.() -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9 YukiXposedEvent \u521B\u5EFA\u4E00\u4E2A\u65B9\u6CD5\u4F53\u3002

    onInitZygote - method

    fun onInitZygote(result: (StartupParam) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u8BBE\u7F6E initZygote \u4E8B\u4EF6\u76D1\u542C\u3002

    onHandleLoadPackage - method

    fun onHandleLoadPackage(result: (LoadPackageParam) -> Unit)
    diff --git a/docs/assets/about.html.62cfee9a.js b/docs/assets/about.html.08310c8b.js
    similarity index 98%
    rename from docs/assets/about.html.62cfee9a.js
    rename to docs/assets/about.html.08310c8b.js
    index 7f55988be..63ef9e32b 100644
    --- a/docs/assets/about.html.62cfee9a.js
    +++ b/docs/assets/about.html.08310c8b.js
    @@ -1,4 +1,4 @@
    -import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.a3fd8dd4.js";const i={},r=s("h1",{id:"about-this-document",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#about-this-document","aria-hidden":"true"},"#"),a(" About this Document")],-1),d=a("This document is powered by "),h={href:"https://v2.vuepress.vuejs.org/en",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a("."),u=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),I={href:"https://github.com/fankes/YukiHookAPI/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},E=a("The MIT License (MIT)"),O=p(`
    MIT License
    +import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.2bc5d8f3.js";const i={},r=s("h1",{id:"about-this-document",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#about-this-document","aria-hidden":"true"},"#"),a(" About this Document")],-1),d=a("This document is powered by "),h={href:"https://v2.vuepress.vuejs.org/en",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a("."),u=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),I={href:"https://github.com/fankes/YukiHookAPI/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},E=a("The MIT License (MIT)"),O=p(`
    MIT License
     
     Copyright (C) 2019-2023 HighCapable
     
    diff --git a/docs/assets/about.html.3dd3e473.js b/docs/assets/about.html.6fe1a94b.js
    similarity index 98%
    rename from docs/assets/about.html.3dd3e473.js
    rename to docs/assets/about.html.6fe1a94b.js
    index f9f1b3a7b..dfab7dd22 100644
    --- a/docs/assets/about.html.3dd3e473.js
    +++ b/docs/assets/about.html.6fe1a94b.js
    @@ -1,4 +1,4 @@
    -import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.a3fd8dd4.js";const i={},r=s("h1",{id:"\u5173\u4E8E\u6B64\u6587\u6863",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5173\u4E8E\u6B64\u6587\u6863","aria-hidden":"true"},"#"),a(" \u5173\u4E8E\u6B64\u6587\u6863")],-1),d=a("\u6B64\u6587\u6863\u7531 "),h={href:"https://v2.vuepress.vuejs.org/zh",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a(" \u5F3A\u529B\u9A71\u52A8\u3002"),I=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),E={href:"https://github.com/fankes/YukiHookAPI/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},u=a("The MIT License (MIT)"),O=p(`
    MIT License
    +import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.2bc5d8f3.js";const i={},r=s("h1",{id:"\u5173\u4E8E\u6B64\u6587\u6863",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5173\u4E8E\u6B64\u6587\u6863","aria-hidden":"true"},"#"),a(" \u5173\u4E8E\u6B64\u6587\u6863")],-1),d=a("\u6B64\u6587\u6863\u7531 "),h={href:"https://v2.vuepress.vuejs.org/zh",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a(" \u5F3A\u529B\u9A71\u52A8\u3002"),I=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),E={href:"https://github.com/fankes/YukiHookAPI/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},u=a("The MIT License (MIT)"),O=p(`
    MIT License
     
     Copyright (C) 2019-2023 HighCapable
     
    diff --git a/docs/assets/api-example.html.ed7845ea.js b/docs/assets/api-example.html.29a2e3ae.js
    similarity index 88%
    rename from docs/assets/api-example.html.ed7845ea.js
    rename to docs/assets/api-example.html.29a2e3ae.js
    index d8d0b2b52..e22430fc7 100644
    --- a/docs/assets/api-example.html.ed7845ea.js
    +++ b/docs/assets/api-example.html.29a2e3ae.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-c6114c9e","path":"/zh-cn/config/api-example.html","title":"API \u57FA\u672C\u914D\u7F6E","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u529F\u80FD\u914D\u7F6E","slug":"\u529F\u80FD\u914D\u7F6E","link":"#\u529F\u80FD\u914D\u7F6E","children":[{"level":3,"title":"configs \u65B9\u6CD5","slug":"configs-\u65B9\u6CD5","link":"#configs-\u65B9\u6CD5","children":[]}]},{"level":2,"title":"Hooker \u914D\u7F6E","slug":"hooker-\u914D\u7F6E","link":"#hooker-\u914D\u7F6E","children":[{"level":3,"title":"\u901A\u8FC7 lambda \u521B\u5EFA","slug":"\u901A\u8FC7-lambda-\u521B\u5EFA","link":"#\u901A\u8FC7-lambda-\u521B\u5EFA","children":[]},{"level":3,"title":"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA","slug":"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA","link":"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA","children":[]},{"level":3,"title":"\u6269\u5C55\u7279\u6027","slug":"\u6269\u5C55\u7279\u6027","link":"#\u6269\u5C55\u7279\u6027","children":[]},{"level":3,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]}]},{"level":2,"title":"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","slug":"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","link":"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/config/api-example.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-c6114c9e","path":"/zh-cn/config/api-example.html","title":"API \u57FA\u672C\u914D\u7F6E","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u529F\u80FD\u914D\u7F6E","slug":"\u529F\u80FD\u914D\u7F6E","link":"#\u529F\u80FD\u914D\u7F6E","children":[{"level":3,"title":"configs \u65B9\u6CD5","slug":"configs-\u65B9\u6CD5","link":"#configs-\u65B9\u6CD5","children":[]}]},{"level":2,"title":"Hooker \u914D\u7F6E","slug":"hooker-\u914D\u7F6E","link":"#hooker-\u914D\u7F6E","children":[{"level":3,"title":"\u901A\u8FC7 lambda \u521B\u5EFA","slug":"\u901A\u8FC7-lambda-\u521B\u5EFA","link":"#\u901A\u8FC7-lambda-\u521B\u5EFA","children":[]},{"level":3,"title":"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA","slug":"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA","link":"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA","children":[]},{"level":3,"title":"\u6269\u5C55\u7279\u6027","slug":"\u6269\u5C55\u7279\u6027","link":"#\u6269\u5C55\u7279\u6027","children":[]},{"level":3,"title":"\u6CE8\u610F\u4E8B\u9879","slug":"\u6CE8\u610F\u4E8B\u9879","link":"#\u6CE8\u610F\u4E8B\u9879","children":[]}]},{"level":2,"title":"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","slug":"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","link":"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9","children":[]}],"git":{"updatedTime":1674229979000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"zh-cn/config/api-example.md"}');export{e as data};
    diff --git a/docs/assets/api-example.html.83f18514.js b/docs/assets/api-example.html.703dac3e.js
    similarity index 92%
    rename from docs/assets/api-example.html.83f18514.js
    rename to docs/assets/api-example.html.703dac3e.js
    index c40094fff..e55cd190d 100644
    --- a/docs/assets/api-example.html.83f18514.js
    +++ b/docs/assets/api-example.html.703dac3e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as e}from"./app.a3fd8dd4.js";const o={},l=e(`

    API Basic Configs

    The basic configuration method of YukiHookAPI is introduced here.

    Function Configs

    Either Use as Xposed Module Configs or Use as Hook API Configs, you can specify YukiHookAPI for configuration.

    configs Method

    fun configs(initiate: Configs.() -> Unit)
    +import{_ as s,o as n,c as a,a as e}from"./app.2bc5d8f3.js";const o={},l=e(`

    API Basic Configs

    The basic configuration method of YukiHookAPI is introduced here.

    Function Configs

    Either Use as Xposed Module Configs or Use as Hook API Configs, you can specify YukiHookAPI for configuration.

    configs Method

    fun configs(initiate: Configs.() -> Unit)
     

    The configs method implements a lambda method body on the Configs class, which you can easily call for configuration.

    Tips

    For more functions, please refer to the YukiHookAPI.configs method.

    Hooker Configs

    The most important part of an Xposed Module or Hook API is the creation and use of Hooker. YukiHookAPI provides two ways to use it.

    Created by lambda

    This solution is the simplest. If your module has few functions and a small amount of code, and does not need to be classified, it is recommended to create it in this way.

    encase Method

    fun encase(initiate: PackageParam.() -> Unit)
     

    The encase method is the beginning of all Hook life. In a Module App or a Hook process, the encase method can only be used once to create a Hooker.

    PackageParam is an important instance object of the Host App, and PackageParam is used to implement all Hook operations on the current Hook object.

    Tips

    For more functions, please refer to PackageParam.

    The encase method can be created in the onHook method using two schemes.

    Sample Code 1

    YukiHookAPI.encase {
         loadApp(name = "com.example.demo") {
    @@ -21,7 +21,7 @@ import{_ as s,o as n,c as a,a as e}from"./app.a3fd8dd4.js";const o={},l=e(`

    // Your code here. } } -

    Child Hooker recommended singleton object creation, you can also use class but not recommended.

    Notice

    You don't need to re-call encase in the onHook method extends YukiBaseHooker, this is wrong and will not take effect, you should start writing your Hook code directly .

    The following example

    object CustomHooker : YukiBaseHooker() {
    +

    Child Hooker recommended to use singleton object to create, you can also use class but it is generally not recommended.

    Notice

    You don't need to re-call encase in the onHook method extends YukiBaseHooker, this is wrong and will not take effect, you should start writing your Hook code directly .

    The following example

    object CustomHooker : YukiBaseHooker() {
     
         override fun onHook() {
             loadApp(name = "com.example.demo1") {
    @@ -70,6 +70,13 @@ import{_ as s,o as n,c as a,a as e}from"./app.a3fd8dd4.js";const o={},l=e(`

    override fun onHook() = encase(FirstHooker, SecondHooker, ThirdHooker ...) } +

    Special Case

    As we mentioned above, it is generally not recommended to use class to create child Hookers, but there is a special case where it may still be necessary to keep your Hooker supporting multiple instantiations.

    There is a rare possibility that there are multiple package names in a process.

    In this case, when YukiHookAPI finds that the child Hooker is a singleton, it will ignore it and print a warning message.

    This Hooker "HOOKER" is singleton or reused, but the current process has multiple package name "NAME", the original is "NAME"
    +Make sure your Hooker supports multiple instances for this situation
    +The process with package name "NAME" will be ignored
    +

    In this case, we only need to modify object to class or determine the package name during loading and then load the child Hooker.

    For example, in the above cases, the following forms can be used to load.

    The following example

    encase {
    +    // Assume this is the app package name and child Hooker you need to load
    +    loadApp("com.example.demo", YourCustomHooker)
    +}
     

    Expansion Features

    If your current Hook Framework supports and enables the Resources Hook feature, you can now create Resources Hooks directly in encase.

    You don't need to separate the initZygote, handleLoadPackage, handleInitPackageResources methods to perform different functions as before using the Xposed API.

    In YukiHookAPI, these functions are seamless.

    The following example

    encase {
         loadApp(name = "com.example.demo") {
             findClass(name = "$packageName.DemoClass").hook {
    @@ -179,4 +186,4 @@ import{_ as s,o as n,c as a,a as e}from"./app.a3fd8dd4.js";const o={},l=e(`

    }

    Precautions when using as Hook API

    If you are using it as a Hook API, then you only need to differentiate the encase method at the entry point.

    Notice

    The encase method provides two identical methods for use as a Hook API, but with only one more parameter baseContext than the previous two.

    Method 1

    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     

    Method 2

    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
    -

    The baseContext here only needs to fill in the Context you got at attachBaseContext, and other usages are exactly the same as the above.

    Pay Attention

    Never use the encase method in an Xposed way without omitting the baseContext parameter, this will lead to your Hook not work at all.

    The Resources Hook feature is not supported as Hook API.

    `,82),p=[l];function c(i,r){return n(),a("div",null,p)}const d=s(o,[["render",c],["__file","api-example.html.vue"]]);export{d as default}; +

    The baseContext here only needs to fill in the Context you got at attachBaseContext, and other usages are exactly the same as the above.

    Pay Attention

    Never use the encase method in an Xposed way without omitting the baseContext parameter, this will lead to your Hook not work at all.

    The Resources Hook feature is not supported as Hook API.

    `,91),p=[l];function c(i,r){return n(),a("div",null,p)}const d=s(o,[["render",c],["__file","api-example.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-example.html.a8d0e1b2.js b/docs/assets/api-example.html.c60371a6.js similarity index 89% rename from docs/assets/api-example.html.a8d0e1b2.js rename to docs/assets/api-example.html.c60371a6.js index 15a50b9cf..0c9837492 100644 --- a/docs/assets/api-example.html.a8d0e1b2.js +++ b/docs/assets/api-example.html.c60371a6.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-9cfea7fc","path":"/en/config/api-example.html","title":"API Basic Configs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Function Configs","slug":"function-configs","link":"#function-configs","children":[{"level":3,"title":"configs Method","slug":"configs-method","link":"#configs-method","children":[]}]},{"level":2,"title":"Hooker Configs","slug":"hooker-configs","link":"#hooker-configs","children":[{"level":3,"title":"Created by lambda","slug":"created-by-lambda","link":"#created-by-lambda","children":[]},{"level":3,"title":"Created by Custom Hooker","slug":"created-by-custom-hooker","link":"#created-by-custom-hooker","children":[]},{"level":3,"title":"Expansion Features","slug":"expansion-features","link":"#expansion-features","children":[]},{"level":3,"title":"Precautions","slug":"precautions","link":"#precautions","children":[]}]},{"level":2,"title":"Precautions when using as Hook API","slug":"precautions-when-using-as-hook-api","link":"#precautions-when-using-as-hook-api","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"en/config/api-example.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-9cfea7fc","path":"/en/config/api-example.html","title":"API Basic Configs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Function Configs","slug":"function-configs","link":"#function-configs","children":[{"level":3,"title":"configs Method","slug":"configs-method","link":"#configs-method","children":[]}]},{"level":2,"title":"Hooker Configs","slug":"hooker-configs","link":"#hooker-configs","children":[{"level":3,"title":"Created by lambda","slug":"created-by-lambda","link":"#created-by-lambda","children":[]},{"level":3,"title":"Created by Custom Hooker","slug":"created-by-custom-hooker","link":"#created-by-custom-hooker","children":[]},{"level":3,"title":"Expansion Features","slug":"expansion-features","link":"#expansion-features","children":[]},{"level":3,"title":"Precautions","slug":"precautions","link":"#precautions","children":[]}]},{"level":2,"title":"Precautions when using as Hook API","slug":"precautions-when-using-as-hook-api","link":"#precautions-when-using-as-hook-api","children":[]}],"git":{"updatedTime":1674229979000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/config/api-example.md"}');export{e as data}; diff --git a/docs/assets/api-example.html.bab7ddb3.js b/docs/assets/api-example.html.c63fa1bc.js similarity index 92% rename from docs/assets/api-example.html.bab7ddb3.js rename to docs/assets/api-example.html.c63fa1bc.js index da664d714..be2ef3df1 100644 --- a/docs/assets/api-example.html.bab7ddb3.js +++ b/docs/assets/api-example.html.c63fa1bc.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

    API \u57FA\u672C\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u7684\u57FA\u672C\u914D\u7F6E\u65B9\u6CD5\u3002

    \u529F\u80FD\u914D\u7F6E

    \u65E0\u8BBA\u662F \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528 \u8FD8\u662F \u4F5C\u4E3A Hook API \u4F7F\u7528\uFF0C\u4F60\u90FD\u53EF\u4EE5\u5728 API \u88C5\u8F7D\u4E4B\u524D\u6216\u88C5\u8F7D\u8FC7\u7A0B\u4E2D\u5BF9 YukiHookAPI \u8FDB\u884C\u914D\u7F6E\u3002

    configs \u65B9\u6CD5

    fun configs(initiate: Configs.() -> Unit)
    +import{_ as s,o as n,c as a,a as l}from"./app.2bc5d8f3.js";const e={},o=l(`

    API \u57FA\u672C\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u7684\u57FA\u672C\u914D\u7F6E\u65B9\u6CD5\u3002

    \u529F\u80FD\u914D\u7F6E

    \u65E0\u8BBA\u662F \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528 \u8FD8\u662F \u4F5C\u4E3A Hook API \u4F7F\u7528\uFF0C\u4F60\u90FD\u53EF\u4EE5\u5728 API \u88C5\u8F7D\u4E4B\u524D\u6216\u88C5\u8F7D\u8FC7\u7A0B\u4E2D\u5BF9 YukiHookAPI \u8FDB\u884C\u914D\u7F6E\u3002

    configs \u65B9\u6CD5

    fun configs(initiate: Configs.() -> Unit)
     

    configs \u65B9\u6CD5\u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\uFF0C\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 YukiHookAPI.configs \u65B9\u6CD5\u3002

    Hooker \u914D\u7F6E

    \u4E00\u4E2A Xposed \u6A21\u5757\u6216 Hook API \u6700\u91CD\u8981\u7684\u5730\u65B9\u5C31\u662F Hooker \u7684\u521B\u5EFA\u4E0E\u4F7F\u7528\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86\u4E24\u79CD\u4F7F\u7528\u65B9\u6CD5\u3002

    \u901A\u8FC7 lambda \u521B\u5EFA

    \u8FD9\u79CD\u65B9\u6848\u662F\u6700\u7B80\u5355\u7684\uFF0C\u5982\u679C\u4F60\u7684\u6A21\u5757\u529F\u80FD\u4E0D\u591A\uFF0C\u4EE3\u7801\u6570\u91CF\u4E0D\u5927\uFF0C\u4E0D\u9700\u8981\u8FDB\u884C\u5206\u7C7B\u5904\u7406\uFF0C\u63A8\u8350\u4F7F\u7528\u8FD9\u79CD\u65B9\u5F0F\u8FDB\u884C\u521B\u5EFA\u3002

    encase \u65B9\u6CD5

    fun encase(initiate: PackageParam.() -> Unit)
     

    encase \u65B9\u6CD5\u662F Hook \u4E00\u5207\u751F\u547D\u7684\u5F00\u59CB\uFF0C\u5728\u4E00\u4E2A\u6A21\u5757\u6216\u4E00\u4E2A Hook \u8FC7\u7A0B\u4E2D\uFF0Cencase \u65B9\u6CD5\u53EA\u80FD\u4F5C\u7528\u4E00\u6B21\uFF0C\u7528\u4E8E\u521B\u5EFA Hooker\u3002

    PackageParam \u4E3A\u5BBF\u4E3B(\u76EE\u6807 APP)\u7684\u91CD\u8981\u5B9E\u4F8B\u5BF9\u8C61\uFF0C\u901A\u8FC7 PackageParam \u6765\u5B9E\u73B0\u5BF9\u5F53\u524D Hook \u4F5C\u7528\u5BF9\u8C61\u7684\u5168\u90E8 Hook \u64CD\u4F5C\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 PackageParam\u3002

    encase \u65B9\u6CD5\u53EF\u4EE5\u5728 onHook \u65B9\u6CD5\u4E2D\u4F7F\u7528\u4E24\u79CD\u65B9\u6848\u521B\u5EFA\u3002

    \u793A\u4F8B\u4EE3\u7801 1

    YukiHookAPI.encase {
         loadApp(name = "com.example.demo") {
    @@ -21,7 +21,7 @@ import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

    // Your code here. } } -

    \u5B50 Hooker \u5EFA\u8BAE\u4F7F\u7528\u5355\u4F8B object \u521B\u5EFA\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u4F7F\u7528 class \u4F46\u4E0D\u63A8\u8350\u3002

    \u6CE8\u610F

    \u4F60\u65E0\u9700\u518D\u5728\u7EE7\u627F\u4E8E YukiBaseHooker \u7684 onHook \u65B9\u6CD5\u4E2D\u91CD\u65B0\u8C03\u7528 encase\uFF0C\u8FD9\u662F\u9519\u8BEF\u7684\uFF0C\u4E14\u4E0D\u4F1A\u751F\u6548\uFF0C\u4F60\u5E94\u8BE5\u76F4\u63A5\u5F00\u59CB\u7F16\u5199\u4F60\u7684 Hook \u4EE3\u7801\u3002

    \u793A\u4F8B\u5982\u4E0B

    object CustomHooker : YukiBaseHooker() {
    +

    \u5B50 Hooker \u5EFA\u8BAE\u4F7F\u7528\u5355\u4F8B object \u521B\u5EFA\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u4F7F\u7528 class \u4F46\u4E00\u822C\u60C5\u51B5\u4E0B\u4E0D\u63A8\u8350\u3002

    \u6CE8\u610F

    \u4F60\u65E0\u9700\u518D\u5728\u7EE7\u627F\u4E8E YukiBaseHooker \u7684 onHook \u65B9\u6CD5\u4E2D\u91CD\u65B0\u8C03\u7528 encase\uFF0C\u8FD9\u662F\u9519\u8BEF\u7684\uFF0C\u4E14\u4E0D\u4F1A\u751F\u6548\uFF0C\u4F60\u5E94\u8BE5\u76F4\u63A5\u5F00\u59CB\u7F16\u5199\u4F60\u7684 Hook \u4EE3\u7801\u3002

    \u793A\u4F8B\u5982\u4E0B

    object CustomHooker : YukiBaseHooker() {
     
         override fun onHook() {
             loadApp(name = "com.example.demo1") {
    @@ -70,6 +70,13 @@ import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

    override fun onHook() = encase(FirstHooker, SecondHooker, ThirdHooker ...) } +

    \u7279\u6B8A\u60C5\u51B5

    \u4E0A\u9762\u6211\u4EEC\u8BF4\u5230\uFF0C\u5728\u4E00\u822C\u60C5\u51B5\u4E0B\u4E0D\u63A8\u8350\u4F7F\u7528 class \u521B\u5EFA\u5B50 Hooker\uFF0C\u4F46\u662F\u6709\u4E00\u79CD\u7279\u6B8A\u60C5\u51B5\uFF0C\u5B83\u53EF\u80FD\u4F9D\u7136\u9700\u8981\u4FDD\u6301\u4F60\u7684 Hooker \u652F\u6301\u591A\u4F8B\u3002

    \u6709\u6781\u5C11\u7684\u53EF\u80FD\u6027\u4F1A\u51FA\u73B0\u5728\u4E00\u4E2A\u8FDB\u7A0B\u4E2D\u5B58\u5728\u591A\u4E2A\u5305\u540D\u7684\u60C5\u51B5\uFF0C\u8FD9\u79CD\u60C5\u51B5\u4E0B\uFF0CYukiHookAPI \u53D1\u73B0\u5B50 Hooker \u4E3A\u5355\u4F8B\u65F6\uFF0C\u5C06\u4F1A\u5FFD\u7565\u5E76\u6253\u5370\u4E00\u6761\u8B66\u544A\u4FE1\u606F\u3002

    This Hooker "HOOKER" is singleton or reused, but the current process has multiple package name "NAME", the original is "NAME"
    +Make sure your Hooker supports multiple instances for this situation
    +The process with package name "NAME" will be ignored
    +

    \u9047\u5230\u8FD9\u79CD\u60C5\u51B5\u65F6\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u4FEE\u6539 object \u4E3A class \u6216\u8005\u5728\u88C5\u8F7D\u65F6\u5224\u65AD\u5305\u540D\u540E\u518D\u88C5\u8F7D\u5B50 Hooker\u3002

    \u4F8B\u5982\u4EE5\u4E0A\u60C5\u51B5\u4E2D\u53EF\u4F7F\u7528\u4EE5\u4E0B\u5F62\u5F0F\u6765\u88C5\u8F7D\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
    +    // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u9700\u8981\u88C5\u8F7D\u7684 APP \u5305\u540D\u548C\u5B50 Hooker
    +    loadApp("com.example.demo", YourCustomHooker)
    +}
     

    \u6269\u5C55\u7279\u6027

    \u5982\u679C\u4F60\u5F53\u524D\u4F7F\u7528\u7684 Hook Framework \u652F\u6301\u5E76\u542F\u7528\u4E86\u8D44\u6E90\u94A9\u5B50(Resources Hook)\u529F\u80FD\uFF0C\u4F60\u73B0\u5728\u53EF\u4EE5\u76F4\u63A5\u5728 encase \u4E2D\u521B\u5EFA Resources Hook\u3002

    \u4F60\u5B8C\u5168\u4E0D\u9700\u8981\u4E0E\u4E4B\u524D\u5728\u4F7F\u7528 Xposed API \u90A3\u6837\u533A\u5206 initZygote\u3001handleLoadPackage\u3001handleInitPackageResources \u65B9\u6CD5\u6765\u6267\u884C\u4E0D\u540C\u7684\u529F\u80FD\u3002

    \u5728 YukiHookAPI \u4E2D\uFF0C\u8FD9\u4E9B\u529F\u80FD\u662F\u65E0\u7F1D\u7684\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
         loadApp(name = "com.example.demo") {
             findClass(name = "$packageName.DemoClass").hook { 
    @@ -177,4 +184,4 @@ import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

    }

    \u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9

    \u82E5\u4F60\u4F5C\u4E3A Hook API \u4F7F\u7528\uFF0C\u90A3\u4E48\u4F60\u53EA\u9700\u8981\u5728\u5165\u53E3\u5904\u5BF9 encase \u65B9\u6CD5\u8FDB\u884C\u533A\u5206\u3002

    \u6CE8\u610F

    encase \u65B9\u6CD5\u5BF9\u4F5C\u4E3A Hook API \u4F7F\u7528\u63D0\u4F9B\u4E86\u4E24\u4E2A\u5B8C\u5168\u4E00\u6837\u7684\u65B9\u6CD5\uFF0C\u4F46\u662F\u6BD4\u524D\u4E24\u8005\u4EC5\u591A\u51FA\u4E00\u4E2A\u53C2\u6570 baseContext\u3002

    \u65B9\u6CD5 1

    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     

    \u65B9\u6CD5 2

    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
    -

    \u6B64\u5904\u7684 baseContext \u53EA\u9700\u586B\u5165\u4F60\u5728 attachBaseContext \u5904\u5F97\u5230\u7684 Context \u5373\u53EF\uFF0C\u5176\u5B83\u7528\u6CD5\u4E0E\u4E0A\u8FF0\u5185\u5BB9\u5B8C\u5168\u4E00\u81F4\u3002

    \u7279\u522B\u6CE8\u610F

    \u5207\u52FF\u4EE5 Xposed \u65B9\u5F0F\u4F7F\u7528 encase \u65B9\u6CD5\u800C\u6F0F\u6389 baseContext \u53C2\u6570\uFF0C\u5426\u5219\u4F60\u7684 Hook \u5C06\u5B8C\u5168\u4E0D\u5DE5\u4F5C\u3002

    Resources Hook \u529F\u80FD\u4E0D\u652F\u6301\u4F5C\u4E3A Hook API \u4F7F\u7528\u3002

    `,82),p=[o];function c(i,r){return n(),a("div",null,p)}const d=s(e,[["render",c],["__file","api-example.html.vue"]]);export{d as default}; +

    \u6B64\u5904\u7684 baseContext \u53EA\u9700\u586B\u5165\u4F60\u5728 attachBaseContext \u5904\u5F97\u5230\u7684 Context \u5373\u53EF\uFF0C\u5176\u5B83\u7528\u6CD5\u4E0E\u4E0A\u8FF0\u5185\u5BB9\u5B8C\u5168\u4E00\u81F4\u3002

    \u7279\u522B\u6CE8\u610F

    \u5207\u52FF\u4EE5 Xposed \u65B9\u5F0F\u4F7F\u7528 encase \u65B9\u6CD5\u800C\u6F0F\u6389 baseContext \u53C2\u6570\uFF0C\u5426\u5219\u4F60\u7684 Hook \u5C06\u5B8C\u5168\u4E0D\u5DE5\u4F5C\u3002

    Resources Hook \u529F\u80FD\u4E0D\u652F\u6301\u4F5C\u4E3A Hook API \u4F7F\u7528\u3002

    `,90),p=[o];function c(i,r){return n(),a("div",null,p)}const d=s(e,[["render",c],["__file","api-example.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-exception.html.44fcd1be.js b/docs/assets/api-exception.html.114387df.js similarity index 79% rename from docs/assets/api-exception.html.44fcd1be.js rename to docs/assets/api-exception.html.114387df.js index 507b8de20..eddebe5b4 100644 --- a/docs/assets/api-exception.html.44fcd1be.js +++ b/docs/assets/api-exception.html.114387df.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-72c12b7d","path":"/en/config/api-exception.html","title":"API Exception Handling","lang":"en-US","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"Non-Blocking Exceptions","slug":"non-blocking-exceptions","link":"#non-blocking-exceptions","children":[]},{"level":2,"title":"Blocking Exceptions","slug":"blocking-exceptions","link":"#blocking-exceptions","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":16}]},"filePathRelative":"en/config/api-exception.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-72c12b7d","path":"/en/config/api-exception.html","title":"API Exception Handling","lang":"en-US","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"Non-Blocking Exceptions","slug":"non-blocking-exceptions","link":"#non-blocking-exceptions","children":[]},{"level":2,"title":"Blocking Exceptions","slug":"blocking-exceptions","link":"#blocking-exceptions","children":[]}],"git":{"updatedTime":1674230841000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":17}]},"filePathRelative":"en/config/api-exception.md"}');export{e as data}; diff --git a/docs/assets/api-exception.html.2541368f.js b/docs/assets/api-exception.html.1d6d3f63.js similarity index 96% rename from docs/assets/api-exception.html.2541368f.js rename to docs/assets/api-exception.html.1d6d3f63.js index 733c32516..9f3ca4686 100644 --- a/docs/assets/api-exception.html.2541368f.js +++ b/docs/assets/api-exception.html.1d6d3f63.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as e,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    API \u5F02\u5E38\u5904\u7406

    \u5F02\u5E38\u662F\u5728\u5F00\u53D1\u8FC7\u7A0B\u7ECF\u5E38\u9047\u5230\u7684\u4E3B\u8981\u95EE\u9898\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u9047\u5230\u7684\u5E38\u89C1\u5F02\u5E38\u4EE5\u53CA\u5904\u7406\u65B9\u5F0F\u3002

    \u8FD9\u91CC\u7684\u5F02\u5E38\u8BF4\u660E\u53EA\u4F1A\u540C\u6B65\u6700\u65B0\u7684 API \u7248\u672C\uFF0C\u8F83\u65E7\u7684 API \u7248\u672C\u7684\u5F02\u5E38\u5C06\u4E0D\u4F1A\u518D\u8FDB\u884C\u8BF4\u660E\uFF0C\u8BF7\u59CB\u7EC8\u4FDD\u6301 API \u7248\u672C\u4E3A\u6700\u65B0\u3002

    \u975E\u963B\u65AD\u5F02\u5E38

    \u8FD9\u4E9B\u5F02\u5E38\u4E0D\u4F1A\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C(FC)\uFF0C\u4F46\u662F\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370 E \u7EA7\u522B\u7684\u65E5\u5FD7\uFF0C\u4E5F\u53EF\u80FD\u4F1A\u505C\u6B62\u7EE7\u7EED\u6267\u884C\u76F8\u5173\u529F\u80FD\u3002

    exception

    loggerE

    Could not found any available Hook APIs in current environment! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D\u5F53\u524D Hook API\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60\u5728\u6B63\u786E\u7684\u5730\u65B9\u88C5\u8F7D\u4E86 YukiHookAPI \u7684 encase \u65B9\u6CD5\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E \u4EE5\u53CA \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u3002

    exception

    loggerE

    You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u5C1D\u8BD5\u5728\u7EE7\u627F IYukiHookXposedInit \u7684 Hook \u5165\u53E3\u7C7B\u7684 onInit \u6216 onXposedEvent \u65B9\u6CD5\u4E2D\u88C5\u8F7D\u4E86 encase \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    object HookEntry : IYukiHookXposedInit {
    +import{_ as s,o as n,c as e,a}from"./app.2bc5d8f3.js";const o={},l=a(`

    API \u5F02\u5E38\u5904\u7406

    \u5F02\u5E38\u662F\u5728\u5F00\u53D1\u8FC7\u7A0B\u7ECF\u5E38\u9047\u5230\u7684\u4E3B\u8981\u95EE\u9898\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u9047\u5230\u7684\u5E38\u89C1\u5F02\u5E38\u4EE5\u53CA\u5904\u7406\u65B9\u5F0F\u3002

    \u8FD9\u91CC\u7684\u5F02\u5E38\u8BF4\u660E\u53EA\u4F1A\u540C\u6B65\u6700\u65B0\u7684 API \u7248\u672C\uFF0C\u8F83\u65E7\u7684 API \u7248\u672C\u7684\u5F02\u5E38\u5C06\u4E0D\u4F1A\u518D\u8FDB\u884C\u8BF4\u660E\uFF0C\u8BF7\u59CB\u7EC8\u4FDD\u6301 API \u7248\u672C\u4E3A\u6700\u65B0\u3002

    \u975E\u963B\u65AD\u5F02\u5E38

    \u8FD9\u4E9B\u5F02\u5E38\u4E0D\u4F1A\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C(FC)\uFF0C\u4F46\u662F\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370 E \u7EA7\u522B\u7684\u65E5\u5FD7\uFF0C\u4E5F\u53EF\u80FD\u4F1A\u505C\u6B62\u7EE7\u7EED\u6267\u884C\u76F8\u5173\u529F\u80FD\u3002

    exception

    loggerE

    Could not found any available Hook APIs in current environment! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D\u5F53\u524D Hook API\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60\u5728\u6B63\u786E\u7684\u5730\u65B9\u88C5\u8F7D\u4E86 YukiHookAPI \u7684 encase \u65B9\u6CD5\uFF0C\u8BE6\u60C5\u8BF7\u53C2\u8003 \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E \u4EE5\u53CA \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u3002

    exception

    loggerE

    You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u5C1D\u8BD5\u5728\u7EE7\u627F IYukiHookXposedInit \u7684 Hook \u5165\u53E3\u7C7B\u7684 onInit \u6216 onXposedEvent \u65B9\u6CD5\u4E2D\u88C5\u8F7D\u4E86 encase \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             // \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5
    @@ -34,7 +34,7 @@ import{_ as s,o as n,c as e,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    } } } -

    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u88C5\u8F7D Xposed \u5165\u53E3\u65B9\u6CD5\u65F6\u53D1\u751F\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u662F\u4E00\u4E2A\u5F02\u5E38\u6C47\u603B\uFF0C\u5982\u679C\u4F60\u5F53\u524D\u7684 Hook \u8FDB\u7A0B\u4E2D\u53D1\u751F\u4E86\u4EFB\u4F55\u5F02\u5E38 (Hook \u8FDB\u7A0B\u5D29\u6E83)\uFF0C\u90FD\u4F1A\u4F7F\u7528\u6B64\u65B9\u5F0F\u6253\u5370\u5230\u63A7\u5236\u53F0\uFF0C\u8BF7\u8FFD\u6EAF\u5F02\u5E38\u53D1\u751F\u7684\u5806\u6808\u4EE5\u5B9A\u4F4D\u4F60\u7684\u4EE3\u7801\u95EE\u9898\u4F4D\u7F6E\u3002

    exception

    loggerE

    An exception occurred when hooking internal function

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u8FDB\u884C\u81EA\u8EAB\u521D\u59CB\u5316 Hook \u8FC7\u7A0B\u4E2D\u53D1\u751F\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u53EF\u76F4\u63A5\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    YukiHookAPI try to load HookEntryClass failed

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u88C5\u8F7D Hook \u5165\u53E3\u7C7B onInit \u6216 onHook \u65B9\u6CD5\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u6216\u627E\u4E0D\u5230\u5165\u53E3\u7C7B\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u4F7F\u7528 Xposed \u539F\u751F\u63A5\u53E3\u88C5\u8F7D Xposed \u6A21\u5757\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u8FDB\u884C Resources Hook \u65F6\u53D1\u751F\u9519\u8BEF\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u4ED4\u7EC6\u68C0\u67E5\u9519\u8BEF\u65E5\u5FD7\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002

    \u82E5\u53D1\u751F Resources$NotFoundException \u5219\u53EF\u80FD\u4E3A\u4F60\u67E5\u627E\u7684 Resources Id \u4E0D\u6B63\u786E\u3002

    \u82E5\u53D1\u751F ClassNotFound \u6216 NoClassDefFoundError \u53EF\u80FD\u662F Hook Framework \u4E0D\u652F\u6301 Resources Hook(\u8D44\u6E90\u94A9\u5B50)\u3002

    exception

    loggerE

    HookClass [NAME] not found

    \u5F02\u5E38\u539F\u56E0

    \u5F53\u524D\u88AB Hook \u7684 Class \u6CA1\u6709\u88AB\u627E\u5230\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u68C0\u67E5\u76EE\u6807 Class \u662F\u5426\u5B58\u5728\uFF0C\u82E5\u60F3\u5FFD\u7565\u6B64\u9519\u8BEF\u8BF7\u4F7F\u7528 ignoredHookClassNotFoundFailure \u65B9\u6CD5\u3002

    exception

    loggerE

    Hook Member [NAME] failed

    \u5F02\u5E38\u539F\u56E0

    Hook \u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u53D1\u751F\u9519\u8BEF\u3002

    \u89E3\u51B3\u65B9\u6848

    \u6B64\u95EE\u9898\u901A\u5E38\u7531 Hook Framework \u4EA7\u751F\uFF0C\u8BF7\u68C0\u67E5\u5BF9\u5E94\u7684\u65E5\u5FD7\u5185\u5BB9\uFF0C\u82E5\u95EE\u9898\u6301\u7EED\u51FA\u73B0\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    \u5F02\u5E38\u539F\u56E0

    \u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member \u4E3A null \u4E14\u5DF2\u7ECF\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u68C0\u67E5\u6B64\u9519\u8BEF\u53D1\u751F\u524D\u7684\u4E0A\u4E00\u4E2A\u9519\u8BEF\u65E5\u5FD7\uFF0C\u6216\u8BB8\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65F6\u5019\u53D1\u751F\u4E86\u627E\u4E0D\u5230\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u9519\u8BEF\u3002

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    \u5F02\u5E38\u539F\u56E0

    \u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member \u4E3A null \u4E14\u6CA1\u6709\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u88C5\u8F7D Xposed \u5165\u53E3\u65B9\u6CD5\u65F6\u53D1\u751F\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u662F\u4E00\u4E2A\u5F02\u5E38\u6C47\u603B\uFF0C\u5982\u679C\u4F60\u5F53\u524D\u7684 Hook \u8FDB\u7A0B\u4E2D\u53D1\u751F\u4E86\u4EFB\u4F55\u5F02\u5E38 (Hook \u8FDB\u7A0B\u5D29\u6E83)\uFF0C\u90FD\u4F1A\u4F7F\u7528\u6B64\u65B9\u5F0F\u6253\u5370\u5230\u63A7\u5236\u53F0\uFF0C\u8BF7\u8FFD\u6EAF\u5F02\u5E38\u53D1\u751F\u7684\u5806\u6808\u4EE5\u5B9A\u4F4D\u4F60\u7684\u4EE3\u7801\u95EE\u9898\u4F4D\u7F6E\u3002

    exception

    loggerE

    An exception occurred when hooking internal function

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u8FDB\u884C\u81EA\u8EAB\u521D\u59CB\u5316 Hook \u8FC7\u7A0B\u4E2D\u53D1\u751F\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u53EF\u76F4\u63A5\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    YukiHookAPI try to load hook entry class failed

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u88C5\u8F7D Hook \u5165\u53E3\u7C7B onInit \u6216 onHook \u65B9\u6CD5\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u6216\u627E\u4E0D\u5230\u5165\u53E3\u7C7B\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u4F7F\u7528 Xposed \u539F\u751F\u63A5\u53E3\u88C5\u8F7D Xposed \u6A21\u5757\u65F6\u53D1\u751F\u4E86\u4E0D\u80FD\u5904\u7406\u7684\u5F02\u5E38\u3002

    \u89E3\u51B3\u65B9\u6848

    \u901A\u5E38\u60C5\u51B5\u4E0B\u8FD9\u79CD\u9519\u8BEF\u4E0D\u4F1A\u8F7B\u6613\u53D1\u751F\uFF0C\u82E5\u4E00\u65E6\u53D1\u751F\u6B64\u9519\u8BEF\uFF0C\u8BF7\u81EA\u884C\u67E5\u770B\u63A7\u5236\u53F0\u6253\u5370\u7684\u65E5\u5FD7\u5B9A\u4F4D\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u5728\u5C1D\u8BD5\u8FDB\u884C Resources Hook \u65F6\u53D1\u751F\u9519\u8BEF\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u4ED4\u7EC6\u68C0\u67E5\u9519\u8BEF\u65E5\u5FD7\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002

    \u82E5\u53D1\u751F Resources$NotFoundException \u5219\u53EF\u80FD\u4E3A\u4F60\u67E5\u627E\u7684 Resources Id \u4E0D\u6B63\u786E\u3002

    \u82E5\u53D1\u751F ClassNotFound \u6216 NoClassDefFoundError \u53EF\u80FD\u662F Hook Framework \u4E0D\u652F\u6301 Resources Hook(\u8D44\u6E90\u94A9\u5B50)\u3002

    exception

    loggerE

    HookClass [NAME] not found

    \u5F02\u5E38\u539F\u56E0

    \u5F53\u524D\u88AB Hook \u7684 Class \u6CA1\u6709\u88AB\u627E\u5230\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u68C0\u67E5\u76EE\u6807 Class \u662F\u5426\u5B58\u5728\uFF0C\u82E5\u60F3\u5FFD\u7565\u6B64\u9519\u8BEF\u8BF7\u4F7F\u7528 ignoredHookClassNotFoundFailure \u65B9\u6CD5\u3002

    exception

    loggerE

    Hook Member [NAME] failed

    \u5F02\u5E38\u539F\u56E0

    Hook \u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u53D1\u751F\u9519\u8BEF\u3002

    \u89E3\u51B3\u65B9\u6848

    \u6B64\u95EE\u9898\u901A\u5E38\u7531 Hook Framework \u4EA7\u751F\uFF0C\u8BF7\u68C0\u67E5\u5BF9\u5E94\u7684\u65E5\u5FD7\u5185\u5BB9\uFF0C\u82E5\u95EE\u9898\u6301\u7EED\u51FA\u73B0\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    \u5F02\u5E38\u539F\u56E0

    \u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member \u4E3A null \u4E14\u5DF2\u7ECF\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u68C0\u67E5\u6B64\u9519\u8BEF\u53D1\u751F\u524D\u7684\u4E0A\u4E00\u4E2A\u9519\u8BEF\u65E5\u5FD7\uFF0C\u6216\u8BB8\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65F6\u5019\u53D1\u751F\u4E86\u627E\u4E0D\u5230\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u9519\u8BEF\u3002

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    \u5F02\u5E38\u539F\u56E0

    \u5728 Hook \u6267\u884C\u540E\u88AB Hook \u7684 member \u4E3A null \u4E14\u6CA1\u6709\u8BBE\u7F6E\u76EE\u6807 Hook \u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // \u8FD9\u91CC\u5E76\u6CA1\u6709\u8BBE\u7F6E\u9700\u8981 Hook \u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u67E5\u627E\u6761\u4EF6
         afterHook {
             // ...
    diff --git a/docs/assets/api-exception.html.52eceba1.js b/docs/assets/api-exception.html.e36f34e4.js
    similarity index 81%
    rename from docs/assets/api-exception.html.52eceba1.js
    rename to docs/assets/api-exception.html.e36f34e4.js
    index 8b9f1d8a1..2fe5d97ae 100644
    --- a/docs/assets/api-exception.html.52eceba1.js
    +++ b/docs/assets/api-exception.html.e36f34e4.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-5b43296c","path":"/zh-cn/config/api-exception.html","title":"API \u5F02\u5E38\u5904\u7406","lang":"zh-CN","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"\u975E\u963B\u65AD\u5F02\u5E38","slug":"\u975E\u963B\u65AD\u5F02\u5E38","link":"#\u975E\u963B\u65AD\u5F02\u5E38","children":[]},{"level":2,"title":"\u963B\u65AD\u5F02\u5E38","slug":"\u963B\u65AD\u5F02\u5E38","link":"#\u963B\u65AD\u5F02\u5E38","children":[]}],"git":{"updatedTime":1673575777000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":20}]},"filePathRelative":"zh-cn/config/api-exception.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-5b43296c","path":"/zh-cn/config/api-exception.html","title":"API \u5F02\u5E38\u5904\u7406","lang":"zh-CN","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"\u975E\u963B\u65AD\u5F02\u5E38","slug":"\u975E\u963B\u65AD\u5F02\u5E38","link":"#\u975E\u963B\u65AD\u5F02\u5E38","children":[]},{"level":2,"title":"\u963B\u65AD\u5F02\u5E38","slug":"\u963B\u65AD\u5F02\u5E38","link":"#\u963B\u65AD\u5F02\u5E38","children":[]}],"git":{"updatedTime":1674230841000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":21}]},"filePathRelative":"zh-cn/config/api-exception.md"}');export{e as data};
    diff --git a/docs/assets/api-exception.html.1a55cd17.js b/docs/assets/api-exception.html.ec1d66cb.js
    similarity index 96%
    rename from docs/assets/api-exception.html.1a55cd17.js
    rename to docs/assets/api-exception.html.ec1d66cb.js
    index 02156c825..8566fc18e 100644
    --- a/docs/assets/api-exception.html.1a55cd17.js
    +++ b/docs/assets/api-exception.html.ec1d66cb.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as n,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    API Exception Handling

    Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiHookAPI and how to deal with them.

    The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

    Non-Blocking Exceptions

    These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

    exception

    loggerE

    Could not found any available Hook APIs in current environment! Aborted

    Abnormal

    Your Hook Framework is not working or did not successfully load the current Hook API.

    Solution

    Please make sure you have loaded the encase method of YukiHookAPI in the correct place. For details, please refer to Use as Xposed Module Configs and Use as Hook API Configs.

    exception

    loggerE

    You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted

    Abnormal

    You try to load the encase method in the onInit or onXposedEvent method of the Hook entry class that implements IYukiHookXposedInit.

    The following example

    object HookEntry : IYukiHookXposedInit {
    +import{_ as e,o as s,c as n,a}from"./app.2bc5d8f3.js";const o={},l=a(`

    API Exception Handling

    Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiHookAPI and how to deal with them.

    The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

    Non-Blocking Exceptions

    These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

    exception

    loggerE

    Could not found any available Hook APIs in current environment! Aborted

    Abnormal

    Your Hook Framework is not working or did not successfully load the current Hook API.

    Solution

    Please make sure you have loaded the encase method of YukiHookAPI in the correct place. For details, please refer to Use as Xposed Module Configs and Use as Hook API Configs.

    exception

    loggerE

    You cannot load a hooker in "onInit" or "onXposedEvent" method! Aborted

    Abnormal

    You try to load the encase method in the onInit or onXposedEvent method of the Hook entry class that implements IYukiHookXposedInit.

    The following example

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             // \u2757 Wrong usage
    @@ -34,7 +34,7 @@ import{_ as e,o as s,c as n,a}from"./app.a3fd8dd4.js";const o={},l=a(`

    } } } -

    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    Abnormal

    YukiHookAPI exception occurred while loading Xposed entry method.

    Solution

    This is an exception summary.

    If any exception occurs in your current Hook Process (Hook Process crashes), it will be printed to the console using this method.

    Please trace the stack where the exception occurred to locate your code problem.

    exception

    loggerE

    An exception occurred when hooking internal function

    Abnormal

    YukiHookAPI throws an exception during its own initialization hook.

    Solution

    Usually, this kind of error does not happen easily. If this error occurs, you can directly submit the log for feedback.

    exception

    loggerE

    YukiHookAPI try to load HookEntryClass failed

    Abnormal

    YukiHookAPI encountered an unhandled exception or the entry class could not be found when trying to load the hook entry class onInit or onHook method.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    Abnormal

    YukiHookAPI encountered an unhandled exception when trying to load a Xposed Module using the Xposed native interface.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    Abnormal

    YukiHookAPI An error occurred while trying to do a Resources Hook.

    Solution

    Please double check the error log for details.

    If a Resources$NotFoundException occurs, you may be looking for an incorrect Resources Id.

    If ClassNotFound or NoClassDefFoundError occurs, it may be that Hook Framework does not support Resources Hook.

    exception

    loggerE

    HookClass [NAME] not found

    Abnormal

    The Class currently being hooked was not found.

    Solution

    Please check if the target Class exists, to ignore this error use the ignoredHookClassNotFoundFailure method.

    exception

    loggerE

    Hook Member [NAME] failed

    Abnormal

    An error occurred while hooking the target method, constructor.

    Solution

    This problem is usually caused by Hook Framework.

    Please check the corresponding log content.

    If the problem persists, please bring detailed logs for feedback.

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class have been set.

    Solution

    Please check the previous error log before this error occurs, maybe there is an error that the method and constructor cannot be found when searching for methods and constructors.

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class are not set.

    The following example

    injectMember {
    +
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    Abnormal

    YukiHookAPI exception occurred while loading Xposed entry method.

    Solution

    This is an exception summary.

    If any exception occurs in your current Hook Process (Hook Process crashes), it will be printed to the console using this method.

    Please trace the stack where the exception occurred to locate your code problem.

    exception

    loggerE

    An exception occurred when hooking internal function

    Abnormal

    YukiHookAPI throws an exception during its own initialization hook.

    Solution

    Usually, this kind of error does not happen easily. If this error occurs, you can directly submit the log for feedback.

    exception

    loggerE

    YukiHookAPI try to load hook entry class failed

    Abnormal

    YukiHookAPI encountered an unhandled exception or the entry class could not be found when trying to load the hook entry class onInit or onHook method.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    Abnormal

    YukiHookAPI encountered an unhandled exception when trying to load a Xposed Module using the Xposed native interface.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    Abnormal

    YukiHookAPI An error occurred while trying to do a Resources Hook.

    Solution

    Please double check the error log for details.

    If a Resources$NotFoundException occurs, you may be looking for an incorrect Resources Id.

    If ClassNotFound or NoClassDefFoundError occurs, it may be that Hook Framework does not support Resources Hook.

    exception

    loggerE

    HookClass [NAME] not found

    Abnormal

    The Class currently being hooked was not found.

    Solution

    Please check if the target Class exists, to ignore this error use the ignoredHookClassNotFoundFailure method.

    exception

    loggerE

    Hook Member [NAME] failed

    Abnormal

    An error occurred while hooking the target method, constructor.

    Solution

    This problem is usually caused by Hook Framework.

    Please check the corresponding log content.

    If the problem persists, please bring detailed logs for feedback.

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class have been set.

    Solution

    Please check the previous error log before this error occurs, maybe there is an error that the method and constructor cannot be found when searching for methods and constructors.

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class are not set.

    The following example

    injectMember {
         // There are no search conditions for methods and constructors that require hooks
         afterHook {
             // ...
    diff --git a/docs/assets/api-using.html.c7abdd44.js b/docs/assets/api-using.html.435ab3bc.js
    similarity index 99%
    rename from docs/assets/api-using.html.c7abdd44.js
    rename to docs/assets/api-using.html.435ab3bc.js
    index e1c017e9b..65cc3c82a 100644
    --- a/docs/assets/api-using.html.c7abdd44.js
    +++ b/docs/assets/api-using.html.435ab3bc.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as c,c as r,b as s,d as e,a as o,e as n}from"./app.a3fd8dd4.js";const t={},i=o(`

    \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u4F5C\u4E3A Hook API \u901A\u5E38\u4E3A\u505A\u81EA\u8EAB APP \u70ED\u66F4\u65B0\u6216\u529F\u80FD\u9700\u8981\u4EE5\u53CA\u4EA7\u54C1\u6D4B\u8BD5\u7684 Hook \u64CD\u4F5C\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F60\u53EA\u9700\u8981\u96C6\u6210 com.highcapable.yukihookapi:api \u4F9D\u8D56\u5373\u53EF\u3002

    \u7136\u540E\u8BF7\u96C6\u6210\u4F60\u76EE\u6807\u4F7F\u7528\u7684 Hook Framework \u4F9D\u8D56\u3002

    \u5165\u53E3\u914D\u7F6E

    \u521B\u5EFA\u4F60\u7684\u81EA\u5B9A\u4E49 Application\u3002

    \u5728 attachBaseContext \u4E2D\u6DFB\u52A0 YukiHookAPI.encase \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    class MyApplication : Application() {
    +import{_ as l,r as p,o as c,c as r,b as s,d as e,a as o,e as n}from"./app.2bc5d8f3.js";const t={},i=o(`

    \u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u4F5C\u4E3A Hook API \u901A\u5E38\u4E3A\u505A\u81EA\u8EAB APP \u70ED\u66F4\u65B0\u6216\u529F\u80FD\u9700\u8981\u4EE5\u53CA\u4EA7\u54C1\u6D4B\u8BD5\u7684 Hook \u64CD\u4F5C\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F60\u53EA\u9700\u8981\u96C6\u6210 com.highcapable.yukihookapi:api \u4F9D\u8D56\u5373\u53EF\u3002

    \u7136\u540E\u8BF7\u96C6\u6210\u4F60\u76EE\u6807\u4F7F\u7528\u7684 Hook Framework \u4F9D\u8D56\u3002

    \u5165\u53E3\u914D\u7F6E

    \u521B\u5EFA\u4F60\u7684\u81EA\u5B9A\u4E49 Application\u3002

    \u5728 attachBaseContext \u4E2D\u6DFB\u52A0 YukiHookAPI.encase \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    class MyApplication : Application() {
     
         override fun attachBaseContext(base: Context?) {
             // \u88C5\u8F7D Hook Framework
    diff --git a/docs/assets/api-using.html.167768ec.js b/docs/assets/api-using.html.e80b21f1.js
    similarity index 99%
    rename from docs/assets/api-using.html.167768ec.js
    rename to docs/assets/api-using.html.e80b21f1.js
    index 875694d1b..1b9f62f32 100644
    --- a/docs/assets/api-using.html.167768ec.js
    +++ b/docs/assets/api-using.html.e80b21f1.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as c,c as t,b as s,d as e,a as o,e as n}from"./app.a3fd8dd4.js";const i={},r=o(`

    Use as Hook API Configs

    As a Hook API, it is usually used for Hook operations for hot updates or functional needs of its own app and product testing.

    Dependency Configs

    You just need to integrate the com.highcapable.yukihookapi:api dependency.

    Then please integrate the Hook Framework dependencies used by your target.

    Entry Configs

    Create your custom Application.

    Add YukiHookAPI.encase method to attachBaseContext.

    The following example

    class MyApplication : Application() {
    +import{_ as l,r as p,o as c,c as t,b as s,d as e,a as o,e as n}from"./app.2bc5d8f3.js";const i={},r=o(`

    Use as Hook API Configs

    As a Hook API, it is usually used for Hook operations for hot updates or functional needs of its own app and product testing.

    Dependency Configs

    You just need to integrate the com.highcapable.yukihookapi:api dependency.

    Then please integrate the Hook Framework dependencies used by your target.

    Entry Configs

    Create your custom Application.

    Add YukiHookAPI.encase method to attachBaseContext.

    The following example

    class MyApplication : Application() {
     
         override fun attachBaseContext(base: Context?) {
             // Load Hook Framework
    diff --git a/docs/assets/app.2bc5d8f3.js b/docs/assets/app.2bc5d8f3.js
    new file mode 100644
    index 000000000..5c3cc7d77
    --- /dev/null
    +++ b/docs/assets/app.2bc5d8f3.js
    @@ -0,0 +1,10 @@
    +const Jr="modulepreload",Zr=function(e){return"/YukiHookAPI/"+e},Xo={},d=function(t,l,i){return!l||l.length===0?t():Promise.all(l.map(o=>{if(o=Zr(o),o in Xo)return;Xo[o]=!0;const n=o.endsWith(".css"),a=n?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${a}`))return;const r=document.createElement("link");if(r.rel=n?"stylesheet":Jr,n||(r.as="script",r.crossOrigin=""),r.href=o,document.head.appendChild(r),n)return new Promise((s,c)=>{r.addEventListener("load",s),r.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},es={"v-8daa1a0e":()=>d(()=>import("./index.html.1ad46905.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>d(()=>import("./index.html.58270dd2.js"),[]).then(({data:e})=>e),"v-c0c85b84":()=>d(()=>import("./index.html.962e6741.js"),[]).then(({data:e})=>e),"v-7a15fe3b":()=>d(()=>import("./about.html.bac55135.js"),[]).then(({data:e})=>e),"v-3f851d14":()=>d(()=>import("./changelog.html.06fcff6b.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.94bd226b.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.3cb1bbf7.js"),[]).then(({data:e})=>e),"v-efb45d4c":()=>d(()=>import("./home.html.ca5e9385.js"),[]).then(({data:e})=>e),"v-277b35ca":()=>d(()=>import("./knowledge.html.13983a8b.js"),[]).then(({data:e})=>e),"v-77d752a2":()=>d(()=>import("./move-to-new-api.html.f91df01f.js"),[]).then(({data:e})=>e),"v-72889797":()=>d(()=>import("./quick-start.html.9679e241.js"),[]).then(({data:e})=>e),"v-9cfea7fc":()=>d(()=>import("./api-example.html.c60371a6.js"),[]).then(({data:e})=>e),"v-72c12b7d":()=>d(()=>import("./api-exception.html.114387df.js"),[]).then(({data:e})=>e),"v-793879e8":()=>d(()=>import("./api-using.html.c794f69e.js"),[]).then(({data:e})=>e),"v-29d6c1ba":()=>d(()=>import("./r8-proguard.html.15e04e11.js"),[]).then(({data:e})=>e),"v-24e71de7":()=>d(()=>import("./xposed-using.html.fca5c15c.js"),[]).then(({data:e})=>e),"v-55c11626":()=>d(()=>import("./yukihookapi-projectbuilder.html.ed4fa356.js"),[]).then(({data:e})=>e),"v-41967128":()=>d(()=>import("./about.html.4de66a22.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>d(()=>import("./changelog.html.1fa81630.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.2cf8d6de.js"),[]).then(({data:e})=>e),"v-c8deafb2":()=>d(()=>import("./home.html.cad3998c.js"),[]).then(({data:e})=>e),"v-c6114c9e":()=>d(()=>import("./api-example.html.29a2e3ae.js"),[]).then(({data:e})=>e),"v-5b43296c":()=>d(()=>import("./api-exception.html.e36f34e4.js"),[]).then(({data:e})=>e),"v-2ee67152":()=>d(()=>import("./api-using.html.0a59e2e0.js"),[]).then(({data:e})=>e),"v-154d6f69":()=>d(()=>import("./r8-proguard.html.683a5429.js"),[]).then(({data:e})=>e),"v-af73b3d0":()=>d(()=>import("./xposed-using.html.c9966283.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.c868eee2.js"),[]).then(({data:e})=>e),"v-6a609e09":()=>d(()=>import("./home.html.ced3162e.js"),[]).then(({data:e})=>e),"v-b4f1a468":()=>d(()=>import("./knowledge.html.830e8c66.js"),[]).then(({data:e})=>e),"v-c0d5dada":()=>d(()=>import("./move-to-new-api.html.4bf89a9b.js"),[]).then(({data:e})=>e),"v-24840ff0":()=>d(()=>import("./quick-start.html.8abc4bb2.js"),[]).then(({data:e})=>e),"v-a2fab4d6":()=>d(()=>import("./yukihookapi-projectbuilder.html.d499d226.js"),[]).then(({data:e})=>e),"v-12042f1f":()=>d(()=>import("./host-inject.html.8e7a6aa7.js"),[]).then(({data:e})=>e),"v-deaff1d0":()=>d(()=>import("./host-lifecycle.html.7e81cf29.js"),[]).then(({data:e})=>e),"v-33c1dc26":()=>d(()=>import("./logger.html.a59ab5f0.js"),[]).then(({data:e})=>e),"v-581ddb9c":()=>d(()=>import("./reflection.html.2a870d09.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.5975332b.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.c35a7041.js"),[]).then(({data:e})=>e),"v-6ac5be8e":()=>d(()=>import("./host-inject.html.77802245.js"),[]).then(({data:e})=>e),"v-357a8d49":()=>d(()=>import("./host-lifecycle.html.136055f0.js"),[]).then(({data:e})=>e),"v-1f0f591e":()=>d(()=>import("./logger.html.ed51ab5d.js"),[]).then(({data:e})=>e),"v-001858e3":()=>d(()=>import("./reflection.html.0e88a14d.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.325b6181.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.5fd9a913.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.57a95a9b.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.78e39167.js"),[]).then(({data:e})=>e),"v-818b3ca6":()=>d(()=>import("./InjectYukiHookWithXposed.html.56391530.js"),[]).then(({data:e})=>e),"v-b6a815c4":()=>d(()=>import("./CurrentClass.html.16c29272.js"),[]).then(({data:e})=>e),"v-0183e3fc":()=>d(()=>import("./GenericClass.html.f94281cf.js"),[]).then(({data:e})=>e),"v-57506200":()=>d(()=>import("./HookClass.html.52e59cf0.js"),[]).then(({data:e})=>e),"v-9af56c1a":()=>d(()=>import("./HookResources.html.2486cf29.js"),[]).then(({data:e})=>e),"v-032b1710":()=>d(()=>import("./VariousClass.html.153f4c39.js"),[]).then(({data:e})=>e),"v-e288ce96":()=>d(()=>import("./YukiBaseHooker.html.99eec744.js"),[]).then(({data:e})=>e),"v-36aec5ad":()=>d(()=>import("./LoggerFactory.html.52af0d44.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.74f919b4.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.aaf5b5a4.js"),[]).then(({data:e})=>e),"v-71147891":()=>d(()=>import("./YukiMemberHookCreator.html.7e0c1b2e.js"),[]).then(({data:e})=>e),"v-5ed1ceee":()=>d(()=>import("./YukiResourcesHookCreator.html.2fa2ff0f.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.98ec6704.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.bfbfbca6.js"),[]).then(({data:e})=>e),"v-30f3ba1e":()=>d(()=>import("./InjectYukiHookWithXposed.html.cf9b500d.js"),[]).then(({data:e})=>e),"v-6e47300f":()=>d(()=>import("./CurrentClass.html.641fcd58.js"),[]).then(({data:e})=>e),"v-69c1c226":()=>d(()=>import("./GenericClass.html.5d4a2ffe.js"),[]).then(({data:e})=>e),"v-735374af":()=>d(()=>import("./HookClass.html.486aa6ea.js"),[]).then(({data:e})=>e),"v-1c516d22":()=>d(()=>import("./HookResources.html.4f07fd98.js"),[]).then(({data:e})=>e),"v-66735bfe":()=>d(()=>import("./VariousClass.html.a490557a.js"),[]).then(({data:e})=>e),"v-3ac40680":()=>d(()=>import("./YukiMemberHookCreator.html.e217488d.js"),[]).then(({data:e})=>e),"v-5e81af42":()=>d(()=>import("./YukiResourcesHookCreator.html.1f540f56.js"),[]).then(({data:e})=>e),"v-516df326":()=>d(()=>import("./YukiBaseHooker.html.b68236f9.js"),[]).then(({data:e})=>e),"v-213d88b3":()=>d(()=>import("./ReflectionFactory.html.a8284201.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.09287903.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.ae54c997.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.a5a7a5a4.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.510255b8.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.5af05d7d.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.a3936b7c.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.7da3eef4.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.d4c9dbd1.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.02a8ef0d.js"),[]).then(({data:e})=>e),"v-003862c2":()=>d(()=>import("./YukiHookModulePrefs.html.198e73d3.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.0026a7b8.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bfb4e259.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.612b6202.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.550d3346.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.b4bffecd.js"),[]).then(({data:e})=>e),"v-5858709e":()=>d(()=>import("./YukiHookModulePrefs.html.6bedc781.js"),[]).then(({data:e})=>e),"v-763140ee":()=>d(()=>import("./IYukiHookXposedInit.html.78a55860.js"),[]).then(({data:e})=>e),"v-4fca92c0":()=>d(()=>import("./BaseFinder.html.a5dbb7a7.js"),[]).then(({data:e})=>e),"v-2a898c66":()=>d(()=>import("./DexClassFinder.html.5d8e12f0.js"),[]).then(({data:e})=>e),"v-a71937aa":()=>d(()=>import("./ConstructorFinder.html.f20afbf5.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.ba29e9c4.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.427f6cec.js"),[]).then(({data:e})=>e),"v-19e7277e":()=>d(()=>import("./YukiXposedEvent.html.560fa41c.js"),[]).then(({data:e})=>e),"v-8455e04e":()=>d(()=>import("./YukiModuleResources.html.90f23dcd.js"),[]).then(({data:e})=>e),"v-7b087cce":()=>d(()=>import("./YukiResForwarder.html.65998e9e.js"),[]).then(({data:e})=>e),"v-a00b4de6":()=>d(()=>import("./YukiResources.html.cc9ce9fb.js"),[]).then(({data:e})=>e),"v-2f64a2d4":()=>d(()=>import("./ChannelData.html.1981f416.js"),[]).then(({data:e})=>e),"v-87027140":()=>d(()=>import("./ChannelPriority.html.7d2ec81d.js"),[]).then(({data:e})=>e),"v-2d4e0da6":()=>d(()=>import("./ModuleClassLoader.html.2ddf88b6.js"),[]).then(({data:e})=>e),"v-58ed8298":()=>d(()=>import("./PrefsData.html.3061ee5b.js"),[]).then(({data:e})=>e),"v-23e1a817":()=>d(()=>import("./ModulePreferenceFragment.html.764fecc3.js"),[]).then(({data:e})=>e),"v-0f719471":()=>d(()=>import("./BaseFinder.html.8f275c85.js"),[]).then(({data:e})=>e),"v-45111efc":()=>d(()=>import("./DexClassFinder.html.78c5f805.js"),[]).then(({data:e})=>e),"v-1e2cbc9c":()=>d(()=>import("./ConstructorFinder.html.7d970fbe.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.7f9e6371.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.6be2b6ee.js"),[]).then(({data:e})=>e),"v-0a4de82f":()=>d(()=>import("./YukiXposedEvent.html.a93ee4ef.js"),[]).then(({data:e})=>e),"v-8266e0ec":()=>d(()=>import("./YukiModuleResources.html.46222277.js"),[]).then(({data:e})=>e),"v-aa38fa86":()=>d(()=>import("./YukiResForwarder.html.70fb824b.js"),[]).then(({data:e})=>e),"v-21b3b17e":()=>d(()=>import("./YukiResources.html.8714bbf2.js"),[]).then(({data:e})=>e),"v-493d37f6":()=>d(()=>import("./ChannelData.html.5ca343ea.js"),[]).then(({data:e})=>e),"v-b57870de":()=>d(()=>import("./ChannelPriority.html.b460c4bc.js"),[]).then(({data:e})=>e),"v-4b468415":()=>d(()=>import("./ModuleClassLoader.html.0388bffd.js"),[]).then(({data:e})=>e),"v-d99f7f36":()=>d(()=>import("./PrefsData.html.40b2fabe.js"),[]).then(({data:e})=>e),"v-53bcae06":()=>d(()=>import("./ModulePreferenceFragment.html.0c7dadc7.js"),[]).then(({data:e})=>e),"v-52995ef7":()=>d(()=>import("./CountRules.html.2d5ab94d.js"),[]).then(({data:e})=>e),"v-8d5ce71a":()=>d(()=>import("./ModifierRules.html.c36dff17.js"),[]).then(({data:e})=>e),"v-f5b1ffb2":()=>d(()=>import("./NameRules.html.00ac96fb.js"),[]).then(({data:e})=>e),"v-652b815b":()=>d(()=>import("./ObjectRules.html.70d91cad.js"),[]).then(({data:e})=>e),"v-08b70f7f":()=>d(()=>import("./ConstructorRules.html.c7161b83.js"),[]).then(({data:e})=>e),"v-21f64ebf":()=>d(()=>import("./FieldRules.html.c8edc48c.js"),[]).then(({data:e})=>e),"v-77f11cf9":()=>d(()=>import("./MemberRules.html.a071b3c6.js"),[]).then(({data:e})=>e),"v-64827680":()=>d(()=>import("./MethodRules.html.6c9a8df6.js"),[]).then(({data:e})=>e),"v-2d5d16db":()=>d(()=>import("./ModuleAppActivity.html.90d3c4e6.js"),[]).then(({data:e})=>e),"v-cadbe48e":()=>d(()=>import("./ModuleAppCompatActivity.html.a20d9206.js"),[]).then(({data:e})=>e),"v-78731c50":()=>d(()=>import("./ModuleContextThemeWrapper.html.0879426b.js"),[]).then(({data:e})=>e),"v-1b2ad030":()=>d(()=>import("./CountRules.html.2639d392.js"),[]).then(({data:e})=>e),"v-547a3c3c":()=>d(()=>import("./ModifierRules.html.f7582dc2.js"),[]).then(({data:e})=>e),"v-58c26516":()=>d(()=>import("./NameRules.html.47e512e4.js"),[]).then(({data:e})=>e),"v-80fd32ec":()=>d(()=>import("./ObjectRules.html.4b682129.js"),[]).then(({data:e})=>e),"v-a42f54a4":()=>d(()=>import("./ConstructorRules.html.f8ba43ee.js"),[]).then(({data:e})=>e),"v-3e67a42e":()=>d(()=>import("./FieldRules.html.a499e892.js"),[]).then(({data:e})=>e),"v-2cab152c":()=>d(()=>import("./MemberRules.html.b3e5d297.js"),[]).then(({data:e})=>e),"v-5388621e":()=>d(()=>import("./MethodRules.html.afeaf85e.js"),[]).then(({data:e})=>e),"v-1446bdca":()=>d(()=>import("./ModuleAppActivity.html.09451ff7.js"),[]).then(({data:e})=>e),"v-c7cef530":()=>d(()=>import("./ModuleAppCompatActivity.html.dd9e40e9.js"),[]).then(({data:e})=>e),"v-44efb702":()=>d(()=>import("./ModuleContextThemeWrapper.html.229a46ac.js"),[]).then(({data:e})=>e),"v-5e375d98":()=>d(()=>import("./MemberRulesResult.html.e79843c3.js"),[]).then(({data:e})=>e),"v-b8000f3a":()=>d(()=>import("./MemberRulesResult.html.58e81c94.js"),[]).then(({data:e})=>e),"v-3706649a":()=>d(()=>import("./404.html.c038a05a.js"),[]).then(({data:e})=>e)};function mo(e,t){const l=Object.create(null),i=e.split(",");for(let o=0;o!!l[o.toLowerCase()]:o=>!!l[o]}const ts="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",ls=mo(ts);function ha(e){return!!e||e===""}function Sl(e){if(te(e)){const t={};for(let l=0;l{if(l){const i=l.split(os);i.length>1&&(t[i[0].trim()]=i[1].trim())}}),t}function Ke(e){let t="";if(be(e))t=e;else if(te(e))for(let l=0;lbe(e)?e:e==null?"":te(e)||Oe(e)&&(e.toString===ma||!ae(e.toString))?JSON.stringify(e,da,2):String(e),da=(e,t)=>t&&t.__v_isRef?da(e,t.value):rl(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((l,[i,o])=>(l[`${i} =>`]=o,l),{})}:ua(t)?{[`Set(${t.size})`]:[...t.values()]}:Oe(t)&&!te(t)&&!fa(t)?String(t):t,Ce={},al=[],rt=()=>{},as=()=>!1,rs=/^on[^a-z]/,Vl=e=>rs.test(e),fo=e=>e.startsWith("onUpdate:"),Se=Object.assign,go=(e,t)=>{const l=e.indexOf(t);l>-1&&e.splice(l,1)},ss=Object.prototype.hasOwnProperty,de=(e,t)=>ss.call(e,t),te=Array.isArray,rl=e=>bi(e)==="[object Map]",ua=e=>bi(e)==="[object Set]",ae=e=>typeof e=="function",be=e=>typeof e=="string",ko=e=>typeof e=="symbol",Oe=e=>e!==null&&typeof e=="object",pa=e=>Oe(e)&&ae(e.then)&&ae(e.catch),ma=Object.prototype.toString,bi=e=>ma.call(e),cs=e=>bi(e).slice(8,-1),fa=e=>bi(e)==="[object Object]",vo=e=>be(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cl=mo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_i=e=>{const t=Object.create(null);return l=>t[l]||(t[l]=e(l))},hs=/-(\w)/g,ut=_i(e=>e.replace(hs,(t,l)=>l?l.toUpperCase():"")),ds=/\B([A-Z])/g,Jt=_i(e=>e.replace(ds,"-$1").toLowerCase()),yi=_i(e=>e.charAt(0).toUpperCase()+e.slice(1)),Oi=_i(e=>e?`on${yi(e)}`:""),wl=(e,t)=>!Object.is(e,t),Fi=(e,t)=>{for(let l=0;l{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:l})},ga=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let qo;const us=()=>qo||(qo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Xe;class ps{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Xe&&(this.parent=Xe,this.index=(Xe.scopes||(Xe.scopes=[])).push(this)-1)}run(t){if(this.active){const l=Xe;try{return Xe=this,t()}finally{Xe=l}}}on(){Xe=this}off(){Xe=this.parent}stop(t){if(this.active){let l,i;for(l=0,i=this.effects.length;l{const t=new Set(e);return t.w=0,t.n=0,t},ka=e=>(e.w&Ft)>0,va=e=>(e.n&Ft)>0,ks=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let l=0;for(let i=0;i{(c==="length"||c>=i)&&r.push(s)});else switch(l!==void 0&&r.push(a.get(l)),t){case"add":te(e)?vo(l)&&r.push(a.get("length")):(r.push(a.get(Kt)),rl(e)&&r.push(a.get(qi)));break;case"delete":te(e)||(r.push(a.get(Kt)),rl(e)&&r.push(a.get(qi)));break;case"set":rl(e)&&r.push(a.get(Kt));break}if(r.length===1)r[0]&&Ki(r[0]);else{const s=[];for(const c of r)c&&s.push(...c);Ki(bo(s))}}function Ki(e,t){const l=te(e)?e:[...e];for(const i of l)i.computed&&Go(i);for(const i of l)i.computed||Go(i)}function Go(e,t){(e!==nt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const bs=mo("__proto__,__v_isRef,__isVue"),ya=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ko)),_s=yo(),ys=yo(!1,!0),xs=yo(!0),Qo=Es();function Es(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...l){const i=ke(this);for(let n=0,a=this.length;n{e[t]=function(...l){ml();const i=ke(this)[t].apply(this,l);return fl(),i}}),e}function yo(e=!1,t=!1){return function(i,o,n){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&n===(e?t?Vs:Pa:t?Ra:Ca).get(i))return i;const a=te(i);if(!e&&a&&de(Qo,o))return Reflect.get(Qo,o,n);const r=Reflect.get(i,o,n);return(ko(o)?ya.has(o):bs(o))||(e||Qe(i,"get",o),t)?r:De(r)?a&&vo(o)?r:r.value:Oe(r)?e?Co(r):gl(r):r}}const Cs=xa(),Rs=xa(!0);function xa(e=!1){return function(l,i,o,n){let a=l[i];if(Ol(a)&&De(a)&&!De(o))return!1;if(!e&&!Ol(o)&&(Gi(o)||(o=ke(o),a=ke(a)),!te(l)&&De(a)&&!De(o)))return a.value=o,!0;const r=te(l)&&vo(i)?Number(i)e,xi=e=>Reflect.getPrototypeOf(e);function Xl(e,t,l=!1,i=!1){e=e.__v_raw;const o=ke(e),n=ke(t);l||(t!==n&&Qe(o,"get",t),Qe(o,"get",n));const{has:a}=xi(o),r=i?xo:l?Po:Fl;if(a.call(o,t))return r(e.get(t));if(a.call(o,n))return r(e.get(n));e!==o&&e.get(t)}function ql(e,t=!1){const l=this.__v_raw,i=ke(l),o=ke(e);return t||(e!==o&&Qe(i,"has",e),Qe(i,"has",o)),e===o?l.has(e):l.has(e)||l.has(o)}function Kl(e,t=!1){return e=e.__v_raw,!t&&Qe(ke(e),"iterate",Kt),Reflect.get(e,"size",e)}function Jo(e){e=ke(e);const t=ke(this);return xi(t).has.call(t,e)||(t.add(e),bt(t,"add",e,e)),this}function Zo(e,t){t=ke(t);const l=ke(this),{has:i,get:o}=xi(l);let n=i.call(l,e);n||(e=ke(e),n=i.call(l,e));const a=o.call(l,e);return l.set(e,t),n?wl(t,a)&&bt(l,"set",e,t):bt(l,"add",e,t),this}function en(e){const t=ke(this),{has:l,get:i}=xi(t);let o=l.call(t,e);o||(e=ke(e),o=l.call(t,e)),i&&i.call(t,e);const n=t.delete(e);return o&&bt(t,"delete",e,void 0),n}function tn(){const e=ke(this),t=e.size!==0,l=e.clear();return t&&bt(e,"clear",void 0,void 0),l}function Gl(e,t){return function(i,o){const n=this,a=n.__v_raw,r=ke(a),s=t?xo:e?Po:Fl;return!e&&Qe(r,"iterate",Kt),a.forEach((c,h)=>i.call(o,s(c),s(h),n))}}function Ql(e,t,l){return function(...i){const o=this.__v_raw,n=ke(o),a=rl(n),r=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,c=o[e](...i),h=l?xo:t?Po:Fl;return!t&&Qe(n,"iterate",s?qi:Kt),{next(){const{value:p,done:m}=c.next();return m?{value:p,done:m}:{value:r?[h(p[0]),h(p[1])]:h(p),done:m}},[Symbol.iterator](){return this}}}}function xt(e){return function(...t){return e==="delete"?!1:this}}function ws(){const e={get(n){return Xl(this,n)},get size(){return Kl(this)},has:ql,add:Jo,set:Zo,delete:en,clear:tn,forEach:Gl(!1,!1)},t={get(n){return Xl(this,n,!1,!0)},get size(){return Kl(this)},has:ql,add:Jo,set:Zo,delete:en,clear:tn,forEach:Gl(!1,!0)},l={get(n){return Xl(this,n,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!1)},i={get(n){return Xl(this,n,!0,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(n=>{e[n]=Ql(n,!1,!1),l[n]=Ql(n,!0,!1),t[n]=Ql(n,!1,!0),i[n]=Ql(n,!0,!0)}),[e,l,t,i]}const[Os,Fs,zs,Ds]=ws();function Eo(e,t){const l=t?e?Ds:zs:e?Fs:Os;return(i,o,n)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?i:Reflect.get(de(l,o)&&o in i?l:i,o,n)}const Ms={get:Eo(!1,!1)},Hs={get:Eo(!1,!0)},Ss={get:Eo(!0,!1)},Ca=new WeakMap,Ra=new WeakMap,Pa=new WeakMap,Vs=new WeakMap;function Ns(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function js(e){return e.__v_skip||!Object.isExtensible(e)?0:Ns(cs(e))}function gl(e){return Ol(e)?e:Ro(e,!1,Ea,Ms,Ca)}function $s(e){return Ro(e,!1,Is,Hs,Ra)}function Co(e){return Ro(e,!0,As,Ss,Pa)}function Ro(e,t,l,i,o){if(!Oe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const n=o.get(e);if(n)return n;const a=js(e);if(a===0)return e;const r=new Proxy(e,a===2?i:l);return o.set(e,r),r}function sl(e){return Ol(e)?sl(e.__v_raw):!!(e&&e.__v_isReactive)}function Ol(e){return!!(e&&e.__v_isReadonly)}function Gi(e){return!!(e&&e.__v_isShallow)}function La(e){return sl(e)||Ol(e)}function ke(e){const t=e&&e.__v_raw;return t?ke(t):e}function Ta(e){return ni(e,"__v_skip",!0),e}const Fl=e=>Oe(e)?gl(e):e,Po=e=>Oe(e)?Co(e):e;function Aa(e){It&&nt&&(e=ke(e),_a(e.dep||(e.dep=bo())))}function Ia(e,t){e=ke(e),e.dep&&Ki(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function ye(e){return Oa(e,!1)}function wa(e){return Oa(e,!0)}function Oa(e,t){return De(e)?e:new Ys(e,t)}class Ys{constructor(t,l){this.__v_isShallow=l,this.dep=void 0,this.__v_isRef=!0,this._rawValue=l?t:ke(t),this._value=l?t:Fl(t)}get value(){return Aa(this),this._value}set value(t){t=this.__v_isShallow?t:ke(t),wl(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Fl(t),Ia(this))}}function O(e){return De(e)?e.value:e}const Bs={get:(e,t,l)=>O(Reflect.get(e,t,l)),set:(e,t,l,i)=>{const o=e[t];return De(o)&&!De(l)?(o.value=l,!0):Reflect.set(e,t,l,i)}};function Fa(e){return sl(e)?e:new Proxy(e,Bs)}function Ei(e){const t=te(e)?new Array(e.length):{};for(const l in e)t[l]=Ws(e,l);return t}class Us{constructor(t,l,i){this._object=t,this._key=l,this._defaultValue=i,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ws(e,t,l){const i=e[t];return De(i)?i:new Us(e,t,l)}class Xs{constructor(t,l,i,o){this._setter=l,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Ia(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=i}get value(){const t=ke(this);return Aa(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function qs(e,t,l=!1){let i,o;const n=ae(e);return n?(i=e,o=rt):(i=e.get,o=e.set),new Xs(i,o,n||!o,l)}function wt(e,t,l,i){let o;try{o=i?e(...i):e()}catch(n){Nl(n,t,l)}return o}function lt(e,t,l,i){if(ae(e)){const n=wt(e,t,l,i);return n&&pa(n)&&n.catch(a=>{Nl(a,t,l)}),n}const o=[];for(let n=0;n>>1;zl(qe[i])ft&&qe.splice(t,1)}function Ma(e,t,l,i){te(e)?l.push(...e):(!t||!t.includes(e,e.allowRecurse?i+1:i))&&l.push(e),Da()}function Js(e){Ma(e,El,Rl,il)}function Zs(e){Ma(e,Pt,Pl,ol)}function Ci(e,t=null){if(Rl.length){for(Ji=t,El=[...new Set(Rl)],Rl.length=0,il=0;ilzl(l)-zl(i)),ol=0;ole.id==null?1/0:e.id;function Ha(e){Qi=!1,ai=!0,Ci(e),qe.sort((l,i)=>zl(l)-zl(i));const t=rt;try{for(ft=0;ftg.trim())),p&&(o=l.map(ga))}let r,s=i[r=Oi(t)]||i[r=Oi(ut(t))];!s&&n&&(s=i[r=Oi(Jt(t))]),s&<(s,e,6,o);const c=i[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,lt(c,e,6,o)}}function Sa(e,t,l=!1){const i=t.emitsCache,o=i.get(e);if(o!==void 0)return o;const n=e.emits;let a={},r=!1;if(!ae(e)){const s=c=>{const h=Sa(c,t,!0);h&&(r=!0,Se(a,h))};!l&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!n&&!r?(i.set(e,null),null):(te(n)?n.forEach(s=>a[s]=null):Se(a,n),i.set(e,a),a)}function Ri(e,t){return!e||!Vl(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Jt(t))||de(e,t))}let Ve=null,Va=null;function si(e){const t=Ve;return Ve=e,Va=e&&e.type.__scopeId||null,t}function He(e,t=Ve,l){if(!t||e._n)return e;const i=(...o)=>{i._d&&pn(-1);const n=si(t),a=e(...o);return si(n),i._d&&pn(1),a};return i._n=!0,i._c=!0,i._d=!0,i}function zi(e){const{type:t,vnode:l,proxy:i,withProxy:o,props:n,propsOptions:[a],slots:r,attrs:s,emit:c,render:h,renderCache:p,data:m,setupState:g,ctx:x,inheritAttrs:P}=e;let E,k;const _=si(e);try{if(l.shapeFlag&4){const H=o||i;E=ot(h.call(H,H,p,n,g,m,x)),k=s}else{const H=t;E=ot(H.length>1?H(n,{attrs:s,slots:r,emit:c}):H(n,null)),k=t.props?s:tc(s)}}catch(H){Tl.length=0,Nl(H,e,1),E=oe(Ge)}let L=E;if(k&&P!==!1){const H=Object.keys(k),{shapeFlag:U}=L;H.length&&U&7&&(a&&H.some(fo)&&(k=lc(k,a)),L=Dt(L,k))}return l.dirs&&(L=Dt(L),L.dirs=L.dirs?L.dirs.concat(l.dirs):l.dirs),l.transition&&(L.transition=l.transition),E=L,si(_),E}const tc=e=>{let t;for(const l in e)(l==="class"||l==="style"||Vl(l))&&((t||(t={}))[l]=e[l]);return t},lc=(e,t)=>{const l={};for(const i in e)(!fo(i)||!(i.slice(9)in t))&&(l[i]=e[i]);return l};function ic(e,t,l){const{props:i,children:o,component:n}=e,{props:a,children:r,patchFlag:s}=t,c=n.emitsOptions;if(t.dirs||t.transition)return!0;if(l&&s>=0){if(s&1024)return!0;if(s&16)return i?ln(i,a,c):!!a;if(s&8){const h=t.dynamicProps;for(let p=0;pe.__isSuspense;function Na(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Zs(e)}function Gt(e,t){if(Fe){let l=Fe.provides;const i=Fe.parent&&Fe.parent.provides;i===l&&(l=Fe.provides=Object.create(i)),l[e]=t}}function Me(e,t,l=!1){const i=Fe||Ve;if(i){const o=i.parent==null?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return l&&ae(t)?t.call(i.proxy):t}}const on={};function dt(e,t,l){return ja(e,t,l)}function ja(e,t,{immediate:l,deep:i,flush:o,onTrack:n,onTrigger:a}=Ce){const r=Fe;let s,c=!1,h=!1;if(De(e)?(s=()=>e.value,c=Gi(e)):sl(e)?(s=()=>e,i=!0):te(e)?(h=!0,c=e.some(k=>sl(k)||Gi(k)),s=()=>e.map(k=>{if(De(k))return k.value;if(sl(k))return qt(k);if(ae(k))return wt(k,r,2)})):ae(e)?t?s=()=>wt(e,r,2):s=()=>{if(!(r&&r.isUnmounted))return p&&p(),lt(e,r,3,[m])}:s=rt,t&&i){const k=s;s=()=>qt(k())}let p,m=k=>{p=E.onStop=()=>{wt(k,r,4)}};if(dl)return m=rt,t?l&<(t,r,3,[s(),h?[]:void 0,m]):s(),rt;let g=h?[]:on;const x=()=>{if(!!E.active)if(t){const k=E.run();(i||c||(h?k.some((_,L)=>wl(_,g[L])):wl(k,g)))&&(p&&p(),lt(t,r,3,[k,g===on?void 0:g,m]),g=k)}else E.run()};x.allowRecurse=!!t;let P;o==="sync"?P=x:o==="post"?P=()=>Be(x,r&&r.suspense):P=()=>Js(x);const E=new _o(s,P);return t?l?x():g=E.run():o==="post"?Be(E.run.bind(E),r&&r.suspense):E.run(),()=>{E.stop(),r&&r.scope&&go(r.scope.effects,E)}}function ac(e,t,l){const i=this.proxy,o=be(e)?e.includes(".")?$a(i,e):()=>i[e]:e.bind(i,i);let n;ae(t)?n=t:(n=t.handler,l=t);const a=Fe;hl(this);const r=ja(o,n.bind(i),l);return a?hl(a):Qt(),r}function $a(e,t){const l=t.split(".");return()=>{let i=e;for(let o=0;o{qt(l,t)});else if(fa(e))for(const l in e)qt(e[l],t);return e}function rc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Je(()=>{e.isMounted=!0}),Yl(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],sc={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},setup(e,{slots:t}){const l=wo(),i=rc();let o;return()=>{const n=t.default&&Ua(t.default(),!0);if(!n||!n.length)return;let a=n[0];if(n.length>1){for(const P of n)if(P.type!==Ge){a=P;break}}const r=ke(e),{mode:s}=r;if(i.isLeaving)return Di(a);const c=nn(a);if(!c)return Di(a);const h=Zi(c,r,i,l);eo(c,h);const p=l.subTree,m=p&&nn(p);let g=!1;const{getTransitionKey:x}=c.type;if(x){const P=x();o===void 0?o=P:P!==o&&(o=P,g=!0)}if(m&&m.type!==Ge&&(!Wt(c,m)||g)){const P=Zi(m,r,i,l);if(eo(m,P),s==="out-in")return i.isLeaving=!0,P.afterLeave=()=>{i.isLeaving=!1,l.update()},Di(a);s==="in-out"&&c.type!==Ge&&(P.delayLeave=(E,k,_)=>{const L=Ba(i,m);L[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=_})}return a}}},Ya=sc;function Ba(e,t){const{leavingVNodes:l}=e;let i=l.get(t.type);return i||(i=Object.create(null),l.set(t.type,i)),i}function Zi(e,t,l,i){const{appear:o,mode:n,persisted:a=!1,onBeforeEnter:r,onEnter:s,onAfterEnter:c,onEnterCancelled:h,onBeforeLeave:p,onLeave:m,onAfterLeave:g,onLeaveCancelled:x,onBeforeAppear:P,onAppear:E,onAfterAppear:k,onAppearCancelled:_}=t,L=String(e.key),H=Ba(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const B=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&B():v.length<=1&&B()},w={mode:n,persisted:a,beforeEnter(v){let q=r;if(!l.isMounted)if(o)q=P||r;else return;v._leaveCb&&v._leaveCb(!0);const B=H[L];B&&Wt(e,B)&&B.el._leaveCb&&B.el._leaveCb(),U(q,[v])},enter(v){let q=s,B=c,G=h;if(!l.isMounted)if(o)q=E||s,B=k||c,G=_||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(B,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const B=String(e.key);if(v._enterCb&&v._enterCb(!0),l.isUnmounting)return q();U(p,[v]);let G=!1;const C=v._leaveCb=S=>{G||(G=!0,q(),S?U(x,[v]):U(g,[v]),v._leaveCb=void 0,H[B]===e&&delete H[B])};H[B]=e,m?ee(m,[v,C]):C()},clone(v){return Zi(v,t,l,i)}};return w}function Di(e){if($l(e))return e=Dt(e),e.children=null,e}function nn(e){return $l(e)?e.children?e.children[0]:void 0:e}function eo(e,t){e.shapeFlag&6&&e.component?eo(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ua(e,t=!1,l){let i=[],o=0;for(let n=0;n1)for(let n=0;n!!e.type.__asyncLoader;function b(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:l,errorComponent:i,delay:o=200,timeout:n,suspensible:a=!0,onError:r}=e;let s=null,c,h=0;const p=()=>(h++,s=null,m()),m=()=>{let g;return s||(g=s=t().catch(x=>{if(x=x instanceof Error?x:new Error(String(x)),r)return new Promise((P,E)=>{r(x,()=>P(p()),()=>E(x),h+1)});throw x}).then(x=>g!==s&&s?s:(x&&(x.__esModule||x[Symbol.toStringTag]==="Module")&&(x=x.default),c=x,x)))};return ue({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return c},setup(){const g=Fe;if(c)return()=>Mi(c,g);const x=_=>{s=null,Nl(_,g,13,!i)};if(a&&g.suspense||dl)return m().then(_=>()=>Mi(_,g)).catch(_=>(x(_),()=>i?oe(i,{error:_}):null));const P=ye(!1),E=ye(),k=ye(!!o);return o&&setTimeout(()=>{k.value=!1},o),n!=null&&setTimeout(()=>{if(!P.value&&!E.value){const _=new Error(`Async component timed out after ${n}ms.`);x(_),E.value=_}},n),m().then(()=>{P.value=!0,g.parent&&$l(g.parent.vnode)&&To(g.parent.update)}).catch(_=>{x(_),E.value=_}),()=>{if(P.value&&c)return Mi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Mi(e,{vnode:{ref:t,props:l,children:i,shapeFlag:o},parent:n}){const a=oe(e,l,i);return a.ref=t,a}const $l=e=>e.type.__isKeepAlive;function cc(e,t){Wa(e,"a",t)}function hc(e,t){Wa(e,"da",t)}function Wa(e,t,l=Fe){const i=e.__wdc||(e.__wdc=()=>{let o=l;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Pi(t,i,l),l){let o=l.parent;for(;o&&o.parent;)$l(o.parent.vnode)&&dc(i,t,l,o),o=o.parent}}function dc(e,t,l,i){const o=Pi(t,e,i,!0);Li(()=>{go(i[t],o)},l)}function Pi(e,t,l=Fe,i=!1){if(l){const o=l[e]||(l[e]=[]),n=t.__weh||(t.__weh=(...a)=>{if(l.isUnmounted)return;ml(),hl(l);const r=lt(t,l,e,a);return Qt(),fl(),r});return i?o.unshift(n):o.push(n),n}}const yt=e=>(t,l=Fe)=>(!dl||e==="sp")&&Pi(e,t,l),Xa=yt("bm"),Je=yt("m"),uc=yt("bu"),pc=yt("u"),Yl=yt("bum"),Li=yt("um"),mc=yt("sp"),fc=yt("rtg"),gc=yt("rtc");function kc(e,t=Fe){Pi("ec",e,t)}function ci(e,t){const l=Ve;if(l===null)return e;const i=Ai(l)||l.proxy,o=e.dirs||(e.dirs=[]);for(let n=0;nt(a,r,void 0,n&&n[r]));else{const a=Object.keys(e);o=new Array(a.length);for(let r=0,s=a.length;rpi(t)?!(t.type===Ge||t.type===Pe&&!Ka(t.children)):!0)?e:null}const to=e=>e?rr(e)?Ai(e)||e.proxy:to(e.parent):null,hi=Se(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>to(e.parent),$root:e=>to(e.root),$emit:e=>e.emit,$options:e=>Qa(e),$forceUpdate:e=>e.f||(e.f=()=>To(e.update)),$nextTick:e=>e.n||(e.n=jl.bind(e.proxy)),$watch:e=>ac.bind(e)}),_c={get({_:e},t){const{ctx:l,setupState:i,data:o,props:n,accessCache:a,type:r,appContext:s}=e;let c;if(t[0]!=="$"){const g=a[t];if(g!==void 0)switch(g){case 1:return i[t];case 2:return o[t];case 4:return l[t];case 3:return n[t]}else{if(i!==Ce&&de(i,t))return a[t]=1,i[t];if(o!==Ce&&de(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&de(c,t))return a[t]=3,n[t];if(l!==Ce&&de(l,t))return a[t]=4,l[t];lo&&(a[t]=0)}}const h=hi[t];let p,m;if(h)return t==="$attrs"&&Qe(e,"get",t),h(e);if((p=r.__cssModules)&&(p=p[t]))return p;if(l!==Ce&&de(l,t))return a[t]=4,l[t];if(m=s.config.globalProperties,de(m,t))return m[t]},set({_:e},t,l){const{data:i,setupState:o,ctx:n}=e;return o!==Ce&&de(o,t)?(o[t]=l,!0):i!==Ce&&de(i,t)?(i[t]=l,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(n[t]=l,!0)},has({_:{data:e,setupState:t,accessCache:l,ctx:i,appContext:o,propsOptions:n}},a){let r;return!!l[a]||e!==Ce&&de(e,a)||t!==Ce&&de(t,a)||(r=n[0])&&de(r,a)||de(i,a)||de(hi,a)||de(o.config.globalProperties,a)},defineProperty(e,t,l){return l.get!=null?e._.accessCache[t]=0:de(l,"value")&&this.set(e,t,l.value,null),Reflect.defineProperty(e,t,l)}};let lo=!0;function yc(e){const t=Qa(e),l=e.proxy,i=e.ctx;lo=!1,t.beforeCreate&&rn(t.beforeCreate,e,"bc");const{data:o,computed:n,methods:a,watch:r,provide:s,inject:c,created:h,beforeMount:p,mounted:m,beforeUpdate:g,updated:x,activated:P,deactivated:E,beforeDestroy:k,beforeUnmount:_,destroyed:L,unmounted:H,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:B,inheritAttrs:G,components:C,directives:S,filters:F}=t;if(c&&xc(c,i,null,e.appContext.config.unwrapInjectedRef),a)for(const le in a){const se=a[le];ae(se)&&(i[le]=se.bind(l))}if(o){const le=o.call(l,l);Oe(le)&&(e.data=gl(le))}if(lo=!0,n)for(const le in n){const se=n[le],Ie=ae(se)?se.bind(l,l):ae(se.get)?se.get.bind(l,l):rt,Ne=!ae(se)&&ae(se.set)?se.set.bind(l):rt,Ue=Y({get:Ie,set:Ne});Object.defineProperty(i,le,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Ze=>Ue.value=Ze})}if(r)for(const le in r)Ga(r[le],i,l,le);if(s){const le=ae(s)?s.call(l):s;Reflect.ownKeys(le).forEach(se=>{Gt(se,le[se])})}h&&rn(h,e,"c");function j(le,se){te(se)?se.forEach(Ie=>le(Ie.bind(l))):se&&le(se.bind(l))}if(j(Xa,p),j(Je,m),j(uc,g),j(pc,x),j(cc,P),j(hc,E),j(kc,v),j(gc,ee),j(fc,w),j(Yl,_),j(Li,H),j(mc,q),te(B))if(B.length){const le=e.exposed||(e.exposed={});B.forEach(se=>{Object.defineProperty(le,se,{get:()=>l[se],set:Ie=>l[se]=Ie})})}else e.exposed||(e.exposed={});U&&e.render===rt&&(e.render=U),G!=null&&(e.inheritAttrs=G),C&&(e.components=C),S&&(e.directives=S)}function xc(e,t,l=rt,i=!1){te(e)&&(e=io(e));for(const o in e){const n=e[o];let a;Oe(n)?"default"in n?a=Me(n.from||o,n.default,!0):a=Me(n.from||o):a=Me(n),De(a)&&i?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function rn(e,t,l){lt(te(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,l)}function Ga(e,t,l,i){const o=i.includes(".")?$a(l,i):()=>l[i];if(be(e)){const n=t[e];ae(n)&&dt(o,n)}else if(ae(e))dt(o,e.bind(l));else if(Oe(e))if(te(e))e.forEach(n=>Ga(n,t,l,i));else{const n=ae(e.handler)?e.handler.bind(l):t[e.handler];ae(n)&&dt(o,n,e)}}function Qa(e){const t=e.type,{mixins:l,extends:i}=t,{mixins:o,optionsCache:n,config:{optionMergeStrategies:a}}=e.appContext,r=n.get(t);let s;return r?s=r:!o.length&&!l&&!i?s=t:(s={},o.length&&o.forEach(c=>di(s,c,a,!0)),di(s,t,a)),n.set(t,s),s}function di(e,t,l,i=!1){const{mixins:o,extends:n}=t;n&&di(e,n,l,!0),o&&o.forEach(a=>di(e,a,l,!0));for(const a in t)if(!(i&&a==="expose")){const r=Ec[a]||l&&l[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Ec={data:sn,props:Yt,emits:Yt,methods:Yt,computed:Yt,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:Yt,directives:Yt,watch:Rc,provide:sn,inject:Cc};function sn(e,t){return t?e?function(){return Se(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Cc(e,t){return Yt(io(e),io(t))}function io(e){if(te(e)){const t={};for(let l=0;l0)&&!(a&16)){if(a&8){const h=e.vnode.dynamicProps;for(let p=0;p{s=!0;const[m,g]=Za(p,t,!0);Se(a,m),g&&r.push(...g)};!l&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!n&&!s)return i.set(e,al),al;if(te(n))for(let h=0;h-1,g[1]=P<0||x-1||de(g,"default"))&&r.push(p)}}}const c=[a,r];return i.set(e,c),c}function cn(e){return e[0]!=="$"}function hn(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function dn(e,t){return hn(e)===hn(t)}function un(e,t){return te(t)?t.findIndex(l=>dn(l,e)):ae(t)&&dn(t,e)?0:-1}const er=e=>e[0]==="_"||e==="$stable",Ao=e=>te(e)?e.map(ot):[ot(e)],Tc=(e,t,l)=>{if(t._n)return t;const i=He((...o)=>Ao(t(...o)),l);return i._c=!1,i},tr=(e,t,l)=>{const i=e._ctx;for(const o in e){if(er(o))continue;const n=e[o];if(ae(n))t[o]=Tc(o,n,i);else if(n!=null){const a=Ao(n);t[o]=()=>a}}},lr=(e,t)=>{const l=Ao(t);e.slots.default=()=>l},Ac=(e,t)=>{if(e.vnode.shapeFlag&32){const l=t._;l?(e.slots=ke(t),ni(t,"_",l)):tr(t,e.slots={})}else e.slots={},t&&lr(e,t);ni(e.slots,Ti,1)},Ic=(e,t,l)=>{const{vnode:i,slots:o}=e;let n=!0,a=Ce;if(i.shapeFlag&32){const r=t._;r?l&&r===1?n=!1:(Se(o,t),!l&&r===1&&delete o._):(n=!t.$stable,tr(t,o)),a=t}else t&&(lr(e,t),a={default:1});if(n)for(const r in o)!er(r)&&!(r in a)&&delete o[r]};function ir(){return{app:null,config:{isNativeTag:as,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let wc=0;function Oc(e,t){return function(i,o=null){ae(i)||(i=Object.assign({},i)),o!=null&&!Oe(o)&&(o=null);const n=ir(),a=new Set;let r=!1;const s=n.app={_uid:wc++,_component:i,_props:o,_container:null,_context:n,_instance:null,version:Qc,get config(){return n.config},set config(c){},use(c,...h){return a.has(c)||(c&&ae(c.install)?(a.add(c),c.install(s,...h)):ae(c)&&(a.add(c),c(s,...h))),s},mixin(c){return n.mixins.includes(c)||n.mixins.push(c),s},component(c,h){return h?(n.components[c]=h,s):n.components[c]},directive(c,h){return h?(n.directives[c]=h,s):n.directives[c]},mount(c,h,p){if(!r){const m=oe(i,o);return m.appContext=n,h&&t?t(m,c):e(m,c,p),r=!0,s._container=c,c.__vue_app__=s,Ai(m.component)||m.component.proxy}},unmount(){r&&(e(null,s._container),delete s._container.__vue_app__)},provide(c,h){return n.provides[c]=h,s}};return s}}function ui(e,t,l,i,o=!1){if(te(e)){e.forEach((m,g)=>ui(m,t&&(te(t)?t[g]:t),l,i,o));return}if(cl(i)&&!o)return;const n=i.shapeFlag&4?Ai(i.component)||i.component.proxy:i.el,a=o?null:n,{i:r,r:s}=e,c=t&&t.r,h=r.refs===Ce?r.refs={}:r.refs,p=r.setupState;if(c!=null&&c!==s&&(be(c)?(h[c]=null,de(p,c)&&(p[c]=null)):De(c)&&(c.value=null)),ae(s))wt(s,r,12,[a,h]);else{const m=be(s),g=De(s);if(m||g){const x=()=>{if(e.f){const P=m?h[s]:s.value;o?te(P)&&go(P,n):te(P)?P.includes(n)||P.push(n):m?(h[s]=[n],de(p,s)&&(p[s]=h[s])):(s.value=[n],e.k&&(h[e.k]=s.value))}else m?(h[s]=a,de(p,s)&&(p[s]=a)):g&&(s.value=a,e.k&&(h[e.k]=a))};a?(x.id=-1,Be(x,l)):x()}}}let Et=!1;const Jl=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Zl=e=>e.nodeType===8;function Fc(e){const{mt:t,p:l,o:{patchProp:i,createText:o,nextSibling:n,parentNode:a,remove:r,insert:s,createComment:c}}=e,h=(k,_)=>{if(!_.hasChildNodes()){l(null,k,_),ri(),_._vnode=k;return}Et=!1,p(_.firstChild,k,null,null,null),ri(),_._vnode=k,Et&&console.error("Hydration completed but contains mismatches.")},p=(k,_,L,H,U,ee=!1)=>{const w=Zl(k)&&k.data==="[",v=()=>P(k,_,L,H,U,w),{type:q,ref:B,shapeFlag:G,patchFlag:C}=_,S=k.nodeType;_.el=k,C===-2&&(ee=!1,_.dynamicChildren=null);let F=null;switch(q){case Dl:S!==3?_.children===""?(s(_.el=o(""),a(k),k),F=k):F=v():(k.data!==_.children&&(Et=!0,k.data=_.children),F=n(k));break;case Ge:S!==8||w?F=v():F=n(k);break;case Ll:if(S!==1&&S!==3)F=v();else{F=k;const re=!_.children.length;for(let j=0;j<_.staticCount;j++)re&&(_.children+=F.nodeType===1?F.outerHTML:F.data),j===_.staticCount-1&&(_.anchor=F),F=n(F);return F}break;case Pe:w?F=x(k,_,L,H,U,ee):F=v();break;default:if(G&1)S!==1||_.type.toLowerCase()!==k.tagName.toLowerCase()?F=v():F=m(k,_,L,H,U,ee);else if(G&6){_.slotScopeIds=U;const re=a(k);if(t(_,re,null,L,H,Jl(re),ee),F=w?E(k):n(k),F&&Zl(F)&&F.data==="teleport end"&&(F=n(F)),cl(_)){let j;w?(j=oe(Pe),j.anchor=F?F.previousSibling:re.lastChild):j=k.nodeType===3?Mt(""):oe("div"),j.el=k,_.component.subTree=j}}else G&64?S!==8?F=v():F=_.type.hydrate(k,_,L,H,U,ee,e,g):G&128&&(F=_.type.hydrate(k,_,L,H,Jl(a(k)),U,ee,e,p))}return B!=null&&ui(B,null,H,_),F},m=(k,_,L,H,U,ee)=>{ee=ee||!!_.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:B,dirs:G}=_,C=w==="input"&&G||w==="option";if(C||q!==-1){if(G&&ht(_,null,L,"created"),v)if(C||!ee||q&48)for(const F in v)(C&&F.endsWith("value")||Vl(F)&&!Cl(F))&&i(k,F,null,v[F],!1,void 0,L);else v.onClick&&i(k,"onClick",null,v.onClick,!1,void 0,L);let S;if((S=v&&v.onVnodeBeforeMount)&&tt(S,L,_),G&&ht(_,null,L,"beforeMount"),((S=v&&v.onVnodeMounted)||G)&&Na(()=>{S&&tt(S,L,_),G&&ht(_,null,L,"mounted")},H),B&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,_,k,L,H,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else B&8&&k.textContent!==_.children&&(Et=!0,k.textContent=_.children)}return k.nextSibling},g=(k,_,L,H,U,ee,w)=>{w=w||!!_.dynamicChildren;const v=_.children,q=v.length;for(let B=0;B{const{slotScopeIds:w}=_;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),_,v,L,H,U,ee);return q&&Zl(q)&&q.data==="]"?n(_.anchor=q):(Et=!0,s(_.anchor=c("]"),v,q),q)},P=(k,_,L,H,U,ee)=>{if(Et=!0,_.el=null,ee){const q=E(k);for(;;){const B=n(k);if(B&&B!==q)r(B);else break}}const w=n(k),v=a(k);return r(k),l(null,_,v,w,L,H,Jl(v),U),w},E=k=>{let _=0;for(;k;)if(k=n(k),k&&Zl(k)&&(k.data==="["&&_++,k.data==="]")){if(_===0)return n(k);_--}return k};return[h,p]}const Be=Na;function zc(e){return Dc(e,Fc)}function Dc(e,t){const l=us();l.__VUE__=!0;const{insert:i,remove:o,patchProp:n,createElement:a,createText:r,createComment:s,setText:c,setElementText:h,parentNode:p,nextSibling:m,setScopeId:g=rt,cloneNode:x,insertStaticContent:P}=e,E=(u,f,y,A=null,T=null,z=null,$=!1,D=null,V=!!f.dynamicChildren)=>{if(u===f)return;u&&!Wt(u,f)&&(A=X(u),Ye(u,T,z,!0),u=null),f.patchFlag===-2&&(V=!1,f.dynamicChildren=null);const{type:I,ref:Q,shapeFlag:K}=f;switch(I){case Dl:k(u,f,y,A);break;case Ge:_(u,f,y,A);break;case Ll:u==null&&L(f,y,A,$);break;case Pe:S(u,f,y,A,T,z,$,D,V);break;default:K&1?ee(u,f,y,A,T,z,$,D,V):K&6?F(u,f,y,A,T,z,$,D,V):(K&64||K&128)&&I.process(u,f,y,A,T,z,$,D,V,_e)}Q!=null&&T&&ui(Q,u&&u.ref,z,f||u,!f)},k=(u,f,y,A)=>{if(u==null)i(f.el=r(f.children),y,A);else{const T=f.el=u.el;f.children!==u.children&&c(T,f.children)}},_=(u,f,y,A)=>{u==null?i(f.el=s(f.children||""),y,A):f.el=u.el},L=(u,f,y,A)=>{[u.el,u.anchor]=P(u.children,f,y,A,u.el,u.anchor)},H=({el:u,anchor:f},y,A)=>{let T;for(;u&&u!==f;)T=m(u),i(u,y,A),u=T;i(f,y,A)},U=({el:u,anchor:f})=>{let y;for(;u&&u!==f;)y=m(u),o(u),u=y;o(f)},ee=(u,f,y,A,T,z,$,D,V)=>{$=$||f.type==="svg",u==null?w(f,y,A,T,z,$,D,V):B(u,f,T,z,$,D,V)},w=(u,f,y,A,T,z,$,D)=>{let V,I;const{type:Q,props:K,shapeFlag:J,transition:ne,patchFlag:pe,dirs:xe}=u;if(u.el&&x!==void 0&&pe===-1)V=u.el=x(u.el);else{if(V=u.el=a(u.type,z,K&&K.is,K),J&8?h(V,u.children):J&16&&q(u.children,V,null,A,T,z&&Q!=="foreignObject",$,D),xe&&ht(u,null,A,"created"),K){for(const Le in K)Le!=="value"&&!Cl(Le)&&n(V,Le,null,K[Le],z,u.children,A,T,M);"value"in K&&n(V,"value",null,K.value),(I=K.onVnodeBeforeMount)&&tt(I,A,u)}v(V,u,u.scopeId,$,A)}xe&&ht(u,null,A,"beforeMount");const Ee=(!T||T&&!T.pendingBranch)&&ne&&!ne.persisted;Ee&&ne.beforeEnter(V),i(V,f,y),((I=K&&K.onVnodeMounted)||Ee||xe)&&Be(()=>{I&&tt(I,A,u),Ee&&ne.enter(V),xe&&ht(u,null,A,"mounted")},T)},v=(u,f,y,A,T)=>{if(y&&g(u,y),A)for(let z=0;z{for(let I=V;I{const D=f.el=u.el;let{patchFlag:V,dynamicChildren:I,dirs:Q}=f;V|=u.patchFlag&16;const K=u.props||Ce,J=f.props||Ce;let ne;y&&Nt(y,!1),(ne=J.onVnodeBeforeUpdate)&&tt(ne,y,f,u),Q&&ht(f,u,y,"beforeUpdate"),y&&Nt(y,!0);const pe=T&&f.type!=="foreignObject";if(I?G(u.dynamicChildren,I,D,y,A,pe,z):$||Ie(u,f,D,null,y,A,pe,z,!1),V>0){if(V&16)C(D,f,K,J,y,A,T);else if(V&2&&K.class!==J.class&&n(D,"class",null,J.class,T),V&4&&n(D,"style",K.style,J.style,T),V&8){const xe=f.dynamicProps;for(let Ee=0;Ee{ne&&tt(ne,y,f,u),Q&&ht(f,u,y,"updated")},A)},G=(u,f,y,A,T,z,$)=>{for(let D=0;D{if(y!==A){for(const D in A){if(Cl(D))continue;const V=A[D],I=y[D];V!==I&&D!=="value"&&n(u,D,I,V,$,f.children,T,z,M)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in A)&&n(u,D,y[D],null,$,f.children,T,z,M);"value"in A&&n(u,"value",y.value,A.value)}},S=(u,f,y,A,T,z,$,D,V)=>{const I=f.el=u?u.el:r(""),Q=f.anchor=u?u.anchor:r("");let{patchFlag:K,dynamicChildren:J,slotScopeIds:ne}=f;ne&&(D=D?D.concat(ne):ne),u==null?(i(I,y,A),i(Q,y,A),q(f.children,y,Q,T,z,$,D,V)):K>0&&K&64&&J&&u.dynamicChildren?(G(u.dynamicChildren,J,y,T,z,$,D),(f.key!=null||T&&f===T.subTree)&&or(u,f,!0)):Ie(u,f,y,Q,T,z,$,D,V)},F=(u,f,y,A,T,z,$,D,V)=>{f.slotScopeIds=D,u==null?f.shapeFlag&512?T.ctx.activate(f,y,A,$,V):re(f,y,A,T,z,$,V):j(u,f,V)},re=(u,f,y,A,T,z,$)=>{const D=u.component=Bc(u,A,T);if($l(u)&&(D.ctx.renderer=_e),Uc(D),D.asyncDep){if(T&&T.registerDep(D,le),!u.el){const V=D.subTree=oe(Ge);_(null,V,f,y)}return}le(D,u,f,y,T,z,$)},j=(u,f,y)=>{const A=f.component=u.component;if(ic(u,f,y))if(A.asyncDep&&!A.asyncResolved){se(A,f,y);return}else A.next=f,Qs(A.update),A.update();else f.el=u.el,A.vnode=f},le=(u,f,y,A,T,z,$)=>{const D=()=>{if(u.isMounted){let{next:Q,bu:K,u:J,parent:ne,vnode:pe}=u,xe=Q,Ee;Nt(u,!1),Q?(Q.el=pe.el,se(u,Q,$)):Q=pe,K&&Fi(K),(Ee=Q.props&&Q.props.onVnodeBeforeUpdate)&&tt(Ee,ne,Q,pe),Nt(u,!0);const Le=zi(u),it=u.subTree;u.subTree=Le,E(it,Le,p(it.el),X(it),u,T,z),Q.el=Le.el,xe===null&&oc(u,Le.el),J&&Be(J,T),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>tt(Ee,ne,Q,pe),T)}else{let Q;const{el:K,props:J}=f,{bm:ne,m:pe,parent:xe}=u,Ee=cl(f);if(Nt(u,!1),ne&&Fi(ne),!Ee&&(Q=J&&J.onVnodeBeforeMount)&&tt(Q,xe,f),Nt(u,!0),K&&ie){const Le=()=>{u.subTree=zi(u),ie(K,u.subTree,u,T,null)};Ee?f.type.__asyncLoader().then(()=>!u.isUnmounted&&Le()):Le()}else{const Le=u.subTree=zi(u);E(null,Le,y,A,u,T,z),f.el=Le.el}if(pe&&Be(pe,T),!Ee&&(Q=J&&J.onVnodeMounted)){const Le=f;Be(()=>tt(Q,xe,Le),T)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Be(u.a,T),u.isMounted=!0,f=y=A=null}},V=u.effect=new _o(D,()=>To(I),u.scope),I=u.update=()=>V.run();I.id=u.uid,Nt(u,!0),I()},se=(u,f,y)=>{f.component=u;const A=u.vnode.props;u.vnode=f,u.next=null,Lc(u,f.props,A,y),Ic(u,f.children,y),ml(),Ci(void 0,u.update),fl()},Ie=(u,f,y,A,T,z,$,D,V=!1)=>{const I=u&&u.children,Q=u?u.shapeFlag:0,K=f.children,{patchFlag:J,shapeFlag:ne}=f;if(J>0){if(J&128){Ue(I,K,y,A,T,z,$,D,V);return}else if(J&256){Ne(I,K,y,A,T,z,$,D,V);return}}ne&8?(Q&16&&M(I,T,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,A,T,z,$,D,V):M(I,T,z,!0):(Q&8&&h(y,""),ne&16&&q(K,y,A,T,z,$,D,V))},Ne=(u,f,y,A,T,z,$,D,V)=>{u=u||al,f=f||al;const I=u.length,Q=f.length,K=Math.min(I,Q);let J;for(J=0;JQ?M(u,T,z,!0,!1,K):q(f,y,A,T,z,$,D,V,K)},Ue=(u,f,y,A,T,z,$,D,V)=>{let I=0;const Q=f.length;let K=u.length-1,J=Q-1;for(;I<=K&&I<=J;){const ne=u[I],pe=f[I]=V?Lt(f[I]):ot(f[I]);if(Wt(ne,pe))E(ne,pe,y,null,T,z,$,D,V);else break;I++}for(;I<=K&&I<=J;){const ne=u[K],pe=f[J]=V?Lt(f[J]):ot(f[J]);if(Wt(ne,pe))E(ne,pe,y,null,T,z,$,D,V);else break;K--,J--}if(I>K){if(I<=J){const ne=J+1,pe=neJ)for(;I<=K;)Ye(u[I],T,z,!0),I++;else{const ne=I,pe=I,xe=new Map;for(I=pe;I<=J;I++){const We=f[I]=V?Lt(f[I]):ot(f[I]);We.key!=null&&xe.set(We.key,I)}let Ee,Le=0;const it=J-pe+1;let el=!1,Bo=0;const kl=new Array(it);for(I=0;I=it){Ye(We,T,z,!0);continue}let ct;if(We.key!=null)ct=xe.get(We.key);else for(Ee=pe;Ee<=J;Ee++)if(kl[Ee-pe]===0&&Wt(We,f[Ee])){ct=Ee;break}ct===void 0?Ye(We,T,z,!0):(kl[ct-pe]=I+1,ct>=Bo?Bo=ct:el=!0,E(We,f[ct],y,null,T,z,$,D,V),Le++)}const Uo=el?Mc(kl):al;for(Ee=Uo.length-1,I=it-1;I>=0;I--){const We=pe+I,ct=f[We],Wo=We+1{const{el:z,type:$,transition:D,children:V,shapeFlag:I}=u;if(I&6){Ze(u.component.subTree,f,y,A);return}if(I&128){u.suspense.move(f,y,A);return}if(I&64){$.move(u,f,y,_e);return}if($===Pe){i(z,f,y);for(let K=0;KD.enter(z),T);else{const{leave:K,delayLeave:J,afterLeave:ne}=D,pe=()=>i(z,f,y),xe=()=>{K(z,()=>{pe(),ne&&ne()})};J?J(z,pe,xe):xe()}else i(z,f,y)},Ye=(u,f,y,A=!1,T=!1)=>{const{type:z,props:$,ref:D,children:V,dynamicChildren:I,shapeFlag:Q,patchFlag:K,dirs:J}=u;if(D!=null&&ui(D,null,y,u,!0),Q&256){f.ctx.deactivate(u);return}const ne=Q&1&&J,pe=!cl(u);let xe;if(pe&&(xe=$&&$.onVnodeBeforeUnmount)&&tt(xe,f,u),Q&6)W(u.component,y,A);else{if(Q&128){u.suspense.unmount(y,A);return}ne&&ht(u,null,f,"beforeUnmount"),Q&64?u.type.remove(u,f,y,T,_e,A):I&&(z!==Pe||K>0&&K&64)?M(I,f,y,!1,!0):(z===Pe&&K&384||!T&&Q&16)&&M(V,f,y),A&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Be(()=>{xe&&tt(xe,f,u),ne&&ht(u,null,f,"unmounted")},y)},Vt=u=>{const{type:f,el:y,anchor:A,transition:T}=u;if(f===Pe){R(y,A);return}if(f===Ll){U(u);return}const z=()=>{o(y),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(u.shapeFlag&1&&T&&!T.persisted){const{leave:$,delayLeave:D}=T,V=()=>$(y,z);D?D(u.el,z,V):V()}else z()},R=(u,f)=>{let y;for(;u!==f;)y=m(u),o(u),u=y;o(f)},W=(u,f,y)=>{const{bum:A,scope:T,update:z,subTree:$,um:D}=u;A&&Fi(A),T.stop(),z&&(z.active=!1,Ye($,u,f,y)),D&&Be(D,f),Be(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},M=(u,f,y,A=!1,T=!1,z=0)=>{for(let $=z;$u.shapeFlag&6?X(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el),ge=(u,f,y)=>{u==null?f._vnode&&Ye(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Ye,m:Ze,r:Vt,mt:re,mc:q,pc:Ie,pbc:G,n:X,o:e};let ce,ie;return t&&([ce,ie]=t(_e)),{render:ge,hydrate:ce,createApp:Oc(ge,ce)}}function Nt({effect:e,update:t},l){e.allowRecurse=t.allowRecurse=l}function or(e,t,l=!1){const i=e.children,o=t.children;if(te(i)&&te(o))for(let n=0;n>1,e[l[r]]0&&(t[i]=l[n-1]),l[n]=i)}}for(n=l.length,a=l[n-1];n-- >0;)l[n]=a,a=t[a];return l}const Hc=e=>e.__isTeleport,Pe=Symbol(void 0),Dl=Symbol(void 0),Ge=Symbol(void 0),Ll=Symbol(void 0),Tl=[];let at=null;function N(e=!1){Tl.push(at=e?null:[])}function Sc(){Tl.pop(),at=Tl[Tl.length-1]||null}let Ml=1;function pn(e){Ml+=e}function nr(e){return e.dynamicChildren=Ml>0?at||al:null,Sc(),Ml>0&&at&&at.push(e),e}function Z(e,t,l,i,o,n){return nr(fe(e,t,l,i,o,n,!0))}function we(e,t,l,i,o){return nr(oe(e,t,l,i,o,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function Wt(e,t){return e.type===t.type&&e.key===t.key}const Ti="__vInternal",ar=({key:e})=>e!=null?e:null,li=({ref:e,ref_key:t,ref_for:l})=>e!=null?be(e)||De(e)||ae(e)?{i:Ve,r:e,k:t,f:!!l}:e:null;function fe(e,t=null,l=null,i=0,o=null,n=e===Pe?0:1,a=!1,r=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ar(t),ref:t&&li(t),scopeId:Va,slotScopeIds:null,children:l,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:n,patchFlag:i,dynamicProps:o,dynamicChildren:null,appContext:null};return r?(Io(s,l),n&128&&e.normalize(s)):l&&(s.shapeFlag|=be(l)?8:16),Ml>0&&!a&&at&&(s.patchFlag>0||n&6)&&s.patchFlag!==32&&at.push(s),s}const oe=Vc;function Vc(e,t=null,l=null,i=0,o=null,n=!1){if((!e||e===vc)&&(e=Ge),pi(e)){const r=Dt(e,t,!0);return l&&Io(r,l),Ml>0&&!n&&at&&(r.shapeFlag&6?at[at.indexOf(e)]=r:at.push(r)),r.patchFlag|=-2,r}if(Gc(e)&&(e=e.__vccOpts),t){t=Nc(t);let{class:r,style:s}=t;r&&!be(r)&&(t.class=Ke(r)),Oe(s)&&(La(s)&&!te(s)&&(s=Se({},s)),t.style=Sl(s))}const a=be(e)?1:nc(e)?128:Hc(e)?64:Oe(e)?4:ae(e)?2:0;return fe(e,t,l,i,o,a,n,!0)}function Nc(e){return e?La(e)||Ti in e?Se({},e):e:null}function Dt(e,t,l=!1){const{props:i,ref:o,patchFlag:n,children:a}=e,r=t?no(i||{},t):i;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&ar(r),ref:t&&t.ref?l&&o?te(o)?o.concat(li(t)):[o,li(t)]:li(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?n===-1?16:n|16:n,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Dt(e.ssContent),ssFallback:e.ssFallback&&Dt(e.ssFallback),el:e.el,anchor:e.anchor}}function Mt(e=" ",t=0){return oe(Dl,null,e,t)}function jc(e,t){const l=oe(Ll,null,e);return l.staticCount=t,l}function Ae(e="",t=!1){return t?(N(),we(Ge,null,e)):oe(Ge,null,e)}function ot(e){return e==null||typeof e=="boolean"?oe(Ge):te(e)?oe(Pe,null,e.slice()):typeof e=="object"?Lt(e):oe(Dl,null,String(e))}function Lt(e){return e.el===null||e.memo?e:Dt(e)}function Io(e,t){let l=0;const{shapeFlag:i}=e;if(t==null)t=null;else if(te(t))l=16;else if(typeof t=="object")if(i&65){const o=t.default;o&&(o._c&&(o._d=!1),Io(e,o()),o._c&&(o._d=!0));return}else{l=32;const o=t._;!o&&!(Ti in t)?t._ctx=Ve:o===3&&Ve&&(Ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ve},l=32):(t=String(t),i&64?(l=16,t=[Mt(t)]):l=8);e.children=t,e.shapeFlag|=l}function no(...e){const t={};for(let l=0;lFe||Ve,hl=e=>{Fe=e,e.scope.on()},Qt=()=>{Fe&&Fe.scope.off(),Fe=null};function rr(e){return e.vnode.shapeFlag&4}let dl=!1;function Uc(e,t=!1){dl=t;const{props:l,children:i}=e.vnode,o=rr(e);Pc(e,l,o,t),Ac(e,i);const n=o?Wc(e,t):void 0;return dl=!1,n}function Wc(e,t){const l=e.type;e.accessCache=Object.create(null),e.proxy=Ta(new Proxy(e.ctx,_c));const{setup:i}=l;if(i){const o=e.setupContext=i.length>1?qc(e):null;hl(e),ml();const n=wt(i,e,0,[e.props,o]);if(fl(),Qt(),pa(n)){if(n.then(Qt,Qt),t)return n.then(a=>{mn(e,a,t)}).catch(a=>{Nl(a,e,0)});e.asyncDep=n}else mn(e,n,t)}else sr(e,t)}function mn(e,t,l){ae(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Oe(t)&&(e.setupState=Fa(t)),sr(e,l)}let fn;function sr(e,t,l){const i=e.type;if(!e.render){if(!t&&fn&&!i.render){const o=i.template;if(o){const{isCustomElement:n,compilerOptions:a}=e.appContext.config,{delimiters:r,compilerOptions:s}=i,c=Se(Se({isCustomElement:n,delimiters:r},a),s);i.render=fn(o,c)}}e.render=i.render||rt}hl(e),ml(),yc(e),fl(),Qt()}function Xc(e){return new Proxy(e.attrs,{get(t,l){return Qe(e,"get","$attrs"),t[l]}})}function qc(e){const t=i=>{e.exposed=i||{}};let l;return{get attrs(){return l||(l=Xc(e))},slots:e.slots,emit:e.emit,expose:t}}function Ai(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Fa(Ta(e.exposed)),{get(t,l){if(l in t)return t[l];if(l in hi)return hi[l](e)}}))}function Kc(e,t=!0){return ae(e)?e.displayName||e.name:e.name||t&&e.__name}function Gc(e){return ae(e)&&"__vccOpts"in e}const Y=(e,t)=>qs(e,t,dl);function he(e,t,l){const i=arguments.length;return i===2?Oe(t)&&!te(t)?pi(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(i>3?l=Array.prototype.slice.call(arguments,2):i===3&&pi(l)&&(l=[l]),oe(e,t,l))}const Qc="3.2.37",Jc="http://www.w3.org/2000/svg",Xt=typeof document<"u"?document:null,gn=Xt&&Xt.createElement("template"),Zc={insert:(e,t,l)=>{t.insertBefore(e,l||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,l,i)=>{const o=t?Xt.createElementNS(Jc,e):Xt.createElement(e,l?{is:l}:void 0);return e==="select"&&i&&i.multiple!=null&&o.setAttribute("multiple",i.multiple),o},createText:e=>Xt.createTextNode(e),createComment:e=>Xt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,l,i,o,n){const a=l?l.previousSibling:t.lastChild;if(o&&(o===n||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),l),!(o===n||!(o=o.nextSibling)););else{gn.innerHTML=i?`${e}`:e;const r=gn.content;if(i){const s=r.firstChild;for(;s.firstChild;)r.appendChild(s.firstChild);r.removeChild(s)}t.insertBefore(r,l)}return[a?a.nextSibling:t.firstChild,l?l.previousSibling:t.lastChild]}};function eh(e,t,l){const i=e._vtc;i&&(t=(t?[t,...i]:[...i]).join(" ")),t==null?e.removeAttribute("class"):l?e.setAttribute("class",t):e.className=t}function th(e,t,l){const i=e.style,o=be(l);if(l&&!o){for(const n in l)ao(i,n,l[n]);if(t&&!be(t))for(const n in t)l[n]==null&&ao(i,n,"")}else{const n=i.display;o?t!==l&&(i.cssText=l):t&&e.removeAttribute("style"),"_vod"in e&&(i.display=n)}}const kn=/\s*!important$/;function ao(e,t,l){if(te(l))l.forEach(i=>ao(e,t,i));else if(l==null&&(l=""),t.startsWith("--"))e.setProperty(t,l);else{const i=lh(e,t);kn.test(l)?e.setProperty(Jt(i),l.replace(kn,""),"important"):e[i]=l}}const vn=["Webkit","Moz","ms"],Hi={};function lh(e,t){const l=Hi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Hi[t]=i;i=yi(i);for(let o=0;o{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const l=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(l&&Number(l[1])<=53)}return[e,t]})();let ro=0;const ah=Promise.resolve(),rh=()=>{ro=0},sh=()=>ro||(ah.then(rh),ro=cr());function ch(e,t,l,i){e.addEventListener(t,l,i)}function hh(e,t,l,i){e.removeEventListener(t,l,i)}function dh(e,t,l,i,o=null){const n=e._vei||(e._vei={}),a=n[t];if(i&&a)a.value=i;else{const[r,s]=uh(t);if(i){const c=n[t]=ph(i,o);ch(e,r,c,s)}else a&&(hh(e,r,a,s),n[t]=void 0)}}const _n=/(?:Once|Passive|Capture)$/;function uh(e){let t;if(_n.test(e)){t={};let l;for(;l=e.match(_n);)e=e.slice(0,e.length-l[0].length),t[l[0].toLowerCase()]=!0}return[Jt(e.slice(2)),t]}function ph(e,t){const l=i=>{const o=i.timeStamp||cr();(nh||o>=l.attached-1)&<(mh(i,l.value),t,5,[i])};return l.value=e,l.attached=sh(),l}function mh(e,t){if(te(t)){const l=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{l.call(e),e._stopped=!0},t.map(i=>o=>!o._stopped&&i&&i(o))}else return t}const yn=/^on[a-z]/,fh=(e,t,l,i,o=!1,n,a,r,s)=>{t==="class"?eh(e,i,o):t==="style"?th(e,l,i):Vl(t)?fo(t)||dh(e,t,l,i,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gh(e,t,i,o))?oh(e,t,i,n,a,r,s):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),ih(e,t,i,o))};function gh(e,t,l,i){return i?!!(t==="innerHTML"||t==="textContent"||t in e&&yn.test(t)&&ae(l)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||yn.test(t)&&be(l)?!1:t in e}const Ct="transition",vl="animation",Bl=(e,{slots:t})=>he(Ya,kh(e),t);Bl.displayName="Transition";const hr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Bl.props=Se({},Ya.props,hr);const jt=(e,t=[])=>{te(e)?e.forEach(l=>l(...t)):e&&e(...t)},xn=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function kh(e){const t={};for(const C in e)C in hr||(t[C]=e[C]);if(e.css===!1)return t;const{name:l="v",type:i,duration:o,enterFromClass:n=`${l}-enter-from`,enterActiveClass:a=`${l}-enter-active`,enterToClass:r=`${l}-enter-to`,appearFromClass:s=n,appearActiveClass:c=a,appearToClass:h=r,leaveFromClass:p=`${l}-leave-from`,leaveActiveClass:m=`${l}-leave-active`,leaveToClass:g=`${l}-leave-to`}=e,x=vh(o),P=x&&x[0],E=x&&x[1],{onBeforeEnter:k,onEnter:_,onEnterCancelled:L,onLeave:H,onLeaveCancelled:U,onBeforeAppear:ee=k,onAppear:w=_,onAppearCancelled:v=L}=t,q=(C,S,F)=>{$t(C,S?h:r),$t(C,S?c:a),F&&F()},B=(C,S)=>{C._isLeaving=!1,$t(C,p),$t(C,g),$t(C,m),S&&S()},G=C=>(S,F)=>{const re=C?w:_,j=()=>q(S,C,F);jt(re,[S,j]),En(()=>{$t(S,C?s:n),Rt(S,C?h:r),xn(re)||Cn(S,i,P,j)})};return Se(t,{onBeforeEnter(C){jt(k,[C]),Rt(C,n),Rt(C,a)},onBeforeAppear(C){jt(ee,[C]),Rt(C,s),Rt(C,c)},onEnter:G(!1),onAppear:G(!0),onLeave(C,S){C._isLeaving=!0;const F=()=>B(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(H)||Cn(C,i,E,F))}),jt(H,[C,F])},onEnterCancelled(C){q(C,!1),jt(L,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){B(C),jt(U,[C])}})}function vh(e){if(e==null)return null;if(Oe(e))return[Si(e.enter),Si(e.leave)];{const t=Si(e);return[t,t]}}function Si(e){return ga(e)}function Rt(e,t){t.split(/\s+/).forEach(l=>l&&e.classList.add(l)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const{_vtc:l}=e;l&&(l.delete(t),l.size||(e._vtc=void 0))}function En(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let bh=0;function Cn(e,t,l,i){const o=e._endId=++bh,n=()=>{o===e._endId&&i()};if(l)return setTimeout(n,l);const{type:a,timeout:r,propCount:s}=_h(e,t);if(!a)return i();const c=a+"end";let h=0;const p=()=>{e.removeEventListener(c,m),n()},m=g=>{g.target===e&&++h>=s&&p()};setTimeout(()=>{h(l[x]||"").split(", "),o=i(Ct+"Delay"),n=i(Ct+"Duration"),a=Rn(o,n),r=i(vl+"Delay"),s=i(vl+"Duration"),c=Rn(r,s);let h=null,p=0,m=0;t===Ct?a>0&&(h=Ct,p=a,m=n.length):t===vl?c>0&&(h=vl,p=c,m=s.length):(p=Math.max(a,c),h=p>0?a>c?Ct:vl:null,m=h?h===Ct?n.length:s.length:0);const g=h===Ct&&/\b(transform|all)(,|$)/.test(l[Ct+"Property"]);return{type:h,timeout:p,propCount:m,hasTransform:g}}function Rn(e,t){for(;e.lengthPn(l)+Pn(e[i])))}function Pn(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function yh(){return document.body.offsetHeight}const xh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Eh=(e,t)=>l=>{if(!("key"in l))return;const i=Jt(l.key);if(t.some(o=>o===i||xh[o]===i))return e(l)},mi={beforeMount(e,{value:t},{transition:l}){e._vod=e.style.display==="none"?"":e.style.display,l&&t?l.beforeEnter(e):bl(e,t)},mounted(e,{value:t},{transition:l}){l&&t&&l.enter(e)},updated(e,{value:t,oldValue:l},{transition:i}){!t!=!l&&(i?t?(i.beforeEnter(e),bl(e,!0),i.enter(e)):i.leave(e,()=>{bl(e,!1)}):bl(e,t))},beforeUnmount(e,{value:t}){bl(e,t)}};function bl(e,t){e.style.display=t?e._vod:"none"}const Ch=Se({patchProp:fh},Zc);let Vi,Ln=!1;function Rh(){return Vi=Ln?Vi:zc(Ch),Ln=!0,Vi}const Ph=(...e)=>{const t=Rh().createApp(...e),{mount:l}=t;return t.mount=i=>{const o=Lh(i);if(o)return l(o,!0,o instanceof SVGElement)},t};function Lh(e){return be(e)?document.querySelector(e):e}const Th=JSON.parse('{"base":"/YukiHookAPI/","lang":"en-US","title":"Yuki Hook API","description":"An efficient Hook API and Xposed Module solution built in Kotlin","head":[["link",{"rel":"icon","href":"/YukiHookAPI/images/logo.png"}]],"locales":{"/en/":{"lang":"en-US","description":"An efficient Hook API and Xposed Module solution built in Kotlin"},"/zh-cn/":{"lang":"zh-CN","description":"\u4E00\u4E2A\u4F7F\u7528 Kotlin \u6784\u5EFA\u7684\u9AD8\u6548 Hook API \u4E0E Xposed \u6A21\u5757\u89E3\u51B3\u65B9\u6848"}}}');var Ah=([e,t,l])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,l]),Ih=e=>{const t=new Set,l=[];return e.forEach(i=>{const o=Ah(i);t.has(o)||(t.add(o),l.push(i))}),l},Ul=e=>/^(https?:)?\/\//.test(e),wh=e=>/^mailto:/.test(e),Oh=e=>/^tel:/.test(e),Oo=e=>Object.prototype.toString.call(e)==="[object Object]",dr=e=>e.replace(/\/$/,""),ur=e=>e.replace(/^\//,""),pr=(e,t)=>{const l=Object.keys(e).sort((i,o)=>{const n=o.split("/").length-i.split("/").length;return n!==0?n:o.length-i.length});for(const i of l)if(t.startsWith(i))return i;return"/"};const mr={"v-8daa1a0e":b(()=>d(()=>import("./index.html.69699e6b.js"),[])),"v-2d0a870d":b(()=>d(()=>import("./index.html.812a0472.js"),[])),"v-c0c85b84":b(()=>d(()=>import("./index.html.a8b2ff74.js"),[])),"v-7a15fe3b":b(()=>d(()=>import("./about.html.08310c8b.js"),[])),"v-3f851d14":b(()=>d(()=>import("./changelog.html.5a1e8ed3.js"),[])),"v-193cf592":b(()=>d(()=>import("./contacts.html.513cc4ab.js"),[])),"v-ae7b83f2":b(()=>d(()=>import("./future.html.dce8f5dd.js"),[])),"v-64fc7bb8":b(()=>d(()=>import("./home.html.bcbc85a8.js"),[])),"v-7b22efaf":b(()=>d(()=>import("./example.html.906264d8.js"),[])),"v-efb45d4c":b(()=>d(()=>import("./home.html.1a5ea523.js"),[])),"v-277b35ca":b(()=>d(()=>import("./knowledge.html.327dbcd4.js"),[])),"v-77d752a2":b(()=>d(()=>import("./move-to-new-api.html.15a70e95.js"),[])),"v-72889797":b(()=>d(()=>import("./quick-start.html.4ecaa1d2.js"),[])),"v-9cfea7fc":b(()=>d(()=>import("./api-example.html.703dac3e.js"),[])),"v-72c12b7d":b(()=>d(()=>import("./api-exception.html.ec1d66cb.js"),[])),"v-793879e8":b(()=>d(()=>import("./api-using.html.e80b21f1.js"),[])),"v-29d6c1ba":b(()=>d(()=>import("./r8-proguard.html.9a31c8a8.js"),[])),"v-24e71de7":b(()=>d(()=>import("./xposed-using.html.db24f894.js"),[])),"v-55c11626":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.7bf2b952.js"),[])),"v-41967128":b(()=>d(()=>import("./about.html.6fe1a94b.js"),[])),"v-0e6c3476":b(()=>d(()=>import("./changelog.html.f25a879d.js"),[])),"v-6cf86266":b(()=>d(()=>import("./contacts.html.6c6acb04.js"),[])),"v-3106ca14":b(()=>d(()=>import("./future.html.7bfe69da.js"),[])),"v-c8deafb2":b(()=>d(()=>import("./home.html.d99be1b1.js"),[])),"v-c6114c9e":b(()=>d(()=>import("./api-example.html.c63fa1bc.js"),[])),"v-5b43296c":b(()=>d(()=>import("./api-exception.html.1d6d3f63.js"),[])),"v-2ee67152":b(()=>d(()=>import("./api-using.html.435ab3bc.js"),[])),"v-154d6f69":b(()=>d(()=>import("./r8-proguard.html.a71a449a.js"),[])),"v-af73b3d0":b(()=>d(()=>import("./xposed-using.html.fd3d165f.js"),[])),"v-13b430a0":b(()=>d(()=>import("./example.html.d6055c02.js"),[])),"v-6a609e09":b(()=>d(()=>import("./home.html.a2c9c928.js"),[])),"v-b4f1a468":b(()=>d(()=>import("./knowledge.html.6d3aedf3.js"),[])),"v-c0d5dada":b(()=>d(()=>import("./move-to-new-api.html.32688ce4.js"),[])),"v-24840ff0":b(()=>d(()=>import("./quick-start.html.d97731c3.js"),[])),"v-a2fab4d6":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.870af468.js"),[])),"v-12042f1f":b(()=>d(()=>import("./host-inject.html.f40cf853.js"),[])),"v-deaff1d0":b(()=>d(()=>import("./host-lifecycle.html.4f5dc1ba.js"),[])),"v-33c1dc26":b(()=>d(()=>import("./logger.html.5e9b0359.js"),[])),"v-581ddb9c":b(()=>d(()=>import("./reflection.html.64cc7992.js"),[])),"v-2e6ad66c":b(()=>d(()=>import("./xposed-channel.html.c2eab647.js"),[])),"v-68bebbf4":b(()=>d(()=>import("./xposed-storage.html.c41def64.js"),[])),"v-6ac5be8e":b(()=>d(()=>import("./host-inject.html.9a179ae5.js"),[])),"v-357a8d49":b(()=>d(()=>import("./host-lifecycle.html.1f3fa27f.js"),[])),"v-1f0f591e":b(()=>d(()=>import("./logger.html.ee8a0684.js"),[])),"v-001858e3":b(()=>d(()=>import("./reflection.html.a102dd89.js"),[])),"v-598546c6":b(()=>d(()=>import("./xposed-channel.html.9dbfac90.js"),[])),"v-0d914225":b(()=>d(()=>import("./xposed-storage.html.baf94cb8.js"),[])),"v-053599a5":b(()=>d(()=>import("./YukiHookAPI.html.45b0b07e.js"),[])),"v-6931cb54":b(()=>d(()=>import("./YukiHookAPI.html.e04848a7.js"),[])),"v-818b3ca6":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.29e4e02e.js"),[])),"v-b6a815c4":b(()=>d(()=>import("./CurrentClass.html.4feebd58.js"),[])),"v-0183e3fc":b(()=>d(()=>import("./GenericClass.html.f91f2af7.js"),[])),"v-57506200":b(()=>d(()=>import("./HookClass.html.32798492.js"),[])),"v-9af56c1a":b(()=>d(()=>import("./HookResources.html.dc50c8a1.js"),[])),"v-032b1710":b(()=>d(()=>import("./VariousClass.html.cad1a85c.js"),[])),"v-e288ce96":b(()=>d(()=>import("./YukiBaseHooker.html.4d8ae614.js"),[])),"v-36aec5ad":b(()=>d(()=>import("./LoggerFactory.html.418c9971.js"),[])),"v-60cbe1b4":b(()=>d(()=>import("./HookParam.html.5ee4b669.js"),[])),"v-b381a126":b(()=>d(()=>import("./PackageParam.html.1c042abc.js"),[])),"v-71147891":b(()=>d(()=>import("./YukiMemberHookCreator.html.97050a12.js"),[])),"v-5ed1ceee":b(()=>d(()=>import("./YukiResourcesHookCreator.html.24822774.js"),[])),"v-0d0fcec2":b(()=>d(()=>import("./ReflectionFactory.html.8d867f57.js"),[])),"v-65091354":b(()=>d(()=>import("./YukiHookFactory.html.38772f52.js"),[])),"v-30f3ba1e":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.88a6587a.js"),[])),"v-6e47300f":b(()=>d(()=>import("./CurrentClass.html.fc02b099.js"),[])),"v-69c1c226":b(()=>d(()=>import("./GenericClass.html.d170aabe.js"),[])),"v-735374af":b(()=>d(()=>import("./HookClass.html.eafc5336.js"),[])),"v-1c516d22":b(()=>d(()=>import("./HookResources.html.d614b772.js"),[])),"v-66735bfe":b(()=>d(()=>import("./VariousClass.html.f1bd2745.js"),[])),"v-3ac40680":b(()=>d(()=>import("./YukiMemberHookCreator.html.1b4194a5.js"),[])),"v-5e81af42":b(()=>d(()=>import("./YukiResourcesHookCreator.html.26b7c236.js"),[])),"v-516df326":b(()=>d(()=>import("./YukiBaseHooker.html.da0106a6.js"),[])),"v-213d88b3":b(()=>d(()=>import("./ReflectionFactory.html.6c3686a2.js"),[])),"v-448e9585":b(()=>d(()=>import("./YukiHookFactory.html.ec297325.js"),[])),"v-004a009e":b(()=>d(()=>import("./LoggerFactory.html.0582c443.js"),[])),"v-75a9b636":b(()=>d(()=>import("./HookParam.html.ce4dd26d.js"),[])),"v-100b529c":b(()=>d(()=>import("./PackageParam.html.43f71eb0.js"),[])),"v-8293d958":b(()=>d(()=>import("./ComponentTypeFactory.html.d2ac1ebe.js"),[])),"v-7b0abf86":b(()=>d(()=>import("./GraphicsTypeFactory.html.e7bc3f71.js"),[])),"v-5309e4a0":b(()=>d(()=>import("./ViewTypeFactory.html.8d3d974b.js"),[])),"v-a2615d0c":b(()=>d(()=>import("./DefinedTypeFactory.html.18122aff.js"),[])),"v-ba01a600":b(()=>d(()=>import("./VariableTypeFactory.html.7765e062.js"),[])),"v-7fec5836":b(()=>d(()=>import("./ModuleApplication.html.9b13ba2a.js"),[])),"v-7414265a":b(()=>d(()=>import("./YukiHookDataChannel.html.3ba39a72.js"),[])),"v-003862c2":b(()=>d(()=>import("./YukiHookModulePrefs.html.6686d264.js"),[])),"v-1d680acc":b(()=>d(()=>import("./IYukiHookXposedInit.html.1edb2ab0.js"),[])),"v-5e874c45":b(()=>d(()=>import("./ComponentTypeFactory.html.0e696f3b.js"),[])),"v-4ea62475":b(()=>d(()=>import("./GraphicsTypeFactory.html.3a8e0974.js"),[])),"v-ef79cde2":b(()=>d(()=>import("./ViewTypeFactory.html.6f1ad277.js"),[])),"v-5acc12ab":b(()=>d(()=>import("./DefinedTypeFactory.html.f501cdb3.js"),[])),"v-14ec8671":b(()=>d(()=>import("./VariableTypeFactory.html.3fcff96b.js"),[])),"v-4709ad58":b(()=>d(()=>import("./ModuleApplication.html.a3116103.js"),[])),"v-632be8ee":b(()=>d(()=>import("./YukiHookDataChannel.html.4dfa5cde.js"),[])),"v-5858709e":b(()=>d(()=>import("./YukiHookModulePrefs.html.fd9769b9.js"),[])),"v-763140ee":b(()=>d(()=>import("./IYukiHookXposedInit.html.f9c45ab7.js"),[])),"v-4fca92c0":b(()=>d(()=>import("./BaseFinder.html.b35514a7.js"),[])),"v-2a898c66":b(()=>d(()=>import("./DexClassFinder.html.eeff73ba.js"),[])),"v-a71937aa":b(()=>d(()=>import("./ConstructorFinder.html.992a648b.js"),[])),"v-42e0f0ab":b(()=>d(()=>import("./FieldFinder.html.1d409314.js"),[])),"v-a4aa4d00":b(()=>d(()=>import("./MethodFinder.html.c72ff241.js"),[])),"v-19e7277e":b(()=>d(()=>import("./YukiXposedEvent.html.04b564bf.js"),[])),"v-8455e04e":b(()=>d(()=>import("./YukiModuleResources.html.0a43c689.js"),[])),"v-7b087cce":b(()=>d(()=>import("./YukiResForwarder.html.fb57132b.js"),[])),"v-a00b4de6":b(()=>d(()=>import("./YukiResources.html.cc7d79ef.js"),[])),"v-2f64a2d4":b(()=>d(()=>import("./ChannelData.html.0cfc2a2d.js"),[])),"v-87027140":b(()=>d(()=>import("./ChannelPriority.html.986fe0e7.js"),[])),"v-2d4e0da6":b(()=>d(()=>import("./ModuleClassLoader.html.d2aca34b.js"),[])),"v-58ed8298":b(()=>d(()=>import("./PrefsData.html.6dad6201.js"),[])),"v-23e1a817":b(()=>d(()=>import("./ModulePreferenceFragment.html.80fe7649.js"),[])),"v-0f719471":b(()=>d(()=>import("./BaseFinder.html.78fe026a.js"),[])),"v-45111efc":b(()=>d(()=>import("./DexClassFinder.html.20b00e52.js"),[])),"v-1e2cbc9c":b(()=>d(()=>import("./ConstructorFinder.html.f9c8541f.js"),[])),"v-22449c48":b(()=>d(()=>import("./FieldFinder.html.907e1e03.js"),[])),"v-fd738322":b(()=>d(()=>import("./MethodFinder.html.312994ef.js"),[])),"v-0a4de82f":b(()=>d(()=>import("./YukiXposedEvent.html.650e86ef.js"),[])),"v-8266e0ec":b(()=>d(()=>import("./YukiModuleResources.html.1f1ce066.js"),[])),"v-aa38fa86":b(()=>d(()=>import("./YukiResForwarder.html.1d498972.js"),[])),"v-21b3b17e":b(()=>d(()=>import("./YukiResources.html.6eec1ea3.js"),[])),"v-493d37f6":b(()=>d(()=>import("./ChannelData.html.938d0196.js"),[])),"v-b57870de":b(()=>d(()=>import("./ChannelPriority.html.98985126.js"),[])),"v-4b468415":b(()=>d(()=>import("./ModuleClassLoader.html.bd0161de.js"),[])),"v-d99f7f36":b(()=>d(()=>import("./PrefsData.html.8780748d.js"),[])),"v-53bcae06":b(()=>d(()=>import("./ModulePreferenceFragment.html.d3dacf6a.js"),[])),"v-52995ef7":b(()=>d(()=>import("./CountRules.html.3c02ecf2.js"),[])),"v-8d5ce71a":b(()=>d(()=>import("./ModifierRules.html.da6cc7d4.js"),[])),"v-f5b1ffb2":b(()=>d(()=>import("./NameRules.html.fcda0658.js"),[])),"v-652b815b":b(()=>d(()=>import("./ObjectRules.html.5191cd07.js"),[])),"v-08b70f7f":b(()=>d(()=>import("./ConstructorRules.html.c9fab517.js"),[])),"v-21f64ebf":b(()=>d(()=>import("./FieldRules.html.b73735ea.js"),[])),"v-77f11cf9":b(()=>d(()=>import("./MemberRules.html.c7598764.js"),[])),"v-64827680":b(()=>d(()=>import("./MethodRules.html.fc0b2ab3.js"),[])),"v-2d5d16db":b(()=>d(()=>import("./ModuleAppActivity.html.27e14f60.js"),[])),"v-cadbe48e":b(()=>d(()=>import("./ModuleAppCompatActivity.html.93f4410f.js"),[])),"v-78731c50":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.732168b1.js"),[])),"v-1b2ad030":b(()=>d(()=>import("./CountRules.html.d0cc8434.js"),[])),"v-547a3c3c":b(()=>d(()=>import("./ModifierRules.html.2887f814.js"),[])),"v-58c26516":b(()=>d(()=>import("./NameRules.html.e6a7dfc2.js"),[])),"v-80fd32ec":b(()=>d(()=>import("./ObjectRules.html.438e617b.js"),[])),"v-a42f54a4":b(()=>d(()=>import("./ConstructorRules.html.4bf9cde4.js"),[])),"v-3e67a42e":b(()=>d(()=>import("./FieldRules.html.f98ab1a1.js"),[])),"v-2cab152c":b(()=>d(()=>import("./MemberRules.html.83da42b1.js"),[])),"v-5388621e":b(()=>d(()=>import("./MethodRules.html.917c7957.js"),[])),"v-1446bdca":b(()=>d(()=>import("./ModuleAppActivity.html.c911508b.js"),[])),"v-c7cef530":b(()=>d(()=>import("./ModuleAppCompatActivity.html.9b20eb11.js"),[])),"v-44efb702":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.c1c75c5f.js"),[])),"v-5e375d98":b(()=>d(()=>import("./MemberRulesResult.html.b2aa86ec.js"),[])),"v-b8000f3a":b(()=>d(()=>import("./MemberRulesResult.html.9948f9b1.js"),[])),"v-3706649a":b(()=>d(()=>import("./404.html.dccdcb64.js"),[]))};var Ht=(e={})=>e;function fr(e,t,l){var i,o,n;t===void 0&&(t=50),l===void 0&&(l={});var a=(i=l.isImmediate)!=null&&i,r=(o=l.callback)!=null&&o,s=l.maxWait,c=Date.now(),h=[];function p(){if(s!==void 0){var g=Date.now()-c;if(g+t>=s)return s-g}return t}var m=function(){var g=[].slice.call(arguments),x=this;return new Promise(function(P,E){var k=a&&n===void 0;if(n!==void 0&&clearTimeout(n),n=setTimeout(function(){if(n=void 0,c=Date.now(),!a){var L=e.apply(x,g);r&&r(L),h.forEach(function(H){return(0,H.resolve)(L)}),h=[]}},p()),k){var _=e.apply(x,g);return r&&r(_),P(_)}h.push({resolve:P,reject:E})})};return m.cancel=function(g){n!==void 0&&clearTimeout(n),h.forEach(function(x){return(0,x.reject)(g)}),h=[]},m}/*!
    +  * vue-router v4.1.5
    +  * (c) 2022 Eduardo San Martin Morote
    +  * @license MIT
    +  */const nl=typeof window<"u";function Fh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ve=Object.assign;function Ni(e,t){const l={};for(const i in t){const o=t[i];l[i]=st(o)?o.map(e):e(o)}return l}const Al=()=>{},st=Array.isArray,zh=/\/$/,Dh=e=>e.replace(zh,"");function ji(e,t,l="/"){let i,o={},n="",a="";const r=t.indexOf("#");let s=t.indexOf("?");return r=0&&(s=-1),s>-1&&(i=t.slice(0,s),n=t.slice(s+1,r>-1?r:t.length),o=e(n)),r>-1&&(i=i||t.slice(0,r),a=t.slice(r,t.length)),i=Vh(i!=null?i:t,l),{fullPath:i+(n&&"?")+n+a,path:i,query:o,hash:a}}function Mh(e,t){const l=t.query?e(t.query):"";return t.path+(l&&"?")+l+(t.hash||"")}function Tn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Hh(e,t,l){const i=t.matched.length-1,o=l.matched.length-1;return i>-1&&i===o&&ul(t.matched[i],l.matched[o])&&gr(t.params,l.params)&&e(t.query)===e(l.query)&&t.hash===l.hash}function ul(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const l in e)if(!Sh(e[l],t[l]))return!1;return!0}function Sh(e,t){return st(e)?An(e,t):st(t)?An(t,e):e===t}function An(e,t){return st(t)?e.length===t.length&&e.every((l,i)=>l===t[i]):e.length===1&&e[0]===t}function Vh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const l=t.split("/"),i=e.split("/");let o=l.length-1,n,a;for(n=0;n1&&o--;else break;return l.slice(0,o).join("/")+"/"+i.slice(n-(n===i.length?1:0)).join("/")}var Hl;(function(e){e.pop="pop",e.push="push"})(Hl||(Hl={}));var Il;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Il||(Il={}));function Nh(e){if(!e)if(nl){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Dh(e)}const jh=/^[^#]+#/;function $h(e,t){return e.replace(jh,"#")+t}function Yh(e,t){const l=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-l.left-(t.left||0),top:i.top-l.top-(t.top||0)}}const Ii=()=>({left:window.pageXOffset,top:window.pageYOffset});function Bh(e){let t;if("el"in e){const l=e.el,i=typeof l=="string"&&l.startsWith("#"),o=typeof l=="string"?i?document.getElementById(l.slice(1)):document.querySelector(l):l;if(!o)return;t=Yh(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function In(e,t){return(history.state?history.state.position-t:-1)+e}const so=new Map;function Uh(e,t){so.set(e,t)}function Wh(e){const t=so.get(e);return so.delete(e),t}let Xh=()=>location.protocol+"//"+location.host;function kr(e,t){const{pathname:l,search:i,hash:o}=t,n=e.indexOf("#");if(n>-1){let r=o.includes(e.slice(n))?e.slice(n).length:1,s=o.slice(r);return s[0]!=="/"&&(s="/"+s),Tn(s,"")}return Tn(l,e)+i+o}function qh(e,t,l,i){let o=[],n=[],a=null;const r=({state:m})=>{const g=kr(e,location),x=l.value,P=t.value;let E=0;if(m){if(l.value=g,t.value=m,a&&a===x){a=null;return}E=P?m.position-P.position:0}else i(g);o.forEach(k=>{k(l.value,x,{delta:E,type:Hl.pop,direction:E?E>0?Il.forward:Il.back:Il.unknown})})};function s(){a=l.value}function c(m){o.push(m);const g=()=>{const x=o.indexOf(m);x>-1&&o.splice(x,1)};return n.push(g),g}function h(){const{history:m}=window;!m.state||m.replaceState(ve({},m.state,{scroll:Ii()}),"")}function p(){for(const m of n)m();n=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",h)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",h),{pauseListeners:s,listen:c,destroy:p}}function wn(e,t,l,i=!1,o=!1){return{back:e,current:t,forward:l,replaced:i,position:window.history.length,scroll:o?Ii():null}}function Kh(e){const{history:t,location:l}=window,i={value:kr(e,l)},o={value:t.state};o.value||n(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function n(s,c,h){const p=e.indexOf("#"),m=p>-1?(l.host&&document.querySelector("base")?e:e.slice(p))+s:Xh()+e+s;try{t[h?"replaceState":"pushState"](c,"",m),o.value=c}catch(g){console.error(g),l[h?"replace":"assign"](m)}}function a(s,c){const h=ve({},t.state,wn(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});n(s,h,!0),i.value=s}function r(s,c){const h=ve({},o.value,t.state,{forward:s,scroll:Ii()});n(h.current,h,!0);const p=ve({},wn(i.value,s,null),{position:h.position+1},c);n(s,p,!1),i.value=s}return{location:i,state:o,push:r,replace:a}}function Gh(e){e=Nh(e);const t=Kh(e),l=qh(e,t.state,t.location,t.replace);function i(n,a=!0){a||l.pauseListeners(),history.go(n)}const o=ve({location:"",base:e,go:i,createHref:$h.bind(null,e)},t,l);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Qh(e){return typeof e=="string"||e&&typeof e=="object"}function vr(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},br=Symbol("");var On;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(On||(On={}));function pl(e,t){return ve(new Error,{type:e,[br]:!0},t)}function pt(e,t){return e instanceof Error&&br in e&&(t==null||!!(e.type&t))}const Fn="[^/]+?",Jh={sensitive:!1,strict:!1,start:!0,end:!0},Zh=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const l=ve({},Jh,t),i=[];let o=l.start?"^":"";const n=[];for(const c of e){const h=c.length?[]:[90];l.strict&&!c.length&&(o+="/");for(let p=0;pt.length?t.length===1&&t[0]===40+40?1:-1:0}function ld(e,t){let l=0;const i=e.score,o=t.score;for(;l0&&t[t.length-1]<0}const id={type:0,value:""},od=/[a-zA-Z0-9_]/;function nd(e){if(!e)return[[]];if(e==="/")return[[id]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${l})/"${c}": ${g}`)}let l=0,i=l;const o=[];let n;function a(){n&&o.push(n),n=[]}let r=0,s,c="",h="";function p(){!c||(l===0?n.push({type:0,value:c}):l===1||l===2||l===3?(n.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),n.push({type:1,value:c,regexp:h,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),c="")}function m(){c+=s}for(;r{a(_)}:Al}function a(h){if(vr(h)){const p=i.get(h);p&&(i.delete(h),l.splice(l.indexOf(p),1),p.children.forEach(a),p.alias.forEach(a))}else{const p=l.indexOf(h);p>-1&&(l.splice(p,1),h.record.name&&i.delete(h.record.name),h.children.forEach(a),h.alias.forEach(a))}}function r(){return l}function s(h){let p=0;for(;p=0&&(h.record.path!==l[p].record.path||!_r(h,l[p]));)p++;l.splice(p,0,h),h.record.name&&!Mn(h)&&i.set(h.record.name,h)}function c(h,p){let m,g={},x,P;if("name"in h&&h.name){if(m=i.get(h.name),!m)throw pl(1,{location:h});P=m.record.name,g=ve(Dn(p.params,m.keys.filter(_=>!_.optional).map(_=>_.name)),h.params&&Dn(h.params,m.keys.map(_=>_.name))),x=m.stringify(g)}else if("path"in h)x=h.path,m=l.find(_=>_.re.test(x)),m&&(g=m.parse(x),P=m.record.name);else{if(m=p.name?i.get(p.name):l.find(_=>_.re.test(p.path)),!m)throw pl(1,{location:h,currentLocation:p});P=m.record.name,g=ve({},p.params,h.params),x=m.stringify(g)}const E=[];let k=m;for(;k;)E.unshift(k.record),k=k.parent;return{name:P,path:x,params:g,matched:E,meta:hd(E)}}return e.forEach(h=>n(h)),{addRoute:n,resolve:c,removeRoute:a,getRoutes:r,getRecordMatcher:o}}function Dn(e,t){const l={};for(const i of t)i in e&&(l[i]=e[i]);return l}function sd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cd(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const i in e.components)t[i]=typeof l=="boolean"?l:l[i];return t}function Mn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hd(e){return e.reduce((t,l)=>ve(t,l.meta),{})}function Hn(e,t){const l={};for(const i in e)l[i]=i in t?t[i]:e[i];return l}function _r(e,t){return t.children.some(l=>l===e||_r(e,l))}const yr=/#/g,dd=/&/g,ud=/\//g,pd=/=/g,md=/\?/g,xr=/\+/g,fd=/%5B/g,gd=/%5D/g,Er=/%5E/g,kd=/%60/g,Cr=/%7B/g,vd=/%7C/g,Rr=/%7D/g,bd=/%20/g;function Fo(e){return encodeURI(""+e).replace(vd,"|").replace(fd,"[").replace(gd,"]")}function _d(e){return Fo(e).replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function co(e){return Fo(e).replace(xr,"%2B").replace(bd,"+").replace(yr,"%23").replace(dd,"%26").replace(kd,"`").replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function yd(e){return co(e).replace(pd,"%3D")}function xd(e){return Fo(e).replace(yr,"%23").replace(md,"%3F")}function Ed(e){return e==null?"":xd(e).replace(ud,"%2F")}function fi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Cd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;on&&co(n)):[i&&co(i)]).forEach(n=>{n!==void 0&&(t+=(t.length?"&":"")+l,n!=null&&(t+="="+n))})}return t}function Rd(e){const t={};for(const l in e){const i=e[l];i!==void 0&&(t[l]=st(i)?i.map(o=>o==null?null:""+o):i==null?i:""+i)}return t}const Pd=Symbol(""),Vn=Symbol(""),wi=Symbol(""),zo=Symbol(""),ho=Symbol("");function _l(){let e=[];function t(i){return e.push(i),()=>{const o=e.indexOf(i);o>-1&&e.splice(o,1)}}function l(){e=[]}return{add:t,list:()=>e,reset:l}}function Tt(e,t,l,i,o){const n=i&&(i.enterCallbacks[o]=i.enterCallbacks[o]||[]);return()=>new Promise((a,r)=>{const s=p=>{p===!1?r(pl(4,{from:l,to:t})):p instanceof Error?r(p):Qh(p)?r(pl(2,{from:t,to:p})):(n&&i.enterCallbacks[o]===n&&typeof p=="function"&&n.push(p),a())},c=e.call(i&&i.instances[o],t,l,s);let h=Promise.resolve(c);e.length<3&&(h=h.then(s)),h.catch(p=>r(p))})}function $i(e,t,l,i){const o=[];for(const n of e)for(const a in n.components){let r=n.components[a];if(!(t!=="beforeRouteEnter"&&!n.instances[a]))if(Ld(r)){const c=(r.__vccOpts||r)[t];c&&o.push(Tt(c,l,i,n,a))}else{let s=r();o.push(()=>s.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${n.path}"`));const h=Fh(c)?c.default:c;n.components[a]=h;const m=(h.__vccOpts||h)[t];return m&&Tt(m,l,i,n,a)()}))}}return o}function Ld(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Nn(e){const t=Me(wi),l=Me(zo),i=Y(()=>t.resolve(O(e.to))),o=Y(()=>{const{matched:s}=i.value,{length:c}=s,h=s[c-1],p=l.matched;if(!h||!p.length)return-1;const m=p.findIndex(ul.bind(null,h));if(m>-1)return m;const g=jn(s[c-2]);return c>1&&jn(h)===g&&p[p.length-1].path!==g?p.findIndex(ul.bind(null,s[c-2])):m}),n=Y(()=>o.value>-1&&wd(l.params,i.value.params)),a=Y(()=>o.value>-1&&o.value===l.matched.length-1&&gr(l.params,i.value.params));function r(s={}){return Id(s)?t[O(e.replace)?"replace":"push"](O(e.to)).catch(Al):Promise.resolve()}return{route:i,href:Y(()=>i.value.href),isActive:n,isExactActive:a,navigate:r}}const Td=ue({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Nn,setup(e,{slots:t}){const l=gl(Nn(e)),{options:i}=Me(wi),o=Y(()=>({[$n(e.activeClass,i.linkActiveClass,"router-link-active")]:l.isActive,[$n(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const n=t.default&&t.default(l);return e.custom?n:he("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:o.value},n)}}}),Ad=Td;function Id(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function wd(e,t){for(const l in t){const i=t[l],o=e[l];if(typeof i=="string"){if(i!==o)return!1}else if(!st(o)||o.length!==i.length||i.some((n,a)=>n!==o[a]))return!1}return!0}function jn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const $n=(e,t,l)=>e!=null?e:t!=null?t:l,Od=ue({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const i=Me(ho),o=Y(()=>e.route||i.value),n=Me(Vn,0),a=Y(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=Y(()=>o.value.matched[a.value]);Gt(Vn,Y(()=>a.value+1)),Gt(Pd,r),Gt(ho,o);const s=ye();return dt(()=>[s.value,r.value,e.name],([c,h,p],[m,g,x])=>{h&&(h.instances[p]=c,g&&g!==h&&c&&c===m&&(h.leaveGuards.size||(h.leaveGuards=g.leaveGuards),h.updateGuards.size||(h.updateGuards=g.updateGuards))),c&&h&&(!g||!ul(h,g)||!m)&&(h.enterCallbacks[p]||[]).forEach(P=>P(c))},{flush:"post"}),()=>{const c=o.value,h=e.name,p=r.value,m=p&&p.components[h];if(!m)return Yn(l.default,{Component:m,route:c});const g=p.props[h],x=g?g===!0?c.params:typeof g=="function"?g(c):g:null,E=he(m,ve({},x,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(p.instances[h]=null)},ref:s}));return Yn(l.default,{Component:E,route:c})||E}}});function Yn(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const Pr=Od;function Fd(e){const t=rd(e.routes,e),l=e.parseQuery||Cd,i=e.stringifyQuery||Sn,o=e.history,n=_l(),a=_l(),r=_l(),s=wa(mt);let c=mt;nl&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const h=Ni.bind(null,R=>""+R),p=Ni.bind(null,Ed),m=Ni.bind(null,fi);function g(R,W){let M,X;return vr(R)?(M=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,M)}function x(R){const W=t.getRecordMatcher(R);W&&t.removeRoute(W)}function P(){return t.getRoutes().map(R=>R.record)}function E(R){return!!t.getRecordMatcher(R)}function k(R,W){if(W=ve({},W||s.value),typeof R=="string"){const ie=ji(l,R,W.path),u=t.resolve({path:ie.path},W),f=o.createHref(ie.fullPath);return ve(ie,u,{params:m(u.params),hash:fi(ie.hash),redirectedFrom:void 0,href:f})}let M;if("path"in R)M=ve({},R,{path:ji(l,R.path,W.path).path});else{const ie=ve({},R.params);for(const u in ie)ie[u]==null&&delete ie[u];M=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(M,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Mh(i,ve({},R,{hash:_d(ge),path:X.path})),ce=o.createHref(_e);return ve({fullPath:_e,hash:ge,query:i===Sn?Rd(R.query):R.query||{}},X,{redirectedFrom:void 0,href:ce})}function _(R){return typeof R=="string"?ji(l,R,s.value.path):ve({},R)}function L(R,W){if(c!==R)return pl(8,{from:W,to:R})}function H(R){return w(R)}function U(R){return H(ve(_(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:M}=W;let X=typeof M=="function"?M(R):M;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=_(X):{path:X},X.params={}),ve({query:R.query,hash:R.hash,params:"path"in X?{}:R.params},X)}}function w(R,W){const M=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(M);if(ie)return w(ve(_(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||M);const u=M;u.redirectedFrom=W;let f;return!_e&&Hh(i,X,M)&&(f=pl(16,{to:u,from:X}),Ne(X,X,!0,!1)),(f?Promise.resolve(f):q(u,X)).catch(y=>pt(y)?pt(y,2)?y:Ie(y):le(y,u,X)).then(y=>{if(y){if(pt(y,2))return w(ve({replace:ce},_(y.to),{state:typeof y.to=="object"?ve({},ge,y.to.state):ge,force:_e}),W||u)}else y=G(u,X,!0,ce,ge);return B(u,X,y),y})}function v(R,W){const M=L(R,W);return M?Promise.reject(M):Promise.resolve()}function q(R,W){let M;const[X,ge,_e]=zd(R,W);M=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{M.push(Tt(u,R,W))});const ce=v.bind(null,R,W);return M.push(ce),tl(M).then(()=>{M=[];for(const ie of n.list())M.push(Tt(ie,R,W));return M.push(ce),tl(M)}).then(()=>{M=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{M.push(Tt(u,R,W))});return M.push(ce),tl(M)}).then(()=>{M=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)M.push(Tt(u,R,W));else M.push(Tt(ie.beforeEnter,R,W));return M.push(ce),tl(M)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),M=$i(_e,"beforeRouteEnter",R,W),M.push(ce),tl(M))).then(()=>{M=[];for(const ie of a.list())M.push(Tt(ie,R,W));return M.push(ce),tl(M)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function B(R,W,M){for(const X of r.list())X(R,W,M)}function G(R,W,M,X,ge){const _e=L(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};M&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,M,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,M)=>{if(!Vt.listening)return;const X=k(R),ge=ee(X);if(ge){w(ve(ge,{replace:!0}),X).catch(Al);return}c=X;const _e=s.value;nl&&Uh(In(_e.fullPath,M.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!M.delta&&M.type===Hl.pop&&o.go(-1,!1)}).catch(Al),Promise.reject()):(M.delta&&o.go(-M.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(M.delta&&!pt(ce,8)?o.go(-M.delta,!1):M.type===Hl.pop&&pt(ce,20)&&o.go(-1,!1)),B(X,_e,ce)}).catch(Al)}))}let F=_l(),re=_l(),j;function le(R,W,M){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,M)):console.error(R),Promise.reject(R)}function se(){return j&&s.value!==mt?Promise.resolve():new Promise((R,W)=>{F.add([R,W])})}function Ie(R){return j||(j=!R,S(),F.list().forEach(([W,M])=>R?M(R):W()),F.reset()),R}function Ne(R,W,M,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!M&&Wh(In(R.fullPath,0))||(X||!M)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Bh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Ze;const Ye=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:P,resolve:k,options:e,push:H,replace:U,go:Ue,back:()=>Ue(-1),forward:()=>Ue(1),beforeEach:n.add,beforeResolve:a.add,afterEach:r.add,onError:re.add,isReady:se,install(R){const W=this;R.component("RouterLink",Ad),R.component("RouterView",Pr),R.config.globalProperties.$router=W,Object.defineProperty(R.config.globalProperties,"$route",{enumerable:!0,get:()=>O(s)}),nl&&!Ze&&s.value===mt&&(Ze=!0,H(o.location).catch(ge=>{}));const M={};for(const ge in mt)M[ge]=Y(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(M)),R.provide(ho,s);const X=R.unmount;Ye.add(R),R.unmount=function(){Ye.delete(R),Ye.size<1&&(c=mt,C&&C(),C=null,s.value=mt,Ze=!1,j=!1),X()}}};return Vt}function tl(e){return e.reduce((t,l)=>t.then(()=>l()),Promise.resolve())}function zd(e,t){const l=[],i=[],o=[],n=Math.max(t.matched.length,e.matched.length);for(let a=0;aul(c,r))?i.push(r):l.push(r));const s=e.matched[a];s&&(t.matched.find(c=>ul(c,s))||o.push(s))}return[l,i,o]}function Zt(){return Me(wi)}function St(){return Me(zo)}const Dd=({headerLinkSelector:e,headerAnchorSelector:t,delay:l,offset:i=5})=>{const o=Zt(),a=fr(()=>{var P,E,k,_;const r=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(r-0)m.some(H=>H.hash===L.hash));for(let L=0;L=((E=(P=H.parentElement)==null?void 0:P.offsetTop)!=null?E:0)-i,w=!U||r<((_=(k=U.parentElement)==null?void 0:k.offsetTop)!=null?_:0)-i;if(!(ee&&w))continue;const q=decodeURIComponent(o.currentRoute.value.hash),B=decodeURIComponent(H.hash);if(q===B)return;if(p){for(let G=L+1;G{window.addEventListener("scroll",a)}),Yl(()=>{window.removeEventListener("scroll",a)})},Bn=async(e,t)=>{const{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=l)},Md="a.sidebar-item",Hd=".header-anchor",Sd=300,Vd=5,Nd=Ht({setup(){Dd({headerLinkSelector:Md,headerAnchorSelector:Hd,delay:Sd,offset:Vd})}}),Un=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,jd=()=>window.scrollTo({top:0,behavior:"smooth"});const $d=ue({name:"BackToTop",setup(){const e=ye(0),t=Y(()=>e.value>300),l=fr(()=>{e.value=Un()},100);Je(()=>{e.value=Un(),window.addEventListener("scroll",()=>l())});const i=he("div",{class:"back-to-top",onClick:jd});return()=>he(Bl,{name:"back-to-top"},()=>t.value?i:null)}}),Yd=Ht({rootComponents:[$d]});const Bd=he("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[he("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),he("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Ud=ue({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Wl(),l=Y(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Bd,he("span",{class:"external-link-icon-sr-only"},l.value.openInNewWindow)])}}),Wd={"/en/":{openInNewWindow:"open in new window"},"/zh-cn/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00"},"/":{openInNewWindow:"open in new window"}},Xd=Ht({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Bt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function S(){}C(S,S)},o=function(C){var S=C.target;if(S===q){x();return}L.indexOf(S)!==-1&&P({target:S})},n=function(){if(!(U||!v.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(ee-C)>w.scrollOffset&&setTimeout(x,150)}},a=function(C){var S=C.key||C.keyCode;(S==="Escape"||S==="Esc"||S===27)&&x()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C;if(C.background&&(q.style.background=C.background),C.container&&C.container instanceof Object&&(S.container=Bt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Bt({},w,S),L.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Bt({},w,C))},c=function(){for(var C=arguments.length,S=Array(C),F=0;F0?S.reduce(function(j,le){return[].concat(j,Xn(le))},[]):L;return re.forEach(function(j){j.classList.remove("medium-zoom-image"),j.dispatchEvent(ll("medium-zoom:detach",{detail:{zoom:B}}))}),L=L.filter(function(j){return re.indexOf(j)===-1}),B},p=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.addEventListener("medium-zoom:"+C,S,F)}),H.push({type:"medium-zoom:"+C,listener:S,options:F}),B},m=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.removeEventListener("medium-zoom:"+C,S,F)}),H=H.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),B},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target,F=function(){var j={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},le=void 0,se=void 0;if(w.container)if(w.container instanceof Object)j=Bt({},j,w.container),le=j.width-j.left-j.right-w.margin*2,se=j.height-j.top-j.bottom-w.margin*2;else{var Ie=ii(w.container)?w.container:document.querySelector(w.container),Ne=Ie.getBoundingClientRect(),Ue=Ne.width,Ze=Ne.height,Ye=Ne.left,Vt=Ne.top;j=Bt({},j,{width:Ue,height:Ze,left:Ye,top:Vt})}le=le||j.width-w.margin*2,se=se||j.height-w.margin*2;var R=v.zoomedHd||v.original,W=Wn(R)?le:R.naturalWidth||le,M=Wn(R)?se:R.naturalHeight||se,X=R.getBoundingClientRect(),ge=X.top,_e=X.left,ce=X.width,ie=X.height,u=Math.min(W,le)/ce,f=Math.min(M,se)/ie,y=Math.min(u,f),A=(-_e+(le-ce)/2+w.margin+j.left)/y,T=(-ge+(se-ie)/2+w.margin+j.top)/y,z="scale("+y+") translate3d("+A+"px, "+T+"px, 0)";v.zoomed.style.transform=z,v.zoomedHd&&(v.zoomedHd.style.transform=z)};return new i(function(re){if(S&&L.indexOf(S)===-1){re(B);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:B}})),re(B)};if(v.zoomed){re(B);return}if(S)v.original=S;else if(L.length>0){var le=L;v.original=le[0]}else{re(B);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:B}})),ee=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,U=!0,v.zoomed=Gd(v.original),document.body.appendChild(q),w.template){var se=ii(w.template)?w.template:document.querySelector(w.template);v.template=document.createElement("div"),v.template.appendChild(se.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",x),v.zoomed.addEventListener("transitionend",j),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(Ie),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,F()};var Ie=setInterval(function(){v.zoomedHd.complete&&(clearInterval(Ie),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Ne=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Ne),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F()})}else F()})},x=function(){return new i(function(C){if(U||!v.original){C(B);return}var S=function F(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(q),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),U=!1,v.zoomed.removeEventListener("transitionend",F),v.original.dispatchEvent(ll("medium-zoom:closed",{detail:{zoom:B}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(B)};U=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(ll("medium-zoom:close",{detail:{zoom:B}})),v.zoomed.addEventListener("transitionend",S)})},P=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target;return v.original?x():g({target:S})},E=function(){return w},k=function(){return L},_=function(){return v.original},L=[],H=[],U=!1,ee=0,w=l,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?w=t:(t||typeof t=="string")&&c(t),w=Bt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},w);var q=Kd(w.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",n),window.addEventListener("resize",x);var B={open:g,close:x,toggle:P,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:_};return B};function Jd(e,t){t===void 0&&(t={});var l=t.insertAt;if(!(!e||typeof document>"u")){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",l==="top"&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var Zd=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Jd(Zd);const eu=Qd,tu=Symbol("mediumZoom");const lu=".theme-default-content > img, .theme-default-content :not(a) > img",iu={},ou=300,nu=Ht({enhance({app:e,router:t}){const l=eu(iu);l.refresh=(i=lu)=>{l.detach(),l.attach(i)},e.provide(tu,l),t.afterEach(()=>{setTimeout(()=>l.refresh(),ou)})}});/**
    + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
    + * @license MIT
    + */const me={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
    '},status:null,set:e=>{const t=me.isStarted();e=Yi(e,me.settings.minimum,1),me.status=e===1?null:e;const l=me.render(!t),i=l.querySelector(me.settings.barSelector),o=me.settings.speed,n=me.settings.easing;return l.offsetWidth,au(a=>{ti(i,{transform:"translate3d("+qn(e)+"%,0,0)",transition:"all "+o+"ms "+n}),e===1?(ti(l,{transition:"none",opacity:"1"}),l.offsetWidth,setTimeout(function(){ti(l,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){me.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),me},isStarted:()=>typeof me.status=="number",start:()=>{me.status||me.set(0);const e=()=>{setTimeout(()=>{!me.status||(me.trickle(),e())},me.settings.trickleSpeed)};return me.settings.trickle&&e(),me},done:e=>!e&&!me.status?me:me.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=me.status;return t?(typeof e!="number"&&(e=(1-t)*Yi(Math.random()*t,.1,.95)),t=Yi(t+e,0,.994),me.set(t)):me.start()},trickle:()=>me.inc(Math.random()*me.settings.trickleRate),render:e=>{if(me.isRendered())return document.getElementById("nprogress");Kn(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=me.settings.template;const l=t.querySelector(me.settings.barSelector),i=e?"-100":qn(me.status||0),o=document.querySelector(me.settings.parent);return ti(l,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),o!==document.body&&Kn(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Gn(document.documentElement,"nprogress-busy"),Gn(document.querySelector(me.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&ru(e)},isRendered:()=>!!document.getElementById("nprogress")},Yi=(e,t,l)=>el?l:e,qn=e=>(-1+e)*100,au=function(){const e=[];function t(){const l=e.shift();l&&l(t)}return function(l){e.push(l),e.length===1&&t()}}(),ti=function(){const e=["Webkit","O","Moz","ms"],t={};function l(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(r,s){return s.toUpperCase()})}function i(a){const r=document.body.style;if(a in r)return a;let s=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let h;for(;s--;)if(h=e[s]+c,h in r)return h;return a}function o(a){return a=l(a),t[a]||(t[a]=i(a))}function n(a,r,s){r=o(r),a.style[r]=s}return function(a,r){for(const s in r){const c=r[s];c!==void 0&&Object.prototype.hasOwnProperty.call(r,s)&&n(a,s,c)}}}(),Lr=(e,t)=>(typeof e=="string"?e:Do(e)).indexOf(" "+t+" ")>=0,Kn=(e,t)=>{const l=Do(e),i=l+t;Lr(l,t)||(e.className=i.substring(1))},Gn=(e,t)=>{const l=Do(e);if(!Lr(e,t))return;const i=l.replace(" "+t+" "," ");e.className=i.substring(1,i.length-1)},Do=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),ru=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const su=()=>{Je(()=>{const e=Zt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(l=>{t.has(l.path)||me.start()}),e.afterEach(l=>{t.add(l.path),me.done()})})},cu=Ht({setup(){su()}}),hu=JSON.parse(`{"logo":"/images/logo.png","repo":"https://github.com/fankes/YukiHookAPI","docsRepo":"https://github.com/fankes/YukiHookAPI","docsBranch":"master","docsDir":"docs-source/src","editLinkPattern":":repo/edit/:branch/:path","sidebar":{"/en/":[{"text":"Get Started","collapsible":true,"children":["/en/guide/home","/en/guide/knowledge","/en/guide/quick-start","/en/guide/example","/en/guide/move-to-new-api"]},{"text":"Configs","collapsible":true,"children":["/en/config/api-example","/en/config/api-exception","/en/config/xposed-using","/en/config/api-using","/en/config/r8-proguard"]},{"text":"Tools","collapsible":true,"children":["/en/tools/yukihookapi-projectbuilder"]},{"text":"API Document","collapsible":true,"children":["/en/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"Special Features\xA0","collapsible":true,"children":["/en/api/special-features/reflection","/en/api/special-features/logger","/en/api/special-features/xposed-storage","/en/api/special-features/xposed-channel","/en/api/special-features/host-lifecycle","/en/api/special-features/host-inject"]}]},{"text":"About","collapsible":true,"children":["/en/about/changelog","/en/about/future","/en/about/contacts","/en/about/about"]}],"/zh-cn/":[{"text":"\u5165\u95E8","collapsible":true,"children":["/zh-cn/guide/home","/zh-cn/guide/knowledge","/zh-cn/guide/quick-start","/zh-cn/guide/example","/zh-cn/guide/move-to-new-api"]},{"text":"\u914D\u7F6E","collapsible":true,"children":["/zh-cn/config/api-example","/zh-cn/config/api-exception","/zh-cn/config/xposed-using","/zh-cn/config/api-using","/zh-cn/config/r8-proguard"]},{"text":"\u5DE5\u5177","collapsible":true,"children":["/zh-cn/tools/yukihookapi-projectbuilder"]},{"text":"API \u6587\u6863","collapsible":true,"children":["/zh-cn/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"\u7279\u8272\u529F\u80FD\xA0","collapsible":true,"children":["/zh-cn/api/special-features/reflection","/zh-cn/api/special-features/logger","/zh-cn/api/special-features/xposed-storage","/zh-cn/api/special-features/xposed-channel","/zh-cn/api/special-features/host-lifecycle","/zh-cn/api/special-features/host-inject"]}]},{"text":"\u5173\u4E8E","collapsible":true,"children":["/zh-cn/about/changelog","/zh-cn/about/future","/zh-cn/about/contacts","/zh-cn/about/about"]}]},"sidebarDepth":2,"locales":{"/en/":{"navbar":[{"text":"Navigation","children":[{"text":"Get Started","children":[{"text":"Introduce","link":"/en/guide/home"},{"text":"Basic Knowledge","link":"/en/guide/knowledge"},{"text":"Quick Start","link":"/en/guide/quick-start"},{"text":"Usage Example","link":"/en/guide/example"},{"text":"Migrate from Xposed API","link":"/en/guide/move-to-new-api"}]},{"text":"Configs","children":[{"text":"API Basic Configs","link":"/en/config/api-example"},{"text":"API Exception Handling","link":"/en/config/api-exception"},{"text":"Use as Xposed Module Configs","link":"/en/config/xposed-using"},{"text":"Use as Hook API Configs","link":"/en/config/api-using"},{"text":"R8 & Proguard Obfuscate","link":"/en/config/r8-proguard"}]},{"text":"Tools","children":[{"text":"YukiHookAPI Project Builder","link":"/en/tools/yukihookapi-projectbuilder"}]},{"text":"API Document","children":[{"text":"Document Introduction","link":"/en/api/home"},{"text":"Public API","link":"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","activeMatch":"/en/api/public/"},{"text":"Special Features","link":"/en/api/special-features/reflection","activeMatch":"/en/api/special-features/"}]},{"text":"About","children":[{"text":"Changelog","link":"/en/about/changelog"},{"text":"Looking for Future","link":"/en/about/future"},{"text":"Contact Us","link":"/en/about/contacts"},{"text":"About this Document","link":"/en/about/about"}]}]},{"text":"Contact Us","link":"/en/about/contacts"}],"selectLanguageText":"English (US)","selectLanguageName":"English","editLinkText":"Edit this page on Github","tip":"Tips","warning":"Notice","danger":"Pay Attention"},"/zh-cn/":{"navbar":[{"text":"\u5BFC\u822A","children":[{"text":"\u5165\u95E8","children":[{"text":"\u4ECB\u7ECD","link":"/zh-cn/guide/home"},{"text":"\u57FA\u7840\u77E5\u8BC6","link":"/zh-cn/guide/knowledge"},{"text":"\u5FEB\u901F\u5F00\u59CB","link":"/zh-cn/guide/quick-start"},{"text":"\u7528\u6CD5\u793A\u4F8B","link":"/zh-cn/guide/example"},{"text":"\u4ECE Xposed API \u8FC1\u79FB","link":"/zh-cn/guide/move-to-new-api"}]},{"text":"\u914D\u7F6E","children":[{"text":"API \u57FA\u672C\u914D\u7F6E","link":"/zh-cn/config/api-example"},{"text":"API \u5F02\u5E38\u5904\u7406","link":"/zh-cn/config/api-exception"},{"text":"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E","link":"/zh-cn/config/xposed-using"},{"text":"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E","link":"/zh-cn/config/api-using"},{"text":"R8 \u4E0E Proguard \u6DF7\u6DC6","link":"/zh-cn/config/r8-proguard"}]},{"text":"\u5DE5\u5177","children":[{"text":"YukiHookAPI \u6784\u5EFA\u5DE5\u5177","link":"/zh-cn/tools/yukihookapi-projectbuilder"}]},{"text":"API \u6587\u6863","children":[{"text":"\u6587\u6863\u4ECB\u7ECD","link":"/zh-cn/api/home"},{"text":"Public API","link":"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","activeMatch":"/zh-cn/api/public/"},{"text":"\u7279\u8272\u529F\u80FD","link":"/zh-cn/api/special-features/reflection","activeMatch":"/zh-cn/api/special-features/"}]},{"text":"\u5173\u4E8E","children":[{"text":"\u66F4\u65B0\u65E5\u5FD7","link":"/zh-cn/about/changelog"},{"text":"\u5C55\u671B\u672A\u6765","link":"/zh-cn/about/future"},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"},{"text":"\u5173\u4E8E\u6B64\u6587\u6863","link":"/zh-cn/about/about"}]}]},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"}],"selectLanguageText":"\u7B80\u4F53\u4E2D\u6587 (CN)","selectLanguageName":"\u7B80\u4F53\u4E2D\u6587","editLinkText":"\u5728 Github \u4E0A\u7F16\u8F91\u6B64\u9875","notFound":["\u8FD9\u91CC\u4EC0\u4E48\u90FD\u6CA1\u6709","\u6211\u4EEC\u600E\u4E48\u5230\u8FD9\u6765\u4E86\uFF1F","\u8FD9\u662F\u4E00\u4E2A 404 \u9875\u9762","\u770B\u8D77\u6765\u6211\u4EEC\u8FDB\u5165\u4E86\u9519\u8BEF\u7684\u94FE\u63A5"],"backToHome":"\u56DE\u5230\u9996\u9875","contributorsText":"\u8D21\u732E\u8005","lastUpdatedText":"\u4E0A\u6B21\u66F4\u65B0","tip":"\u5C0F\u63D0\u793A","warning":"\u6CE8\u610F","danger":"\u7279\u522B\u6CE8\u610F","openInNewWindow":"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00","toggleColorMode":"\u5207\u6362\u989C\u8272\u6A21\u5F0F"},"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Tr=ye(hu),du=()=>Tr;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Tr.value=e});const Ar=Symbol(""),uu=()=>{const e=Me(Ar);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},pu=(e,t)=>{var l;return{...e,...(l=e.locales)==null?void 0:l[t]}},mu=Ht({enhance({app:e}){const t=du(),l=e._context.provides[No],i=Y(()=>pu(t.value,l.value));e.provide(Ar,i),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return i.value}}})}}),fu=ue({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,l)=>(N(),Z("span",{class:Ke(["badge",e.type]),style:Sl({verticalAlign:e.vertical})},[Re(t.$slots,"default",{},()=>[Mt(ze(e.text),1)])],6))}}),Te=(e,t)=>{const l=e.__vccOpts||e;for(const[i,o]of t)l[i]=o;return l},gu=Te(fu,[["__file","Badge.vue"]]),ku=ue({name:"CodeGroup",setup(e,{slots:t}){const l=ye(-1),i=ye([]),o=(r=l.value)=>{r{r>0?l.value=r-1:l.value=i.value.length-1,i.value[l.value].focus()},a=(r,s)=>{r.key===" "||r.key==="Enter"?(r.preventDefault(),l.value=s):r.key==="ArrowRight"?(r.preventDefault(),o(s)):r.key==="ArrowLeft"&&(r.preventDefault(),n(s))};return()=>{var s;const r=(((s=t.default)==null?void 0:s.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return r.length===0?null:(l.value<0||l.value>r.length-1?(l.value=r.findIndex(c=>c.props.active===""||c.props.active===!0),l.value===-1&&(l.value=0)):r.forEach((c,h)=>{c.props.active=h===l.value}),he("div",{class:"code-group"},[he("div",{class:"code-group__nav"},he("ul",{class:"code-group__ul"},r.map((c,h)=>{const p=h===l.value;return he("li",{class:"code-group__li"},he("button",{ref:m=>{m&&(i.value[h]=m)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":p},ariaPressed:p,ariaExpanded:p,onClick:()=>l.value=h,onKeydown:m=>a(m,h)},c.props.title))}))),r]))}}}),vu=["aria-selected"],bu=ue({name:"CodeGroupItem"}),_u=ue({...bu,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,l)=>(N(),Z("div",{class:Ke(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Re(t.$slots,"default")],10,vu))}}),yu=Te(_u,[["__file","CodeGroupItem.vue"]]);var Qn;const Ir=typeof window<"u",xu=e=>typeof e=="function",Eu=e=>typeof e=="string",Bi=()=>{};Ir&&((Qn=window==null?void 0:window.navigator)==null?void 0:Qn.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function gi(e){return typeof e=="function"?e():O(e)}function Cu(e,t){function l(...i){e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})}return l}const wr=e=>e();function Ru(e=wr){const t=ye(!0);function l(){t.value=!1}function i(){t.value=!0}return{isActive:t,pause:l,resume:i,eventFilter:(...n)=>{t.value&&e(...n)}}}function Pu(e){return e}function Or(e){return fs()?(gs(e),!0):!1}function Lu(e,t=!0){wo()?Xa(e):t?e():jl(e)}function Tu(e,t=!0){wo()?Je(e):t?e():jl(e)}function Au(e=!1,t={}){const{truthyValue:l=!0,falsyValue:i=!1}=t,o=De(e),n=ye(e);function a(r){if(arguments.length)return n.value=r,n.value;{const s=gi(l);return n.value=n.value===s?gi(i):s,n.value}}return o?a:[n,a]}var Jn=Object.getOwnPropertySymbols,Iu=Object.prototype.hasOwnProperty,wu=Object.prototype.propertyIsEnumerable,Ou=(e,t)=>{var l={};for(var i in e)Iu.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&Jn)for(var i of Jn(e))t.indexOf(i)<0&&wu.call(e,i)&&(l[i]=e[i]);return l};function Fu(e,t,l={}){const i=l,{eventFilter:o=wr}=i,n=Ou(i,["eventFilter"]);return dt(e,Cu(o,t),n)}var zu=Object.defineProperty,Du=Object.defineProperties,Mu=Object.getOwnPropertyDescriptors,ki=Object.getOwnPropertySymbols,Fr=Object.prototype.hasOwnProperty,zr=Object.prototype.propertyIsEnumerable,Zn=(e,t,l)=>t in e?zu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,Hu=(e,t)=>{for(var l in t||(t={}))Fr.call(t,l)&&Zn(e,l,t[l]);if(ki)for(var l of ki(t))zr.call(t,l)&&Zn(e,l,t[l]);return e},Su=(e,t)=>Du(e,Mu(t)),Vu=(e,t)=>{var l={};for(var i in e)Fr.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&ki)for(var i of ki(e))t.indexOf(i)<0&&zr.call(e,i)&&(l[i]=e[i]);return l};function Nu(e,t,l={}){const i=l,{eventFilter:o}=i,n=Vu(i,["eventFilter"]),{eventFilter:a,pause:r,resume:s,isActive:c}=Ru(o);return{stop:Fu(e,t,Su(Hu({},n),{eventFilter:a})),pause:r,resume:s,isActive:c}}function ju(e){var t;const l=gi(e);return(t=l==null?void 0:l.$el)!=null?t:l}const vi=Ir?window:void 0;function $u(...e){let t,l,i,o;if(Eu(e[0])?([l,i,o]=e,t=vi):[t,l,i,o]=e,!t)return Bi;let n=Bi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Bi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Yu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Tu(i,t),l}function Bu(e,t={}){const{window:l=vi}=t,i=Yu(()=>l&&"matchMedia"in l&&typeof l.matchMedia=="function");let o;const n=ye(!1),a=()=>{!i.value||(o||(o=l.matchMedia(e)),n.value=o.matches)};return Lu(()=>{a(),o&&("addEventListener"in o?o.addEventListener("change",a):o.addListener(a),Or(()=>{"removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a)}))}),n}const uo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},po="__vueuse_ssr_handlers__";uo[po]=uo[po]||{};const Uu=uo[po];function Wu(e,t){return Uu[e]||t}function Xu(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var qu=Object.defineProperty,ea=Object.getOwnPropertySymbols,Ku=Object.prototype.hasOwnProperty,Gu=Object.prototype.propertyIsEnumerable,ta=(e,t,l)=>t in e?qu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,la=(e,t)=>{for(var l in t||(t={}))Ku.call(t,l)&&ta(e,l,t[l]);if(ea)for(var l of ea(t))Gu.call(t,l)&&ta(e,l,t[l]);return e};const Qu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Ju(e,t,l,i={}){var o;const{flush:n="pre",deep:a=!0,listenToStorageChanges:r=!0,writeDefaults:s=!0,mergeDefaults:c=!1,shallow:h,window:p=vi,eventFilter:m,onError:g=w=>{console.error(w)}}=i,x=(h?wa:ye)(t);if(!l)try{l=Wu("getDefaultStorage",()=>{var w;return(w=vi)==null?void 0:w.localStorage})()}catch(w){g(w)}if(!l)return x;const P=gi(t),E=Xu(P),k=(o=i.serializer)!=null?o:Qu[E],{pause:_,resume:L}=Nu(x,()=>H(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function H(w){try{w==null?l.removeItem(e):l.setItem(e,k.write(w))}catch(v){g(v)}}function U(w){if(!(w&&w.key!==e)){_();try{const v=w?w.newValue:l.getItem(e);if(v==null)return s&&P!==null&&l.setItem(e,k.write(P)),P;if(!w&&c){const q=k.read(v);return xu(c)?c(q,P):E==="object"&&!Array.isArray(q)?la(la({},P),q):q}else return typeof v!="string"?v:k.read(v)}catch(v){g(v)}finally{L()}}}function ee(w){w&&w.key!==e||(x.value=U(w))}}function Zu(e){return Bu("(prefers-color-scheme: dark)",e)}var ia;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ia||(ia={}));var ep=Object.defineProperty,oa=Object.getOwnPropertySymbols,tp=Object.prototype.hasOwnProperty,lp=Object.prototype.propertyIsEnumerable,na=(e,t,l)=>t in e?ep(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,ip=(e,t)=>{for(var l in t||(t={}))tp.call(t,l)&&na(e,l,t[l]);if(oa)for(var l of oa(t))lp.call(t,l)&&na(e,l,t[l]);return e};const op={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};ip({linear:Pu},op);const $e=()=>uu(),Dr=Symbol(""),Mo=()=>{const e=Me(Dr);if(!e)throw new Error("useDarkMode() is called without provider.");return e},np=()=>{const e=$e(),t=Zu(),l=Ju("vuepress-color-scheme",e.value.colorMode),i=Y({get(){return e.value.colorModeSwitch?l.value==="auto"?t.value:l.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?l.value="auto":l.value=o?"dark":"light"}});Gt(Dr,i),ap(i)},ap=e=>{const t=(l=e.value)=>{const i=window==null?void 0:window.document.querySelector("html");i==null||i.classList.toggle("dark",l)};Je(()=>{dt(e,t,{immediate:!0})}),Li(()=>t())},Mr=(...e)=>{const l=Zt().resolve(...e),i=l.matched[l.matched.length-1];if(!(i!=null&&i.redirect))return l;const{redirect:o}=i,n=ae(o)?o(l):o,a=be(n)?{path:n}:n;return Mr({hash:l.hash,query:l.query,params:l.params,...a})},Ho=e=>{const t=Mr(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Ui=null,yl=null;const rp={wait:()=>Ui,pending:()=>{Ui=new Promise(e=>yl=e)},resolve:()=>{yl==null||yl(),Ui=null,yl=null}},Hr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=Me(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=Y(()=>cp(t.value,e.value));Gt(Sr,l)},cp=(e,t)=>{var o,n,a,r;const l=(n=(o=e.sidebar)!=null?o:t.sidebar)!=null?n:"auto",i=(r=(a=e.sidebarDepth)!=null?a:t.sidebarDepth)!=null?r:2;return e.home||l===!1?[]:l==="auto"?dp(i):te(l)?Vr(l,i):Oo(l)?up(l,i):[]},hp=(e,t)=>({text:e.title,link:e.link,children:Vo(e.children,t)}),Vo=(e,t)=>t>0?e.map(l=>hp(l,t-1)):[],dp=e=>{const t=Ot();return[{text:t.value.title,children:Vo(t.value.headers,e)}]},Vr=(e,t)=>{const l=St(),i=Ot(),o=n=>{var r;let a;if(be(n)?a=Ho(n):a=n,a.children)return{...a,children:a.children.map(s=>o(s))};if(a.link===l.path){const s=((r=i.value.headers[0])==null?void 0:r.level)===1?i.value.headers[0].children:i.value.headers;return{...a,children:Vo(s,t)}}return a};return e.map(n=>o(n))},up=(e,t)=>{var n;const l=St(),i=pr(e,l.path),o=(n=e[i])!=null?n:[];return Vr(o,t)},pp={},mp={class:"theme-default-content"};function fp(e,t){const l=_t("Content");return N(),Z("div",mp,[oe(l)])}const gp=Te(pp,[["render",fp],["__file","HomeContent.vue"]]),kp={key:0,class:"features"},vp=ue({__name:"HomeFeatures",setup(e){const t=vt(),l=Y(()=>te(t.value.features)?t.value.features:[]);return(i,o)=>O(l).length?(N(),Z("div",kp,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),Z("div",{key:n.title,class:"feature"},[fe("h2",null,ze(n.title),1),fe("p",null,ze(n.details),1)]))),128))])):Ae("v-if",!0)}}),bp=Te(vp,[["__file","HomeFeatures.vue"]]),_p=["innerHTML"],yp=["textContent"],xp=ue({__name:"HomeFooter",setup(e){const t=vt(),l=Y(()=>t.value.footer),i=Y(()=>t.value.footerHtml);return(o,n)=>O(l)?(N(),Z(Pe,{key:0},[Ae(" eslint-disable-next-line vue/no-v-html "),O(i)?(N(),Z("div",{key:0,class:"footer",innerHTML:O(l)},null,8,_p)):(N(),Z("div",{key:1,class:"footer",textContent:ze(O(l))},null,8,yp))],64)):Ae("v-if",!0)}}),Ep=Te(xp,[["__file","HomeFooter.vue"]]),Cp=["href","rel","target","aria-label"],Rp=ue({inheritAttrs:!1}),Pp=ue({...Rp,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,l=St(),i=Gr(),{item:o}=Ei(t),n=Y(()=>Ul(o.value.link)),a=Y(()=>wh(o.value.link)||Oh(o.value.link)),r=Y(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=Y(()=>r.value==="_blank"),c=Y(()=>!n.value&&!a.value&&!s.value),h=Y(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=Y(()=>o.value.ariaLabel||o.value.text),m=Y(()=>{const P=Object.keys(i.value.locales);return P.length?!P.some(E=>E===o.value.link):o.value.link!=="/"}),g=Y(()=>m.value?l.path.startsWith(o.value.link):!1),x=Y(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(l.path):g.value:!1);return(P,E)=>{const k=_t("RouterLink"),_=_t("AutoLinkExternalIcon");return O(c)?(N(),we(k,no({key:0,class:{"router-link-active":O(x)},to:O(o).link,"aria-label":O(p)},P.$attrs),{default:He(()=>[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),Re(P.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),Z("a",no({key:1,class:"external-link",href:O(o).link,rel:O(h),target:O(r),"aria-label":O(p)},P.$attrs),[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),O(s)?(N(),we(_,{key:0})):Ae("v-if",!0),Re(P.$slots,"after")],16,Cp))}}}),kt=Te(Pp,[["__file","AutoLink.vue"]]),Lp={class:"hero"},Tp={key:0,id:"main-title"},Ap={key:1,class:"description"},Ip={key:2,class:"actions"},wp=ue({__name:"HomeHero",setup(e){const t=vt(),l=jo(),i=Mo(),o=Y(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=Y(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=Y(()=>t.value.heroAlt||n.value||"hero"),r=Y(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=Y(()=>te(t.value.actions)?t.value.actions.map(({text:h,link:p,type:m="primary"})=>({text:h,link:p,type:m})):[]),c=()=>{if(!o.value)return null;const h=he("img",{src:Yo(o.value),alt:a.value});return t.value.heroImageDark===void 0?h:he($o,()=>h)};return(h,p)=>(N(),Z("header",Lp,[oe(c),O(n)?(N(),Z("h1",Tp,ze(O(n)),1)):Ae("v-if",!0),O(r)?(N(),Z("p",Ap,ze(O(r)),1)):Ae("v-if",!0),O(s).length?(N(),Z("p",Ip,[(N(!0),Z(Pe,null,zt(O(s),m=>(N(),we(kt,{key:m.text,class:Ke(["action-button",[m.type]]),item:m},null,8,["class","item"]))),128))])):Ae("v-if",!0)]))}}),Op=Te(wp,[["__file","HomeHero.vue"]]),Fp={class:"home"},zp=ue({__name:"Home",setup(e){return(t,l)=>(N(),Z("main",Fp,[oe(Op),oe(bp),oe(gp),oe(Ep)]))}}),Dp=Te(zp,[["__file","Home.vue"]]),Mp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Mo(),n=Y(()=>i.value.home||t.value),a=Y(()=>l.value.title),r=Y(()=>o.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!r.value)return null;const c=he("img",{class:"logo",src:Yo(r.value),alt:a.value});return i.value.logoDark===void 0?c:he($o,()=>c)};return(c,h)=>{const p=_t("RouterLink");return N(),we(p,{to:O(n)},{default:He(()=>[oe(s),O(a)?(N(),Z("span",{key:0,class:Ke(["site-name",{"can-hide":O(r)}])},ze(O(a)),3)):Ae("v-if",!0)]),_:1},8,["to"])}}}),Hp=Te(Mp,[["__file","NavbarBrand.vue"]]),Sp=ue({__name:"DropdownTransition",setup(e){const t=i=>{i.style.height=i.scrollHeight+"px"},l=i=>{i.style.height=""};return(i,o)=>(N(),we(Bl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:He(()=>[Re(i.$slots,"default")]),_:3}))}}),Nr=Te(Sp,[["__file","DropdownTransition.vue"]]),Vp=["aria-label"],Np={class:"title"},jp=fe("span",{class:"arrow down"},null,-1),$p=["aria-label"],Yp={class:"title"},Bp={class:"navbar-dropdown"},Up={class:"navbar-dropdown-subtitle"},Wp={key:1},Xp={class:"navbar-dropdown-subitem-wrapper"},qp=ue({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:l}=Ei(t),i=Y(()=>l.value.ariaLabel||l.value.text),o=ye(!1),n=St();dt(()=>n.path,()=>{o.value=!1});const a=s=>{s.detail===0?o.value=!o.value:o.value=!1},r=(s,c)=>c[c.length-1]===s;return(s,c)=>(N(),Z("div",{class:Ke(["navbar-dropdown-wrapper",{open:o.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":O(i),onClick:a},[fe("span",Np,ze(O(l).text),1),jp],8,Vp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":O(i),onClick:c[0]||(c[0]=h=>o.value=!o.value)},[fe("span",Yp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:He(()=>[ci(fe("ul",Bp,[(N(!0),Z(Pe,null,zt(O(l).children,h=>(N(),Z("li",{key:h.text,class:"navbar-dropdown-item"},[h.children?(N(),Z(Pe,{key:0},[fe("h4",Up,[h.link?(N(),we(kt,{key:0,item:h,onFocusout:p=>r(h,O(l).children)&&h.children.length===0&&(o.value=!1)},null,8,["item","onFocusout"])):(N(),Z("span",Wp,ze(h.text),1))]),fe("ul",Xp,[(N(!0),Z(Pe,null,zt(h.children,p=>(N(),Z("li",{key:p.link,class:"navbar-dropdown-subitem"},[oe(kt,{item:p,onFocusout:m=>r(p,h.children)&&r(h,O(l).children)&&(o.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(N(),we(kt,{key:1,item:h,onFocusout:p=>r(h,O(l).children)&&(o.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[mi,o.value]])]),_:1})],2))}}),Kp=Te(qp,[["__file","NavbarDropdown.vue"]]),aa=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Gp=(e,t)=>{if(t.hash===e)return!0;const l=aa(t.path),i=aa(e);return l===i},jr=(e,t)=>e.link&&Gp(e.link,t)?!0:e.children?e.children.some(l=>jr(l,t)):!1,$r=e=>!Ul(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Qp={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Jp=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const l=$r(e);return l!==null?Qp[l]:null},Zp=({docsRepo:e,docsBranch:t,docsDir:l,filePathRelative:i,editLinkPattern:o})=>{if(!i)return null;const n=Jp({docsRepo:e,editLinkPattern:o});return n?n.replace(/:repo/,Ul(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,ur(`${dr(l)}/${i}`)):null},em={key:0,class:"navbar-items"},tm=ue({__name:"NavbarItems",setup(e){const t=()=>{const c=Zt(),h=Wl(),p=jo(),m=$e();return Y(()=>{var _,L,H;const g=Object.keys(p.value.locales);if(g.length<2)return[];const x=c.currentRoute.value.path,P=c.currentRoute.value.fullPath,E=c.currentRoute.value.hash;return[{text:(_=m.value.selectLanguageText)!=null?_:"unknown language",ariaLabel:(H=(L=m.value.selectLanguageAriaLabel)!=null?L:m.value.selectLanguageText)!=null?H:"unknown language",children:g.map(U=>{var G,C,S,F,re,j;const ee=(C=(G=p.value.locales)==null?void 0:G[U])!=null?C:{},w=(F=(S=m.value.locales)==null?void 0:S[U])!=null?F:{},v=`${ee.lang}`,q=(re=w.selectLanguageName)!=null?re:v;let B;if(v===p.value.lang)B=P;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?B=`${le}${E}`:B=(j=w.home)!=null?j:U}return{text:q,link:B}})}]})},l=()=>{const c=$e(),h=Y(()=>c.value.repo),p=Y(()=>h.value?$r(h.value):null),m=Y(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=Y(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return Y(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Ho(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return Y(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=Y(()=>[...n.value,...a.value,...r.value]);return(c,h)=>O(s).length?(N(),Z("nav",em,[(N(!0),Z(Pe,null,zt(O(s),p=>(N(),Z("div",{key:p.text,class:"navbar-item"},[p.children?(N(),we(Kp,{key:0,item:p},null,8,["item"])):(N(),we(kt,{key:1,item:p},null,8,["item"]))]))),128))])):Ae("v-if",!0)}}),Yr=Te(tm,[["__file","NavbarItems.vue"]]),lm=["title"],im={class:"icon",focusable:"false",viewBox:"0 0 32 32"},om=jc('',9),nm=[om],am={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rm=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),sm=[rm],cm=ue({__name:"ToggleColorModeButton",setup(e){const t=$e(),l=Mo(),i=()=>{l.value=!l.value};return(o,n)=>(N(),Z("button",{class:"toggle-color-mode-button",title:O(t).toggleColorMode,onClick:i},[ci((N(),Z("svg",im,nm,512)),[[mi,!O(l)]]),ci((N(),Z("svg",am,sm,512)),[[mi,O(l)]])],8,lm))}}),hm=Te(cm,[["__file","ToggleColorModeButton.vue"]]),dm=["title"],um=fe("div",{class:"icon","aria-hidden":"true"},[fe("span"),fe("span"),fe("span")],-1),pm=[um],mm=ue({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=$e();return(l,i)=>(N(),Z("div",{class:"toggle-sidebar-button",title:O(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=o=>l.$emit("toggle"))},pm,8,dm))}}),fm=Te(mm,[["__file","ToggleSidebarButton.vue"]]),gm=ue({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=$e(),l=ye(null),i=ye(null),o=ye(0),n=Y(()=>o.value?{maxWidth:o.value+"px"}:{});Je(()=>{const s=a(l.value,"paddingLeft")+a(l.value,"paddingRight"),c=()=>{var h;window.innerWidth<=719?o.value=0:o.value=l.value.offsetWidth-s-(((h=i.value)==null?void 0:h.offsetWidth)||0)};c(),window.addEventListener("resize",c,!1),window.addEventListener("orientationchange",c,!1)});function a(r,s){var p,m,g;const c=(g=(m=(p=r==null?void 0:r.ownerDocument)==null?void 0:p.defaultView)==null?void 0:m.getComputedStyle(r,null))==null?void 0:g[s],h=Number.parseInt(c,10);return Number.isNaN(h)?0:h}return(r,s)=>{const c=_t("NavbarSearch");return N(),Z("header",{ref_key:"navbar",ref:l,class:"navbar"},[oe(fm,{onToggle:s[0]||(s[0]=h=>r.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:i},[oe(Hp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Yr,{class:"can-hide"}),Re(r.$slots,"after"),O(t).colorModeSwitch?(N(),we(hm,{key:0})):Ae("v-if",!0),oe(c)],4)],512)}}}),km=Te(gm,[["__file","Navbar.vue"]]),vm={class:"page-meta"},bm={key:0,class:"meta-item edit-link"},_m={key:1,class:"meta-item last-updated"},ym={class:"meta-item-label"},xm={class:"meta-item-info"},Em={key:2,class:"meta-item contributors"},Cm={class:"meta-item-label"},Rm={class:"meta-item-info"},Pm=["title"],Lm=Mt(", "),Tm=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var _,L,H;if(!((L=(_=h.value.editLink)!=null?_:s.value.editLink)!=null?L:!0))return null;const{repo:m,docsRepo:g=m,docsBranch:x="main",docsDir:P="",editLinkText:E}=s.value;if(!g)return null;const k=Zp({docsRepo:g,docsBranch:x,docsDir:P,filePathRelative:c.value.filePathRelative,editLinkPattern:(H=h.value.editLinkPattern)!=null?H:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var g,x,P,E;return!((x=(g=h.value.lastUpdated)!=null?g:s.value.lastUpdated)!=null?x:!0)||!((P=c.value.git)!=null&&P.updatedTime)?null:new Date((E=c.value.git)==null?void 0:E.updatedTime).toLocaleString()})},i=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var m,g,x,P;return((g=(m=h.value.contributors)!=null?m:s.value.contributors)!=null?g:!0)&&(P=(x=c.value.git)==null?void 0:x.contributors)!=null?P:null})},o=$e(),n=t(),a=l(),r=i();return(s,c)=>{const h=_t("ClientOnly");return N(),Z("footer",vm,[O(n)?(N(),Z("div",bm,[oe(kt,{class:"meta-item-label",item:O(n)},null,8,["item"])])):Ae("v-if",!0),O(a)?(N(),Z("div",_m,[fe("span",ym,ze(O(o).lastUpdatedText)+": ",1),oe(h,null,{default:He(()=>[fe("span",xm,ze(O(a)),1)]),_:1})])):Ae("v-if",!0),O(r)&&O(r).length?(N(),Z("div",Em,[fe("span",Cm,ze(O(o).contributorsText)+": ",1),fe("span",Rm,[(N(!0),Z(Pe,null,zt(O(r),(p,m)=>(N(),Z(Pe,{key:m},[fe("span",{class:"contributor",title:`email: ${p.email}`},ze(p.name),9,Pm),m!==O(r).length-1?(N(),Z(Pe,{key:0},[Lm],64)):Ae("v-if",!0)],64))),128))])])):Ae("v-if",!0)])}}}),Am=Te(Tm,[["__file","PageMeta.vue"]]),Im={key:0,class:"page-nav"},wm={class:"inner"},Om={key:0,class:"prev"},Fm={key:1,class:"next"},zm=ue({__name:"PageNav",setup(e){const t=s=>s===!1?null:be(s)?Ho(s):Oo(s)?s:!1,l=(s,c,h)=>{const p=s.findIndex(m=>m.link===c);if(p!==-1){const m=s[p+h];return m!=null&&m.link?m:null}for(const m of s)if(m.children){const g=l(m.children,c,h);if(g)return g}return null},i=vt(),o=So(),n=St(),a=Y(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=Y(()=>{const s=t(i.value.next);return s!==!1?s:l(o.value,n.path,1)});return(s,c)=>O(a)||O(r)?(N(),Z("nav",Im,[fe("p",wm,[O(a)?(N(),Z("span",Om,[oe(kt,{item:O(a)},null,8,["item"])])):Ae("v-if",!0),O(r)?(N(),Z("span",Fm,[oe(kt,{item:O(r)},null,8,["item"])])):Ae("v-if",!0)])])):Ae("v-if",!0)}}),Dm=Te(zm,[["__file","PageNav.vue"]]),Mm={class:"page"},Hm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),Z("main",Mm,[Re(t.$slots,"top"),fe("div",Hm,[Re(t.$slots,"content-top"),oe(i),Re(t.$slots,"content-bottom")]),oe(Am),oe(Dm),Re(t.$slots,"bottom")])}}}),Vm=Te(Sm,[["__file","Page.vue"]]),Nm=["onKeydown"],jm={class:"sidebar-item-children"},$m=ue({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:l,depth:i}=Ei(t),o=St(),n=Zt(),a=Y(()=>jr(l.value,o)),r=Y(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=Y(()=>l.value.collapsible?a.value:!0),[c,h]=Au(s.value),p=g=>{l.value.collapsible&&(g.preventDefault(),h())},m=n.afterEach(g=>{jl(()=>{c.value=s.value})});return Yl(()=>{m()}),(g,x)=>{var E;const P=_t("SidebarItem",!0);return N(),Z("li",null,[O(l).link?(N(),we(kt,{key:0,class:Ke(O(r)),item:O(l)},null,8,["class","item"])):(N(),Z("p",{key:1,tabindex:"0",class:Ke(O(r)),onClick:p,onKeydown:Eh(p,["enter"])},[Mt(ze(O(l).text)+" ",1),O(l).collapsible?(N(),Z("span",{key:0,class:Ke(["arrow",O(c)?"down":"right"])},null,2)):Ae("v-if",!0)],42,Nm)),(E=O(l).children)!=null&&E.length?(N(),we(Nr,{key:2},{default:He(()=>[ci(fe("ul",jm,[(N(!0),Z(Pe,null,zt(O(l).children,k=>(N(),we(P,{key:`${O(i)}${k.text}${k.link}`,item:k,depth:O(i)+1},null,8,["item","depth"]))),128))],512),[[mi,O(c)]])]),_:1})):Ae("v-if",!0)])}}}),Ym=Te($m,[["__file","SidebarItem.vue"]]),Bm={key:0,class:"sidebar-items"},Um=ue({__name:"SidebarItems",setup(e){const t=St(),l=So();return Je(()=>{dt(()=>t.hash,i=>{const o=document.querySelector(".sidebar");if(!o)return;const n=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${i}"]`);if(!n)return;const{top:a,height:r}=o.getBoundingClientRect(),{top:s,height:c}=n.getBoundingClientRect();sa+r&&n.scrollIntoView(!1)})}),(i,o)=>O(l).length?(N(),Z("ul",Bm,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),we(Ym,{key:`${n.text}${n.link}`,item:n},null,8,["item"]))),128))])):Ae("v-if",!0)}}),Wm=Te(Um,[["__file","SidebarItems.vue"]]),Xm={class:"sidebar"},qm=ue({__name:"Sidebar",setup(e){return(t,l)=>(N(),Z("aside",Xm,[oe(Yr),Re(t.$slots,"top"),oe(Wm),Re(t.$slots,"bottom")]))}}),Km=Te(qm,[["__file","Sidebar.vue"]]),Gm=ue({__name:"Layout",setup(e){const t=Ot(),l=vt(),i=$e(),o=Y(()=>l.value.navbar!==!1&&i.value.navbar!==!1),n=So(),a=ye(!1),r=E=>{a.value=typeof E=="boolean"?E:!a.value},s={x:0,y:0},c=E=>{s.x=E.changedTouches[0].clientX,s.y=E.changedTouches[0].clientY},h=E=>{const k=E.changedTouches[0].clientX-s.x,_=E.changedTouches[0].clientY-s.y;Math.abs(k)>Math.abs(_)&&Math.abs(k)>40&&(k>0&&s.x<=80?r(!0):r(!1))},p=Y(()=>[{"no-navbar":!o.value,"no-sidebar":!n.value.length,"sidebar-open":a.value},l.value.pageClass]);let m;Je(()=>{m=Zt().afterEach(()=>{r(!1)})}),Li(()=>{m()});const g=Hr(),x=g.resolve,P=g.pending;return(E,k)=>(N(),Z("div",{class:Ke(["theme-container",O(p)]),onTouchstart:c,onTouchend:h},[Re(E.$slots,"navbar",{},()=>[O(o)?(N(),we(km,{key:0,onToggleSidebar:r},{before:He(()=>[Re(E.$slots,"navbar-before")]),after:He(()=>[Re(E.$slots,"navbar-after")]),_:3})):Ae("v-if",!0)]),fe("div",{class:"sidebar-mask",onClick:k[0]||(k[0]=_=>r(!1))}),Re(E.$slots,"sidebar",{},()=>[oe(Km,null,{top:He(()=>[Re(E.$slots,"sidebar-top")]),bottom:He(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Bl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(P)},{default:He(()=>[(N(),we(Vm,{key:O(t).path},{top:He(()=>[Re(E.$slots,"page-top")]),"content-top":He(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":He(()=>[Re(E.$slots,"page-content-bottom")]),bottom:He(()=>[Re(E.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Qm=Te(Gm,[["__file","Layout.vue"]]),Jm={class:"theme-container"},Zm={class:"page"},ef={class:"theme-default-content"},tf=fe("h1",null,"404",-1),lf=ue({__name:"NotFound",setup(e){var r,s,c;const t=Wl(),l=$e(),i=(r=l.value.notFound)!=null?r:["Not Found"],o=()=>i[Math.floor(Math.random()*i.length)],n=(s=l.value.home)!=null?s:t.value,a=(c=l.value.backToHome)!=null?c:"Back to home";return(h,p)=>{const m=_t("RouterLink");return N(),Z("div",Jm,[fe("main",Zm,[fe("div",ef,[tf,fe("blockquote",null,ze(o()),1),oe(m,{to:O(n)},{default:He(()=>[Mt(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Te(lf,[["__file","NotFound.vue"]]);const nf=Ht({enhance({app:e,router:t}){e.component("Badge",gu),e.component("CodeGroup",ku),e.component("CodeGroupItem",yu),e.component("AutoLinkExternalIcon",()=>{const i=e.component("ExternalLinkIcon");return i?he(i):null}),e.component("NavbarSearch",()=>{const i=e.component("Docsearch")||e.component("SearchBox");return i?he(i):null});const l=t.options.scrollBehavior;t.options.scrollBehavior=async(...i)=>(await Hr().wait(),l(...i))},setup(){np(),sp()},layouts:{Layout:Qm,NotFound:of}}),af=(e,t)=>t.some(l=>{if(be(l))return l===e.key;const{key:i,ctrl:o=!1,shift:n=!1,alt:a=!1}=l;return i===e.key&&o===e.ctrlKey&&n===e.shiftKey&&a===e.altKey}),rf=/[^\x00-\x7F]/,sf=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ra=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),sa=(e,t)=>{const l=t.join(" "),i=sf(e);if(rf.test(e))return i.some(a=>l.toLowerCase().indexOf(a)>-1);const o=e.endsWith(" ");return new RegExp(i.map((a,r)=>i.length===r+1&&!o?`(?=.*\\b${ra(a)})`:`(?=.*\\b${ra(a)}\\b)`).join("")+".+","gi").test(l)},cf=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const l=i=>{!e.value||af(i,t.value)&&!e.value.contains(i.target)&&(i.preventDefault(),e.value.focus())};Je(()=>{document.addEventListener("keydown",l)}),Yl(()=>{document.removeEventListener("keydown",l)})},hf=[{title:"Home",headers:[{level:3,title:"All Hook process in one step, everything is simplified",slug:"all-hook-process-in-one-step-everything-is-simplified",link:"#all-hook-process-in-one-step-everything-is-simplified",children:[]}],path:"/en/",pathLocale:"/en/",extraFields:[]},{title:"\u9996\u9875",headers:[{level:3,title:"\u6240\u6709 Hook \u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D\uFF0C\u62D2\u7EDD\u7E41\u7410",slug:"\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",link:"#\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",children:[]}],path:"/zh-cn/",pathLocale:"/zh-cn/",extraFields:[]},{title:"About this Document",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/en/about/about.html",pathLocale:"/en/",extraFields:[]},{title:"Changelog",headers:[{level:3,title:"1.1.6 | 2023.01.21",slug:"_1-1-6-2023-01-21",link:"#_1-1-6-2023-01-21",children:[]},{level:3,title:"1.1.5 | 2023.01.13",slug:"_1-1-5-2023-01-13",link:"#_1-1-5-2023-01-13",children:[]},{level:3,title:"1.1.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/en/about/changelog.html",pathLocale:"/en/",extraFields:[]},{title:"Contact Us",headers:[{level:2,title:"Help with Maintenance",slug:"help-with-maintenance",link:"#help-with-maintenance",children:[]}],path:"/en/about/contacts.html",pathLocale:"/en/",extraFields:[]},{title:"Looking for Future",headers:[{level:2,title:"Unresolved Issues",slug:"unresolved-issues",link:"#unresolved-issues",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"Future Plans",slug:"future-plans",link:"#future-plans",children:[{level:3,title:"Lite Version Supported for Standalone Use",slug:"lite-version-supported-for-standalone-use",link:"#lite-version-supported-for-standalone-use",children:[]},{level:3,title:"Support for More Hook Framework",slug:"support-for-more-hook-framework",link:"#support-for-more-hook-framework",children:[]}]}],path:"/en/about/future.html",pathLocale:"/en/",extraFields:[]},{title:"Document Introduce",headers:[{level:2,title:"Function Description",slug:"function-description",link:"#function-description",children:[]},{level:2,title:"Function Example Description",slug:"function-example-description",link:"#function-example-description",children:[]},{level:2,title:"Change Record Description",slug:"change-record-description",link:"#change-record-description",children:[]},{level:2,title:"Related Symbols Description",slug:"related-symbols-description",link:"#related-symbols-description",children:[]}],path:"/en/api/home.html",pathLocale:"/en/",extraFields:[]},{title:"Usage Example",headers:[{level:2,title:"Structure Diagram",slug:"structure-diagram",link:"#structure-diagram",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"A Simple Hook Example",slug:"a-simple-hook-example",link:"#a-simple-hook-example",children:[{level:3,title:"Hook App",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook System Framework",slug:"hook-system-framework",link:"#hook-system-framework",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"Remove Hook",slug:"remove-hook",link:"#remove-hook",children:[]}]},{level:2,title:"Exception Handling",slug:"exception-handling",link:"#exception-handling",children:[{level:3,title:"Listen for Exceptions",slug:"listen-for-exceptions",link:"#listen-for-exceptions",children:[]},{level:3,title:"Throw an Exception",slug:"throw-an-exception",link:"#throw-an-exception",children:[]}]},{level:2,title:"Status Monitor",slug:"status-monitor",link:"#status-monitor",children:[]},{level:2,title:"Expansion Usage",slug:"expansion-usage",link:"#expansion-usage",children:[{level:3,title:"Multiple Hosts",slug:"multiple-hosts",link:"#multiple-hosts",children:[]},{level:3,title:"Multiple Processes",slug:"multiple-processes",link:"#multiple-processes",children:[]}]},{level:2,title:"Writing Optimization",slug:"writing-optimization",link:"#writing-optimization",children:[]},{level:2,title:"Xposed Module own Active State",slug:"xposed-module-own-active-state",link:"#xposed-module-own-active-state",children:[]}],path:"/en/guide/example.html",pathLocale:"/en/",extraFields:[]},{title:"Introduce",headers:[{level:2,title:"Background",slug:"background",link:"#background",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Language Requirement",slug:"language-requirement",link:"#language-requirement",children:[]},{level:2,title:"Source of Inspiration",slug:"source-of-inspiration",link:"#source-of-inspiration",children:[]},{level:2,title:"Suppored Hook Framework",slug:"suppored-hook-framework",link:"#suppored-hook-framework",children:[]}],path:"/en/guide/home.html",pathLocale:"/en/",extraFields:[]},{title:"Basic Knowledge",headers:[{level:2,title:"Related Introduction",slug:"related-introduction",link:"#related-introduction",children:[{level:3,title:"What is Xposed",slug:"what-is-xposed",link:"#what-is-xposed",children:[]},{level:3,title:"What can Xposed do",slug:"what-can-xposed-do",link:"#what-can-xposed-do",children:[]},{level:3,title:"Development Process",slug:"development-process",link:"#development-process",children:[]},{level:3,title:"Derivatives",slug:"derivatives",link:"#derivatives",children:[]},{level:3,title:"What YukiHookAPI does",slug:"what-yukihookapi-does",link:"#what-yukihookapi-does",children:[]}]},{level:2,title:"Let's Started",slug:"let-s-started",link:"#let-s-started",children:[]}],path:"/en/guide/knowledge.html",pathLocale:"/en/",extraFields:[]},{title:"Migrate from Xposed API",headers:[{level:2,title:"Migrate Hook Entry Point",slug:"migrate-hook-entry-point",link:"#migrate-hook-entry-point",children:[]},{level:2,title:"Migrate Hook Method Body",slug:"migrate-hook-method-body",link:"#migrate-hook-method-body",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"Migrate Other Features",slug:"migrate-other-features",link:"#migrate-other-features",children:[]}],path:"/en/guide/move-to-new-api.html",pathLocale:"/en/",extraFields:[]},{title:"Quick Start",headers:[{level:2,title:"Environment Requirements",slug:"environment-requirements",link:"#environment-requirements",children:[]},{level:2,title:"Automatically Build Project",slug:"automatically-build-project",link:"#automatically-build-project",children:[]},{level:2,title:"Manually Configure Project",slug:"manually-configure-project",link:"#manually-configure-project",children:[{level:3,title:"Create Project",slug:"create-project",link:"#create-project",children:[]},{level:3,title:"Integration Dependencies",slug:"integration-dependencies",link:"#integration-dependencies",children:[]},{level:3,title:"Use as Xposed Module",slug:"use-as-xposed-module",link:"#use-as-xposed-module",children:[]},{level:3,title:"Use as Hook API",slug:"use-as-hook-api",link:"#use-as-hook-api",children:[]}]}],path:"/en/guide/quick-start.html",pathLocale:"/en/",extraFields:[]},{title:"API Basic Configs",headers:[{level:2,title:"Function Configs",slug:"function-configs",link:"#function-configs",children:[{level:3,title:"configs Method",slug:"configs-method",link:"#configs-method",children:[]}]},{level:2,title:"Hooker Configs",slug:"hooker-configs",link:"#hooker-configs",children:[{level:3,title:"Created by lambda",slug:"created-by-lambda",link:"#created-by-lambda",children:[]},{level:3,title:"Created by Custom Hooker",slug:"created-by-custom-hooker",link:"#created-by-custom-hooker",children:[]},{level:3,title:"Expansion Features",slug:"expansion-features",link:"#expansion-features",children:[]},{level:3,title:"Precautions",slug:"precautions",link:"#precautions",children:[]}]},{level:2,title:"Precautions when using as Hook API",slug:"precautions-when-using-as-hook-api",link:"#precautions-when-using-as-hook-api",children:[]}],path:"/en/config/api-example.html",pathLocale:"/en/",extraFields:[]},{title:"API Exception Handling",headers:[{level:2,title:"Non-Blocking Exceptions",slug:"non-blocking-exceptions",link:"#non-blocking-exceptions",children:[]},{level:2,title:"Blocking Exceptions",slug:"blocking-exceptions",link:"#blocking-exceptions",children:[]}],path:"/en/config/api-exception.html",pathLocale:"/en/",extraFields:[]},{title:"Use as Hook API Configs",headers:[{level:2,title:"Dependency Configs",slug:"dependency-configs",link:"#dependency-configs",children:[]},{level:2,title:"Entry Configs",slug:"entry-configs",link:"#entry-configs",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/en/config/api-using.html",pathLocale:"/en/",extraFields:[]},{title:"R8 & Proguard Obfuscate",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/en/config/r8-proguard.html",pathLocale:"/en/",extraFields:[]},{title:"Use as Xposed Module Configs",headers:[{level:2,title:"Dependency Configs",slug:"dependency-configs",link:"#dependency-configs",children:[]},{level:2,title:"Custom Automatic Builder",slug:"custom-automatic-builder",link:"#custom-automatic-builder",children:[{level:3,title:"InjectYukiHookWithXposed Annotation",slug:"injectyukihookwithxposed-annotation",link:"#injectyukihookwithxposed-annotation",children:[]},{level:3,title:"IYukiHookXposedInit Interface",slug:"iyukihookxposedinit-interface",link:"#iyukihookxposedinit-interface",children:[]}]},{level:2,title:"Native Xposed API Events",slug:"native-xposed-api-events",link:"#native-xposed-api-events",children:[]}],path:"/en/config/xposed-using.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookAPI Project Builder",headers:[{level:2,title:"Get Project",slug:"get-project",link:"#get-project",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[{level:3,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:3,title:"Config Template",slug:"config-template",link:"#config-template",children:[]},{level:3,title:"Multilingual Support",slug:"multilingual-support",link:"#multilingual-support",children:[]}]}],path:"/en/tools/yukihookapi-projectbuilder.html",pathLocale:"/en/",extraFields:[]},{title:"\u5173\u4E8E\u6B64\u6587\u6863",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/zh-cn/about/about.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u66F4\u65B0\u65E5\u5FD7",headers:[{level:3,title:"1.1.6 | 2023.01.21",slug:"_1-1-6-2023-01-21",link:"#_1-1-6-2023-01-21",children:[]},{level:3,title:"1.1.5 | 2023.01.13",slug:"_1-1-5-2023-01-13",link:"#_1-1-5-2023-01-13",children:[]},{level:3,title:"1.1.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/zh-cn/about/changelog.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8054\u7CFB\u6211\u4EEC",headers:[{level:2,title:"\u52A9\u529B\u7EF4\u62A4",slug:"\u52A9\u529B\u7EF4\u62A4",link:"#\u52A9\u529B\u7EF4\u62A4",children:[]}],path:"/zh-cn/about/contacts.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5C55\u671B\u672A\u6765",headers:[{level:2,title:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",slug:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",link:"#\u672A\u89E3\u51B3\u7684\u95EE\u9898",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"\u672A\u6765\u7684\u8BA1\u5212",slug:"\u672A\u6765\u7684\u8BA1\u5212",link:"#\u672A\u6765\u7684\u8BA1\u5212",children:[{level:3,title:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C",slug:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",link:"#\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",children:[]},{level:3,title:"\u652F\u6301\u66F4\u591A Hook Framework",slug:"\u652F\u6301\u66F4\u591A-hook-framework",link:"#\u652F\u6301\u66F4\u591A-hook-framework",children:[]}]}],path:"/zh-cn/about/future.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u6587\u6863\u4ECB\u7ECD",headers:[{level:2,title:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",slug:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",link:"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",children:[]},{level:2,title:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",slug:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",link:"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",children:[]},{level:2,title:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",slug:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",link:"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",children:[]},{level:2,title:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",slug:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",link:"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",children:[]}],path:"/zh-cn/api/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u57FA\u672C\u914D\u7F6E",headers:[{level:2,title:"\u529F\u80FD\u914D\u7F6E",slug:"\u529F\u80FD\u914D\u7F6E",link:"#\u529F\u80FD\u914D\u7F6E",children:[{level:3,title:"configs \u65B9\u6CD5",slug:"configs-\u65B9\u6CD5",link:"#configs-\u65B9\u6CD5",children:[]}]},{level:2,title:"Hooker \u914D\u7F6E",slug:"hooker-\u914D\u7F6E",link:"#hooker-\u914D\u7F6E",children:[{level:3,title:"\u901A\u8FC7 lambda \u521B\u5EFA",slug:"\u901A\u8FC7-lambda-\u521B\u5EFA",link:"#\u901A\u8FC7-lambda-\u521B\u5EFA",children:[]},{level:3,title:"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA",slug:"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",link:"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",children:[]},{level:3,title:"\u6269\u5C55\u7279\u6027",slug:"\u6269\u5C55\u7279\u6027",link:"#\u6269\u5C55\u7279\u6027",children:[]},{level:3,title:"\u6CE8\u610F\u4E8B\u9879",slug:"\u6CE8\u610F\u4E8B\u9879",link:"#\u6CE8\u610F\u4E8B\u9879",children:[]}]},{level:2,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",children:[]}],path:"/zh-cn/config/api-example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u5F02\u5E38\u5904\u7406",headers:[{level:2,title:"\u975E\u963B\u65AD\u5F02\u5E38",slug:"\u975E\u963B\u65AD\u5F02\u5E38",link:"#\u975E\u963B\u65AD\u5F02\u5E38",children:[]},{level:2,title:"\u963B\u65AD\u5F02\u5E38",slug:"\u963B\u65AD\u5F02\u5E38",link:"#\u963B\u65AD\u5F02\u5E38",children:[]}],path:"/zh-cn/config/api-exception.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u5165\u53E3\u914D\u7F6E",slug:"\u5165\u53E3\u914D\u7F6E",link:"#\u5165\u53E3\u914D\u7F6E",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/zh-cn/config/api-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"R8 \u4E0E Proguard \u6DF7\u6DC6",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/zh-cn/config/r8-proguard.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",slug:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",link:"#\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",children:[{level:3,title:"InjectYukiHookWithXposed \u6CE8\u89E3",slug:"injectyukihookwithxposed-\u6CE8\u89E3",link:"#injectyukihookwithxposed-\u6CE8\u89E3",children:[]},{level:3,title:"IYukiHookXposedInit \u63A5\u53E3",slug:"iyukihookxposedinit-\u63A5\u53E3",link:"#iyukihookxposedinit-\u63A5\u53E3",children:[]}]},{level:2,title:"\u539F\u751F Xposed API \u4E8B\u4EF6",slug:"\u539F\u751F-xposed-api-\u4E8B\u4EF6",link:"#\u539F\u751F-xposed-api-\u4E8B\u4EF6",children:[]}],path:"/zh-cn/config/xposed-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u7528\u6CD5\u793A\u4F8B",headers:[{level:2,title:"\u7ED3\u6784\u56FE\u89E3",slug:"\u7ED3\u6784\u56FE\u89E3",link:"#\u7ED3\u6784\u56FE\u89E3",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"\u4E00\u4E2A\u7B80\u5355\u7684 Hook \u4F8B\u5B50",slug:"\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",link:"#\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",children:[{level:3,title:"Hook APP",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook \u7CFB\u7EDF\u6846\u67B6",slug:"hook-\u7CFB\u7EDF\u6846\u67B6",link:"#hook-\u7CFB\u7EDF\u6846\u67B6",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"\u89E3\u9664 Hook",slug:"\u89E3\u9664-hook",link:"#\u89E3\u9664-hook",children:[]}]},{level:2,title:"\u5F02\u5E38\u5904\u7406",slug:"\u5F02\u5E38\u5904\u7406",link:"#\u5F02\u5E38\u5904\u7406",children:[{level:3,title:"\u76D1\u542C\u5F02\u5E38",slug:"\u76D1\u542C\u5F02\u5E38",link:"#\u76D1\u542C\u5F02\u5E38",children:[]},{level:3,title:"\u629B\u51FA\u5F02\u5E38",slug:"\u629B\u51FA\u5F02\u5E38",link:"#\u629B\u51FA\u5F02\u5E38",children:[]}]},{level:2,title:"\u72B6\u6001\u76D1\u542C",slug:"\u72B6\u6001\u76D1\u542C",link:"#\u72B6\u6001\u76D1\u542C",children:[]},{level:2,title:"\u6269\u5C55\u7528\u6CD5",slug:"\u6269\u5C55\u7528\u6CD5",link:"#\u6269\u5C55\u7528\u6CD5",children:[{level:3,title:"\u591A\u4E2A\u5BBF\u4E3B",slug:"\u591A\u4E2A\u5BBF\u4E3B",link:"#\u591A\u4E2A\u5BBF\u4E3B",children:[]},{level:3,title:"\u591A\u4E2A\u8FDB\u7A0B",slug:"\u591A\u4E2A\u8FDB\u7A0B",link:"#\u591A\u4E2A\u8FDB\u7A0B",children:[]}]},{level:2,title:"\u5199\u6CD5\u4F18\u5316",slug:"\u5199\u6CD5\u4F18\u5316",link:"#\u5199\u6CD5\u4F18\u5316",children:[]},{level:2,title:"Xposed \u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]}],path:"/zh-cn/guide/example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECB\u7ECD",headers:[{level:2,title:"\u80CC\u666F",slug:"\u80CC\u666F",link:"#\u80CC\u666F",children:[]},{level:2,title:"\u7528\u9014",slug:"\u7528\u9014",link:"#\u7528\u9014",children:[]},{level:2,title:"\u8BED\u8A00\u8981\u6C42",slug:"\u8BED\u8A00\u8981\u6C42",link:"#\u8BED\u8A00\u8981\u6C42",children:[]},{level:2,title:"\u7075\u611F\u6765\u6E90",slug:"\u7075\u611F\u6765\u6E90",link:"#\u7075\u611F\u6765\u6E90",children:[]},{level:2,title:"\u652F\u6301\u7684 Hook Framework",slug:"\u652F\u6301\u7684-hook-framework",link:"#\u652F\u6301\u7684-hook-framework",children:[]}],path:"/zh-cn/guide/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u57FA\u7840\u77E5\u8BC6",headers:[{level:2,title:"\u76F8\u5173\u4ECB\u7ECD",slug:"\u76F8\u5173\u4ECB\u7ECD",link:"#\u76F8\u5173\u4ECB\u7ECD",children:[{level:3,title:"Xposed \u662F\u4EC0\u4E48",slug:"xposed-\u662F\u4EC0\u4E48",link:"#xposed-\u662F\u4EC0\u4E48",children:[]},{level:3,title:"Xposed \u80FD\u505A\u4EC0\u4E48",slug:"xposed-\u80FD\u505A\u4EC0\u4E48",link:"#xposed-\u80FD\u505A\u4EC0\u4E48",children:[]},{level:3,title:"\u53D1\u5C55\u8FC7\u7A0B",slug:"\u53D1\u5C55\u8FC7\u7A0B",link:"#\u53D1\u5C55\u8FC7\u7A0B",children:[]},{level:3,title:"\u884D\u751F\u4EA7\u54C1",slug:"\u884D\u751F\u4EA7\u54C1",link:"#\u884D\u751F\u4EA7\u54C1",children:[]},{level:3,title:"YukiHookAPI \u505A\u4E86\u4EC0\u4E48",slug:"yukihookapi-\u505A\u4E86\u4EC0\u4E48",link:"#yukihookapi-\u505A\u4E86\u4EC0\u4E48",children:[]}]},{level:2,title:"\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",slug:"\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",link:"#\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",children:[]}],path:"/zh-cn/guide/knowledge.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECE Xposed API \u8FC1\u79FB",headers:[{level:2,title:"\u8FC1\u79FB Hook \u5165\u53E3\u70B9",slug:"\u8FC1\u79FB-hook-\u5165\u53E3\u70B9",link:"#\u8FC1\u79FB-hook-\u5165\u53E3\u70B9",children:[]},{level:2,title:"\u8FC1\u79FB Hook \u65B9\u6CD5\u4F53",slug:"\u8FC1\u79FB-hook-\u65B9\u6CD5\u4F53",link:"#\u8FC1\u79FB-hook-\u65B9\u6CD5\u4F53",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",slug:"\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",link:"#\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",children:[]}],path:"/zh-cn/guide/move-to-new-api.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5FEB\u901F\u5F00\u59CB",headers:[{level:2,title:"\u73AF\u5883\u8981\u6C42",slug:"\u73AF\u5883\u8981\u6C42",link:"#\u73AF\u5883\u8981\u6C42",children:[]},{level:2,title:"\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",slug:"\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",link:"#\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",children:[]},{level:2,title:"\u624B\u52A8\u914D\u7F6E\u9879\u76EE",slug:"\u624B\u52A8\u914D\u7F6E\u9879\u76EE",link:"#\u624B\u52A8\u914D\u7F6E\u9879\u76EE",children:[{level:3,title:"\u521B\u5EFA\u9879\u76EE",slug:"\u521B\u5EFA\u9879\u76EE",link:"#\u521B\u5EFA\u9879\u76EE",children:[]},{level:3,title:"\u96C6\u6210\u4F9D\u8D56",slug:"\u96C6\u6210\u4F9D\u8D56",link:"#\u96C6\u6210\u4F9D\u8D56",children:[]},{level:3,title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528",slug:"\u4F5C\u4E3A-xposed-\u6A21\u5757\u4F7F\u7528",link:"#\u4F5C\u4E3A-xposed-\u6A21\u5757\u4F7F\u7528",children:[]},{level:3,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528",children:[]}]}],path:"/zh-cn/guide/quick-start.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookAPI \u6784\u5EFA\u5DE5\u5177",headers:[{level:2,title:"\u83B7\u53D6\u9879\u76EE",slug:"\u83B7\u53D6\u9879\u76EE",link:"#\u83B7\u53D6\u9879\u76EE",children:[]},{level:2,title:"\u4F7F\u7528\u65B9\u6CD5",slug:"\u4F7F\u7528\u65B9\u6CD5",link:"#\u4F7F\u7528\u65B9\u6CD5",children:[{level:3,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:3,title:"\u914D\u7F6E\u6A21\u677F",slug:"\u914D\u7F6E\u6A21\u677F",link:"#\u914D\u7F6E\u6A21\u677F",children:[]},{level:3,title:"\u591A\u8BED\u8A00\u652F\u6301",slug:"\u591A\u8BED\u8A00\u652F\u6301",link:"#\u591A\u8BED\u8A00\u652F\u6301",children:[]}]}],path:"/zh-cn/tools/yukihookapi-projectbuilder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Host Resource Injection Extension",headers:[{level:2,title:"Inject Module App's Resources",slug:"inject-module-app-s-resources",link:"#inject-module-app-s-resources",children:[]},{level:2,title:"Register Module App's Activity",slug:"register-module-app-s-activity",link:"#register-module-app-s-activity",children:[]},{level:2,title:"Create ContextThemeWrapper Proxy",slug:"create-contextthemewrapper-proxy",link:"#create-contextthemewrapper-proxy",children:[]},{level:2,title:"ClassLoader Conflict Problem",slug:"classloader-conflict-problem",link:"#classloader-conflict-problem",children:[]}],path:"/en/api/special-features/host-inject.html",pathLocale:"/en/",extraFields:[]},{title:"Host Lifecycle Extension",headers:[{level:2,title:"Listener Lifecycle",slug:"listener-lifecycle",link:"#listener-lifecycle",children:[]},{level:2,title:"Register System Broadcast",slug:"register-system-broadcast",link:"#register-system-broadcast",children:[]}],path:"/en/api/special-features/host-lifecycle.html",pathLocale:"/en/",extraFields:[]},{title:"Debug Logs",headers:[{level:2,title:"Normal Logs",slug:"normal-logs",link:"#normal-logs",children:[]},{level:2,title:"Error Logs",slug:"error-logs",link:"#error-logs",children:[]},{level:2,title:"Save Logs and Custom Elements",slug:"save-logs-and-custom-elements",link:"#save-logs-and-custom-elements",children:[]}],path:"/en/api/special-features/logger.html",pathLocale:"/en/",extraFields:[]},{title:"Reflection Extensions",headers:[{level:2,title:"Class Extensions",slug:"class-extensions",link:"#class-extensions",children:[{level:3,title:"Object Conversion",slug:"object-conversion",link:"#object-conversion",children:[]},{level:3,title:"Existential Judgment",slug:"existential-judgment",link:"#existential-judgment",children:[]},{level:3,title:"Vague Search",slug:"vague-search",link:"#vague-search",children:[]}]},{level:2,title:"Member Extensions",slug:"member-extensions",link:"#member-extensions",children:[{level:3,title:"Find and Reflection",slug:"find-and-reflection",link:"#find-and-reflection",children:[]},{level:3,title:"Optional Find Conditions",slug:"optional-find-conditions",link:"#optional-find-conditions",children:[]},{level:3,title:"Find in Super Class",slug:"find-in-super-class",link:"#find-in-super-class",children:[]},{level:3,title:"Vague Find",slug:"vague-find",link:"#vague-find",children:[]},{level:3,title:"Multiple Find",slug:"multiple-find",link:"#multiple-find",children:[]},{level:3,title:"Static Bytecode",slug:"static-bytecode",link:"#static-bytecode",children:[]},{level:3,title:"Obfuscated Bytecode",slug:"obfuscated-bytecode",link:"#obfuscated-bytecode",children:[]},{level:3,title:"Directly Called",slug:"directly-called",link:"#directly-called",children:[]},{level:3,title:"Original Called",slug:"original-called",link:"#original-called",children:[]},{level:3,title:"Find Again",slug:"find-again",link:"#find-again",children:[]},{level:3,title:"Relative Matching",slug:"relative-matching",link:"#relative-matching",children:[]},{level:3,title:"Calling Generics",slug:"calling-generics",link:"#calling-generics",children:[]},{level:3,title:"Pay Attention of Trap",slug:"pay-attention-of-trap",link:"#pay-attention-of-trap",children:[]}]},{level:2,title:"Common Type Extensions",slug:"common-type-extensions",link:"#common-type-extensions",children:[]}],path:"/en/api/special-features/reflection.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module and Host Channel",headers:[{level:2,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:2,title:"Determine Module App and Host App Version Match",slug:"determine-module-app-and-host-app-version-match",link:"#determine-module-app-and-host-app-version-match",children:[]},{level:2,title:"Rules for Callback Event Response",slug:"rules-for-callback-event-response",link:"#rules-for-callback-event-response",children:[]},{level:2,title:"Security Instructions",slug:"security-instructions",link:"#security-instructions",children:[]}],path:"/en/api/special-features/xposed-channel.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module Data Storage",headers:[{level:2,title:"Use in Activity",slug:"use-in-activity",link:"#use-in-activity",children:[]},{level:2,title:"Use in PreferenceFragment",slug:"use-in-preferencefragment",link:"#use-in-preferencefragment",children:[]}],path:"/en/api/special-features/xposed-storage.html",pathLocale:"/en/",extraFields:[]},{title:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55",headers:[{level:2,title:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90 (Resources)",slug:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",link:"#\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",children:[]},{level:2,title:"\u6CE8\u518C\u6A21\u5757 Activity",slug:"\u6CE8\u518C\u6A21\u5757-activity",link:"#\u6CE8\u518C\u6A21\u5757-activity",children:[]},{level:2,title:"\u521B\u5EFA ContextThemeWrapper \u4EE3\u7406",slug:"\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",link:"#\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",children:[]},{level:2,title:"ClassLoader \u51B2\u7A81\u95EE\u9898",slug:"classloader-\u51B2\u7A81\u95EE\u9898",link:"#classloader-\u51B2\u7A81\u95EE\u9898",children:[]}],path:"/zh-cn/api/special-features/host-inject.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55",headers:[{level:2,title:"\u76D1\u542C\u751F\u547D\u5468\u671F",slug:"\u76D1\u542C\u751F\u547D\u5468\u671F",link:"#\u76D1\u542C\u751F\u547D\u5468\u671F",children:[]},{level:2,title:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",slug:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",link:"#\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",children:[]}],path:"/zh-cn/api/special-features/host-lifecycle.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8C03\u8BD5\u65E5\u5FD7",headers:[{level:2,title:"\u666E\u901A\u65E5\u5FD7",slug:"\u666E\u901A\u65E5\u5FD7",link:"#\u666E\u901A\u65E5\u5FD7",children:[]},{level:2,title:"\u9519\u8BEF\u65E5\u5FD7",slug:"\u9519\u8BEF\u65E5\u5FD7",link:"#\u9519\u8BEF\u65E5\u5FD7",children:[]},{level:2,title:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",slug:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",link:"#\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",children:[]}],path:"/zh-cn/api/special-features/logger.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",headers:[{level:2,title:"Class \u6269\u5C55",slug:"class-\u6269\u5C55",link:"#class-\u6269\u5C55",children:[{level:3,title:"\u5BF9\u8C61\u8F6C\u6362",slug:"\u5BF9\u8C61\u8F6C\u6362",link:"#\u5BF9\u8C61\u8F6C\u6362",children:[]},{level:3,title:"\u5B58\u5728\u5224\u65AD",slug:"\u5B58\u5728\u5224\u65AD",link:"#\u5B58\u5728\u5224\u65AD",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E",link:"#\u6A21\u7CCA\u67E5\u627E",children:[]}]},{level:2,title:"Member \u6269\u5C55",slug:"member-\u6269\u5C55",link:"#member-\u6269\u5C55",children:[{level:3,title:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",slug:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",link:"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",children:[]},{level:3,title:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",slug:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",link:"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",children:[]},{level:3,title:"\u5728\u7236\u7C7B\u67E5\u627E",slug:"\u5728\u7236\u7C7B\u67E5\u627E",link:"#\u5728\u7236\u7C7B\u67E5\u627E",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E-1",link:"#\u6A21\u7CCA\u67E5\u627E-1",children:[]},{level:3,title:"\u591A\u91CD\u67E5\u627E",slug:"\u591A\u91CD\u67E5\u627E-1",link:"#\u591A\u91CD\u67E5\u627E-1",children:[]},{level:3,title:"\u9759\u6001\u5B57\u8282\u7801",slug:"\u9759\u6001\u5B57\u8282\u7801",link:"#\u9759\u6001\u5B57\u8282\u7801",children:[]},{level:3,title:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",slug:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",link:"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",children:[]},{level:3,title:"\u76F4\u63A5\u8C03\u7528",slug:"\u76F4\u63A5\u8C03\u7528",link:"#\u76F4\u63A5\u8C03\u7528",children:[]},{level:3,title:"\u539F\u59CB\u8C03\u7528",slug:"\u539F\u59CB\u8C03\u7528",link:"#\u539F\u59CB\u8C03\u7528",children:[]},{level:3,title:"\u518D\u6B21\u67E5\u627E",slug:"\u518D\u6B21\u67E5\u627E",link:"#\u518D\u6B21\u67E5\u627E",children:[]},{level:3,title:"\u76F8\u5BF9\u5339\u914D",slug:"\u76F8\u5BF9\u5339\u914D",link:"#\u76F8\u5BF9\u5339\u914D",children:[]},{level:3,title:"\u8C03\u7528\u6CDB\u578B",slug:"\u8C03\u7528\u6CDB\u578B",link:"#\u8C03\u7528\u6CDB\u578B",children:[]},{level:3,title:"\u6CE8\u610F\u8BEF\u533A",slug:"\u6CE8\u610F\u8BEF\u533A",link:"#\u6CE8\u610F\u8BEF\u533A",children:[]}]},{level:2,title:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",slug:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",link:"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55",children:[]}],path:"/zh-cn/api/special-features/reflection.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865",headers:[{level:2,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:2,title:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",slug:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",link:"#\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",children:[]},{level:2,title:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",slug:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",link:"#\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",children:[]},{level:2,title:"\u5B89\u5168\u6027\u8BF4\u660E",slug:"\u5B89\u5168\u6027\u8BF4\u660E",link:"#\u5B89\u5168\u6027\u8BF4\u660E",children:[]}],path:"/zh-cn/api/special-features/xposed-channel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8",headers:[{level:2,title:"\u5728 Activity \u4E2D\u4F7F\u7528",slug:"\u5728-activity-\u4E2D\u4F7F\u7528",link:"#\u5728-activity-\u4E2D\u4F7F\u7528",children:[]},{level:2,title:"\u5728 PreferenceFragment \u4E2D\u4F7F\u7528",slug:"\u5728-preferencefragment-\u4E2D\u4F7F\u7528",link:"#\u5728-preferencefragment-\u4E2D\u4F7F\u7528",children:[]}],path:"/zh-cn/api/special-features/xposed-storage.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"isModuleActive - field",slug:"ismoduleactive-field",link:"#ismoduleactive-field",children:[]},{level:3,title:"isXposedModuleActive - field",slug:"isxposedmoduleactive-field",link:"#isxposedmoduleactive-field",children:[]},{level:3,title:"isTaiChiModuleActive - field",slug:"istaichimoduleactive-field",link:"#istaichimoduleactive-field",children:[]},{level:3,title:"isSupportResourcesHook - field",slug:"issupportresourceshook-field",link:"#issupportresourceshook-field",children:[]},{level:3,title:"Executor - object",slug:"executor-object",link:"#executor-object",children:[]}]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"isModuleActive - field",slug:"ismoduleactive-field",link:"#ismoduleactive-field",children:[]},{level:3,title:"isXposedModuleActive - field",slug:"isxposedmoduleactive-field",link:"#isxposedmoduleactive-field",children:[]},{level:3,title:"isTaiChiModuleActive - field",slug:"istaichimoduleactive-field",link:"#istaichimoduleactive-field",children:[]},{level:3,title:"isSupportResourcesHook - field",slug:"issupportresourceshook-field",link:"#issupportresourceshook-field",children:[]},{level:3,title:"Executor - object",slug:"executor-object",link:"#executor-object",children:[]}]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/en/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",pathLocale:"/en/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookClass - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookResources - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",pathLocale:"/en/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",pathLocale:"/en/",extraFields:[]},{title:"YukiBaseHooker - class",headers:[{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",pathLocale:"/en/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSED_ENVIRONMENT - enum",slug:"xposed-environment-enum",link:"#xposed-environment-enum",children:[]},{level:3,title:"SCOPE - enum",slug:"scope-enum",link:"#scope-enum",children:[]},{level:3,title:"BOTH - enum",slug:"both-enum",link:"#both-enum",children:[]}]},{level:2,title:"YukiLoggerData - class",slug:"yukiloggerdata-class",link:"#yukiloggerdata-class",children:[]},{level:2,title:"YukiHookLogger - object",slug:"yukihooklogger-object",link:"#yukihooklogger-object",children:[{level:3,title:"inMemoryData - field",slug:"inmemorydata-field",link:"#inmemorydata-field",children:[]},{level:3,title:"contents - field",slug:"contents-field",link:"#contents-field",children:[]},{level:3,title:"contents - method",slug:"contents-method",link:"#contents-method",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/en/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"dataExtra - field",slug:"dataextra-field",link:"#dataextra-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/en/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/en/",extraFields:[]},{title:"YukiMemberHookCreator - class",headers:[{level:2,title:"PRIORITY_DEFAULT - field",slug:"priority-default-field",link:"#priority-default-field",children:[]},{level:2,title:"PRIORITY_LOWEST - field",slug:"priority-lowest-field",link:"#priority-lowest-field",children:[]},{level:2,title:"PRIORITY_HIGHEST - field",slug:"priority-highest-field",link:"#priority-highest-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"injectMember - method",slug:"injectmember-method",link:"#injectmember-method",children:[]},{level:2,title:"useDangerousOperation - method",slug:"usedangerousoperation-method",link:"#usedangerousoperation-method",children:[]},{level:2,title:"MemberHookCreator - class",slug:"memberhookcreator-class",link:"#memberhookcreator-class",children:[{level:3,title:"members - method",slug:"members-method",link:"#members-method",children:[]},{level:3,title:"allMembers - method",slug:"allmembers-method",link:"#allmembers-method",children:[]},{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"HookParam.field - i-ext-method",slug:"hookparam-field-i-ext-method",link:"#hookparam-field-i-ext-method",children:[]},{level:3,title:"HookParam.method - i-ext-method",slug:"hookparam-method-i-ext-method",link:"#hookparam-method-i-ext-method",children:[]},{level:3,title:"HookParam.constructor - i-ext-method",slug:"hookparam-constructor-i-ext-method",link:"#hookparam-constructor-i-ext-method",children:[]},{level:3,title:"HookParam.injectMember - i-ext-method",slug:"hookparam-injectmember-i-ext-method",link:"#hookparam-injectmember-i-ext-method",children:[]},{level:3,title:"beforeHook - method",slug:"beforehook-method",link:"#beforehook-method",children:[]},{level:3,title:"afterHook - method",slug:"afterhook-method",link:"#afterhook-method",children:[]},{level:3,title:"replaceAny - method",slug:"replaceany-method",link:"#replaceany-method",children:[]},{level:3,title:"replaceUnit - method",slug:"replaceunit-method",link:"#replaceunit-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"intercept - method",slug:"intercept-method",link:"#intercept-method",children:[]},{level:3,title:"removeSelf - method",slug:"removeself-method",link:"#removeself-method",children:[]},{level:3,title:"HookCallback - class",slug:"hookcallback-class",link:"#hookcallback-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"by - method",slug:"by-method-1",link:"#by-method-1",children:[]},{level:3,title:"onPrepareHook - method",slug:"onpreparehook-method",link:"#onpreparehook-method",children:[]},{level:3,title:"onHookClassNotFoundFailure - method",slug:"onhookclassnotfoundfailure-method",link:"#onhookclassnotfoundfailure-method",children:[]},{level:3,title:"ignoredHookClassNotFoundFailure - method",slug:"ignoredhookclassnotfoundfailure-method",link:"#ignoredhookclassnotfoundfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResourcesHookCreator - class",headers:[{level:2,title:"injectResource - method",slug:"injectresource-method",link:"#injectresource-method",children:[]},{level:2,title:"ResourcesHookCreator - class",slug:"resourceshookcreator-class",link:"#resourceshookcreator-class",children:[{level:3,title:"resourceId - field",slug:"resourceid-field",link:"#resourceid-field",children:[]},{level:3,title:"conditions - method",slug:"conditions-method",link:"#conditions-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"replaceToModuleResource - method",slug:"replacetomoduleresource-method",link:"#replacetomoduleresource-method",children:[]},{level:3,title:"injectAsLayout - method",slug:"injectaslayout-method",link:"#injectaslayout-method",children:[]},{level:3,title:"ConditionFinder - class",slug:"conditionfinder-class",link:"#conditionfinder-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]},{level:3,title:"onHookingFailure - method",slug:"onhookingfailure-method",link:"#onhookingfailure-method",children:[]},{level:3,title:"ignoredHookingFailure - method",slug:"ignoredhookingfailure-method",link:"#ignoredhookingfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"MembersType - class",slug:"memberstype-class",link:"#memberstype-class",children:[{level:3,title:"ALL - enum",slug:"all-enum",link:"#all-enum",children:[]},{level:3,title:"METHOD - enum",slug:"method-enum",link:"#method-enum",children:[]},{level:3,title:"CONSTRUCTOR - enum",slug:"constructor-enum",link:"#constructor-enum",children:[]}]},{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"ClassLoader.onLoadClass - ext-method",slug:"classloader-onloadclass-ext-method",link:"#classloader-onloadclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/en/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookClass - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookResources - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiMemberHookCreator - class",headers:[{level:2,title:"PRIORITY_DEFAULT - field",slug:"priority-default-field",link:"#priority-default-field",children:[]},{level:2,title:"PRIORITY_LOWEST - field",slug:"priority-lowest-field",link:"#priority-lowest-field",children:[]},{level:2,title:"PRIORITY_HIGHEST - field",slug:"priority-highest-field",link:"#priority-highest-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"injectMember - method",slug:"injectmember-method",link:"#injectmember-method",children:[]},{level:2,title:"useDangerousOperation - method",slug:"usedangerousoperation-method",link:"#usedangerousoperation-method",children:[]},{level:2,title:"MemberHookCreator - class",slug:"memberhookcreator-class",link:"#memberhookcreator-class",children:[{level:3,title:"members - method",slug:"members-method",link:"#members-method",children:[]},{level:3,title:"allMembers - method",slug:"allmembers-method",link:"#allmembers-method",children:[]},{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"HookParam.field - i-ext-method",slug:"hookparam-field-i-ext-method",link:"#hookparam-field-i-ext-method",children:[]},{level:3,title:"HookParam.method - i-ext-method",slug:"hookparam-method-i-ext-method",link:"#hookparam-method-i-ext-method",children:[]},{level:3,title:"HookParam.constructor - i-ext-method",slug:"hookparam-constructor-i-ext-method",link:"#hookparam-constructor-i-ext-method",children:[]},{level:3,title:"HookParam.injectMember - i-ext-method",slug:"hookparam-injectmember-i-ext-method",link:"#hookparam-injectmember-i-ext-method",children:[]},{level:3,title:"beforeHook - method",slug:"beforehook-method",link:"#beforehook-method",children:[]},{level:3,title:"afterHook - method",slug:"afterhook-method",link:"#afterhook-method",children:[]},{level:3,title:"replaceAny - method",slug:"replaceany-method",link:"#replaceany-method",children:[]},{level:3,title:"replaceUnit - method",slug:"replaceunit-method",link:"#replaceunit-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"intercept - method",slug:"intercept-method",link:"#intercept-method",children:[]},{level:3,title:"removeSelf - method",slug:"removeself-method",link:"#removeself-method",children:[]},{level:3,title:"HookCallback - class",slug:"hookcallback-class",link:"#hookcallback-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"by - method",slug:"by-method-1",link:"#by-method-1",children:[]},{level:3,title:"onPrepareHook - method",slug:"onpreparehook-method",link:"#onpreparehook-method",children:[]},{level:3,title:"onHookClassNotFoundFailure - method",slug:"onhookclassnotfoundfailure-method",link:"#onhookclassnotfoundfailure-method",children:[]},{level:3,title:"ignoredHookClassNotFoundFailure - method",slug:"ignoredhookclassnotfoundfailure-method",link:"#ignoredhookclassnotfoundfailure-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResourcesHookCreator - class",headers:[{level:2,title:"injectResource - method",slug:"injectresource-method",link:"#injectresource-method",children:[]},{level:2,title:"ResourcesHookCreator - class",slug:"resourceshookcreator-class",link:"#resourceshookcreator-class",children:[{level:3,title:"resourceId - field",slug:"resourceid-field",link:"#resourceid-field",children:[]},{level:3,title:"conditions - method",slug:"conditions-method",link:"#conditions-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"replaceToModuleResource - method",slug:"replacetomoduleresource-method",link:"#replacetomoduleresource-method",children:[]},{level:3,title:"injectAsLayout - method",slug:"injectaslayout-method",link:"#injectaslayout-method",children:[]},{level:3,title:"ConditionFinder - class",slug:"conditionfinder-class",link:"#conditionfinder-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]},{level:3,title:"onHookingFailure - method",slug:"onhookingfailure-method",link:"#onhookingfailure-method",children:[]},{level:3,title:"ignoredHookingFailure - method",slug:"ignoredhookingfailure-method",link:"#ignoredhookingfailure-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiBaseHooker - class",headers:[{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"MembersType - class",slug:"memberstype-class",link:"#memberstype-class",children:[{level:3,title:"ALL - enum",slug:"all-enum",link:"#all-enum",children:[]},{level:3,title:"METHOD - enum",slug:"method-enum",link:"#method-enum",children:[]},{level:3,title:"CONSTRUCTOR - enum",slug:"constructor-enum",link:"#constructor-enum",children:[]}]},{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"ClassLoader.onLoadClass - ext-method",slug:"classloader-onloadclass-ext-method",link:"#classloader-onloadclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSED_ENVIRONMENT - enum",slug:"xposed-environment-enum",link:"#xposed-environment-enum",children:[]},{level:3,title:"SCOPE - enum",slug:"scope-enum",link:"#scope-enum",children:[]},{level:3,title:"BOTH - enum",slug:"both-enum",link:"#both-enum",children:[]}]},{level:2,title:"YukiLoggerData - class",slug:"yukiloggerdata-class",link:"#yukiloggerdata-class",children:[]},{level:2,title:"YukiHookLogger - object",slug:"yukihooklogger-object",link:"#yukihooklogger-object",children:[{level:3,title:"inMemoryData - field",slug:"inmemorydata-field",link:"#inmemorydata-field",children:[]},{level:3,title:"contents - field",slug:"contents-field",link:"#contents-field",children:[]},{level:3,title:"contents - method",slug:"contents-method",link:"#contents-method",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"dataExtra - field",slug:"dataextra-field",link:"#dataextra-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"allowSendTooLargeData - method",slug:"allowsendtoolargedata-method",link:"#allowsendtoolargedata-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isPreferencesAvailable - field",slug:"ispreferencesavailable-field",link:"#ispreferencesavailable-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/en/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/en/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"allowSendTooLargeData - method",slug:"allowsendtoolargedata-method",link:"#allowsendtoolargedata-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isPreferencesAvailable - field",slug:"ispreferencesavailable-field",link:"#ispreferencesavailable-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",pathLocale:"/en/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method-1",link:"#onnosuchconstructor-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",pathLocale:"/en/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",pathLocale:"/en/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method-1",link:"#onnosuchmethod-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",pathLocale:"/en/",extraFields:[]},{title:"YukiXposedEvent - object",headers:[{level:2,title:"events - method",slug:"events-method",link:"#events-method",children:[]},{level:2,title:"onInitZygote - method",slug:"oninitzygote-method",link:"#oninitzygote-method",children:[]},{level:2,title:"onHandleLoadPackage - method",slug:"onhandleloadpackage-method",link:"#onhandleloadpackage-method",children:[]},{level:2,title:"onHandleInitPackageResources - method",slug:"onhandleinitpackageresources-method",link:"#onhandleinitpackageresources-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",pathLocale:"/en/",extraFields:[]},{title:"YukiModuleResources - class",headers:[{level:2,title:"fwd - method",slug:"fwd-method",link:"#fwd-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResForwarder - class",headers:[{level:2,title:"id - field",slug:"id-field",link:"#id-field",children:[]},{level:2,title:"resources - field",slug:"resources-field",link:"#resources-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResources - class",headers:[{level:2,title:"LayoutInflatedParam - class",slug:"layoutinflatedparam-class",link:"#layoutinflatedparam-class",children:[{level:3,title:"variantName - field",slug:"variantname-field",link:"#variantname-field",children:[]},{level:3,title:"currentView - field",slug:"currentview-field",link:"#currentview-field",children:[]},{level:3,title:"findViewByIdentifier - method",slug:"findviewbyidentifier-method",link:"#findviewbyidentifier-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",pathLocale:"/en/",extraFields:[]},{title:"ChannelData - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",pathLocale:"/en/",extraFields:[]},{title:"ChannelPriority - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleClassLoader - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"excludeHostClasses - method",slug:"excludehostclasses-method",link:"#excludehostclasses-method",children:[]},{level:3,title:"excludeModuleClasses - method",slug:"excludemoduleclasses-method",link:"#excludemoduleclasses-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",pathLocale:"/en/",extraFields:[]},{title:"PrefsData - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",pathLocale:"/en/",extraFields:[]},{title:"ModulePreferenceFragment - class",headers:[{level:2,title:"onCreatePreferencesInModuleApp - method",slug:"oncreatepreferencesinmoduleapp-method",link:"#oncreatepreferencesinmoduleapp-method",children:[]},{level:2,title:"onSharedPreferenceChanged - method",slug:"onsharedpreferencechanged-method",link:"#onsharedpreferencechanged-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",pathLocale:"/en/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method-1",link:"#onnosuchconstructor-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method-1",link:"#onnosuchmethod-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiXposedEvent - object",headers:[{level:2,title:"events - method",slug:"events-method",link:"#events-method",children:[]},{level:2,title:"onInitZygote - method",slug:"oninitzygote-method",link:"#oninitzygote-method",children:[]},{level:2,title:"onHandleLoadPackage - method",slug:"onhandleloadpackage-method",link:"#onhandleloadpackage-method",children:[]},{level:2,title:"onHandleInitPackageResources - method",slug:"onhandleinitpackageresources-method",link:"#onhandleinitpackageresources-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiModuleResources - class",headers:[{level:2,title:"fwd - method",slug:"fwd-method",link:"#fwd-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResForwarder - class",headers:[{level:2,title:"id - field",slug:"id-field",link:"#id-field",children:[]},{level:2,title:"resources - field",slug:"resources-field",link:"#resources-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResources - class",headers:[{level:2,title:"LayoutInflatedParam - class",slug:"layoutinflatedparam-class",link:"#layoutinflatedparam-class",children:[{level:3,title:"variantName - field",slug:"variantname-field",link:"#variantname-field",children:[]},{level:3,title:"currentView - field",slug:"currentview-field",link:"#currentview-field",children:[]},{level:3,title:"findViewByIdentifier - method",slug:"findviewbyidentifier-method",link:"#findviewbyidentifier-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ChannelData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ChannelPriority - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleClassLoader - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"excludeHostClasses - method",slug:"excludehostclasses-method",link:"#excludehostclasses-method",children:[]},{level:3,title:"excludeModuleClasses - method",slug:"excludemoduleclasses-method",link:"#excludemoduleclasses-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PrefsData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModulePreferenceFragment - class",headers:[{level:2,title:"onCreatePreferencesInModuleApp - method",slug:"oncreatepreferencesinmoduleapp-method",link:"#oncreatepreferencesinmoduleapp-method",children:[]},{level:2,title:"onSharedPreferenceChanged - method",slug:"onsharedpreferencechanged-method",link:"#onsharedpreferencechanged-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",pathLocale:"/en/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",pathLocale:"/en/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",pathLocale:"/en/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",pathLocale:"/en/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",pathLocale:"/en/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/en/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Br=ye(hf),df=()=>Br;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Br.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=Y(()=>e.value.filter(n=>n.pathLocale===t.value));return Y(()=>{const n=l.value.trim().toLowerCase();if(!n)return[];const a=[],r=(s,c)=>{sa(n,[c.title])&&a.push({link:`${s.path}#${c.slug}`,title:s.title,header:c.title});for(const h of c.children){if(a.length>=i.value)return;r(s,h)}};for(const s of o.value){if(a.length>=i.value)break;if(sa(n,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const c of s.headers){if(a.length>=i.value)break;r(s,c)}}return a})},pf=e=>{const t=ye(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},mf=ue({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:l,maxSuggestions:i}=Ei(e),o=Zt(),n=Wl(),a=df(),r=ye(null),s=ye(!1),c=ye(""),h=Y(()=>{var L;return(L=t.value[n.value])!=null?L:{}}),p=uf({searchIndex:a,routeLocale:n,query:c,maxSuggestions:i}),{focusIndex:m,focusNext:g,focusPrev:x}=pf(p);cf({input:r,hotKeys:l});const P=Y(()=>s.value&&!!p.value.length),E=()=>{!P.value||x()},k=()=>{!P.value||g()},_=L=>{if(!P.value)return;const H=p.value[L];!H||o.push(H.link).then(()=>{c.value="",m.value=0})};return()=>he("form",{class:"search-box",role:"search"},[he("input",{ref:r,type:"search",placeholder:h.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:L=>c.value=L.target.value,onKeydown:L=>{switch(L.key){case"ArrowUp":{E();break}case"ArrowDown":{k();break}case"Enter":{L.preventDefault(),_(m.value);break}}}}),P.value&&he("ul",{class:"suggestions",onMouseleave:()=>m.value=-1},p.value.map(({link:L,title:H,header:U},ee)=>he("li",{class:["suggestion",{focus:m.value===ee}],onMouseenter:()=>m.value=ee,onMousedown:()=>_(ee)},he("a",{href:L,onClick:w=>w.preventDefault()},[he("span",{class:"page-title"},H),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Ht({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Yd,Xd,nu,cu,mu,nf,vf];var Ur=ye(es),Wr=Co({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),gt=ye(Wr),Ot=()=>gt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{Ur.value[e.key]=()=>Promise.resolve(e),e.key===gt.value.key&&(gt.value=e)});var Xr=Symbol(""),vt=()=>{const e=Me(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=Me(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=Me(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=Me(No);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},At=ye(Th),Gr=()=>At;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{At.value=e});var Qr=Symbol(""),jo=()=>{const e=Me(Qr);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},xf=Symbol(""),Ut=gl({resolvePageData:async e=>{const t=Ur.value[e],l=await(t==null?void 0:t());return l!=null?l:Wr},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,l)=>{const i=be(t.description)?t.description:l.description,o=[...te(t.head)?t.head:[],...l.head,["title",{},e],["meta",{name:"description",content:i}]];return Ih(o)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>pr(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),$o=ue({name:"ClientOnly",setup(e,t){const l=ye(!1);return Je(()=>{l.value=!0}),()=>{var i,o;return l.value?(o=(i=t.slots).default)==null?void 0:o.call(i):null}}}),Ef=ue({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Ot(),l=Y(()=>mr[e.pageKey||t.value.key]);return()=>l.value?he(l.value):he("div","404 Not Found")}}),Cf="Layout",Rf="NotFound",Pf=oi.reduce((e,t)=>({...e,...t.layouts}),{}),ca=ue({name:"Vuepress",setup(){const e=Ot(),t=Y(()=>{let l;if(e.value.path){const i=e.value.frontmatter.layout;be(i)?l=i:l=Cf}else l=Rf;return Pf[l]});return()=>he(t.value)}}),Yo=e=>Ul(e)?e:`${Gr().value.base}${ur(e)}`;const Lf=[["v-8daa1a0e","/",{title:""},["/index.html","/index.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/index.md"]],["v-c0c85b84","/zh-cn/",{title:"\u9996\u9875"},["/zh-cn/index.html","/zh-cn/index.md"]],["v-7a15fe3b","/en/about/about.html",{title:"About this Document"},["/en/about/about","/en/about/about.md"]],["v-3f851d14","/en/about/changelog.html",{title:"Changelog"},["/en/about/changelog","/en/about/changelog.md"]],["v-193cf592","/en/about/contacts.html",{title:"Contact Us"},["/en/about/contacts","/en/about/contacts.md"]],["v-ae7b83f2","/en/about/future.html",{title:"Looking for Future"},["/en/about/future","/en/about/future.md"]],["v-64fc7bb8","/en/api/home.html",{title:"Document Introduce"},["/en/api/home","/en/api/home.md"]],["v-7b22efaf","/en/guide/example.html",{title:"Usage Example"},["/en/guide/example","/en/guide/example.md"]],["v-efb45d4c","/en/guide/home.html",{title:"Introduce"},["/en/guide/home","/en/guide/home.md"]],["v-277b35ca","/en/guide/knowledge.html",{title:"Basic Knowledge"},["/en/guide/knowledge","/en/guide/knowledge.md"]],["v-77d752a2","/en/guide/move-to-new-api.html",{title:"Migrate from Xposed API"},["/en/guide/move-to-new-api","/en/guide/move-to-new-api.md"]],["v-72889797","/en/guide/quick-start.html",{title:"Quick Start"},["/en/guide/quick-start","/en/guide/quick-start.md"]],["v-9cfea7fc","/en/config/api-example.html",{title:"API Basic Configs"},["/en/config/api-example","/en/config/api-example.md"]],["v-72c12b7d","/en/config/api-exception.html",{title:"API Exception Handling"},["/en/config/api-exception","/en/config/api-exception.md"]],["v-793879e8","/en/config/api-using.html",{title:"Use as Hook API Configs"},["/en/config/api-using","/en/config/api-using.md"]],["v-29d6c1ba","/en/config/r8-proguard.html",{title:"R8 & Proguard Obfuscate"},["/en/config/r8-proguard","/en/config/r8-proguard.md"]],["v-24e71de7","/en/config/xposed-using.html",{title:"Use as Xposed Module Configs"},["/en/config/xposed-using","/en/config/xposed-using.md"]],["v-55c11626","/en/tools/yukihookapi-projectbuilder.html",{title:"YukiHookAPI Project Builder"},["/en/tools/yukihookapi-projectbuilder","/en/tools/yukihookapi-projectbuilder.md"]],["v-41967128","/zh-cn/about/about.html",{title:"\u5173\u4E8E\u6B64\u6587\u6863"},["/zh-cn/about/about","/zh-cn/about/about.md"]],["v-0e6c3476","/zh-cn/about/changelog.html",{title:"\u66F4\u65B0\u65E5\u5FD7"},["/zh-cn/about/changelog","/zh-cn/about/changelog.md"]],["v-6cf86266","/zh-cn/about/contacts.html",{title:"\u8054\u7CFB\u6211\u4EEC"},["/zh-cn/about/contacts","/zh-cn/about/contacts.md"]],["v-3106ca14","/zh-cn/about/future.html",{title:"\u5C55\u671B\u672A\u6765"},["/zh-cn/about/future","/zh-cn/about/future.md"]],["v-c8deafb2","/zh-cn/api/home.html",{title:"\u6587\u6863\u4ECB\u7ECD"},["/zh-cn/api/home","/zh-cn/api/home.md"]],["v-c6114c9e","/zh-cn/config/api-example.html",{title:"API \u57FA\u672C\u914D\u7F6E"},["/zh-cn/config/api-example","/zh-cn/config/api-example.md"]],["v-5b43296c","/zh-cn/config/api-exception.html",{title:"API \u5F02\u5E38\u5904\u7406"},["/zh-cn/config/api-exception","/zh-cn/config/api-exception.md"]],["v-2ee67152","/zh-cn/config/api-using.html",{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E"},["/zh-cn/config/api-using","/zh-cn/config/api-using.md"]],["v-154d6f69","/zh-cn/config/r8-proguard.html",{title:"R8 \u4E0E Proguard \u6DF7\u6DC6"},["/zh-cn/config/r8-proguard","/zh-cn/config/r8-proguard.md"]],["v-af73b3d0","/zh-cn/config/xposed-using.html",{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E"},["/zh-cn/config/xposed-using","/zh-cn/config/xposed-using.md"]],["v-13b430a0","/zh-cn/guide/example.html",{title:"\u7528\u6CD5\u793A\u4F8B"},["/zh-cn/guide/example","/zh-cn/guide/example.md"]],["v-6a609e09","/zh-cn/guide/home.html",{title:"\u4ECB\u7ECD"},["/zh-cn/guide/home","/zh-cn/guide/home.md"]],["v-b4f1a468","/zh-cn/guide/knowledge.html",{title:"\u57FA\u7840\u77E5\u8BC6"},["/zh-cn/guide/knowledge","/zh-cn/guide/knowledge.md"]],["v-c0d5dada","/zh-cn/guide/move-to-new-api.html",{title:"\u4ECE Xposed API \u8FC1\u79FB"},["/zh-cn/guide/move-to-new-api","/zh-cn/guide/move-to-new-api.md"]],["v-24840ff0","/zh-cn/guide/quick-start.html",{title:"\u5FEB\u901F\u5F00\u59CB"},["/zh-cn/guide/quick-start","/zh-cn/guide/quick-start.md"]],["v-a2fab4d6","/zh-cn/tools/yukihookapi-projectbuilder.html",{title:"YukiHookAPI \u6784\u5EFA\u5DE5\u5177"},["/zh-cn/tools/yukihookapi-projectbuilder","/zh-cn/tools/yukihookapi-projectbuilder.md"]],["v-12042f1f","/en/api/special-features/host-inject.html",{title:"Host Resource Injection Extension"},["/en/api/special-features/host-inject","/en/api/special-features/host-inject.md"]],["v-deaff1d0","/en/api/special-features/host-lifecycle.html",{title:"Host Lifecycle Extension"},["/en/api/special-features/host-lifecycle","/en/api/special-features/host-lifecycle.md"]],["v-33c1dc26","/en/api/special-features/logger.html",{title:"Debug Logs"},["/en/api/special-features/logger","/en/api/special-features/logger.md"]],["v-581ddb9c","/en/api/special-features/reflection.html",{title:"Reflection Extensions"},["/en/api/special-features/reflection","/en/api/special-features/reflection.md"]],["v-2e6ad66c","/en/api/special-features/xposed-channel.html",{title:"Xposed Module and Host Channel"},["/en/api/special-features/xposed-channel","/en/api/special-features/xposed-channel.md"]],["v-68bebbf4","/en/api/special-features/xposed-storage.html",{title:"Xposed Module Data Storage"},["/en/api/special-features/xposed-storage","/en/api/special-features/xposed-storage.md"]],["v-6ac5be8e","/zh-cn/api/special-features/host-inject.html",{title:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55"},["/zh-cn/api/special-features/host-inject","/zh-cn/api/special-features/host-inject.md"]],["v-357a8d49","/zh-cn/api/special-features/host-lifecycle.html",{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55"},["/zh-cn/api/special-features/host-lifecycle","/zh-cn/api/special-features/host-lifecycle.md"]],["v-1f0f591e","/zh-cn/api/special-features/logger.html",{title:"\u8C03\u8BD5\u65E5\u5FD7"},["/zh-cn/api/special-features/logger","/zh-cn/api/special-features/logger.md"]],["v-001858e3","/zh-cn/api/special-features/reflection.html",{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55"},["/zh-cn/api/special-features/reflection","/zh-cn/api/special-features/reflection.md"]],["v-598546c6","/zh-cn/api/special-features/xposed-channel.html",{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865"},["/zh-cn/api/special-features/xposed-channel","/zh-cn/api/special-features/xposed-channel.md"]],["v-0d914225","/zh-cn/api/special-features/xposed-storage.html",{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8"},["/zh-cn/api/special-features/xposed-storage","/zh-cn/api/special-features/xposed-storage.md"]],["v-053599a5","/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",{title:"YukiHookAPI - object"},["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"]],["v-6931cb54","/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",{title:"YukiHookAPI - object"},["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"]],["v-818b3ca6","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",{title:"InjectYukiHookWithXposed - annotation"},["/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.md"]],["v-b6a815c4","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",{title:"CurrentClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.md"]],["v-0183e3fc","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",{title:"GenericClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.md"]],["v-57506200","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",{title:"HookClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.md"]],["v-9af56c1a","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",{title:"HookResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.md"]],["v-032b1710","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",{title:"VariousClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.md"]],["v-e288ce96","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",{title:"YukiBaseHooker - class"},["/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.md"]],["v-36aec5ad","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",{title:"LoggerFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"]],["v-60cbe1b4","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-b381a126","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-71147891","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5ed1ceee","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-0d0fcec2","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"]],["v-65091354","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",{title:"YukiHookFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.md"]],["v-30f3ba1e","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",{title:"InjectYukiHookWithXposed - annotation"},["/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.md"]],["v-6e47300f","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",{title:"CurrentClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.md"]],["v-69c1c226","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",{title:"GenericClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.md"]],["v-735374af","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",{title:"HookClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.md"]],["v-1c516d22","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",{title:"HookResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.md"]],["v-66735bfe","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",{title:"VariousClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.md"]],["v-3ac40680","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5e81af42","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-516df326","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",{title:"YukiBaseHooker - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.md"]],["v-213d88b3","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"]],["v-448e9585","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",{title:"YukiHookFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.md"]],["v-004a009e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",{title:"LoggerFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"]],["v-75a9b636","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-100b529c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-8293d958","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-7b0abf86","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-5309e4a0","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-a2615d0c","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-ba01a600","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-7fec5836","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-7414265a","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-003862c2","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-1d680acc","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-5e874c45","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-4ea62475","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-ef79cde2","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-5acc12ab","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-14ec8671","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-4709ad58","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-632be8ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-5858709e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-763140ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-4fca92c0","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.md"]],["v-2a898c66","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.md"]],["v-a71937aa","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"]],["v-42e0f0ab","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md"]],["v-a4aa4d00","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"]],["v-19e7277e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",{title:"YukiXposedEvent - object"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.md"]],["v-8455e04e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.md"]],["v-7b087cce","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.md"]],["v-a00b4de6","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",{title:"YukiResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.md"]],["v-2f64a2d4","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",{title:"ChannelData - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.md"]],["v-87027140","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",{title:"ChannelPriority - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md"]],["v-2d4e0da6","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",{title:"ModuleClassLoader - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.md"]],["v-58ed8298","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",{title:"PrefsData - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.md"]],["v-23e1a817","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",{title:"ModulePreferenceFragment - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.md"]],["v-0f719471","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.md"]],["v-45111efc","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.md"]],["v-1e2cbc9c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"]],["v-22449c48","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md"]],["v-fd738322","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"]],["v-0a4de82f","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",{title:"YukiXposedEvent - object"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.md"]],["v-8266e0ec","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.md"]],["v-aa38fa86","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.md"]],["v-21b3b17e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",{title:"YukiResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.md"]],["v-493d37f6","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",{title:"ChannelData - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.md"]],["v-b57870de","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",{title:"ChannelPriority - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md"]],["v-4b468415","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",{title:"ModuleClassLoader - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.md"]],["v-d99f7f36","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",{title:"PrefsData - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.md"]],["v-53bcae06","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",{title:"ModulePreferenceFragment - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.md"]],["v-52995ef7","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.md"]],["v-8d5ce71a","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.md"]],["v-f5b1ffb2","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.md"]],["v-652b815b","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.md"]],["v-08b70f7f","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.md"]],["v-21f64ebf","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.md"]],["v-77f11cf9","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.md"]],["v-64827680","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.md"]],["v-2d5d16db","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",{title:"ModuleAppActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"]],["v-cadbe48e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",{title:"ModuleAppCompatActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"]],["v-78731c50","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",{title:"ModuleContextThemeWrapper - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.md"]],["v-1b2ad030","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.md"]],["v-547a3c3c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.md"]],["v-58c26516","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.md"]],["v-80fd32ec","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.md"]],["v-a42f54a4","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.md"]],["v-3e67a42e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.md"]],["v-2cab152c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.md"]],["v-5388621e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.md"]],["v-1446bdca","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",{title:"ModuleAppActivity - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"]],["v-c7cef530","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",{title:"ModuleAppCompatActivity - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"]],["v-44efb702","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",{title:"ModuleContextThemeWrapper - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.md"]],["v-5e375d98","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.md"]],["v-b8000f3a","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Tf=()=>Lf.reduce((e,[t,l,i,o])=>(e.push({name:t,path:l,component:ca,meta:i},...o.map(n=>({path:n,redirect:l}))),e),[{name:"404",path:"/:catchAll(.*)",component:ca}]),Af=Gh,If=()=>{const e=Fd({history:Af(dr(At.value.base)),routes:Tf(),scrollBehavior:(t,l,i)=>i||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,l)=>{var i;(t.path!==l.path||l===mt)&&([gt.value]=await Promise.all([Ut.resolvePageData(t.name),(i=mr[t.name])==null?void 0:i.__asyncLoader()]))}),e},wf=e=>{e.component("ClientOnly",$o),e.component("Content",Ef)},Of=(e,t)=>{const l=Y(()=>Ut.resolveRouteLocale(At.value.locales,t.currentRoute.value.path)),i=Y(()=>Ut.resolveSiteLocaleData(At.value,l.value)),o=Y(()=>Ut.resolvePageFrontmatter(gt.value)),n=Y(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=Y(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=Y(()=>Ut.resolvePageLang(gt.value));return e.provide(No,l),e.provide(Qr,i),e.provide(Xr,o),e.provide(_f,n),e.provide(qr,a),e.provide(Kr,r),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>o.value},$head:{get:()=>a.value},$headTitle:{get:()=>n.value},$lang:{get:()=>r.value},$page:{get:()=>gt.value},$routeLocale:{get:()=>l.value},$site:{get:()=>At.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>Yo}}),{pageData:gt,pageFrontmatter:o,pageHead:a,pageHeadTitle:n,pageLang:r,routeLocale:l,siteData:At,siteLocaleData:i}},Ff=()=>{const e=St(),t=bf(),l=yf(),i=ye([]),o=()=>{t.value.forEach(a=>{const r=zf(a);r&&i.value.push(r)})},n=()=>{document.documentElement.lang=l.value,i.value.forEach(a=>{a.parentNode===document.head&&document.head.removeChild(a)}),i.value.splice(0,i.value.length),t.value.forEach(a=>{const r=Df(a);r!==null&&(document.head.appendChild(r),i.value.push(r))})};Gt(xf,n),Je(()=>{o(),n(),dt(()=>e.path,()=>n())})},zf=([e,t,l=""])=>{const i=Object.entries(t).map(([r,s])=>be(s)?`[${r}="${s}"]`:s===!0?`[${r}]`:"").join(""),o=`head > ${e}${i}`;return Array.from(document.querySelectorAll(o)).find(r=>r.innerText===l)||null},Df=([e,t,l])=>{if(!be(e))return null;const i=document.createElement(e);return Oo(t)&&Object.entries(t).forEach(([o,n])=>{be(n)?i.setAttribute(o,n):n===!0&&i.setAttribute(o,"")}),be(l)&&i.appendChild(document.createTextNode(l)),i},Mf=Ph,Hf=async()=>{var l;const e=Mf({name:"VuepressApp",setup(){var i;Ff();for(const o of oi)(i=o.setup)==null||i.call(o);return()=>[he(Pr),...oi.flatMap(({rootComponents:o=[]})=>o.map(n=>he(n)))]}}),t=If();wf(e),Of(e,t);for(const i of oi)await((l=i.enhance)==null?void 0:l.call(i,{app:e,router:t,siteData:At}));return e.use(t),{app:e,router:t}};Hf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Te as _,jc as a,fe as b,Z as c,Hf as createVueApp,oe as d,Mt as e,N as o,_t as r,He as w}; diff --git a/docs/assets/app.a3fd8dd4.js b/docs/assets/app.a3fd8dd4.js deleted file mode 100644 index 52725611d..000000000 --- a/docs/assets/app.a3fd8dd4.js +++ /dev/null @@ -1,10 +0,0 @@ -const Jr="modulepreload",Zr=function(e){return"/YukiHookAPI/"+e},Xo={},d=function(t,l,i){return!l||l.length===0?t():Promise.all(l.map(o=>{if(o=Zr(o),o in Xo)return;Xo[o]=!0;const n=o.endsWith(".css"),a=n?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${o}"]${a}`))return;const r=document.createElement("link");if(r.rel=n?"stylesheet":Jr,n||(r.as="script",r.crossOrigin=""),r.href=o,document.head.appendChild(r),n)return new Promise((s,c)=>{r.addEventListener("load",s),r.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},es={"v-8daa1a0e":()=>d(()=>import("./index.html.1ad46905.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>d(()=>import("./index.html.58270dd2.js"),[]).then(({data:e})=>e),"v-c0c85b84":()=>d(()=>import("./index.html.962e6741.js"),[]).then(({data:e})=>e),"v-7a15fe3b":()=>d(()=>import("./about.html.bac55135.js"),[]).then(({data:e})=>e),"v-3f851d14":()=>d(()=>import("./changelog.html.9ab752eb.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.94bd226b.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.3cb1bbf7.js"),[]).then(({data:e})=>e),"v-efb45d4c":()=>d(()=>import("./home.html.ca5e9385.js"),[]).then(({data:e})=>e),"v-277b35ca":()=>d(()=>import("./knowledge.html.13983a8b.js"),[]).then(({data:e})=>e),"v-77d752a2":()=>d(()=>import("./move-to-new-api.html.f91df01f.js"),[]).then(({data:e})=>e),"v-72889797":()=>d(()=>import("./quick-start.html.9679e241.js"),[]).then(({data:e})=>e),"v-9cfea7fc":()=>d(()=>import("./api-example.html.a8d0e1b2.js"),[]).then(({data:e})=>e),"v-72c12b7d":()=>d(()=>import("./api-exception.html.44fcd1be.js"),[]).then(({data:e})=>e),"v-793879e8":()=>d(()=>import("./api-using.html.c794f69e.js"),[]).then(({data:e})=>e),"v-29d6c1ba":()=>d(()=>import("./r8-proguard.html.15e04e11.js"),[]).then(({data:e})=>e),"v-24e71de7":()=>d(()=>import("./xposed-using.html.fca5c15c.js"),[]).then(({data:e})=>e),"v-55c11626":()=>d(()=>import("./yukihookapi-projectbuilder.html.ed4fa356.js"),[]).then(({data:e})=>e),"v-41967128":()=>d(()=>import("./about.html.4de66a22.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>d(()=>import("./changelog.html.9c2f128d.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.2cf8d6de.js"),[]).then(({data:e})=>e),"v-c6114c9e":()=>d(()=>import("./api-example.html.ed7845ea.js"),[]).then(({data:e})=>e),"v-5b43296c":()=>d(()=>import("./api-exception.html.52eceba1.js"),[]).then(({data:e})=>e),"v-2ee67152":()=>d(()=>import("./api-using.html.0a59e2e0.js"),[]).then(({data:e})=>e),"v-154d6f69":()=>d(()=>import("./r8-proguard.html.683a5429.js"),[]).then(({data:e})=>e),"v-af73b3d0":()=>d(()=>import("./xposed-using.html.c9966283.js"),[]).then(({data:e})=>e),"v-c8deafb2":()=>d(()=>import("./home.html.cad3998c.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.c868eee2.js"),[]).then(({data:e})=>e),"v-6a609e09":()=>d(()=>import("./home.html.ced3162e.js"),[]).then(({data:e})=>e),"v-b4f1a468":()=>d(()=>import("./knowledge.html.830e8c66.js"),[]).then(({data:e})=>e),"v-c0d5dada":()=>d(()=>import("./move-to-new-api.html.4bf89a9b.js"),[]).then(({data:e})=>e),"v-24840ff0":()=>d(()=>import("./quick-start.html.8abc4bb2.js"),[]).then(({data:e})=>e),"v-a2fab4d6":()=>d(()=>import("./yukihookapi-projectbuilder.html.d499d226.js"),[]).then(({data:e})=>e),"v-12042f1f":()=>d(()=>import("./host-inject.html.8e7a6aa7.js"),[]).then(({data:e})=>e),"v-deaff1d0":()=>d(()=>import("./host-lifecycle.html.7e81cf29.js"),[]).then(({data:e})=>e),"v-33c1dc26":()=>d(()=>import("./logger.html.a59ab5f0.js"),[]).then(({data:e})=>e),"v-581ddb9c":()=>d(()=>import("./reflection.html.2a870d09.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.5975332b.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.c35a7041.js"),[]).then(({data:e})=>e),"v-6ac5be8e":()=>d(()=>import("./host-inject.html.77802245.js"),[]).then(({data:e})=>e),"v-357a8d49":()=>d(()=>import("./host-lifecycle.html.136055f0.js"),[]).then(({data:e})=>e),"v-1f0f591e":()=>d(()=>import("./logger.html.ed51ab5d.js"),[]).then(({data:e})=>e),"v-001858e3":()=>d(()=>import("./reflection.html.0e88a14d.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.325b6181.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.5fd9a913.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.2ba08be8.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.4cc2205d.js"),[]).then(({data:e})=>e),"v-818b3ca6":()=>d(()=>import("./InjectYukiHookWithXposed.html.56391530.js"),[]).then(({data:e})=>e),"v-b6a815c4":()=>d(()=>import("./CurrentClass.html.16c29272.js"),[]).then(({data:e})=>e),"v-0183e3fc":()=>d(()=>import("./GenericClass.html.f94281cf.js"),[]).then(({data:e})=>e),"v-57506200":()=>d(()=>import("./HookClass.html.52e59cf0.js"),[]).then(({data:e})=>e),"v-9af56c1a":()=>d(()=>import("./HookResources.html.2486cf29.js"),[]).then(({data:e})=>e),"v-032b1710":()=>d(()=>import("./VariousClass.html.153f4c39.js"),[]).then(({data:e})=>e),"v-e288ce96":()=>d(()=>import("./YukiBaseHooker.html.99eec744.js"),[]).then(({data:e})=>e),"v-71147891":()=>d(()=>import("./YukiMemberHookCreator.html.7e0c1b2e.js"),[]).then(({data:e})=>e),"v-5ed1ceee":()=>d(()=>import("./YukiResourcesHookCreator.html.2fa2ff0f.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.b0131cbd.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.bfbfbca6.js"),[]).then(({data:e})=>e),"v-36aec5ad":()=>d(()=>import("./LoggerFactory.html.52af0d44.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.74f919b4.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.aaf5b5a4.js"),[]).then(({data:e})=>e),"v-30f3ba1e":()=>d(()=>import("./InjectYukiHookWithXposed.html.cf9b500d.js"),[]).then(({data:e})=>e),"v-6e47300f":()=>d(()=>import("./CurrentClass.html.641fcd58.js"),[]).then(({data:e})=>e),"v-69c1c226":()=>d(()=>import("./GenericClass.html.5d4a2ffe.js"),[]).then(({data:e})=>e),"v-735374af":()=>d(()=>import("./HookClass.html.486aa6ea.js"),[]).then(({data:e})=>e),"v-1c516d22":()=>d(()=>import("./HookResources.html.4f07fd98.js"),[]).then(({data:e})=>e),"v-66735bfe":()=>d(()=>import("./VariousClass.html.a490557a.js"),[]).then(({data:e})=>e),"v-3ac40680":()=>d(()=>import("./YukiMemberHookCreator.html.e217488d.js"),[]).then(({data:e})=>e),"v-5e81af42":()=>d(()=>import("./YukiResourcesHookCreator.html.1f540f56.js"),[]).then(({data:e})=>e),"v-516df326":()=>d(()=>import("./YukiBaseHooker.html.b68236f9.js"),[]).then(({data:e})=>e),"v-213d88b3":()=>d(()=>import("./ReflectionFactory.html.fc39b155.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.09287903.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.ae54c997.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.a5a7a5a4.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.510255b8.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.5af05d7d.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.a3936b7c.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.7da3eef4.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.d4c9dbd1.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.02a8ef0d.js"),[]).then(({data:e})=>e),"v-003862c2":()=>d(()=>import("./YukiHookModulePrefs.html.198e73d3.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.0026a7b8.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bfb4e259.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.612b6202.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.550d3346.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.b4bffecd.js"),[]).then(({data:e})=>e),"v-5858709e":()=>d(()=>import("./YukiHookModulePrefs.html.6bedc781.js"),[]).then(({data:e})=>e),"v-763140ee":()=>d(()=>import("./IYukiHookXposedInit.html.78a55860.js"),[]).then(({data:e})=>e),"v-4fca92c0":()=>d(()=>import("./BaseFinder.html.a5dbb7a7.js"),[]).then(({data:e})=>e),"v-2a898c66":()=>d(()=>import("./DexClassFinder.html.5d8e12f0.js"),[]).then(({data:e})=>e),"v-a71937aa":()=>d(()=>import("./ConstructorFinder.html.5d3a6cdd.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.ba29e9c4.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.99f87a1e.js"),[]).then(({data:e})=>e),"v-0f719471":()=>d(()=>import("./BaseFinder.html.8f275c85.js"),[]).then(({data:e})=>e),"v-45111efc":()=>d(()=>import("./DexClassFinder.html.78c5f805.js"),[]).then(({data:e})=>e),"v-1e2cbc9c":()=>d(()=>import("./ConstructorFinder.html.bd11174d.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.7f9e6371.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.ede3f1a0.js"),[]).then(({data:e})=>e),"v-19e7277e":()=>d(()=>import("./YukiXposedEvent.html.560fa41c.js"),[]).then(({data:e})=>e),"v-8455e04e":()=>d(()=>import("./YukiModuleResources.html.90f23dcd.js"),[]).then(({data:e})=>e),"v-7b087cce":()=>d(()=>import("./YukiResForwarder.html.65998e9e.js"),[]).then(({data:e})=>e),"v-a00b4de6":()=>d(()=>import("./YukiResources.html.cc9ce9fb.js"),[]).then(({data:e})=>e),"v-2f64a2d4":()=>d(()=>import("./ChannelData.html.1981f416.js"),[]).then(({data:e})=>e),"v-87027140":()=>d(()=>import("./ChannelPriority.html.7d2ec81d.js"),[]).then(({data:e})=>e),"v-2d4e0da6":()=>d(()=>import("./ModuleClassLoader.html.2ddf88b6.js"),[]).then(({data:e})=>e),"v-58ed8298":()=>d(()=>import("./PrefsData.html.3061ee5b.js"),[]).then(({data:e})=>e),"v-23e1a817":()=>d(()=>import("./ModulePreferenceFragment.html.764fecc3.js"),[]).then(({data:e})=>e),"v-0a4de82f":()=>d(()=>import("./YukiXposedEvent.html.a93ee4ef.js"),[]).then(({data:e})=>e),"v-8266e0ec":()=>d(()=>import("./YukiModuleResources.html.46222277.js"),[]).then(({data:e})=>e),"v-aa38fa86":()=>d(()=>import("./YukiResForwarder.html.70fb824b.js"),[]).then(({data:e})=>e),"v-21b3b17e":()=>d(()=>import("./YukiResources.html.8714bbf2.js"),[]).then(({data:e})=>e),"v-493d37f6":()=>d(()=>import("./ChannelData.html.5ca343ea.js"),[]).then(({data:e})=>e),"v-b57870de":()=>d(()=>import("./ChannelPriority.html.b460c4bc.js"),[]).then(({data:e})=>e),"v-4b468415":()=>d(()=>import("./ModuleClassLoader.html.0388bffd.js"),[]).then(({data:e})=>e),"v-d99f7f36":()=>d(()=>import("./PrefsData.html.40b2fabe.js"),[]).then(({data:e})=>e),"v-53bcae06":()=>d(()=>import("./ModulePreferenceFragment.html.0c7dadc7.js"),[]).then(({data:e})=>e),"v-52995ef7":()=>d(()=>import("./CountRules.html.2d5ab94d.js"),[]).then(({data:e})=>e),"v-8d5ce71a":()=>d(()=>import("./ModifierRules.html.c36dff17.js"),[]).then(({data:e})=>e),"v-f5b1ffb2":()=>d(()=>import("./NameRules.html.00ac96fb.js"),[]).then(({data:e})=>e),"v-652b815b":()=>d(()=>import("./ObjectRules.html.70d91cad.js"),[]).then(({data:e})=>e),"v-08b70f7f":()=>d(()=>import("./ConstructorRules.html.c7161b83.js"),[]).then(({data:e})=>e),"v-21f64ebf":()=>d(()=>import("./FieldRules.html.c8edc48c.js"),[]).then(({data:e})=>e),"v-77f11cf9":()=>d(()=>import("./MemberRules.html.a071b3c6.js"),[]).then(({data:e})=>e),"v-64827680":()=>d(()=>import("./MethodRules.html.6c9a8df6.js"),[]).then(({data:e})=>e),"v-1b2ad030":()=>d(()=>import("./CountRules.html.2639d392.js"),[]).then(({data:e})=>e),"v-547a3c3c":()=>d(()=>import("./ModifierRules.html.f7582dc2.js"),[]).then(({data:e})=>e),"v-58c26516":()=>d(()=>import("./NameRules.html.47e512e4.js"),[]).then(({data:e})=>e),"v-80fd32ec":()=>d(()=>import("./ObjectRules.html.4b682129.js"),[]).then(({data:e})=>e),"v-a42f54a4":()=>d(()=>import("./ConstructorRules.html.f8ba43ee.js"),[]).then(({data:e})=>e),"v-3e67a42e":()=>d(()=>import("./FieldRules.html.a499e892.js"),[]).then(({data:e})=>e),"v-2cab152c":()=>d(()=>import("./MemberRules.html.b3e5d297.js"),[]).then(({data:e})=>e),"v-5388621e":()=>d(()=>import("./MethodRules.html.afeaf85e.js"),[]).then(({data:e})=>e),"v-2d5d16db":()=>d(()=>import("./ModuleAppActivity.html.90d3c4e6.js"),[]).then(({data:e})=>e),"v-cadbe48e":()=>d(()=>import("./ModuleAppCompatActivity.html.a20d9206.js"),[]).then(({data:e})=>e),"v-78731c50":()=>d(()=>import("./ModuleContextThemeWrapper.html.0879426b.js"),[]).then(({data:e})=>e),"v-1446bdca":()=>d(()=>import("./ModuleAppActivity.html.09451ff7.js"),[]).then(({data:e})=>e),"v-c7cef530":()=>d(()=>import("./ModuleAppCompatActivity.html.dd9e40e9.js"),[]).then(({data:e})=>e),"v-44efb702":()=>d(()=>import("./ModuleContextThemeWrapper.html.229a46ac.js"),[]).then(({data:e})=>e),"v-5e375d98":()=>d(()=>import("./MemberRulesResult.html.e79843c3.js"),[]).then(({data:e})=>e),"v-b8000f3a":()=>d(()=>import("./MemberRulesResult.html.58e81c94.js"),[]).then(({data:e})=>e),"v-3706649a":()=>d(()=>import("./404.html.c038a05a.js"),[]).then(({data:e})=>e)};function mo(e,t){const l=Object.create(null),i=e.split(",");for(let o=0;o!!l[o.toLowerCase()]:o=>!!l[o]}const ts="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",ls=mo(ts);function ha(e){return!!e||e===""}function Sl(e){if(te(e)){const t={};for(let l=0;l{if(l){const i=l.split(os);i.length>1&&(t[i[0].trim()]=i[1].trim())}}),t}function Ke(e){let t="";if(be(e))t=e;else if(te(e))for(let l=0;lbe(e)?e:e==null?"":te(e)||Oe(e)&&(e.toString===ma||!ae(e.toString))?JSON.stringify(e,da,2):String(e),da=(e,t)=>t&&t.__v_isRef?da(e,t.value):rl(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((l,[i,o])=>(l[`${i} =>`]=o,l),{})}:ua(t)?{[`Set(${t.size})`]:[...t.values()]}:Oe(t)&&!te(t)&&!fa(t)?String(t):t,Ce={},al=[],rt=()=>{},as=()=>!1,rs=/^on[^a-z]/,Vl=e=>rs.test(e),fo=e=>e.startsWith("onUpdate:"),Se=Object.assign,go=(e,t)=>{const l=e.indexOf(t);l>-1&&e.splice(l,1)},ss=Object.prototype.hasOwnProperty,de=(e,t)=>ss.call(e,t),te=Array.isArray,rl=e=>bi(e)==="[object Map]",ua=e=>bi(e)==="[object Set]",ae=e=>typeof e=="function",be=e=>typeof e=="string",ko=e=>typeof e=="symbol",Oe=e=>e!==null&&typeof e=="object",pa=e=>Oe(e)&&ae(e.then)&&ae(e.catch),ma=Object.prototype.toString,bi=e=>ma.call(e),cs=e=>bi(e).slice(8,-1),fa=e=>bi(e)==="[object Object]",vo=e=>be(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cl=mo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_i=e=>{const t=Object.create(null);return l=>t[l]||(t[l]=e(l))},hs=/-(\w)/g,ut=_i(e=>e.replace(hs,(t,l)=>l?l.toUpperCase():"")),ds=/\B([A-Z])/g,Jt=_i(e=>e.replace(ds,"-$1").toLowerCase()),yi=_i(e=>e.charAt(0).toUpperCase()+e.slice(1)),Oi=_i(e=>e?`on${yi(e)}`:""),wl=(e,t)=>!Object.is(e,t),Fi=(e,t)=>{for(let l=0;l{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:l})},ga=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let qo;const us=()=>qo||(qo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Xe;class ps{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Xe&&(this.parent=Xe,this.index=(Xe.scopes||(Xe.scopes=[])).push(this)-1)}run(t){if(this.active){const l=Xe;try{return Xe=this,t()}finally{Xe=l}}}on(){Xe=this}off(){Xe=this.parent}stop(t){if(this.active){let l,i;for(l=0,i=this.effects.length;l{const t=new Set(e);return t.w=0,t.n=0,t},ka=e=>(e.w&Ft)>0,va=e=>(e.n&Ft)>0,ks=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let l=0;for(let i=0;i{(c==="length"||c>=i)&&r.push(s)});else switch(l!==void 0&&r.push(a.get(l)),t){case"add":te(e)?vo(l)&&r.push(a.get("length")):(r.push(a.get(Kt)),rl(e)&&r.push(a.get(qi)));break;case"delete":te(e)||(r.push(a.get(Kt)),rl(e)&&r.push(a.get(qi)));break;case"set":rl(e)&&r.push(a.get(Kt));break}if(r.length===1)r[0]&&Ki(r[0]);else{const s=[];for(const c of r)c&&s.push(...c);Ki(bo(s))}}function Ki(e,t){const l=te(e)?e:[...e];for(const i of l)i.computed&&Go(i);for(const i of l)i.computed||Go(i)}function Go(e,t){(e!==nt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const bs=mo("__proto__,__v_isRef,__isVue"),ya=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ko)),_s=yo(),ys=yo(!1,!0),xs=yo(!0),Qo=Es();function Es(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...l){const i=ke(this);for(let n=0,a=this.length;n{e[t]=function(...l){ml();const i=ke(this)[t].apply(this,l);return fl(),i}}),e}function yo(e=!1,t=!1){return function(i,o,n){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&n===(e?t?Vs:Pa:t?Ra:Ca).get(i))return i;const a=te(i);if(!e&&a&&de(Qo,o))return Reflect.get(Qo,o,n);const r=Reflect.get(i,o,n);return(ko(o)?ya.has(o):bs(o))||(e||Qe(i,"get",o),t)?r:De(r)?a&&vo(o)?r:r.value:Oe(r)?e?Co(r):gl(r):r}}const Cs=xa(),Rs=xa(!0);function xa(e=!1){return function(l,i,o,n){let a=l[i];if(Ol(a)&&De(a)&&!De(o))return!1;if(!e&&!Ol(o)&&(Gi(o)||(o=ke(o),a=ke(a)),!te(l)&&De(a)&&!De(o)))return a.value=o,!0;const r=te(l)&&vo(i)?Number(i)e,xi=e=>Reflect.getPrototypeOf(e);function Xl(e,t,l=!1,i=!1){e=e.__v_raw;const o=ke(e),n=ke(t);l||(t!==n&&Qe(o,"get",t),Qe(o,"get",n));const{has:a}=xi(o),r=i?xo:l?Po:Fl;if(a.call(o,t))return r(e.get(t));if(a.call(o,n))return r(e.get(n));e!==o&&e.get(t)}function ql(e,t=!1){const l=this.__v_raw,i=ke(l),o=ke(e);return t||(e!==o&&Qe(i,"has",e),Qe(i,"has",o)),e===o?l.has(e):l.has(e)||l.has(o)}function Kl(e,t=!1){return e=e.__v_raw,!t&&Qe(ke(e),"iterate",Kt),Reflect.get(e,"size",e)}function Jo(e){e=ke(e);const t=ke(this);return xi(t).has.call(t,e)||(t.add(e),bt(t,"add",e,e)),this}function Zo(e,t){t=ke(t);const l=ke(this),{has:i,get:o}=xi(l);let n=i.call(l,e);n||(e=ke(e),n=i.call(l,e));const a=o.call(l,e);return l.set(e,t),n?wl(t,a)&&bt(l,"set",e,t):bt(l,"add",e,t),this}function en(e){const t=ke(this),{has:l,get:i}=xi(t);let o=l.call(t,e);o||(e=ke(e),o=l.call(t,e)),i&&i.call(t,e);const n=t.delete(e);return o&&bt(t,"delete",e,void 0),n}function tn(){const e=ke(this),t=e.size!==0,l=e.clear();return t&&bt(e,"clear",void 0,void 0),l}function Gl(e,t){return function(i,o){const n=this,a=n.__v_raw,r=ke(a),s=t?xo:e?Po:Fl;return!e&&Qe(r,"iterate",Kt),a.forEach((c,h)=>i.call(o,s(c),s(h),n))}}function Ql(e,t,l){return function(...i){const o=this.__v_raw,n=ke(o),a=rl(n),r=e==="entries"||e===Symbol.iterator&&a,s=e==="keys"&&a,c=o[e](...i),h=l?xo:t?Po:Fl;return!t&&Qe(n,"iterate",s?qi:Kt),{next(){const{value:p,done:m}=c.next();return m?{value:p,done:m}:{value:r?[h(p[0]),h(p[1])]:h(p),done:m}},[Symbol.iterator](){return this}}}}function xt(e){return function(...t){return e==="delete"?!1:this}}function ws(){const e={get(n){return Xl(this,n)},get size(){return Kl(this)},has:ql,add:Jo,set:Zo,delete:en,clear:tn,forEach:Gl(!1,!1)},t={get(n){return Xl(this,n,!1,!0)},get size(){return Kl(this)},has:ql,add:Jo,set:Zo,delete:en,clear:tn,forEach:Gl(!1,!0)},l={get(n){return Xl(this,n,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!1)},i={get(n){return Xl(this,n,!0,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(n=>{e[n]=Ql(n,!1,!1),l[n]=Ql(n,!0,!1),t[n]=Ql(n,!1,!0),i[n]=Ql(n,!0,!0)}),[e,l,t,i]}const[Os,Fs,zs,Ds]=ws();function Eo(e,t){const l=t?e?Ds:zs:e?Fs:Os;return(i,o,n)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?i:Reflect.get(de(l,o)&&o in i?l:i,o,n)}const Ms={get:Eo(!1,!1)},Hs={get:Eo(!1,!0)},Ss={get:Eo(!0,!1)},Ca=new WeakMap,Ra=new WeakMap,Pa=new WeakMap,Vs=new WeakMap;function Ns(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function js(e){return e.__v_skip||!Object.isExtensible(e)?0:Ns(cs(e))}function gl(e){return Ol(e)?e:Ro(e,!1,Ea,Ms,Ca)}function $s(e){return Ro(e,!1,Is,Hs,Ra)}function Co(e){return Ro(e,!0,As,Ss,Pa)}function Ro(e,t,l,i,o){if(!Oe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const n=o.get(e);if(n)return n;const a=js(e);if(a===0)return e;const r=new Proxy(e,a===2?i:l);return o.set(e,r),r}function sl(e){return Ol(e)?sl(e.__v_raw):!!(e&&e.__v_isReactive)}function Ol(e){return!!(e&&e.__v_isReadonly)}function Gi(e){return!!(e&&e.__v_isShallow)}function La(e){return sl(e)||Ol(e)}function ke(e){const t=e&&e.__v_raw;return t?ke(t):e}function Ta(e){return ni(e,"__v_skip",!0),e}const Fl=e=>Oe(e)?gl(e):e,Po=e=>Oe(e)?Co(e):e;function Aa(e){It&&nt&&(e=ke(e),_a(e.dep||(e.dep=bo())))}function Ia(e,t){e=ke(e),e.dep&&Ki(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function ye(e){return Oa(e,!1)}function wa(e){return Oa(e,!0)}function Oa(e,t){return De(e)?e:new Ys(e,t)}class Ys{constructor(t,l){this.__v_isShallow=l,this.dep=void 0,this.__v_isRef=!0,this._rawValue=l?t:ke(t),this._value=l?t:Fl(t)}get value(){return Aa(this),this._value}set value(t){t=this.__v_isShallow?t:ke(t),wl(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Fl(t),Ia(this))}}function O(e){return De(e)?e.value:e}const Bs={get:(e,t,l)=>O(Reflect.get(e,t,l)),set:(e,t,l,i)=>{const o=e[t];return De(o)&&!De(l)?(o.value=l,!0):Reflect.set(e,t,l,i)}};function Fa(e){return sl(e)?e:new Proxy(e,Bs)}function Ei(e){const t=te(e)?new Array(e.length):{};for(const l in e)t[l]=Ws(e,l);return t}class Us{constructor(t,l,i){this._object=t,this._key=l,this._defaultValue=i,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ws(e,t,l){const i=e[t];return De(i)?i:new Us(e,t,l)}class Xs{constructor(t,l,i,o){this._setter=l,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Ia(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=i}get value(){const t=ke(this);return Aa(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function qs(e,t,l=!1){let i,o;const n=ae(e);return n?(i=e,o=rt):(i=e.get,o=e.set),new Xs(i,o,n||!o,l)}function wt(e,t,l,i){let o;try{o=i?e(...i):e()}catch(n){Nl(n,t,l)}return o}function lt(e,t,l,i){if(ae(e)){const n=wt(e,t,l,i);return n&&pa(n)&&n.catch(a=>{Nl(a,t,l)}),n}const o=[];for(let n=0;n>>1;zl(qe[i])ft&&qe.splice(t,1)}function Ma(e,t,l,i){te(e)?l.push(...e):(!t||!t.includes(e,e.allowRecurse?i+1:i))&&l.push(e),Da()}function Js(e){Ma(e,El,Rl,il)}function Zs(e){Ma(e,Pt,Pl,ol)}function Ci(e,t=null){if(Rl.length){for(Ji=t,El=[...new Set(Rl)],Rl.length=0,il=0;ilzl(l)-zl(i)),ol=0;ole.id==null?1/0:e.id;function Ha(e){Qi=!1,ai=!0,Ci(e),qe.sort((l,i)=>zl(l)-zl(i));const t=rt;try{for(ft=0;ftg.trim())),p&&(o=l.map(ga))}let r,s=i[r=Oi(t)]||i[r=Oi(ut(t))];!s&&n&&(s=i[r=Oi(Jt(t))]),s&<(s,e,6,o);const c=i[r+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,lt(c,e,6,o)}}function Sa(e,t,l=!1){const i=t.emitsCache,o=i.get(e);if(o!==void 0)return o;const n=e.emits;let a={},r=!1;if(!ae(e)){const s=c=>{const h=Sa(c,t,!0);h&&(r=!0,Se(a,h))};!l&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return!n&&!r?(i.set(e,null),null):(te(n)?n.forEach(s=>a[s]=null):Se(a,n),i.set(e,a),a)}function Ri(e,t){return!e||!Vl(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Jt(t))||de(e,t))}let Ve=null,Va=null;function si(e){const t=Ve;return Ve=e,Va=e&&e.type.__scopeId||null,t}function He(e,t=Ve,l){if(!t||e._n)return e;const i=(...o)=>{i._d&&pn(-1);const n=si(t),a=e(...o);return si(n),i._d&&pn(1),a};return i._n=!0,i._c=!0,i._d=!0,i}function zi(e){const{type:t,vnode:l,proxy:i,withProxy:o,props:n,propsOptions:[a],slots:r,attrs:s,emit:c,render:h,renderCache:p,data:m,setupState:g,ctx:x,inheritAttrs:P}=e;let E,k;const _=si(e);try{if(l.shapeFlag&4){const H=o||i;E=ot(h.call(H,H,p,n,g,m,x)),k=s}else{const H=t;E=ot(H.length>1?H(n,{attrs:s,slots:r,emit:c}):H(n,null)),k=t.props?s:tc(s)}}catch(H){Tl.length=0,Nl(H,e,1),E=oe(Ge)}let L=E;if(k&&P!==!1){const H=Object.keys(k),{shapeFlag:U}=L;H.length&&U&7&&(a&&H.some(fo)&&(k=lc(k,a)),L=Dt(L,k))}return l.dirs&&(L=Dt(L),L.dirs=L.dirs?L.dirs.concat(l.dirs):l.dirs),l.transition&&(L.transition=l.transition),E=L,si(_),E}const tc=e=>{let t;for(const l in e)(l==="class"||l==="style"||Vl(l))&&((t||(t={}))[l]=e[l]);return t},lc=(e,t)=>{const l={};for(const i in e)(!fo(i)||!(i.slice(9)in t))&&(l[i]=e[i]);return l};function ic(e,t,l){const{props:i,children:o,component:n}=e,{props:a,children:r,patchFlag:s}=t,c=n.emitsOptions;if(t.dirs||t.transition)return!0;if(l&&s>=0){if(s&1024)return!0;if(s&16)return i?ln(i,a,c):!!a;if(s&8){const h=t.dynamicProps;for(let p=0;pe.__isSuspense;function Na(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Zs(e)}function Gt(e,t){if(Fe){let l=Fe.provides;const i=Fe.parent&&Fe.parent.provides;i===l&&(l=Fe.provides=Object.create(i)),l[e]=t}}function Me(e,t,l=!1){const i=Fe||Ve;if(i){const o=i.parent==null?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return l&&ae(t)?t.call(i.proxy):t}}const on={};function dt(e,t,l){return ja(e,t,l)}function ja(e,t,{immediate:l,deep:i,flush:o,onTrack:n,onTrigger:a}=Ce){const r=Fe;let s,c=!1,h=!1;if(De(e)?(s=()=>e.value,c=Gi(e)):sl(e)?(s=()=>e,i=!0):te(e)?(h=!0,c=e.some(k=>sl(k)||Gi(k)),s=()=>e.map(k=>{if(De(k))return k.value;if(sl(k))return qt(k);if(ae(k))return wt(k,r,2)})):ae(e)?t?s=()=>wt(e,r,2):s=()=>{if(!(r&&r.isUnmounted))return p&&p(),lt(e,r,3,[m])}:s=rt,t&&i){const k=s;s=()=>qt(k())}let p,m=k=>{p=E.onStop=()=>{wt(k,r,4)}};if(dl)return m=rt,t?l&<(t,r,3,[s(),h?[]:void 0,m]):s(),rt;let g=h?[]:on;const x=()=>{if(!!E.active)if(t){const k=E.run();(i||c||(h?k.some((_,L)=>wl(_,g[L])):wl(k,g)))&&(p&&p(),lt(t,r,3,[k,g===on?void 0:g,m]),g=k)}else E.run()};x.allowRecurse=!!t;let P;o==="sync"?P=x:o==="post"?P=()=>Be(x,r&&r.suspense):P=()=>Js(x);const E=new _o(s,P);return t?l?x():g=E.run():o==="post"?Be(E.run.bind(E),r&&r.suspense):E.run(),()=>{E.stop(),r&&r.scope&&go(r.scope.effects,E)}}function ac(e,t,l){const i=this.proxy,o=be(e)?e.includes(".")?$a(i,e):()=>i[e]:e.bind(i,i);let n;ae(t)?n=t:(n=t.handler,l=t);const a=Fe;hl(this);const r=ja(o,n.bind(i),l);return a?hl(a):Qt(),r}function $a(e,t){const l=t.split(".");return()=>{let i=e;for(let o=0;o{qt(l,t)});else if(fa(e))for(const l in e)qt(e[l],t);return e}function rc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Je(()=>{e.isMounted=!0}),Yl(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],sc={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},setup(e,{slots:t}){const l=wo(),i=rc();let o;return()=>{const n=t.default&&Ua(t.default(),!0);if(!n||!n.length)return;let a=n[0];if(n.length>1){for(const P of n)if(P.type!==Ge){a=P;break}}const r=ke(e),{mode:s}=r;if(i.isLeaving)return Di(a);const c=nn(a);if(!c)return Di(a);const h=Zi(c,r,i,l);eo(c,h);const p=l.subTree,m=p&&nn(p);let g=!1;const{getTransitionKey:x}=c.type;if(x){const P=x();o===void 0?o=P:P!==o&&(o=P,g=!0)}if(m&&m.type!==Ge&&(!Wt(c,m)||g)){const P=Zi(m,r,i,l);if(eo(m,P),s==="out-in")return i.isLeaving=!0,P.afterLeave=()=>{i.isLeaving=!1,l.update()},Di(a);s==="in-out"&&c.type!==Ge&&(P.delayLeave=(E,k,_)=>{const L=Ba(i,m);L[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=_})}return a}}},Ya=sc;function Ba(e,t){const{leavingVNodes:l}=e;let i=l.get(t.type);return i||(i=Object.create(null),l.set(t.type,i)),i}function Zi(e,t,l,i){const{appear:o,mode:n,persisted:a=!1,onBeforeEnter:r,onEnter:s,onAfterEnter:c,onEnterCancelled:h,onBeforeLeave:p,onLeave:m,onAfterLeave:g,onLeaveCancelled:x,onBeforeAppear:P,onAppear:E,onAfterAppear:k,onAppearCancelled:_}=t,L=String(e.key),H=Ba(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const B=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&B():v.length<=1&&B()},w={mode:n,persisted:a,beforeEnter(v){let q=r;if(!l.isMounted)if(o)q=P||r;else return;v._leaveCb&&v._leaveCb(!0);const B=H[L];B&&Wt(e,B)&&B.el._leaveCb&&B.el._leaveCb(),U(q,[v])},enter(v){let q=s,B=c,G=h;if(!l.isMounted)if(o)q=E||s,B=k||c,G=_||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(B,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const B=String(e.key);if(v._enterCb&&v._enterCb(!0),l.isUnmounting)return q();U(p,[v]);let G=!1;const C=v._leaveCb=S=>{G||(G=!0,q(),S?U(x,[v]):U(g,[v]),v._leaveCb=void 0,H[B]===e&&delete H[B])};H[B]=e,m?ee(m,[v,C]):C()},clone(v){return Zi(v,t,l,i)}};return w}function Di(e){if($l(e))return e=Dt(e),e.children=null,e}function nn(e){return $l(e)?e.children?e.children[0]:void 0:e}function eo(e,t){e.shapeFlag&6&&e.component?eo(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ua(e,t=!1,l){let i=[],o=0;for(let n=0;n1)for(let n=0;n!!e.type.__asyncLoader;function b(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:l,errorComponent:i,delay:o=200,timeout:n,suspensible:a=!0,onError:r}=e;let s=null,c,h=0;const p=()=>(h++,s=null,m()),m=()=>{let g;return s||(g=s=t().catch(x=>{if(x=x instanceof Error?x:new Error(String(x)),r)return new Promise((P,E)=>{r(x,()=>P(p()),()=>E(x),h+1)});throw x}).then(x=>g!==s&&s?s:(x&&(x.__esModule||x[Symbol.toStringTag]==="Module")&&(x=x.default),c=x,x)))};return ue({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return c},setup(){const g=Fe;if(c)return()=>Mi(c,g);const x=_=>{s=null,Nl(_,g,13,!i)};if(a&&g.suspense||dl)return m().then(_=>()=>Mi(_,g)).catch(_=>(x(_),()=>i?oe(i,{error:_}):null));const P=ye(!1),E=ye(),k=ye(!!o);return o&&setTimeout(()=>{k.value=!1},o),n!=null&&setTimeout(()=>{if(!P.value&&!E.value){const _=new Error(`Async component timed out after ${n}ms.`);x(_),E.value=_}},n),m().then(()=>{P.value=!0,g.parent&&$l(g.parent.vnode)&&To(g.parent.update)}).catch(_=>{x(_),E.value=_}),()=>{if(P.value&&c)return Mi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Mi(e,{vnode:{ref:t,props:l,children:i,shapeFlag:o},parent:n}){const a=oe(e,l,i);return a.ref=t,a}const $l=e=>e.type.__isKeepAlive;function cc(e,t){Wa(e,"a",t)}function hc(e,t){Wa(e,"da",t)}function Wa(e,t,l=Fe){const i=e.__wdc||(e.__wdc=()=>{let o=l;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Pi(t,i,l),l){let o=l.parent;for(;o&&o.parent;)$l(o.parent.vnode)&&dc(i,t,l,o),o=o.parent}}function dc(e,t,l,i){const o=Pi(t,e,i,!0);Li(()=>{go(i[t],o)},l)}function Pi(e,t,l=Fe,i=!1){if(l){const o=l[e]||(l[e]=[]),n=t.__weh||(t.__weh=(...a)=>{if(l.isUnmounted)return;ml(),hl(l);const r=lt(t,l,e,a);return Qt(),fl(),r});return i?o.unshift(n):o.push(n),n}}const yt=e=>(t,l=Fe)=>(!dl||e==="sp")&&Pi(e,t,l),Xa=yt("bm"),Je=yt("m"),uc=yt("bu"),pc=yt("u"),Yl=yt("bum"),Li=yt("um"),mc=yt("sp"),fc=yt("rtg"),gc=yt("rtc");function kc(e,t=Fe){Pi("ec",e,t)}function ci(e,t){const l=Ve;if(l===null)return e;const i=Ai(l)||l.proxy,o=e.dirs||(e.dirs=[]);for(let n=0;nt(a,r,void 0,n&&n[r]));else{const a=Object.keys(e);o=new Array(a.length);for(let r=0,s=a.length;rpi(t)?!(t.type===Ge||t.type===Pe&&!Ka(t.children)):!0)?e:null}const to=e=>e?rr(e)?Ai(e)||e.proxy:to(e.parent):null,hi=Se(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>to(e.parent),$root:e=>to(e.root),$emit:e=>e.emit,$options:e=>Qa(e),$forceUpdate:e=>e.f||(e.f=()=>To(e.update)),$nextTick:e=>e.n||(e.n=jl.bind(e.proxy)),$watch:e=>ac.bind(e)}),_c={get({_:e},t){const{ctx:l,setupState:i,data:o,props:n,accessCache:a,type:r,appContext:s}=e;let c;if(t[0]!=="$"){const g=a[t];if(g!==void 0)switch(g){case 1:return i[t];case 2:return o[t];case 4:return l[t];case 3:return n[t]}else{if(i!==Ce&&de(i,t))return a[t]=1,i[t];if(o!==Ce&&de(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&de(c,t))return a[t]=3,n[t];if(l!==Ce&&de(l,t))return a[t]=4,l[t];lo&&(a[t]=0)}}const h=hi[t];let p,m;if(h)return t==="$attrs"&&Qe(e,"get",t),h(e);if((p=r.__cssModules)&&(p=p[t]))return p;if(l!==Ce&&de(l,t))return a[t]=4,l[t];if(m=s.config.globalProperties,de(m,t))return m[t]},set({_:e},t,l){const{data:i,setupState:o,ctx:n}=e;return o!==Ce&&de(o,t)?(o[t]=l,!0):i!==Ce&&de(i,t)?(i[t]=l,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(n[t]=l,!0)},has({_:{data:e,setupState:t,accessCache:l,ctx:i,appContext:o,propsOptions:n}},a){let r;return!!l[a]||e!==Ce&&de(e,a)||t!==Ce&&de(t,a)||(r=n[0])&&de(r,a)||de(i,a)||de(hi,a)||de(o.config.globalProperties,a)},defineProperty(e,t,l){return l.get!=null?e._.accessCache[t]=0:de(l,"value")&&this.set(e,t,l.value,null),Reflect.defineProperty(e,t,l)}};let lo=!0;function yc(e){const t=Qa(e),l=e.proxy,i=e.ctx;lo=!1,t.beforeCreate&&rn(t.beforeCreate,e,"bc");const{data:o,computed:n,methods:a,watch:r,provide:s,inject:c,created:h,beforeMount:p,mounted:m,beforeUpdate:g,updated:x,activated:P,deactivated:E,beforeDestroy:k,beforeUnmount:_,destroyed:L,unmounted:H,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:B,inheritAttrs:G,components:C,directives:S,filters:F}=t;if(c&&xc(c,i,null,e.appContext.config.unwrapInjectedRef),a)for(const le in a){const se=a[le];ae(se)&&(i[le]=se.bind(l))}if(o){const le=o.call(l,l);Oe(le)&&(e.data=gl(le))}if(lo=!0,n)for(const le in n){const se=n[le],Ie=ae(se)?se.bind(l,l):ae(se.get)?se.get.bind(l,l):rt,Ne=!ae(se)&&ae(se.set)?se.set.bind(l):rt,Ue=Y({get:Ie,set:Ne});Object.defineProperty(i,le,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Ze=>Ue.value=Ze})}if(r)for(const le in r)Ga(r[le],i,l,le);if(s){const le=ae(s)?s.call(l):s;Reflect.ownKeys(le).forEach(se=>{Gt(se,le[se])})}h&&rn(h,e,"c");function j(le,se){te(se)?se.forEach(Ie=>le(Ie.bind(l))):se&&le(se.bind(l))}if(j(Xa,p),j(Je,m),j(uc,g),j(pc,x),j(cc,P),j(hc,E),j(kc,v),j(gc,ee),j(fc,w),j(Yl,_),j(Li,H),j(mc,q),te(B))if(B.length){const le=e.exposed||(e.exposed={});B.forEach(se=>{Object.defineProperty(le,se,{get:()=>l[se],set:Ie=>l[se]=Ie})})}else e.exposed||(e.exposed={});U&&e.render===rt&&(e.render=U),G!=null&&(e.inheritAttrs=G),C&&(e.components=C),S&&(e.directives=S)}function xc(e,t,l=rt,i=!1){te(e)&&(e=io(e));for(const o in e){const n=e[o];let a;Oe(n)?"default"in n?a=Me(n.from||o,n.default,!0):a=Me(n.from||o):a=Me(n),De(a)&&i?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function rn(e,t,l){lt(te(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,l)}function Ga(e,t,l,i){const o=i.includes(".")?$a(l,i):()=>l[i];if(be(e)){const n=t[e];ae(n)&&dt(o,n)}else if(ae(e))dt(o,e.bind(l));else if(Oe(e))if(te(e))e.forEach(n=>Ga(n,t,l,i));else{const n=ae(e.handler)?e.handler.bind(l):t[e.handler];ae(n)&&dt(o,n,e)}}function Qa(e){const t=e.type,{mixins:l,extends:i}=t,{mixins:o,optionsCache:n,config:{optionMergeStrategies:a}}=e.appContext,r=n.get(t);let s;return r?s=r:!o.length&&!l&&!i?s=t:(s={},o.length&&o.forEach(c=>di(s,c,a,!0)),di(s,t,a)),n.set(t,s),s}function di(e,t,l,i=!1){const{mixins:o,extends:n}=t;n&&di(e,n,l,!0),o&&o.forEach(a=>di(e,a,l,!0));for(const a in t)if(!(i&&a==="expose")){const r=Ec[a]||l&&l[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Ec={data:sn,props:Yt,emits:Yt,methods:Yt,computed:Yt,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:Yt,directives:Yt,watch:Rc,provide:sn,inject:Cc};function sn(e,t){return t?e?function(){return Se(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Cc(e,t){return Yt(io(e),io(t))}function io(e){if(te(e)){const t={};for(let l=0;l0)&&!(a&16)){if(a&8){const h=e.vnode.dynamicProps;for(let p=0;p{s=!0;const[m,g]=Za(p,t,!0);Se(a,m),g&&r.push(...g)};!l&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!n&&!s)return i.set(e,al),al;if(te(n))for(let h=0;h-1,g[1]=P<0||x-1||de(g,"default"))&&r.push(p)}}}const c=[a,r];return i.set(e,c),c}function cn(e){return e[0]!=="$"}function hn(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function dn(e,t){return hn(e)===hn(t)}function un(e,t){return te(t)?t.findIndex(l=>dn(l,e)):ae(t)&&dn(t,e)?0:-1}const er=e=>e[0]==="_"||e==="$stable",Ao=e=>te(e)?e.map(ot):[ot(e)],Tc=(e,t,l)=>{if(t._n)return t;const i=He((...o)=>Ao(t(...o)),l);return i._c=!1,i},tr=(e,t,l)=>{const i=e._ctx;for(const o in e){if(er(o))continue;const n=e[o];if(ae(n))t[o]=Tc(o,n,i);else if(n!=null){const a=Ao(n);t[o]=()=>a}}},lr=(e,t)=>{const l=Ao(t);e.slots.default=()=>l},Ac=(e,t)=>{if(e.vnode.shapeFlag&32){const l=t._;l?(e.slots=ke(t),ni(t,"_",l)):tr(t,e.slots={})}else e.slots={},t&&lr(e,t);ni(e.slots,Ti,1)},Ic=(e,t,l)=>{const{vnode:i,slots:o}=e;let n=!0,a=Ce;if(i.shapeFlag&32){const r=t._;r?l&&r===1?n=!1:(Se(o,t),!l&&r===1&&delete o._):(n=!t.$stable,tr(t,o)),a=t}else t&&(lr(e,t),a={default:1});if(n)for(const r in o)!er(r)&&!(r in a)&&delete o[r]};function ir(){return{app:null,config:{isNativeTag:as,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let wc=0;function Oc(e,t){return function(i,o=null){ae(i)||(i=Object.assign({},i)),o!=null&&!Oe(o)&&(o=null);const n=ir(),a=new Set;let r=!1;const s=n.app={_uid:wc++,_component:i,_props:o,_container:null,_context:n,_instance:null,version:Qc,get config(){return n.config},set config(c){},use(c,...h){return a.has(c)||(c&&ae(c.install)?(a.add(c),c.install(s,...h)):ae(c)&&(a.add(c),c(s,...h))),s},mixin(c){return n.mixins.includes(c)||n.mixins.push(c),s},component(c,h){return h?(n.components[c]=h,s):n.components[c]},directive(c,h){return h?(n.directives[c]=h,s):n.directives[c]},mount(c,h,p){if(!r){const m=oe(i,o);return m.appContext=n,h&&t?t(m,c):e(m,c,p),r=!0,s._container=c,c.__vue_app__=s,Ai(m.component)||m.component.proxy}},unmount(){r&&(e(null,s._container),delete s._container.__vue_app__)},provide(c,h){return n.provides[c]=h,s}};return s}}function ui(e,t,l,i,o=!1){if(te(e)){e.forEach((m,g)=>ui(m,t&&(te(t)?t[g]:t),l,i,o));return}if(cl(i)&&!o)return;const n=i.shapeFlag&4?Ai(i.component)||i.component.proxy:i.el,a=o?null:n,{i:r,r:s}=e,c=t&&t.r,h=r.refs===Ce?r.refs={}:r.refs,p=r.setupState;if(c!=null&&c!==s&&(be(c)?(h[c]=null,de(p,c)&&(p[c]=null)):De(c)&&(c.value=null)),ae(s))wt(s,r,12,[a,h]);else{const m=be(s),g=De(s);if(m||g){const x=()=>{if(e.f){const P=m?h[s]:s.value;o?te(P)&&go(P,n):te(P)?P.includes(n)||P.push(n):m?(h[s]=[n],de(p,s)&&(p[s]=h[s])):(s.value=[n],e.k&&(h[e.k]=s.value))}else m?(h[s]=a,de(p,s)&&(p[s]=a)):g&&(s.value=a,e.k&&(h[e.k]=a))};a?(x.id=-1,Be(x,l)):x()}}}let Et=!1;const Jl=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Zl=e=>e.nodeType===8;function Fc(e){const{mt:t,p:l,o:{patchProp:i,createText:o,nextSibling:n,parentNode:a,remove:r,insert:s,createComment:c}}=e,h=(k,_)=>{if(!_.hasChildNodes()){l(null,k,_),ri(),_._vnode=k;return}Et=!1,p(_.firstChild,k,null,null,null),ri(),_._vnode=k,Et&&console.error("Hydration completed but contains mismatches.")},p=(k,_,L,H,U,ee=!1)=>{const w=Zl(k)&&k.data==="[",v=()=>P(k,_,L,H,U,w),{type:q,ref:B,shapeFlag:G,patchFlag:C}=_,S=k.nodeType;_.el=k,C===-2&&(ee=!1,_.dynamicChildren=null);let F=null;switch(q){case Dl:S!==3?_.children===""?(s(_.el=o(""),a(k),k),F=k):F=v():(k.data!==_.children&&(Et=!0,k.data=_.children),F=n(k));break;case Ge:S!==8||w?F=v():F=n(k);break;case Ll:if(S!==1&&S!==3)F=v();else{F=k;const re=!_.children.length;for(let j=0;j<_.staticCount;j++)re&&(_.children+=F.nodeType===1?F.outerHTML:F.data),j===_.staticCount-1&&(_.anchor=F),F=n(F);return F}break;case Pe:w?F=x(k,_,L,H,U,ee):F=v();break;default:if(G&1)S!==1||_.type.toLowerCase()!==k.tagName.toLowerCase()?F=v():F=m(k,_,L,H,U,ee);else if(G&6){_.slotScopeIds=U;const re=a(k);if(t(_,re,null,L,H,Jl(re),ee),F=w?E(k):n(k),F&&Zl(F)&&F.data==="teleport end"&&(F=n(F)),cl(_)){let j;w?(j=oe(Pe),j.anchor=F?F.previousSibling:re.lastChild):j=k.nodeType===3?Mt(""):oe("div"),j.el=k,_.component.subTree=j}}else G&64?S!==8?F=v():F=_.type.hydrate(k,_,L,H,U,ee,e,g):G&128&&(F=_.type.hydrate(k,_,L,H,Jl(a(k)),U,ee,e,p))}return B!=null&&ui(B,null,H,_),F},m=(k,_,L,H,U,ee)=>{ee=ee||!!_.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:B,dirs:G}=_,C=w==="input"&&G||w==="option";if(C||q!==-1){if(G&&ht(_,null,L,"created"),v)if(C||!ee||q&48)for(const F in v)(C&&F.endsWith("value")||Vl(F)&&!Cl(F))&&i(k,F,null,v[F],!1,void 0,L);else v.onClick&&i(k,"onClick",null,v.onClick,!1,void 0,L);let S;if((S=v&&v.onVnodeBeforeMount)&&tt(S,L,_),G&&ht(_,null,L,"beforeMount"),((S=v&&v.onVnodeMounted)||G)&&Na(()=>{S&&tt(S,L,_),G&&ht(_,null,L,"mounted")},H),B&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,_,k,L,H,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else B&8&&k.textContent!==_.children&&(Et=!0,k.textContent=_.children)}return k.nextSibling},g=(k,_,L,H,U,ee,w)=>{w=w||!!_.dynamicChildren;const v=_.children,q=v.length;for(let B=0;B{const{slotScopeIds:w}=_;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),_,v,L,H,U,ee);return q&&Zl(q)&&q.data==="]"?n(_.anchor=q):(Et=!0,s(_.anchor=c("]"),v,q),q)},P=(k,_,L,H,U,ee)=>{if(Et=!0,_.el=null,ee){const q=E(k);for(;;){const B=n(k);if(B&&B!==q)r(B);else break}}const w=n(k),v=a(k);return r(k),l(null,_,v,w,L,H,Jl(v),U),w},E=k=>{let _=0;for(;k;)if(k=n(k),k&&Zl(k)&&(k.data==="["&&_++,k.data==="]")){if(_===0)return n(k);_--}return k};return[h,p]}const Be=Na;function zc(e){return Dc(e,Fc)}function Dc(e,t){const l=us();l.__VUE__=!0;const{insert:i,remove:o,patchProp:n,createElement:a,createText:r,createComment:s,setText:c,setElementText:h,parentNode:p,nextSibling:m,setScopeId:g=rt,cloneNode:x,insertStaticContent:P}=e,E=(u,f,y,A=null,T=null,z=null,$=!1,D=null,V=!!f.dynamicChildren)=>{if(u===f)return;u&&!Wt(u,f)&&(A=X(u),Ye(u,T,z,!0),u=null),f.patchFlag===-2&&(V=!1,f.dynamicChildren=null);const{type:I,ref:Q,shapeFlag:K}=f;switch(I){case Dl:k(u,f,y,A);break;case Ge:_(u,f,y,A);break;case Ll:u==null&&L(f,y,A,$);break;case Pe:S(u,f,y,A,T,z,$,D,V);break;default:K&1?ee(u,f,y,A,T,z,$,D,V):K&6?F(u,f,y,A,T,z,$,D,V):(K&64||K&128)&&I.process(u,f,y,A,T,z,$,D,V,_e)}Q!=null&&T&&ui(Q,u&&u.ref,z,f||u,!f)},k=(u,f,y,A)=>{if(u==null)i(f.el=r(f.children),y,A);else{const T=f.el=u.el;f.children!==u.children&&c(T,f.children)}},_=(u,f,y,A)=>{u==null?i(f.el=s(f.children||""),y,A):f.el=u.el},L=(u,f,y,A)=>{[u.el,u.anchor]=P(u.children,f,y,A,u.el,u.anchor)},H=({el:u,anchor:f},y,A)=>{let T;for(;u&&u!==f;)T=m(u),i(u,y,A),u=T;i(f,y,A)},U=({el:u,anchor:f})=>{let y;for(;u&&u!==f;)y=m(u),o(u),u=y;o(f)},ee=(u,f,y,A,T,z,$,D,V)=>{$=$||f.type==="svg",u==null?w(f,y,A,T,z,$,D,V):B(u,f,T,z,$,D,V)},w=(u,f,y,A,T,z,$,D)=>{let V,I;const{type:Q,props:K,shapeFlag:J,transition:ne,patchFlag:pe,dirs:xe}=u;if(u.el&&x!==void 0&&pe===-1)V=u.el=x(u.el);else{if(V=u.el=a(u.type,z,K&&K.is,K),J&8?h(V,u.children):J&16&&q(u.children,V,null,A,T,z&&Q!=="foreignObject",$,D),xe&&ht(u,null,A,"created"),K){for(const Le in K)Le!=="value"&&!Cl(Le)&&n(V,Le,null,K[Le],z,u.children,A,T,M);"value"in K&&n(V,"value",null,K.value),(I=K.onVnodeBeforeMount)&&tt(I,A,u)}v(V,u,u.scopeId,$,A)}xe&&ht(u,null,A,"beforeMount");const Ee=(!T||T&&!T.pendingBranch)&&ne&&!ne.persisted;Ee&&ne.beforeEnter(V),i(V,f,y),((I=K&&K.onVnodeMounted)||Ee||xe)&&Be(()=>{I&&tt(I,A,u),Ee&&ne.enter(V),xe&&ht(u,null,A,"mounted")},T)},v=(u,f,y,A,T)=>{if(y&&g(u,y),A)for(let z=0;z{for(let I=V;I{const D=f.el=u.el;let{patchFlag:V,dynamicChildren:I,dirs:Q}=f;V|=u.patchFlag&16;const K=u.props||Ce,J=f.props||Ce;let ne;y&&Nt(y,!1),(ne=J.onVnodeBeforeUpdate)&&tt(ne,y,f,u),Q&&ht(f,u,y,"beforeUpdate"),y&&Nt(y,!0);const pe=T&&f.type!=="foreignObject";if(I?G(u.dynamicChildren,I,D,y,A,pe,z):$||Ie(u,f,D,null,y,A,pe,z,!1),V>0){if(V&16)C(D,f,K,J,y,A,T);else if(V&2&&K.class!==J.class&&n(D,"class",null,J.class,T),V&4&&n(D,"style",K.style,J.style,T),V&8){const xe=f.dynamicProps;for(let Ee=0;Ee{ne&&tt(ne,y,f,u),Q&&ht(f,u,y,"updated")},A)},G=(u,f,y,A,T,z,$)=>{for(let D=0;D{if(y!==A){for(const D in A){if(Cl(D))continue;const V=A[D],I=y[D];V!==I&&D!=="value"&&n(u,D,I,V,$,f.children,T,z,M)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in A)&&n(u,D,y[D],null,$,f.children,T,z,M);"value"in A&&n(u,"value",y.value,A.value)}},S=(u,f,y,A,T,z,$,D,V)=>{const I=f.el=u?u.el:r(""),Q=f.anchor=u?u.anchor:r("");let{patchFlag:K,dynamicChildren:J,slotScopeIds:ne}=f;ne&&(D=D?D.concat(ne):ne),u==null?(i(I,y,A),i(Q,y,A),q(f.children,y,Q,T,z,$,D,V)):K>0&&K&64&&J&&u.dynamicChildren?(G(u.dynamicChildren,J,y,T,z,$,D),(f.key!=null||T&&f===T.subTree)&&or(u,f,!0)):Ie(u,f,y,Q,T,z,$,D,V)},F=(u,f,y,A,T,z,$,D,V)=>{f.slotScopeIds=D,u==null?f.shapeFlag&512?T.ctx.activate(f,y,A,$,V):re(f,y,A,T,z,$,V):j(u,f,V)},re=(u,f,y,A,T,z,$)=>{const D=u.component=Bc(u,A,T);if($l(u)&&(D.ctx.renderer=_e),Uc(D),D.asyncDep){if(T&&T.registerDep(D,le),!u.el){const V=D.subTree=oe(Ge);_(null,V,f,y)}return}le(D,u,f,y,T,z,$)},j=(u,f,y)=>{const A=f.component=u.component;if(ic(u,f,y))if(A.asyncDep&&!A.asyncResolved){se(A,f,y);return}else A.next=f,Qs(A.update),A.update();else f.el=u.el,A.vnode=f},le=(u,f,y,A,T,z,$)=>{const D=()=>{if(u.isMounted){let{next:Q,bu:K,u:J,parent:ne,vnode:pe}=u,xe=Q,Ee;Nt(u,!1),Q?(Q.el=pe.el,se(u,Q,$)):Q=pe,K&&Fi(K),(Ee=Q.props&&Q.props.onVnodeBeforeUpdate)&&tt(Ee,ne,Q,pe),Nt(u,!0);const Le=zi(u),it=u.subTree;u.subTree=Le,E(it,Le,p(it.el),X(it),u,T,z),Q.el=Le.el,xe===null&&oc(u,Le.el),J&&Be(J,T),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>tt(Ee,ne,Q,pe),T)}else{let Q;const{el:K,props:J}=f,{bm:ne,m:pe,parent:xe}=u,Ee=cl(f);if(Nt(u,!1),ne&&Fi(ne),!Ee&&(Q=J&&J.onVnodeBeforeMount)&&tt(Q,xe,f),Nt(u,!0),K&&ie){const Le=()=>{u.subTree=zi(u),ie(K,u.subTree,u,T,null)};Ee?f.type.__asyncLoader().then(()=>!u.isUnmounted&&Le()):Le()}else{const Le=u.subTree=zi(u);E(null,Le,y,A,u,T,z),f.el=Le.el}if(pe&&Be(pe,T),!Ee&&(Q=J&&J.onVnodeMounted)){const Le=f;Be(()=>tt(Q,xe,Le),T)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Be(u.a,T),u.isMounted=!0,f=y=A=null}},V=u.effect=new _o(D,()=>To(I),u.scope),I=u.update=()=>V.run();I.id=u.uid,Nt(u,!0),I()},se=(u,f,y)=>{f.component=u;const A=u.vnode.props;u.vnode=f,u.next=null,Lc(u,f.props,A,y),Ic(u,f.children,y),ml(),Ci(void 0,u.update),fl()},Ie=(u,f,y,A,T,z,$,D,V=!1)=>{const I=u&&u.children,Q=u?u.shapeFlag:0,K=f.children,{patchFlag:J,shapeFlag:ne}=f;if(J>0){if(J&128){Ue(I,K,y,A,T,z,$,D,V);return}else if(J&256){Ne(I,K,y,A,T,z,$,D,V);return}}ne&8?(Q&16&&M(I,T,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,A,T,z,$,D,V):M(I,T,z,!0):(Q&8&&h(y,""),ne&16&&q(K,y,A,T,z,$,D,V))},Ne=(u,f,y,A,T,z,$,D,V)=>{u=u||al,f=f||al;const I=u.length,Q=f.length,K=Math.min(I,Q);let J;for(J=0;JQ?M(u,T,z,!0,!1,K):q(f,y,A,T,z,$,D,V,K)},Ue=(u,f,y,A,T,z,$,D,V)=>{let I=0;const Q=f.length;let K=u.length-1,J=Q-1;for(;I<=K&&I<=J;){const ne=u[I],pe=f[I]=V?Lt(f[I]):ot(f[I]);if(Wt(ne,pe))E(ne,pe,y,null,T,z,$,D,V);else break;I++}for(;I<=K&&I<=J;){const ne=u[K],pe=f[J]=V?Lt(f[J]):ot(f[J]);if(Wt(ne,pe))E(ne,pe,y,null,T,z,$,D,V);else break;K--,J--}if(I>K){if(I<=J){const ne=J+1,pe=neJ)for(;I<=K;)Ye(u[I],T,z,!0),I++;else{const ne=I,pe=I,xe=new Map;for(I=pe;I<=J;I++){const We=f[I]=V?Lt(f[I]):ot(f[I]);We.key!=null&&xe.set(We.key,I)}let Ee,Le=0;const it=J-pe+1;let el=!1,Bo=0;const kl=new Array(it);for(I=0;I=it){Ye(We,T,z,!0);continue}let ct;if(We.key!=null)ct=xe.get(We.key);else for(Ee=pe;Ee<=J;Ee++)if(kl[Ee-pe]===0&&Wt(We,f[Ee])){ct=Ee;break}ct===void 0?Ye(We,T,z,!0):(kl[ct-pe]=I+1,ct>=Bo?Bo=ct:el=!0,E(We,f[ct],y,null,T,z,$,D,V),Le++)}const Uo=el?Mc(kl):al;for(Ee=Uo.length-1,I=it-1;I>=0;I--){const We=pe+I,ct=f[We],Wo=We+1{const{el:z,type:$,transition:D,children:V,shapeFlag:I}=u;if(I&6){Ze(u.component.subTree,f,y,A);return}if(I&128){u.suspense.move(f,y,A);return}if(I&64){$.move(u,f,y,_e);return}if($===Pe){i(z,f,y);for(let K=0;KD.enter(z),T);else{const{leave:K,delayLeave:J,afterLeave:ne}=D,pe=()=>i(z,f,y),xe=()=>{K(z,()=>{pe(),ne&&ne()})};J?J(z,pe,xe):xe()}else i(z,f,y)},Ye=(u,f,y,A=!1,T=!1)=>{const{type:z,props:$,ref:D,children:V,dynamicChildren:I,shapeFlag:Q,patchFlag:K,dirs:J}=u;if(D!=null&&ui(D,null,y,u,!0),Q&256){f.ctx.deactivate(u);return}const ne=Q&1&&J,pe=!cl(u);let xe;if(pe&&(xe=$&&$.onVnodeBeforeUnmount)&&tt(xe,f,u),Q&6)W(u.component,y,A);else{if(Q&128){u.suspense.unmount(y,A);return}ne&&ht(u,null,f,"beforeUnmount"),Q&64?u.type.remove(u,f,y,T,_e,A):I&&(z!==Pe||K>0&&K&64)?M(I,f,y,!1,!0):(z===Pe&&K&384||!T&&Q&16)&&M(V,f,y),A&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Be(()=>{xe&&tt(xe,f,u),ne&&ht(u,null,f,"unmounted")},y)},Vt=u=>{const{type:f,el:y,anchor:A,transition:T}=u;if(f===Pe){R(y,A);return}if(f===Ll){U(u);return}const z=()=>{o(y),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(u.shapeFlag&1&&T&&!T.persisted){const{leave:$,delayLeave:D}=T,V=()=>$(y,z);D?D(u.el,z,V):V()}else z()},R=(u,f)=>{let y;for(;u!==f;)y=m(u),o(u),u=y;o(f)},W=(u,f,y)=>{const{bum:A,scope:T,update:z,subTree:$,um:D}=u;A&&Fi(A),T.stop(),z&&(z.active=!1,Ye($,u,f,y)),D&&Be(D,f),Be(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},M=(u,f,y,A=!1,T=!1,z=0)=>{for(let $=z;$u.shapeFlag&6?X(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el),ge=(u,f,y)=>{u==null?f._vnode&&Ye(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Ye,m:Ze,r:Vt,mt:re,mc:q,pc:Ie,pbc:G,n:X,o:e};let ce,ie;return t&&([ce,ie]=t(_e)),{render:ge,hydrate:ce,createApp:Oc(ge,ce)}}function Nt({effect:e,update:t},l){e.allowRecurse=t.allowRecurse=l}function or(e,t,l=!1){const i=e.children,o=t.children;if(te(i)&&te(o))for(let n=0;n>1,e[l[r]]0&&(t[i]=l[n-1]),l[n]=i)}}for(n=l.length,a=l[n-1];n-- >0;)l[n]=a,a=t[a];return l}const Hc=e=>e.__isTeleport,Pe=Symbol(void 0),Dl=Symbol(void 0),Ge=Symbol(void 0),Ll=Symbol(void 0),Tl=[];let at=null;function N(e=!1){Tl.push(at=e?null:[])}function Sc(){Tl.pop(),at=Tl[Tl.length-1]||null}let Ml=1;function pn(e){Ml+=e}function nr(e){return e.dynamicChildren=Ml>0?at||al:null,Sc(),Ml>0&&at&&at.push(e),e}function Z(e,t,l,i,o,n){return nr(fe(e,t,l,i,o,n,!0))}function we(e,t,l,i,o){return nr(oe(e,t,l,i,o,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function Wt(e,t){return e.type===t.type&&e.key===t.key}const Ti="__vInternal",ar=({key:e})=>e!=null?e:null,li=({ref:e,ref_key:t,ref_for:l})=>e!=null?be(e)||De(e)||ae(e)?{i:Ve,r:e,k:t,f:!!l}:e:null;function fe(e,t=null,l=null,i=0,o=null,n=e===Pe?0:1,a=!1,r=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ar(t),ref:t&&li(t),scopeId:Va,slotScopeIds:null,children:l,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:n,patchFlag:i,dynamicProps:o,dynamicChildren:null,appContext:null};return r?(Io(s,l),n&128&&e.normalize(s)):l&&(s.shapeFlag|=be(l)?8:16),Ml>0&&!a&&at&&(s.patchFlag>0||n&6)&&s.patchFlag!==32&&at.push(s),s}const oe=Vc;function Vc(e,t=null,l=null,i=0,o=null,n=!1){if((!e||e===vc)&&(e=Ge),pi(e)){const r=Dt(e,t,!0);return l&&Io(r,l),Ml>0&&!n&&at&&(r.shapeFlag&6?at[at.indexOf(e)]=r:at.push(r)),r.patchFlag|=-2,r}if(Gc(e)&&(e=e.__vccOpts),t){t=Nc(t);let{class:r,style:s}=t;r&&!be(r)&&(t.class=Ke(r)),Oe(s)&&(La(s)&&!te(s)&&(s=Se({},s)),t.style=Sl(s))}const a=be(e)?1:nc(e)?128:Hc(e)?64:Oe(e)?4:ae(e)?2:0;return fe(e,t,l,i,o,a,n,!0)}function Nc(e){return e?La(e)||Ti in e?Se({},e):e:null}function Dt(e,t,l=!1){const{props:i,ref:o,patchFlag:n,children:a}=e,r=t?no(i||{},t):i;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&ar(r),ref:t&&t.ref?l&&o?te(o)?o.concat(li(t)):[o,li(t)]:li(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?n===-1?16:n|16:n,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Dt(e.ssContent),ssFallback:e.ssFallback&&Dt(e.ssFallback),el:e.el,anchor:e.anchor}}function Mt(e=" ",t=0){return oe(Dl,null,e,t)}function jc(e,t){const l=oe(Ll,null,e);return l.staticCount=t,l}function Ae(e="",t=!1){return t?(N(),we(Ge,null,e)):oe(Ge,null,e)}function ot(e){return e==null||typeof e=="boolean"?oe(Ge):te(e)?oe(Pe,null,e.slice()):typeof e=="object"?Lt(e):oe(Dl,null,String(e))}function Lt(e){return e.el===null||e.memo?e:Dt(e)}function Io(e,t){let l=0;const{shapeFlag:i}=e;if(t==null)t=null;else if(te(t))l=16;else if(typeof t=="object")if(i&65){const o=t.default;o&&(o._c&&(o._d=!1),Io(e,o()),o._c&&(o._d=!0));return}else{l=32;const o=t._;!o&&!(Ti in t)?t._ctx=Ve:o===3&&Ve&&(Ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ve},l=32):(t=String(t),i&64?(l=16,t=[Mt(t)]):l=8);e.children=t,e.shapeFlag|=l}function no(...e){const t={};for(let l=0;lFe||Ve,hl=e=>{Fe=e,e.scope.on()},Qt=()=>{Fe&&Fe.scope.off(),Fe=null};function rr(e){return e.vnode.shapeFlag&4}let dl=!1;function Uc(e,t=!1){dl=t;const{props:l,children:i}=e.vnode,o=rr(e);Pc(e,l,o,t),Ac(e,i);const n=o?Wc(e,t):void 0;return dl=!1,n}function Wc(e,t){const l=e.type;e.accessCache=Object.create(null),e.proxy=Ta(new Proxy(e.ctx,_c));const{setup:i}=l;if(i){const o=e.setupContext=i.length>1?qc(e):null;hl(e),ml();const n=wt(i,e,0,[e.props,o]);if(fl(),Qt(),pa(n)){if(n.then(Qt,Qt),t)return n.then(a=>{mn(e,a,t)}).catch(a=>{Nl(a,e,0)});e.asyncDep=n}else mn(e,n,t)}else sr(e,t)}function mn(e,t,l){ae(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Oe(t)&&(e.setupState=Fa(t)),sr(e,l)}let fn;function sr(e,t,l){const i=e.type;if(!e.render){if(!t&&fn&&!i.render){const o=i.template;if(o){const{isCustomElement:n,compilerOptions:a}=e.appContext.config,{delimiters:r,compilerOptions:s}=i,c=Se(Se({isCustomElement:n,delimiters:r},a),s);i.render=fn(o,c)}}e.render=i.render||rt}hl(e),ml(),yc(e),fl(),Qt()}function Xc(e){return new Proxy(e.attrs,{get(t,l){return Qe(e,"get","$attrs"),t[l]}})}function qc(e){const t=i=>{e.exposed=i||{}};let l;return{get attrs(){return l||(l=Xc(e))},slots:e.slots,emit:e.emit,expose:t}}function Ai(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Fa(Ta(e.exposed)),{get(t,l){if(l in t)return t[l];if(l in hi)return hi[l](e)}}))}function Kc(e,t=!0){return ae(e)?e.displayName||e.name:e.name||t&&e.__name}function Gc(e){return ae(e)&&"__vccOpts"in e}const Y=(e,t)=>qs(e,t,dl);function he(e,t,l){const i=arguments.length;return i===2?Oe(t)&&!te(t)?pi(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(i>3?l=Array.prototype.slice.call(arguments,2):i===3&&pi(l)&&(l=[l]),oe(e,t,l))}const Qc="3.2.37",Jc="http://www.w3.org/2000/svg",Xt=typeof document<"u"?document:null,gn=Xt&&Xt.createElement("template"),Zc={insert:(e,t,l)=>{t.insertBefore(e,l||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,l,i)=>{const o=t?Xt.createElementNS(Jc,e):Xt.createElement(e,l?{is:l}:void 0);return e==="select"&&i&&i.multiple!=null&&o.setAttribute("multiple",i.multiple),o},createText:e=>Xt.createTextNode(e),createComment:e=>Xt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Xt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,l,i,o,n){const a=l?l.previousSibling:t.lastChild;if(o&&(o===n||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),l),!(o===n||!(o=o.nextSibling)););else{gn.innerHTML=i?`${e}`:e;const r=gn.content;if(i){const s=r.firstChild;for(;s.firstChild;)r.appendChild(s.firstChild);r.removeChild(s)}t.insertBefore(r,l)}return[a?a.nextSibling:t.firstChild,l?l.previousSibling:t.lastChild]}};function eh(e,t,l){const i=e._vtc;i&&(t=(t?[t,...i]:[...i]).join(" ")),t==null?e.removeAttribute("class"):l?e.setAttribute("class",t):e.className=t}function th(e,t,l){const i=e.style,o=be(l);if(l&&!o){for(const n in l)ao(i,n,l[n]);if(t&&!be(t))for(const n in t)l[n]==null&&ao(i,n,"")}else{const n=i.display;o?t!==l&&(i.cssText=l):t&&e.removeAttribute("style"),"_vod"in e&&(i.display=n)}}const kn=/\s*!important$/;function ao(e,t,l){if(te(l))l.forEach(i=>ao(e,t,i));else if(l==null&&(l=""),t.startsWith("--"))e.setProperty(t,l);else{const i=lh(e,t);kn.test(l)?e.setProperty(Jt(i),l.replace(kn,""),"important"):e[i]=l}}const vn=["Webkit","Moz","ms"],Hi={};function lh(e,t){const l=Hi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Hi[t]=i;i=yi(i);for(let o=0;o{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const l=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(l&&Number(l[1])<=53)}return[e,t]})();let ro=0;const ah=Promise.resolve(),rh=()=>{ro=0},sh=()=>ro||(ah.then(rh),ro=cr());function ch(e,t,l,i){e.addEventListener(t,l,i)}function hh(e,t,l,i){e.removeEventListener(t,l,i)}function dh(e,t,l,i,o=null){const n=e._vei||(e._vei={}),a=n[t];if(i&&a)a.value=i;else{const[r,s]=uh(t);if(i){const c=n[t]=ph(i,o);ch(e,r,c,s)}else a&&(hh(e,r,a,s),n[t]=void 0)}}const _n=/(?:Once|Passive|Capture)$/;function uh(e){let t;if(_n.test(e)){t={};let l;for(;l=e.match(_n);)e=e.slice(0,e.length-l[0].length),t[l[0].toLowerCase()]=!0}return[Jt(e.slice(2)),t]}function ph(e,t){const l=i=>{const o=i.timeStamp||cr();(nh||o>=l.attached-1)&<(mh(i,l.value),t,5,[i])};return l.value=e,l.attached=sh(),l}function mh(e,t){if(te(t)){const l=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{l.call(e),e._stopped=!0},t.map(i=>o=>!o._stopped&&i&&i(o))}else return t}const yn=/^on[a-z]/,fh=(e,t,l,i,o=!1,n,a,r,s)=>{t==="class"?eh(e,i,o):t==="style"?th(e,l,i):Vl(t)?fo(t)||dh(e,t,l,i,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gh(e,t,i,o))?oh(e,t,i,n,a,r,s):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),ih(e,t,i,o))};function gh(e,t,l,i){return i?!!(t==="innerHTML"||t==="textContent"||t in e&&yn.test(t)&&ae(l)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||yn.test(t)&&be(l)?!1:t in e}const Ct="transition",vl="animation",Bl=(e,{slots:t})=>he(Ya,kh(e),t);Bl.displayName="Transition";const hr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Bl.props=Se({},Ya.props,hr);const jt=(e,t=[])=>{te(e)?e.forEach(l=>l(...t)):e&&e(...t)},xn=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function kh(e){const t={};for(const C in e)C in hr||(t[C]=e[C]);if(e.css===!1)return t;const{name:l="v",type:i,duration:o,enterFromClass:n=`${l}-enter-from`,enterActiveClass:a=`${l}-enter-active`,enterToClass:r=`${l}-enter-to`,appearFromClass:s=n,appearActiveClass:c=a,appearToClass:h=r,leaveFromClass:p=`${l}-leave-from`,leaveActiveClass:m=`${l}-leave-active`,leaveToClass:g=`${l}-leave-to`}=e,x=vh(o),P=x&&x[0],E=x&&x[1],{onBeforeEnter:k,onEnter:_,onEnterCancelled:L,onLeave:H,onLeaveCancelled:U,onBeforeAppear:ee=k,onAppear:w=_,onAppearCancelled:v=L}=t,q=(C,S,F)=>{$t(C,S?h:r),$t(C,S?c:a),F&&F()},B=(C,S)=>{C._isLeaving=!1,$t(C,p),$t(C,g),$t(C,m),S&&S()},G=C=>(S,F)=>{const re=C?w:_,j=()=>q(S,C,F);jt(re,[S,j]),En(()=>{$t(S,C?s:n),Rt(S,C?h:r),xn(re)||Cn(S,i,P,j)})};return Se(t,{onBeforeEnter(C){jt(k,[C]),Rt(C,n),Rt(C,a)},onBeforeAppear(C){jt(ee,[C]),Rt(C,s),Rt(C,c)},onEnter:G(!1),onAppear:G(!0),onLeave(C,S){C._isLeaving=!0;const F=()=>B(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(H)||Cn(C,i,E,F))}),jt(H,[C,F])},onEnterCancelled(C){q(C,!1),jt(L,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){B(C),jt(U,[C])}})}function vh(e){if(e==null)return null;if(Oe(e))return[Si(e.enter),Si(e.leave)];{const t=Si(e);return[t,t]}}function Si(e){return ga(e)}function Rt(e,t){t.split(/\s+/).forEach(l=>l&&e.classList.add(l)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const{_vtc:l}=e;l&&(l.delete(t),l.size||(e._vtc=void 0))}function En(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let bh=0;function Cn(e,t,l,i){const o=e._endId=++bh,n=()=>{o===e._endId&&i()};if(l)return setTimeout(n,l);const{type:a,timeout:r,propCount:s}=_h(e,t);if(!a)return i();const c=a+"end";let h=0;const p=()=>{e.removeEventListener(c,m),n()},m=g=>{g.target===e&&++h>=s&&p()};setTimeout(()=>{h(l[x]||"").split(", "),o=i(Ct+"Delay"),n=i(Ct+"Duration"),a=Rn(o,n),r=i(vl+"Delay"),s=i(vl+"Duration"),c=Rn(r,s);let h=null,p=0,m=0;t===Ct?a>0&&(h=Ct,p=a,m=n.length):t===vl?c>0&&(h=vl,p=c,m=s.length):(p=Math.max(a,c),h=p>0?a>c?Ct:vl:null,m=h?h===Ct?n.length:s.length:0);const g=h===Ct&&/\b(transform|all)(,|$)/.test(l[Ct+"Property"]);return{type:h,timeout:p,propCount:m,hasTransform:g}}function Rn(e,t){for(;e.lengthPn(l)+Pn(e[i])))}function Pn(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function yh(){return document.body.offsetHeight}const xh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Eh=(e,t)=>l=>{if(!("key"in l))return;const i=Jt(l.key);if(t.some(o=>o===i||xh[o]===i))return e(l)},mi={beforeMount(e,{value:t},{transition:l}){e._vod=e.style.display==="none"?"":e.style.display,l&&t?l.beforeEnter(e):bl(e,t)},mounted(e,{value:t},{transition:l}){l&&t&&l.enter(e)},updated(e,{value:t,oldValue:l},{transition:i}){!t!=!l&&(i?t?(i.beforeEnter(e),bl(e,!0),i.enter(e)):i.leave(e,()=>{bl(e,!1)}):bl(e,t))},beforeUnmount(e,{value:t}){bl(e,t)}};function bl(e,t){e.style.display=t?e._vod:"none"}const Ch=Se({patchProp:fh},Zc);let Vi,Ln=!1;function Rh(){return Vi=Ln?Vi:zc(Ch),Ln=!0,Vi}const Ph=(...e)=>{const t=Rh().createApp(...e),{mount:l}=t;return t.mount=i=>{const o=Lh(i);if(o)return l(o,!0,o instanceof SVGElement)},t};function Lh(e){return be(e)?document.querySelector(e):e}const Th=JSON.parse('{"base":"/YukiHookAPI/","lang":"en-US","title":"Yuki Hook API","description":"An efficient Hook API and Xposed Module solution built in Kotlin","head":[["link",{"rel":"icon","href":"/YukiHookAPI/images/logo.png"}]],"locales":{"/en/":{"lang":"en-US","description":"An efficient Hook API and Xposed Module solution built in Kotlin"},"/zh-cn/":{"lang":"zh-CN","description":"\u4E00\u4E2A\u4F7F\u7528 Kotlin \u6784\u5EFA\u7684\u9AD8\u6548 Hook API \u4E0E Xposed \u6A21\u5757\u89E3\u51B3\u65B9\u6848"}}}');var Ah=([e,t,l])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,l]),Ih=e=>{const t=new Set,l=[];return e.forEach(i=>{const o=Ah(i);t.has(o)||(t.add(o),l.push(i))}),l},Ul=e=>/^(https?:)?\/\//.test(e),wh=e=>/^mailto:/.test(e),Oh=e=>/^tel:/.test(e),Oo=e=>Object.prototype.toString.call(e)==="[object Object]",dr=e=>e.replace(/\/$/,""),ur=e=>e.replace(/^\//,""),pr=(e,t)=>{const l=Object.keys(e).sort((i,o)=>{const n=o.split("/").length-i.split("/").length;return n!==0?n:o.length-i.length});for(const i of l)if(t.startsWith(i))return i;return"/"};const mr={"v-8daa1a0e":b(()=>d(()=>import("./index.html.7156b7de.js"),[])),"v-2d0a870d":b(()=>d(()=>import("./index.html.bf6afa04.js"),[])),"v-c0c85b84":b(()=>d(()=>import("./index.html.1a209ee5.js"),[])),"v-7a15fe3b":b(()=>d(()=>import("./about.html.62cfee9a.js"),[])),"v-3f851d14":b(()=>d(()=>import("./changelog.html.47310692.js"),[])),"v-193cf592":b(()=>d(()=>import("./contacts.html.248b9bb6.js"),[])),"v-ae7b83f2":b(()=>d(()=>import("./future.html.bd412eee.js"),[])),"v-64fc7bb8":b(()=>d(()=>import("./home.html.b39a289b.js"),[])),"v-7b22efaf":b(()=>d(()=>import("./example.html.cffc8c16.js"),[])),"v-efb45d4c":b(()=>d(()=>import("./home.html.15dfed7b.js"),[])),"v-277b35ca":b(()=>d(()=>import("./knowledge.html.86105dad.js"),[])),"v-77d752a2":b(()=>d(()=>import("./move-to-new-api.html.e7f15667.js"),[])),"v-72889797":b(()=>d(()=>import("./quick-start.html.5ee08b81.js"),[])),"v-9cfea7fc":b(()=>d(()=>import("./api-example.html.83f18514.js"),[])),"v-72c12b7d":b(()=>d(()=>import("./api-exception.html.1a55cd17.js"),[])),"v-793879e8":b(()=>d(()=>import("./api-using.html.167768ec.js"),[])),"v-29d6c1ba":b(()=>d(()=>import("./r8-proguard.html.7efa3325.js"),[])),"v-24e71de7":b(()=>d(()=>import("./xposed-using.html.a2ec3756.js"),[])),"v-55c11626":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.35a8316f.js"),[])),"v-41967128":b(()=>d(()=>import("./about.html.3dd3e473.js"),[])),"v-0e6c3476":b(()=>d(()=>import("./changelog.html.c208c868.js"),[])),"v-6cf86266":b(()=>d(()=>import("./contacts.html.6417336b.js"),[])),"v-3106ca14":b(()=>d(()=>import("./future.html.08846421.js"),[])),"v-c6114c9e":b(()=>d(()=>import("./api-example.html.bab7ddb3.js"),[])),"v-5b43296c":b(()=>d(()=>import("./api-exception.html.2541368f.js"),[])),"v-2ee67152":b(()=>d(()=>import("./api-using.html.c7abdd44.js"),[])),"v-154d6f69":b(()=>d(()=>import("./r8-proguard.html.2cf07bb5.js"),[])),"v-af73b3d0":b(()=>d(()=>import("./xposed-using.html.edbc66c9.js"),[])),"v-c8deafb2":b(()=>d(()=>import("./home.html.7711e001.js"),[])),"v-13b430a0":b(()=>d(()=>import("./example.html.996772ae.js"),[])),"v-6a609e09":b(()=>d(()=>import("./home.html.10832de6.js"),[])),"v-b4f1a468":b(()=>d(()=>import("./knowledge.html.26fd732a.js"),[])),"v-c0d5dada":b(()=>d(()=>import("./move-to-new-api.html.4df12128.js"),[])),"v-24840ff0":b(()=>d(()=>import("./quick-start.html.0468985b.js"),[])),"v-a2fab4d6":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.40b85b3e.js"),[])),"v-12042f1f":b(()=>d(()=>import("./host-inject.html.006ffd64.js"),[])),"v-deaff1d0":b(()=>d(()=>import("./host-lifecycle.html.cf7c23b2.js"),[])),"v-33c1dc26":b(()=>d(()=>import("./logger.html.e816121a.js"),[])),"v-581ddb9c":b(()=>d(()=>import("./reflection.html.76679915.js"),[])),"v-2e6ad66c":b(()=>d(()=>import("./xposed-channel.html.bda508bf.js"),[])),"v-68bebbf4":b(()=>d(()=>import("./xposed-storage.html.5f915189.js"),[])),"v-6ac5be8e":b(()=>d(()=>import("./host-inject.html.7ded4afb.js"),[])),"v-357a8d49":b(()=>d(()=>import("./host-lifecycle.html.a7f19a5a.js"),[])),"v-1f0f591e":b(()=>d(()=>import("./logger.html.bbc7faa3.js"),[])),"v-001858e3":b(()=>d(()=>import("./reflection.html.91ffec62.js"),[])),"v-598546c6":b(()=>d(()=>import("./xposed-channel.html.ed572b4b.js"),[])),"v-0d914225":b(()=>d(()=>import("./xposed-storage.html.eac2b26d.js"),[])),"v-053599a5":b(()=>d(()=>import("./YukiHookAPI.html.2b409e9b.js"),[])),"v-6931cb54":b(()=>d(()=>import("./YukiHookAPI.html.ac46d9ea.js"),[])),"v-818b3ca6":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.bf8054c0.js"),[])),"v-b6a815c4":b(()=>d(()=>import("./CurrentClass.html.74aeee57.js"),[])),"v-0183e3fc":b(()=>d(()=>import("./GenericClass.html.b3633ffa.js"),[])),"v-57506200":b(()=>d(()=>import("./HookClass.html.a2a3a962.js"),[])),"v-9af56c1a":b(()=>d(()=>import("./HookResources.html.df1896fb.js"),[])),"v-032b1710":b(()=>d(()=>import("./VariousClass.html.1ec15192.js"),[])),"v-e288ce96":b(()=>d(()=>import("./YukiBaseHooker.html.01048374.js"),[])),"v-71147891":b(()=>d(()=>import("./YukiMemberHookCreator.html.d320e714.js"),[])),"v-5ed1ceee":b(()=>d(()=>import("./YukiResourcesHookCreator.html.982a55e8.js"),[])),"v-0d0fcec2":b(()=>d(()=>import("./ReflectionFactory.html.8e45139d.js"),[])),"v-65091354":b(()=>d(()=>import("./YukiHookFactory.html.a2cb6ab9.js"),[])),"v-36aec5ad":b(()=>d(()=>import("./LoggerFactory.html.880b2c32.js"),[])),"v-60cbe1b4":b(()=>d(()=>import("./HookParam.html.274f2827.js"),[])),"v-b381a126":b(()=>d(()=>import("./PackageParam.html.f53431ac.js"),[])),"v-30f3ba1e":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.7724ef42.js"),[])),"v-6e47300f":b(()=>d(()=>import("./CurrentClass.html.690247a4.js"),[])),"v-69c1c226":b(()=>d(()=>import("./GenericClass.html.0a9ee744.js"),[])),"v-735374af":b(()=>d(()=>import("./HookClass.html.313ccadf.js"),[])),"v-1c516d22":b(()=>d(()=>import("./HookResources.html.9d793590.js"),[])),"v-66735bfe":b(()=>d(()=>import("./VariousClass.html.e05b3bfe.js"),[])),"v-3ac40680":b(()=>d(()=>import("./YukiMemberHookCreator.html.d265d63a.js"),[])),"v-5e81af42":b(()=>d(()=>import("./YukiResourcesHookCreator.html.32321c47.js"),[])),"v-516df326":b(()=>d(()=>import("./YukiBaseHooker.html.a164cd96.js"),[])),"v-213d88b3":b(()=>d(()=>import("./ReflectionFactory.html.a7e1e6d3.js"),[])),"v-448e9585":b(()=>d(()=>import("./YukiHookFactory.html.a75f1642.js"),[])),"v-004a009e":b(()=>d(()=>import("./LoggerFactory.html.462e22e1.js"),[])),"v-75a9b636":b(()=>d(()=>import("./HookParam.html.9cd06d5e.js"),[])),"v-100b529c":b(()=>d(()=>import("./PackageParam.html.3685b04f.js"),[])),"v-8293d958":b(()=>d(()=>import("./ComponentTypeFactory.html.21e53322.js"),[])),"v-7b0abf86":b(()=>d(()=>import("./GraphicsTypeFactory.html.5a89b685.js"),[])),"v-5309e4a0":b(()=>d(()=>import("./ViewTypeFactory.html.03e8ea8c.js"),[])),"v-a2615d0c":b(()=>d(()=>import("./DefinedTypeFactory.html.9d8e771c.js"),[])),"v-ba01a600":b(()=>d(()=>import("./VariableTypeFactory.html.8564dbdd.js"),[])),"v-7fec5836":b(()=>d(()=>import("./ModuleApplication.html.56763d78.js"),[])),"v-7414265a":b(()=>d(()=>import("./YukiHookDataChannel.html.e4cfba74.js"),[])),"v-003862c2":b(()=>d(()=>import("./YukiHookModulePrefs.html.c58899ea.js"),[])),"v-1d680acc":b(()=>d(()=>import("./IYukiHookXposedInit.html.ddece200.js"),[])),"v-5e874c45":b(()=>d(()=>import("./ComponentTypeFactory.html.fcb0f2f2.js"),[])),"v-4ea62475":b(()=>d(()=>import("./GraphicsTypeFactory.html.20efc476.js"),[])),"v-ef79cde2":b(()=>d(()=>import("./ViewTypeFactory.html.78709475.js"),[])),"v-5acc12ab":b(()=>d(()=>import("./DefinedTypeFactory.html.dc18ac09.js"),[])),"v-14ec8671":b(()=>d(()=>import("./VariableTypeFactory.html.33a241fb.js"),[])),"v-4709ad58":b(()=>d(()=>import("./ModuleApplication.html.c370bb02.js"),[])),"v-632be8ee":b(()=>d(()=>import("./YukiHookDataChannel.html.b5dfff48.js"),[])),"v-5858709e":b(()=>d(()=>import("./YukiHookModulePrefs.html.1b090cbd.js"),[])),"v-763140ee":b(()=>d(()=>import("./IYukiHookXposedInit.html.7e1c7b54.js"),[])),"v-4fca92c0":b(()=>d(()=>import("./BaseFinder.html.2d08335d.js"),[])),"v-2a898c66":b(()=>d(()=>import("./DexClassFinder.html.e1b50295.js"),[])),"v-a71937aa":b(()=>d(()=>import("./ConstructorFinder.html.8e8acbb3.js"),[])),"v-42e0f0ab":b(()=>d(()=>import("./FieldFinder.html.ec139e7b.js"),[])),"v-a4aa4d00":b(()=>d(()=>import("./MethodFinder.html.ea788a24.js"),[])),"v-0f719471":b(()=>d(()=>import("./BaseFinder.html.ecaafaf7.js"),[])),"v-45111efc":b(()=>d(()=>import("./DexClassFinder.html.a39c3b0d.js"),[])),"v-1e2cbc9c":b(()=>d(()=>import("./ConstructorFinder.html.a0eb34b8.js"),[])),"v-22449c48":b(()=>d(()=>import("./FieldFinder.html.ec12b90a.js"),[])),"v-fd738322":b(()=>d(()=>import("./MethodFinder.html.5687c2d0.js"),[])),"v-19e7277e":b(()=>d(()=>import("./YukiXposedEvent.html.b582e0e6.js"),[])),"v-8455e04e":b(()=>d(()=>import("./YukiModuleResources.html.352c99bd.js"),[])),"v-7b087cce":b(()=>d(()=>import("./YukiResForwarder.html.885164cb.js"),[])),"v-a00b4de6":b(()=>d(()=>import("./YukiResources.html.4cfc0e93.js"),[])),"v-2f64a2d4":b(()=>d(()=>import("./ChannelData.html.3886a803.js"),[])),"v-87027140":b(()=>d(()=>import("./ChannelPriority.html.91f495ea.js"),[])),"v-2d4e0da6":b(()=>d(()=>import("./ModuleClassLoader.html.57fbf415.js"),[])),"v-58ed8298":b(()=>d(()=>import("./PrefsData.html.a355ca36.js"),[])),"v-23e1a817":b(()=>d(()=>import("./ModulePreferenceFragment.html.63b6fc54.js"),[])),"v-0a4de82f":b(()=>d(()=>import("./YukiXposedEvent.html.74b25a5c.js"),[])),"v-8266e0ec":b(()=>d(()=>import("./YukiModuleResources.html.748f40e7.js"),[])),"v-aa38fa86":b(()=>d(()=>import("./YukiResForwarder.html.21027be7.js"),[])),"v-21b3b17e":b(()=>d(()=>import("./YukiResources.html.ee310877.js"),[])),"v-493d37f6":b(()=>d(()=>import("./ChannelData.html.d014b5aa.js"),[])),"v-b57870de":b(()=>d(()=>import("./ChannelPriority.html.9fd0762c.js"),[])),"v-4b468415":b(()=>d(()=>import("./ModuleClassLoader.html.783ae260.js"),[])),"v-d99f7f36":b(()=>d(()=>import("./PrefsData.html.e31fcb01.js"),[])),"v-53bcae06":b(()=>d(()=>import("./ModulePreferenceFragment.html.e99a60b4.js"),[])),"v-52995ef7":b(()=>d(()=>import("./CountRules.html.9e942ea0.js"),[])),"v-8d5ce71a":b(()=>d(()=>import("./ModifierRules.html.825b90af.js"),[])),"v-f5b1ffb2":b(()=>d(()=>import("./NameRules.html.6356236a.js"),[])),"v-652b815b":b(()=>d(()=>import("./ObjectRules.html.bc713297.js"),[])),"v-08b70f7f":b(()=>d(()=>import("./ConstructorRules.html.78b8984a.js"),[])),"v-21f64ebf":b(()=>d(()=>import("./FieldRules.html.24eb25e9.js"),[])),"v-77f11cf9":b(()=>d(()=>import("./MemberRules.html.b8bf96eb.js"),[])),"v-64827680":b(()=>d(()=>import("./MethodRules.html.d3ab5e09.js"),[])),"v-1b2ad030":b(()=>d(()=>import("./CountRules.html.8056c7de.js"),[])),"v-547a3c3c":b(()=>d(()=>import("./ModifierRules.html.12fcbe10.js"),[])),"v-58c26516":b(()=>d(()=>import("./NameRules.html.4c8bc236.js"),[])),"v-80fd32ec":b(()=>d(()=>import("./ObjectRules.html.a00891c0.js"),[])),"v-a42f54a4":b(()=>d(()=>import("./ConstructorRules.html.ed5d13d6.js"),[])),"v-3e67a42e":b(()=>d(()=>import("./FieldRules.html.485bb6e0.js"),[])),"v-2cab152c":b(()=>d(()=>import("./MemberRules.html.19e4c81e.js"),[])),"v-5388621e":b(()=>d(()=>import("./MethodRules.html.d04abbd7.js"),[])),"v-2d5d16db":b(()=>d(()=>import("./ModuleAppActivity.html.bc565ff4.js"),[])),"v-cadbe48e":b(()=>d(()=>import("./ModuleAppCompatActivity.html.1a5f59d3.js"),[])),"v-78731c50":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.f660d72d.js"),[])),"v-1446bdca":b(()=>d(()=>import("./ModuleAppActivity.html.ac6b4458.js"),[])),"v-c7cef530":b(()=>d(()=>import("./ModuleAppCompatActivity.html.cc649b6e.js"),[])),"v-44efb702":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.499dab73.js"),[])),"v-5e375d98":b(()=>d(()=>import("./MemberRulesResult.html.e8ee62fa.js"),[])),"v-b8000f3a":b(()=>d(()=>import("./MemberRulesResult.html.a7dd50c0.js"),[])),"v-3706649a":b(()=>d(()=>import("./404.html.1bb03b33.js"),[]))};var Ht=(e={})=>e;function fr(e,t,l){var i,o,n;t===void 0&&(t=50),l===void 0&&(l={});var a=(i=l.isImmediate)!=null&&i,r=(o=l.callback)!=null&&o,s=l.maxWait,c=Date.now(),h=[];function p(){if(s!==void 0){var g=Date.now()-c;if(g+t>=s)return s-g}return t}var m=function(){var g=[].slice.call(arguments),x=this;return new Promise(function(P,E){var k=a&&n===void 0;if(n!==void 0&&clearTimeout(n),n=setTimeout(function(){if(n=void 0,c=Date.now(),!a){var L=e.apply(x,g);r&&r(L),h.forEach(function(H){return(0,H.resolve)(L)}),h=[]}},p()),k){var _=e.apply(x,g);return r&&r(_),P(_)}h.push({resolve:P,reject:E})})};return m.cancel=function(g){n!==void 0&&clearTimeout(n),h.forEach(function(x){return(0,x.reject)(g)}),h=[]},m}/*! - * vue-router v4.1.5 - * (c) 2022 Eduardo San Martin Morote - * @license MIT - */const nl=typeof window<"u";function Fh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ve=Object.assign;function Ni(e,t){const l={};for(const i in t){const o=t[i];l[i]=st(o)?o.map(e):e(o)}return l}const Al=()=>{},st=Array.isArray,zh=/\/$/,Dh=e=>e.replace(zh,"");function ji(e,t,l="/"){let i,o={},n="",a="";const r=t.indexOf("#");let s=t.indexOf("?");return r=0&&(s=-1),s>-1&&(i=t.slice(0,s),n=t.slice(s+1,r>-1?r:t.length),o=e(n)),r>-1&&(i=i||t.slice(0,r),a=t.slice(r,t.length)),i=Vh(i!=null?i:t,l),{fullPath:i+(n&&"?")+n+a,path:i,query:o,hash:a}}function Mh(e,t){const l=t.query?e(t.query):"";return t.path+(l&&"?")+l+(t.hash||"")}function Tn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Hh(e,t,l){const i=t.matched.length-1,o=l.matched.length-1;return i>-1&&i===o&&ul(t.matched[i],l.matched[o])&&gr(t.params,l.params)&&e(t.query)===e(l.query)&&t.hash===l.hash}function ul(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const l in e)if(!Sh(e[l],t[l]))return!1;return!0}function Sh(e,t){return st(e)?An(e,t):st(t)?An(t,e):e===t}function An(e,t){return st(t)?e.length===t.length&&e.every((l,i)=>l===t[i]):e.length===1&&e[0]===t}function Vh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const l=t.split("/"),i=e.split("/");let o=l.length-1,n,a;for(n=0;n1&&o--;else break;return l.slice(0,o).join("/")+"/"+i.slice(n-(n===i.length?1:0)).join("/")}var Hl;(function(e){e.pop="pop",e.push="push"})(Hl||(Hl={}));var Il;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Il||(Il={}));function Nh(e){if(!e)if(nl){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Dh(e)}const jh=/^[^#]+#/;function $h(e,t){return e.replace(jh,"#")+t}function Yh(e,t){const l=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-l.left-(t.left||0),top:i.top-l.top-(t.top||0)}}const Ii=()=>({left:window.pageXOffset,top:window.pageYOffset});function Bh(e){let t;if("el"in e){const l=e.el,i=typeof l=="string"&&l.startsWith("#"),o=typeof l=="string"?i?document.getElementById(l.slice(1)):document.querySelector(l):l;if(!o)return;t=Yh(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function In(e,t){return(history.state?history.state.position-t:-1)+e}const so=new Map;function Uh(e,t){so.set(e,t)}function Wh(e){const t=so.get(e);return so.delete(e),t}let Xh=()=>location.protocol+"//"+location.host;function kr(e,t){const{pathname:l,search:i,hash:o}=t,n=e.indexOf("#");if(n>-1){let r=o.includes(e.slice(n))?e.slice(n).length:1,s=o.slice(r);return s[0]!=="/"&&(s="/"+s),Tn(s,"")}return Tn(l,e)+i+o}function qh(e,t,l,i){let o=[],n=[],a=null;const r=({state:m})=>{const g=kr(e,location),x=l.value,P=t.value;let E=0;if(m){if(l.value=g,t.value=m,a&&a===x){a=null;return}E=P?m.position-P.position:0}else i(g);o.forEach(k=>{k(l.value,x,{delta:E,type:Hl.pop,direction:E?E>0?Il.forward:Il.back:Il.unknown})})};function s(){a=l.value}function c(m){o.push(m);const g=()=>{const x=o.indexOf(m);x>-1&&o.splice(x,1)};return n.push(g),g}function h(){const{history:m}=window;!m.state||m.replaceState(ve({},m.state,{scroll:Ii()}),"")}function p(){for(const m of n)m();n=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",h)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",h),{pauseListeners:s,listen:c,destroy:p}}function wn(e,t,l,i=!1,o=!1){return{back:e,current:t,forward:l,replaced:i,position:window.history.length,scroll:o?Ii():null}}function Kh(e){const{history:t,location:l}=window,i={value:kr(e,l)},o={value:t.state};o.value||n(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function n(s,c,h){const p=e.indexOf("#"),m=p>-1?(l.host&&document.querySelector("base")?e:e.slice(p))+s:Xh()+e+s;try{t[h?"replaceState":"pushState"](c,"",m),o.value=c}catch(g){console.error(g),l[h?"replace":"assign"](m)}}function a(s,c){const h=ve({},t.state,wn(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});n(s,h,!0),i.value=s}function r(s,c){const h=ve({},o.value,t.state,{forward:s,scroll:Ii()});n(h.current,h,!0);const p=ve({},wn(i.value,s,null),{position:h.position+1},c);n(s,p,!1),i.value=s}return{location:i,state:o,push:r,replace:a}}function Gh(e){e=Nh(e);const t=Kh(e),l=qh(e,t.state,t.location,t.replace);function i(n,a=!0){a||l.pauseListeners(),history.go(n)}const o=ve({location:"",base:e,go:i,createHref:$h.bind(null,e)},t,l);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Qh(e){return typeof e=="string"||e&&typeof e=="object"}function vr(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},br=Symbol("");var On;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(On||(On={}));function pl(e,t){return ve(new Error,{type:e,[br]:!0},t)}function pt(e,t){return e instanceof Error&&br in e&&(t==null||!!(e.type&t))}const Fn="[^/]+?",Jh={sensitive:!1,strict:!1,start:!0,end:!0},Zh=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const l=ve({},Jh,t),i=[];let o=l.start?"^":"";const n=[];for(const c of e){const h=c.length?[]:[90];l.strict&&!c.length&&(o+="/");for(let p=0;pt.length?t.length===1&&t[0]===40+40?1:-1:0}function ld(e,t){let l=0;const i=e.score,o=t.score;for(;l0&&t[t.length-1]<0}const id={type:0,value:""},od=/[a-zA-Z0-9_]/;function nd(e){if(!e)return[[]];if(e==="/")return[[id]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${l})/"${c}": ${g}`)}let l=0,i=l;const o=[];let n;function a(){n&&o.push(n),n=[]}let r=0,s,c="",h="";function p(){!c||(l===0?n.push({type:0,value:c}):l===1||l===2||l===3?(n.length>1&&(s==="*"||s==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),n.push({type:1,value:c,regexp:h,repeatable:s==="*"||s==="+",optional:s==="*"||s==="?"})):t("Invalid state to consume buffer"),c="")}function m(){c+=s}for(;r{a(_)}:Al}function a(h){if(vr(h)){const p=i.get(h);p&&(i.delete(h),l.splice(l.indexOf(p),1),p.children.forEach(a),p.alias.forEach(a))}else{const p=l.indexOf(h);p>-1&&(l.splice(p,1),h.record.name&&i.delete(h.record.name),h.children.forEach(a),h.alias.forEach(a))}}function r(){return l}function s(h){let p=0;for(;p=0&&(h.record.path!==l[p].record.path||!_r(h,l[p]));)p++;l.splice(p,0,h),h.record.name&&!Mn(h)&&i.set(h.record.name,h)}function c(h,p){let m,g={},x,P;if("name"in h&&h.name){if(m=i.get(h.name),!m)throw pl(1,{location:h});P=m.record.name,g=ve(Dn(p.params,m.keys.filter(_=>!_.optional).map(_=>_.name)),h.params&&Dn(h.params,m.keys.map(_=>_.name))),x=m.stringify(g)}else if("path"in h)x=h.path,m=l.find(_=>_.re.test(x)),m&&(g=m.parse(x),P=m.record.name);else{if(m=p.name?i.get(p.name):l.find(_=>_.re.test(p.path)),!m)throw pl(1,{location:h,currentLocation:p});P=m.record.name,g=ve({},p.params,h.params),x=m.stringify(g)}const E=[];let k=m;for(;k;)E.unshift(k.record),k=k.parent;return{name:P,path:x,params:g,matched:E,meta:hd(E)}}return e.forEach(h=>n(h)),{addRoute:n,resolve:c,removeRoute:a,getRoutes:r,getRecordMatcher:o}}function Dn(e,t){const l={};for(const i of t)i in e&&(l[i]=e[i]);return l}function sd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cd(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const i in e.components)t[i]=typeof l=="boolean"?l:l[i];return t}function Mn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hd(e){return e.reduce((t,l)=>ve(t,l.meta),{})}function Hn(e,t){const l={};for(const i in e)l[i]=i in t?t[i]:e[i];return l}function _r(e,t){return t.children.some(l=>l===e||_r(e,l))}const yr=/#/g,dd=/&/g,ud=/\//g,pd=/=/g,md=/\?/g,xr=/\+/g,fd=/%5B/g,gd=/%5D/g,Er=/%5E/g,kd=/%60/g,Cr=/%7B/g,vd=/%7C/g,Rr=/%7D/g,bd=/%20/g;function Fo(e){return encodeURI(""+e).replace(vd,"|").replace(fd,"[").replace(gd,"]")}function _d(e){return Fo(e).replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function co(e){return Fo(e).replace(xr,"%2B").replace(bd,"+").replace(yr,"%23").replace(dd,"%26").replace(kd,"`").replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function yd(e){return co(e).replace(pd,"%3D")}function xd(e){return Fo(e).replace(yr,"%23").replace(md,"%3F")}function Ed(e){return e==null?"":xd(e).replace(ud,"%2F")}function fi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Cd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;on&&co(n)):[i&&co(i)]).forEach(n=>{n!==void 0&&(t+=(t.length?"&":"")+l,n!=null&&(t+="="+n))})}return t}function Rd(e){const t={};for(const l in e){const i=e[l];i!==void 0&&(t[l]=st(i)?i.map(o=>o==null?null:""+o):i==null?i:""+i)}return t}const Pd=Symbol(""),Vn=Symbol(""),wi=Symbol(""),zo=Symbol(""),ho=Symbol("");function _l(){let e=[];function t(i){return e.push(i),()=>{const o=e.indexOf(i);o>-1&&e.splice(o,1)}}function l(){e=[]}return{add:t,list:()=>e,reset:l}}function Tt(e,t,l,i,o){const n=i&&(i.enterCallbacks[o]=i.enterCallbacks[o]||[]);return()=>new Promise((a,r)=>{const s=p=>{p===!1?r(pl(4,{from:l,to:t})):p instanceof Error?r(p):Qh(p)?r(pl(2,{from:t,to:p})):(n&&i.enterCallbacks[o]===n&&typeof p=="function"&&n.push(p),a())},c=e.call(i&&i.instances[o],t,l,s);let h=Promise.resolve(c);e.length<3&&(h=h.then(s)),h.catch(p=>r(p))})}function $i(e,t,l,i){const o=[];for(const n of e)for(const a in n.components){let r=n.components[a];if(!(t!=="beforeRouteEnter"&&!n.instances[a]))if(Ld(r)){const c=(r.__vccOpts||r)[t];c&&o.push(Tt(c,l,i,n,a))}else{let s=r();o.push(()=>s.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${n.path}"`));const h=Fh(c)?c.default:c;n.components[a]=h;const m=(h.__vccOpts||h)[t];return m&&Tt(m,l,i,n,a)()}))}}return o}function Ld(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Nn(e){const t=Me(wi),l=Me(zo),i=Y(()=>t.resolve(O(e.to))),o=Y(()=>{const{matched:s}=i.value,{length:c}=s,h=s[c-1],p=l.matched;if(!h||!p.length)return-1;const m=p.findIndex(ul.bind(null,h));if(m>-1)return m;const g=jn(s[c-2]);return c>1&&jn(h)===g&&p[p.length-1].path!==g?p.findIndex(ul.bind(null,s[c-2])):m}),n=Y(()=>o.value>-1&&wd(l.params,i.value.params)),a=Y(()=>o.value>-1&&o.value===l.matched.length-1&&gr(l.params,i.value.params));function r(s={}){return Id(s)?t[O(e.replace)?"replace":"push"](O(e.to)).catch(Al):Promise.resolve()}return{route:i,href:Y(()=>i.value.href),isActive:n,isExactActive:a,navigate:r}}const Td=ue({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Nn,setup(e,{slots:t}){const l=gl(Nn(e)),{options:i}=Me(wi),o=Y(()=>({[$n(e.activeClass,i.linkActiveClass,"router-link-active")]:l.isActive,[$n(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const n=t.default&&t.default(l);return e.custom?n:he("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:o.value},n)}}}),Ad=Td;function Id(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function wd(e,t){for(const l in t){const i=t[l],o=e[l];if(typeof i=="string"){if(i!==o)return!1}else if(!st(o)||o.length!==i.length||i.some((n,a)=>n!==o[a]))return!1}return!0}function jn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const $n=(e,t,l)=>e!=null?e:t!=null?t:l,Od=ue({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const i=Me(ho),o=Y(()=>e.route||i.value),n=Me(Vn,0),a=Y(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=Y(()=>o.value.matched[a.value]);Gt(Vn,Y(()=>a.value+1)),Gt(Pd,r),Gt(ho,o);const s=ye();return dt(()=>[s.value,r.value,e.name],([c,h,p],[m,g,x])=>{h&&(h.instances[p]=c,g&&g!==h&&c&&c===m&&(h.leaveGuards.size||(h.leaveGuards=g.leaveGuards),h.updateGuards.size||(h.updateGuards=g.updateGuards))),c&&h&&(!g||!ul(h,g)||!m)&&(h.enterCallbacks[p]||[]).forEach(P=>P(c))},{flush:"post"}),()=>{const c=o.value,h=e.name,p=r.value,m=p&&p.components[h];if(!m)return Yn(l.default,{Component:m,route:c});const g=p.props[h],x=g?g===!0?c.params:typeof g=="function"?g(c):g:null,E=he(m,ve({},x,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(p.instances[h]=null)},ref:s}));return Yn(l.default,{Component:E,route:c})||E}}});function Yn(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const Pr=Od;function Fd(e){const t=rd(e.routes,e),l=e.parseQuery||Cd,i=e.stringifyQuery||Sn,o=e.history,n=_l(),a=_l(),r=_l(),s=wa(mt);let c=mt;nl&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const h=Ni.bind(null,R=>""+R),p=Ni.bind(null,Ed),m=Ni.bind(null,fi);function g(R,W){let M,X;return vr(R)?(M=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,M)}function x(R){const W=t.getRecordMatcher(R);W&&t.removeRoute(W)}function P(){return t.getRoutes().map(R=>R.record)}function E(R){return!!t.getRecordMatcher(R)}function k(R,W){if(W=ve({},W||s.value),typeof R=="string"){const ie=ji(l,R,W.path),u=t.resolve({path:ie.path},W),f=o.createHref(ie.fullPath);return ve(ie,u,{params:m(u.params),hash:fi(ie.hash),redirectedFrom:void 0,href:f})}let M;if("path"in R)M=ve({},R,{path:ji(l,R.path,W.path).path});else{const ie=ve({},R.params);for(const u in ie)ie[u]==null&&delete ie[u];M=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(M,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Mh(i,ve({},R,{hash:_d(ge),path:X.path})),ce=o.createHref(_e);return ve({fullPath:_e,hash:ge,query:i===Sn?Rd(R.query):R.query||{}},X,{redirectedFrom:void 0,href:ce})}function _(R){return typeof R=="string"?ji(l,R,s.value.path):ve({},R)}function L(R,W){if(c!==R)return pl(8,{from:W,to:R})}function H(R){return w(R)}function U(R){return H(ve(_(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:M}=W;let X=typeof M=="function"?M(R):M;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=_(X):{path:X},X.params={}),ve({query:R.query,hash:R.hash,params:"path"in X?{}:R.params},X)}}function w(R,W){const M=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(M);if(ie)return w(ve(_(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||M);const u=M;u.redirectedFrom=W;let f;return!_e&&Hh(i,X,M)&&(f=pl(16,{to:u,from:X}),Ne(X,X,!0,!1)),(f?Promise.resolve(f):q(u,X)).catch(y=>pt(y)?pt(y,2)?y:Ie(y):le(y,u,X)).then(y=>{if(y){if(pt(y,2))return w(ve({replace:ce},_(y.to),{state:typeof y.to=="object"?ve({},ge,y.to.state):ge,force:_e}),W||u)}else y=G(u,X,!0,ce,ge);return B(u,X,y),y})}function v(R,W){const M=L(R,W);return M?Promise.reject(M):Promise.resolve()}function q(R,W){let M;const[X,ge,_e]=zd(R,W);M=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{M.push(Tt(u,R,W))});const ce=v.bind(null,R,W);return M.push(ce),tl(M).then(()=>{M=[];for(const ie of n.list())M.push(Tt(ie,R,W));return M.push(ce),tl(M)}).then(()=>{M=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{M.push(Tt(u,R,W))});return M.push(ce),tl(M)}).then(()=>{M=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)M.push(Tt(u,R,W));else M.push(Tt(ie.beforeEnter,R,W));return M.push(ce),tl(M)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),M=$i(_e,"beforeRouteEnter",R,W),M.push(ce),tl(M))).then(()=>{M=[];for(const ie of a.list())M.push(Tt(ie,R,W));return M.push(ce),tl(M)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function B(R,W,M){for(const X of r.list())X(R,W,M)}function G(R,W,M,X,ge){const _e=L(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};M&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,M,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,M)=>{if(!Vt.listening)return;const X=k(R),ge=ee(X);if(ge){w(ve(ge,{replace:!0}),X).catch(Al);return}c=X;const _e=s.value;nl&&Uh(In(_e.fullPath,M.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!M.delta&&M.type===Hl.pop&&o.go(-1,!1)}).catch(Al),Promise.reject()):(M.delta&&o.go(-M.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(M.delta&&!pt(ce,8)?o.go(-M.delta,!1):M.type===Hl.pop&&pt(ce,20)&&o.go(-1,!1)),B(X,_e,ce)}).catch(Al)}))}let F=_l(),re=_l(),j;function le(R,W,M){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,M)):console.error(R),Promise.reject(R)}function se(){return j&&s.value!==mt?Promise.resolve():new Promise((R,W)=>{F.add([R,W])})}function Ie(R){return j||(j=!R,S(),F.list().forEach(([W,M])=>R?M(R):W()),F.reset()),R}function Ne(R,W,M,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!M&&Wh(In(R.fullPath,0))||(X||!M)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Bh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Ze;const Ye=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:P,resolve:k,options:e,push:H,replace:U,go:Ue,back:()=>Ue(-1),forward:()=>Ue(1),beforeEach:n.add,beforeResolve:a.add,afterEach:r.add,onError:re.add,isReady:se,install(R){const W=this;R.component("RouterLink",Ad),R.component("RouterView",Pr),R.config.globalProperties.$router=W,Object.defineProperty(R.config.globalProperties,"$route",{enumerable:!0,get:()=>O(s)}),nl&&!Ze&&s.value===mt&&(Ze=!0,H(o.location).catch(ge=>{}));const M={};for(const ge in mt)M[ge]=Y(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(M)),R.provide(ho,s);const X=R.unmount;Ye.add(R),R.unmount=function(){Ye.delete(R),Ye.size<1&&(c=mt,C&&C(),C=null,s.value=mt,Ze=!1,j=!1),X()}}};return Vt}function tl(e){return e.reduce((t,l)=>t.then(()=>l()),Promise.resolve())}function zd(e,t){const l=[],i=[],o=[],n=Math.max(t.matched.length,e.matched.length);for(let a=0;aul(c,r))?i.push(r):l.push(r));const s=e.matched[a];s&&(t.matched.find(c=>ul(c,s))||o.push(s))}return[l,i,o]}function Zt(){return Me(wi)}function St(){return Me(zo)}const Dd=({headerLinkSelector:e,headerAnchorSelector:t,delay:l,offset:i=5})=>{const o=Zt(),a=fr(()=>{var P,E,k,_;const r=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(r-0)m.some(H=>H.hash===L.hash));for(let L=0;L=((E=(P=H.parentElement)==null?void 0:P.offsetTop)!=null?E:0)-i,w=!U||r<((_=(k=U.parentElement)==null?void 0:k.offsetTop)!=null?_:0)-i;if(!(ee&&w))continue;const q=decodeURIComponent(o.currentRoute.value.hash),B=decodeURIComponent(H.hash);if(q===B)return;if(p){for(let G=L+1;G{window.addEventListener("scroll",a)}),Yl(()=>{window.removeEventListener("scroll",a)})},Bn=async(e,t)=>{const{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=l)},Md="a.sidebar-item",Hd=".header-anchor",Sd=300,Vd=5,Nd=Ht({setup(){Dd({headerLinkSelector:Md,headerAnchorSelector:Hd,delay:Sd,offset:Vd})}}),Un=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,jd=()=>window.scrollTo({top:0,behavior:"smooth"});const $d=ue({name:"BackToTop",setup(){const e=ye(0),t=Y(()=>e.value>300),l=fr(()=>{e.value=Un()},100);Je(()=>{e.value=Un(),window.addEventListener("scroll",()=>l())});const i=he("div",{class:"back-to-top",onClick:jd});return()=>he(Bl,{name:"back-to-top"},()=>t.value?i:null)}}),Yd=Ht({rootComponents:[$d]});const Bd=he("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[he("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),he("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Ud=ue({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Wl(),l=Y(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Bd,he("span",{class:"external-link-icon-sr-only"},l.value.openInNewWindow)])}}),Wd={"/en/":{openInNewWindow:"open in new window"},"/zh-cn/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00"},"/":{openInNewWindow:"open in new window"}},Xd=Ht({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Bt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function S(){}C(S,S)},o=function(C){var S=C.target;if(S===q){x();return}L.indexOf(S)!==-1&&P({target:S})},n=function(){if(!(U||!v.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(ee-C)>w.scrollOffset&&setTimeout(x,150)}},a=function(C){var S=C.key||C.keyCode;(S==="Escape"||S==="Esc"||S===27)&&x()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C;if(C.background&&(q.style.background=C.background),C.container&&C.container instanceof Object&&(S.container=Bt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Bt({},w,S),L.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Bt({},w,C))},c=function(){for(var C=arguments.length,S=Array(C),F=0;F0?S.reduce(function(j,le){return[].concat(j,Xn(le))},[]):L;return re.forEach(function(j){j.classList.remove("medium-zoom-image"),j.dispatchEvent(ll("medium-zoom:detach",{detail:{zoom:B}}))}),L=L.filter(function(j){return re.indexOf(j)===-1}),B},p=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.addEventListener("medium-zoom:"+C,S,F)}),H.push({type:"medium-zoom:"+C,listener:S,options:F}),B},m=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.removeEventListener("medium-zoom:"+C,S,F)}),H=H.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),B},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target,F=function(){var j={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},le=void 0,se=void 0;if(w.container)if(w.container instanceof Object)j=Bt({},j,w.container),le=j.width-j.left-j.right-w.margin*2,se=j.height-j.top-j.bottom-w.margin*2;else{var Ie=ii(w.container)?w.container:document.querySelector(w.container),Ne=Ie.getBoundingClientRect(),Ue=Ne.width,Ze=Ne.height,Ye=Ne.left,Vt=Ne.top;j=Bt({},j,{width:Ue,height:Ze,left:Ye,top:Vt})}le=le||j.width-w.margin*2,se=se||j.height-w.margin*2;var R=v.zoomedHd||v.original,W=Wn(R)?le:R.naturalWidth||le,M=Wn(R)?se:R.naturalHeight||se,X=R.getBoundingClientRect(),ge=X.top,_e=X.left,ce=X.width,ie=X.height,u=Math.min(W,le)/ce,f=Math.min(M,se)/ie,y=Math.min(u,f),A=(-_e+(le-ce)/2+w.margin+j.left)/y,T=(-ge+(se-ie)/2+w.margin+j.top)/y,z="scale("+y+") translate3d("+A+"px, "+T+"px, 0)";v.zoomed.style.transform=z,v.zoomedHd&&(v.zoomedHd.style.transform=z)};return new i(function(re){if(S&&L.indexOf(S)===-1){re(B);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:B}})),re(B)};if(v.zoomed){re(B);return}if(S)v.original=S;else if(L.length>0){var le=L;v.original=le[0]}else{re(B);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:B}})),ee=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,U=!0,v.zoomed=Gd(v.original),document.body.appendChild(q),w.template){var se=ii(w.template)?w.template:document.querySelector(w.template);v.template=document.createElement("div"),v.template.appendChild(se.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",x),v.zoomed.addEventListener("transitionend",j),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(Ie),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,F()};var Ie=setInterval(function(){v.zoomedHd.complete&&(clearInterval(Ie),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Ne=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Ne),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F()})}else F()})},x=function(){return new i(function(C){if(U||!v.original){C(B);return}var S=function F(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(q),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),U=!1,v.zoomed.removeEventListener("transitionend",F),v.original.dispatchEvent(ll("medium-zoom:closed",{detail:{zoom:B}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(B)};U=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(ll("medium-zoom:close",{detail:{zoom:B}})),v.zoomed.addEventListener("transitionend",S)})},P=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target;return v.original?x():g({target:S})},E=function(){return w},k=function(){return L},_=function(){return v.original},L=[],H=[],U=!1,ee=0,w=l,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?w=t:(t||typeof t=="string")&&c(t),w=Bt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},w);var q=Kd(w.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",n),window.addEventListener("resize",x);var B={open:g,close:x,toggle:P,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:_};return B};function Jd(e,t){t===void 0&&(t={});var l=t.insertAt;if(!(!e||typeof document>"u")){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",l==="top"&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var Zd=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Jd(Zd);const eu=Qd,tu=Symbol("mediumZoom");const lu=".theme-default-content > img, .theme-default-content :not(a) > img",iu={},ou=300,nu=Ht({enhance({app:e,router:t}){const l=eu(iu);l.refresh=(i=lu)=>{l.detach(),l.attach(i)},e.provide(tu,l),t.afterEach(()=>{setTimeout(()=>l.refresh(),ou)})}});/** - * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT - */const me={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
    '},status:null,set:e=>{const t=me.isStarted();e=Yi(e,me.settings.minimum,1),me.status=e===1?null:e;const l=me.render(!t),i=l.querySelector(me.settings.barSelector),o=me.settings.speed,n=me.settings.easing;return l.offsetWidth,au(a=>{ti(i,{transform:"translate3d("+qn(e)+"%,0,0)",transition:"all "+o+"ms "+n}),e===1?(ti(l,{transition:"none",opacity:"1"}),l.offsetWidth,setTimeout(function(){ti(l,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){me.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),me},isStarted:()=>typeof me.status=="number",start:()=>{me.status||me.set(0);const e=()=>{setTimeout(()=>{!me.status||(me.trickle(),e())},me.settings.trickleSpeed)};return me.settings.trickle&&e(),me},done:e=>!e&&!me.status?me:me.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=me.status;return t?(typeof e!="number"&&(e=(1-t)*Yi(Math.random()*t,.1,.95)),t=Yi(t+e,0,.994),me.set(t)):me.start()},trickle:()=>me.inc(Math.random()*me.settings.trickleRate),render:e=>{if(me.isRendered())return document.getElementById("nprogress");Kn(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=me.settings.template;const l=t.querySelector(me.settings.barSelector),i=e?"-100":qn(me.status||0),o=document.querySelector(me.settings.parent);return ti(l,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),o!==document.body&&Kn(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Gn(document.documentElement,"nprogress-busy"),Gn(document.querySelector(me.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&ru(e)},isRendered:()=>!!document.getElementById("nprogress")},Yi=(e,t,l)=>el?l:e,qn=e=>(-1+e)*100,au=function(){const e=[];function t(){const l=e.shift();l&&l(t)}return function(l){e.push(l),e.length===1&&t()}}(),ti=function(){const e=["Webkit","O","Moz","ms"],t={};function l(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(r,s){return s.toUpperCase()})}function i(a){const r=document.body.style;if(a in r)return a;let s=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let h;for(;s--;)if(h=e[s]+c,h in r)return h;return a}function o(a){return a=l(a),t[a]||(t[a]=i(a))}function n(a,r,s){r=o(r),a.style[r]=s}return function(a,r){for(const s in r){const c=r[s];c!==void 0&&Object.prototype.hasOwnProperty.call(r,s)&&n(a,s,c)}}}(),Lr=(e,t)=>(typeof e=="string"?e:Do(e)).indexOf(" "+t+" ")>=0,Kn=(e,t)=>{const l=Do(e),i=l+t;Lr(l,t)||(e.className=i.substring(1))},Gn=(e,t)=>{const l=Do(e);if(!Lr(e,t))return;const i=l.replace(" "+t+" "," ");e.className=i.substring(1,i.length-1)},Do=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),ru=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const su=()=>{Je(()=>{const e=Zt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(l=>{t.has(l.path)||me.start()}),e.afterEach(l=>{t.add(l.path),me.done()})})},cu=Ht({setup(){su()}}),hu=JSON.parse(`{"logo":"/images/logo.png","repo":"https://github.com/fankes/YukiHookAPI","docsRepo":"https://github.com/fankes/YukiHookAPI","docsBranch":"master","docsDir":"docs-source/src","editLinkPattern":":repo/edit/:branch/:path","sidebar":{"/en/":[{"text":"Get Started","collapsible":true,"children":["/en/guide/home","/en/guide/knowledge","/en/guide/quick-start","/en/guide/example","/en/guide/move-to-new-api"]},{"text":"Configs","collapsible":true,"children":["/en/config/api-example","/en/config/api-exception","/en/config/xposed-using","/en/config/api-using","/en/config/r8-proguard"]},{"text":"Tools","collapsible":true,"children":["/en/tools/yukihookapi-projectbuilder"]},{"text":"API Document","collapsible":true,"children":["/en/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"Special Features\xA0","collapsible":true,"children":["/en/api/special-features/reflection","/en/api/special-features/logger","/en/api/special-features/xposed-storage","/en/api/special-features/xposed-channel","/en/api/special-features/host-lifecycle","/en/api/special-features/host-inject"]}]},{"text":"About","collapsible":true,"children":["/en/about/changelog","/en/about/future","/en/about/contacts","/en/about/about"]}],"/zh-cn/":[{"text":"\u5165\u95E8","collapsible":true,"children":["/zh-cn/guide/home","/zh-cn/guide/knowledge","/zh-cn/guide/quick-start","/zh-cn/guide/example","/zh-cn/guide/move-to-new-api"]},{"text":"\u914D\u7F6E","collapsible":true,"children":["/zh-cn/config/api-example","/zh-cn/config/api-exception","/zh-cn/config/xposed-using","/zh-cn/config/api-using","/zh-cn/config/r8-proguard"]},{"text":"\u5DE5\u5177","collapsible":true,"children":["/zh-cn/tools/yukihookapi-projectbuilder"]},{"text":"API \u6587\u6863","collapsible":true,"children":["/zh-cn/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"\u7279\u8272\u529F\u80FD\xA0","collapsible":true,"children":["/zh-cn/api/special-features/reflection","/zh-cn/api/special-features/logger","/zh-cn/api/special-features/xposed-storage","/zh-cn/api/special-features/xposed-channel","/zh-cn/api/special-features/host-lifecycle","/zh-cn/api/special-features/host-inject"]}]},{"text":"\u5173\u4E8E","collapsible":true,"children":["/zh-cn/about/changelog","/zh-cn/about/future","/zh-cn/about/contacts","/zh-cn/about/about"]}]},"sidebarDepth":2,"locales":{"/en/":{"navbar":[{"text":"Navigation","children":[{"text":"Get Started","children":[{"text":"Introduce","link":"/en/guide/home"},{"text":"Basic Knowledge","link":"/en/guide/knowledge"},{"text":"Quick Start","link":"/en/guide/quick-start"},{"text":"Usage Example","link":"/en/guide/example"},{"text":"Migrate from Xposed API","link":"/en/guide/move-to-new-api"}]},{"text":"Configs","children":[{"text":"API Basic Configs","link":"/en/config/api-example"},{"text":"API Exception Handling","link":"/en/config/api-exception"},{"text":"Use as Xposed Module Configs","link":"/en/config/xposed-using"},{"text":"Use as Hook API Configs","link":"/en/config/api-using"},{"text":"R8 & Proguard Obfuscate","link":"/en/config/r8-proguard"}]},{"text":"Tools","children":[{"text":"YukiHookAPI Project Builder","link":"/en/tools/yukihookapi-projectbuilder"}]},{"text":"API Document","children":[{"text":"Document Introduction","link":"/en/api/home"},{"text":"Public API","link":"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","activeMatch":"/en/api/public/"},{"text":"Special Features","link":"/en/api/special-features/reflection","activeMatch":"/en/api/special-features/"}]},{"text":"About","children":[{"text":"Changelog","link":"/en/about/changelog"},{"text":"Looking for Future","link":"/en/about/future"},{"text":"Contact Us","link":"/en/about/contacts"},{"text":"About this Document","link":"/en/about/about"}]}]},{"text":"Contact Us","link":"/en/about/contacts"}],"selectLanguageText":"English (US)","selectLanguageName":"English","editLinkText":"Edit this page on Github","tip":"Tips","warning":"Notice","danger":"Pay Attention"},"/zh-cn/":{"navbar":[{"text":"\u5BFC\u822A","children":[{"text":"\u5165\u95E8","children":[{"text":"\u4ECB\u7ECD","link":"/zh-cn/guide/home"},{"text":"\u57FA\u7840\u77E5\u8BC6","link":"/zh-cn/guide/knowledge"},{"text":"\u5FEB\u901F\u5F00\u59CB","link":"/zh-cn/guide/quick-start"},{"text":"\u7528\u6CD5\u793A\u4F8B","link":"/zh-cn/guide/example"},{"text":"\u4ECE Xposed API \u8FC1\u79FB","link":"/zh-cn/guide/move-to-new-api"}]},{"text":"\u914D\u7F6E","children":[{"text":"API \u57FA\u672C\u914D\u7F6E","link":"/zh-cn/config/api-example"},{"text":"API \u5F02\u5E38\u5904\u7406","link":"/zh-cn/config/api-exception"},{"text":"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E","link":"/zh-cn/config/xposed-using"},{"text":"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E","link":"/zh-cn/config/api-using"},{"text":"R8 \u4E0E Proguard \u6DF7\u6DC6","link":"/zh-cn/config/r8-proguard"}]},{"text":"\u5DE5\u5177","children":[{"text":"YukiHookAPI \u6784\u5EFA\u5DE5\u5177","link":"/zh-cn/tools/yukihookapi-projectbuilder"}]},{"text":"API \u6587\u6863","children":[{"text":"\u6587\u6863\u4ECB\u7ECD","link":"/zh-cn/api/home"},{"text":"Public API","link":"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","activeMatch":"/zh-cn/api/public/"},{"text":"\u7279\u8272\u529F\u80FD","link":"/zh-cn/api/special-features/reflection","activeMatch":"/zh-cn/api/special-features/"}]},{"text":"\u5173\u4E8E","children":[{"text":"\u66F4\u65B0\u65E5\u5FD7","link":"/zh-cn/about/changelog"},{"text":"\u5C55\u671B\u672A\u6765","link":"/zh-cn/about/future"},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"},{"text":"\u5173\u4E8E\u6B64\u6587\u6863","link":"/zh-cn/about/about"}]}]},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"}],"selectLanguageText":"\u7B80\u4F53\u4E2D\u6587 (CN)","selectLanguageName":"\u7B80\u4F53\u4E2D\u6587","editLinkText":"\u5728 Github \u4E0A\u7F16\u8F91\u6B64\u9875","notFound":["\u8FD9\u91CC\u4EC0\u4E48\u90FD\u6CA1\u6709","\u6211\u4EEC\u600E\u4E48\u5230\u8FD9\u6765\u4E86\uFF1F","\u8FD9\u662F\u4E00\u4E2A 404 \u9875\u9762","\u770B\u8D77\u6765\u6211\u4EEC\u8FDB\u5165\u4E86\u9519\u8BEF\u7684\u94FE\u63A5"],"backToHome":"\u56DE\u5230\u9996\u9875","contributorsText":"\u8D21\u732E\u8005","lastUpdatedText":"\u4E0A\u6B21\u66F4\u65B0","tip":"\u5C0F\u63D0\u793A","warning":"\u6CE8\u610F","danger":"\u7279\u522B\u6CE8\u610F","openInNewWindow":"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00","toggleColorMode":"\u5207\u6362\u989C\u8272\u6A21\u5F0F"},"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Tr=ye(hu),du=()=>Tr;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Tr.value=e});const Ar=Symbol(""),uu=()=>{const e=Me(Ar);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},pu=(e,t)=>{var l;return{...e,...(l=e.locales)==null?void 0:l[t]}},mu=Ht({enhance({app:e}){const t=du(),l=e._context.provides[No],i=Y(()=>pu(t.value,l.value));e.provide(Ar,i),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return i.value}}})}}),fu=ue({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,l)=>(N(),Z("span",{class:Ke(["badge",e.type]),style:Sl({verticalAlign:e.vertical})},[Re(t.$slots,"default",{},()=>[Mt(ze(e.text),1)])],6))}}),Te=(e,t)=>{const l=e.__vccOpts||e;for(const[i,o]of t)l[i]=o;return l},gu=Te(fu,[["__file","Badge.vue"]]),ku=ue({name:"CodeGroup",setup(e,{slots:t}){const l=ye(-1),i=ye([]),o=(r=l.value)=>{r{r>0?l.value=r-1:l.value=i.value.length-1,i.value[l.value].focus()},a=(r,s)=>{r.key===" "||r.key==="Enter"?(r.preventDefault(),l.value=s):r.key==="ArrowRight"?(r.preventDefault(),o(s)):r.key==="ArrowLeft"&&(r.preventDefault(),n(s))};return()=>{var s;const r=(((s=t.default)==null?void 0:s.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return r.length===0?null:(l.value<0||l.value>r.length-1?(l.value=r.findIndex(c=>c.props.active===""||c.props.active===!0),l.value===-1&&(l.value=0)):r.forEach((c,h)=>{c.props.active=h===l.value}),he("div",{class:"code-group"},[he("div",{class:"code-group__nav"},he("ul",{class:"code-group__ul"},r.map((c,h)=>{const p=h===l.value;return he("li",{class:"code-group__li"},he("button",{ref:m=>{m&&(i.value[h]=m)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":p},ariaPressed:p,ariaExpanded:p,onClick:()=>l.value=h,onKeydown:m=>a(m,h)},c.props.title))}))),r]))}}}),vu=["aria-selected"],bu=ue({name:"CodeGroupItem"}),_u=ue({...bu,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,l)=>(N(),Z("div",{class:Ke(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Re(t.$slots,"default")],10,vu))}}),yu=Te(_u,[["__file","CodeGroupItem.vue"]]);var Qn;const Ir=typeof window<"u",xu=e=>typeof e=="function",Eu=e=>typeof e=="string",Bi=()=>{};Ir&&((Qn=window==null?void 0:window.navigator)==null?void 0:Qn.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function gi(e){return typeof e=="function"?e():O(e)}function Cu(e,t){function l(...i){e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})}return l}const wr=e=>e();function Ru(e=wr){const t=ye(!0);function l(){t.value=!1}function i(){t.value=!0}return{isActive:t,pause:l,resume:i,eventFilter:(...n)=>{t.value&&e(...n)}}}function Pu(e){return e}function Or(e){return fs()?(gs(e),!0):!1}function Lu(e,t=!0){wo()?Xa(e):t?e():jl(e)}function Tu(e,t=!0){wo()?Je(e):t?e():jl(e)}function Au(e=!1,t={}){const{truthyValue:l=!0,falsyValue:i=!1}=t,o=De(e),n=ye(e);function a(r){if(arguments.length)return n.value=r,n.value;{const s=gi(l);return n.value=n.value===s?gi(i):s,n.value}}return o?a:[n,a]}var Jn=Object.getOwnPropertySymbols,Iu=Object.prototype.hasOwnProperty,wu=Object.prototype.propertyIsEnumerable,Ou=(e,t)=>{var l={};for(var i in e)Iu.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&Jn)for(var i of Jn(e))t.indexOf(i)<0&&wu.call(e,i)&&(l[i]=e[i]);return l};function Fu(e,t,l={}){const i=l,{eventFilter:o=wr}=i,n=Ou(i,["eventFilter"]);return dt(e,Cu(o,t),n)}var zu=Object.defineProperty,Du=Object.defineProperties,Mu=Object.getOwnPropertyDescriptors,ki=Object.getOwnPropertySymbols,Fr=Object.prototype.hasOwnProperty,zr=Object.prototype.propertyIsEnumerable,Zn=(e,t,l)=>t in e?zu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,Hu=(e,t)=>{for(var l in t||(t={}))Fr.call(t,l)&&Zn(e,l,t[l]);if(ki)for(var l of ki(t))zr.call(t,l)&&Zn(e,l,t[l]);return e},Su=(e,t)=>Du(e,Mu(t)),Vu=(e,t)=>{var l={};for(var i in e)Fr.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&ki)for(var i of ki(e))t.indexOf(i)<0&&zr.call(e,i)&&(l[i]=e[i]);return l};function Nu(e,t,l={}){const i=l,{eventFilter:o}=i,n=Vu(i,["eventFilter"]),{eventFilter:a,pause:r,resume:s,isActive:c}=Ru(o);return{stop:Fu(e,t,Su(Hu({},n),{eventFilter:a})),pause:r,resume:s,isActive:c}}function ju(e){var t;const l=gi(e);return(t=l==null?void 0:l.$el)!=null?t:l}const vi=Ir?window:void 0;function $u(...e){let t,l,i,o;if(Eu(e[0])?([l,i,o]=e,t=vi):[t,l,i,o]=e,!t)return Bi;let n=Bi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Bi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Yu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Tu(i,t),l}function Bu(e,t={}){const{window:l=vi}=t,i=Yu(()=>l&&"matchMedia"in l&&typeof l.matchMedia=="function");let o;const n=ye(!1),a=()=>{!i.value||(o||(o=l.matchMedia(e)),n.value=o.matches)};return Lu(()=>{a(),o&&("addEventListener"in o?o.addEventListener("change",a):o.addListener(a),Or(()=>{"removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a)}))}),n}const uo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},po="__vueuse_ssr_handlers__";uo[po]=uo[po]||{};const Uu=uo[po];function Wu(e,t){return Uu[e]||t}function Xu(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var qu=Object.defineProperty,ea=Object.getOwnPropertySymbols,Ku=Object.prototype.hasOwnProperty,Gu=Object.prototype.propertyIsEnumerable,ta=(e,t,l)=>t in e?qu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,la=(e,t)=>{for(var l in t||(t={}))Ku.call(t,l)&&ta(e,l,t[l]);if(ea)for(var l of ea(t))Gu.call(t,l)&&ta(e,l,t[l]);return e};const Qu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Ju(e,t,l,i={}){var o;const{flush:n="pre",deep:a=!0,listenToStorageChanges:r=!0,writeDefaults:s=!0,mergeDefaults:c=!1,shallow:h,window:p=vi,eventFilter:m,onError:g=w=>{console.error(w)}}=i,x=(h?wa:ye)(t);if(!l)try{l=Wu("getDefaultStorage",()=>{var w;return(w=vi)==null?void 0:w.localStorage})()}catch(w){g(w)}if(!l)return x;const P=gi(t),E=Xu(P),k=(o=i.serializer)!=null?o:Qu[E],{pause:_,resume:L}=Nu(x,()=>H(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function H(w){try{w==null?l.removeItem(e):l.setItem(e,k.write(w))}catch(v){g(v)}}function U(w){if(!(w&&w.key!==e)){_();try{const v=w?w.newValue:l.getItem(e);if(v==null)return s&&P!==null&&l.setItem(e,k.write(P)),P;if(!w&&c){const q=k.read(v);return xu(c)?c(q,P):E==="object"&&!Array.isArray(q)?la(la({},P),q):q}else return typeof v!="string"?v:k.read(v)}catch(v){g(v)}finally{L()}}}function ee(w){w&&w.key!==e||(x.value=U(w))}}function Zu(e){return Bu("(prefers-color-scheme: dark)",e)}var ia;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ia||(ia={}));var ep=Object.defineProperty,oa=Object.getOwnPropertySymbols,tp=Object.prototype.hasOwnProperty,lp=Object.prototype.propertyIsEnumerable,na=(e,t,l)=>t in e?ep(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,ip=(e,t)=>{for(var l in t||(t={}))tp.call(t,l)&&na(e,l,t[l]);if(oa)for(var l of oa(t))lp.call(t,l)&&na(e,l,t[l]);return e};const op={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};ip({linear:Pu},op);const $e=()=>uu(),Dr=Symbol(""),Mo=()=>{const e=Me(Dr);if(!e)throw new Error("useDarkMode() is called without provider.");return e},np=()=>{const e=$e(),t=Zu(),l=Ju("vuepress-color-scheme",e.value.colorMode),i=Y({get(){return e.value.colorModeSwitch?l.value==="auto"?t.value:l.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?l.value="auto":l.value=o?"dark":"light"}});Gt(Dr,i),ap(i)},ap=e=>{const t=(l=e.value)=>{const i=window==null?void 0:window.document.querySelector("html");i==null||i.classList.toggle("dark",l)};Je(()=>{dt(e,t,{immediate:!0})}),Li(()=>t())},Mr=(...e)=>{const l=Zt().resolve(...e),i=l.matched[l.matched.length-1];if(!(i!=null&&i.redirect))return l;const{redirect:o}=i,n=ae(o)?o(l):o,a=be(n)?{path:n}:n;return Mr({hash:l.hash,query:l.query,params:l.params,...a})},Ho=e=>{const t=Mr(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Ui=null,yl=null;const rp={wait:()=>Ui,pending:()=>{Ui=new Promise(e=>yl=e)},resolve:()=>{yl==null||yl(),Ui=null,yl=null}},Hr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=Me(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=Y(()=>cp(t.value,e.value));Gt(Sr,l)},cp=(e,t)=>{var o,n,a,r;const l=(n=(o=e.sidebar)!=null?o:t.sidebar)!=null?n:"auto",i=(r=(a=e.sidebarDepth)!=null?a:t.sidebarDepth)!=null?r:2;return e.home||l===!1?[]:l==="auto"?dp(i):te(l)?Vr(l,i):Oo(l)?up(l,i):[]},hp=(e,t)=>({text:e.title,link:e.link,children:Vo(e.children,t)}),Vo=(e,t)=>t>0?e.map(l=>hp(l,t-1)):[],dp=e=>{const t=Ot();return[{text:t.value.title,children:Vo(t.value.headers,e)}]},Vr=(e,t)=>{const l=St(),i=Ot(),o=n=>{var r;let a;if(be(n)?a=Ho(n):a=n,a.children)return{...a,children:a.children.map(s=>o(s))};if(a.link===l.path){const s=((r=i.value.headers[0])==null?void 0:r.level)===1?i.value.headers[0].children:i.value.headers;return{...a,children:Vo(s,t)}}return a};return e.map(n=>o(n))},up=(e,t)=>{var n;const l=St(),i=pr(e,l.path),o=(n=e[i])!=null?n:[];return Vr(o,t)},pp={},mp={class:"theme-default-content"};function fp(e,t){const l=_t("Content");return N(),Z("div",mp,[oe(l)])}const gp=Te(pp,[["render",fp],["__file","HomeContent.vue"]]),kp={key:0,class:"features"},vp=ue({__name:"HomeFeatures",setup(e){const t=vt(),l=Y(()=>te(t.value.features)?t.value.features:[]);return(i,o)=>O(l).length?(N(),Z("div",kp,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),Z("div",{key:n.title,class:"feature"},[fe("h2",null,ze(n.title),1),fe("p",null,ze(n.details),1)]))),128))])):Ae("v-if",!0)}}),bp=Te(vp,[["__file","HomeFeatures.vue"]]),_p=["innerHTML"],yp=["textContent"],xp=ue({__name:"HomeFooter",setup(e){const t=vt(),l=Y(()=>t.value.footer),i=Y(()=>t.value.footerHtml);return(o,n)=>O(l)?(N(),Z(Pe,{key:0},[Ae(" eslint-disable-next-line vue/no-v-html "),O(i)?(N(),Z("div",{key:0,class:"footer",innerHTML:O(l)},null,8,_p)):(N(),Z("div",{key:1,class:"footer",textContent:ze(O(l))},null,8,yp))],64)):Ae("v-if",!0)}}),Ep=Te(xp,[["__file","HomeFooter.vue"]]),Cp=["href","rel","target","aria-label"],Rp=ue({inheritAttrs:!1}),Pp=ue({...Rp,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,l=St(),i=Gr(),{item:o}=Ei(t),n=Y(()=>Ul(o.value.link)),a=Y(()=>wh(o.value.link)||Oh(o.value.link)),r=Y(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=Y(()=>r.value==="_blank"),c=Y(()=>!n.value&&!a.value&&!s.value),h=Y(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=Y(()=>o.value.ariaLabel||o.value.text),m=Y(()=>{const P=Object.keys(i.value.locales);return P.length?!P.some(E=>E===o.value.link):o.value.link!=="/"}),g=Y(()=>m.value?l.path.startsWith(o.value.link):!1),x=Y(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(l.path):g.value:!1);return(P,E)=>{const k=_t("RouterLink"),_=_t("AutoLinkExternalIcon");return O(c)?(N(),we(k,no({key:0,class:{"router-link-active":O(x)},to:O(o).link,"aria-label":O(p)},P.$attrs),{default:He(()=>[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),Re(P.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),Z("a",no({key:1,class:"external-link",href:O(o).link,rel:O(h),target:O(r),"aria-label":O(p)},P.$attrs),[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),O(s)?(N(),we(_,{key:0})):Ae("v-if",!0),Re(P.$slots,"after")],16,Cp))}}}),kt=Te(Pp,[["__file","AutoLink.vue"]]),Lp={class:"hero"},Tp={key:0,id:"main-title"},Ap={key:1,class:"description"},Ip={key:2,class:"actions"},wp=ue({__name:"HomeHero",setup(e){const t=vt(),l=jo(),i=Mo(),o=Y(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=Y(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=Y(()=>t.value.heroAlt||n.value||"hero"),r=Y(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=Y(()=>te(t.value.actions)?t.value.actions.map(({text:h,link:p,type:m="primary"})=>({text:h,link:p,type:m})):[]),c=()=>{if(!o.value)return null;const h=he("img",{src:Yo(o.value),alt:a.value});return t.value.heroImageDark===void 0?h:he($o,()=>h)};return(h,p)=>(N(),Z("header",Lp,[oe(c),O(n)?(N(),Z("h1",Tp,ze(O(n)),1)):Ae("v-if",!0),O(r)?(N(),Z("p",Ap,ze(O(r)),1)):Ae("v-if",!0),O(s).length?(N(),Z("p",Ip,[(N(!0),Z(Pe,null,zt(O(s),m=>(N(),we(kt,{key:m.text,class:Ke(["action-button",[m.type]]),item:m},null,8,["class","item"]))),128))])):Ae("v-if",!0)]))}}),Op=Te(wp,[["__file","HomeHero.vue"]]),Fp={class:"home"},zp=ue({__name:"Home",setup(e){return(t,l)=>(N(),Z("main",Fp,[oe(Op),oe(bp),oe(gp),oe(Ep)]))}}),Dp=Te(zp,[["__file","Home.vue"]]),Mp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Mo(),n=Y(()=>i.value.home||t.value),a=Y(()=>l.value.title),r=Y(()=>o.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!r.value)return null;const c=he("img",{class:"logo",src:Yo(r.value),alt:a.value});return i.value.logoDark===void 0?c:he($o,()=>c)};return(c,h)=>{const p=_t("RouterLink");return N(),we(p,{to:O(n)},{default:He(()=>[oe(s),O(a)?(N(),Z("span",{key:0,class:Ke(["site-name",{"can-hide":O(r)}])},ze(O(a)),3)):Ae("v-if",!0)]),_:1},8,["to"])}}}),Hp=Te(Mp,[["__file","NavbarBrand.vue"]]),Sp=ue({__name:"DropdownTransition",setup(e){const t=i=>{i.style.height=i.scrollHeight+"px"},l=i=>{i.style.height=""};return(i,o)=>(N(),we(Bl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:He(()=>[Re(i.$slots,"default")]),_:3}))}}),Nr=Te(Sp,[["__file","DropdownTransition.vue"]]),Vp=["aria-label"],Np={class:"title"},jp=fe("span",{class:"arrow down"},null,-1),$p=["aria-label"],Yp={class:"title"},Bp={class:"navbar-dropdown"},Up={class:"navbar-dropdown-subtitle"},Wp={key:1},Xp={class:"navbar-dropdown-subitem-wrapper"},qp=ue({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:l}=Ei(t),i=Y(()=>l.value.ariaLabel||l.value.text),o=ye(!1),n=St();dt(()=>n.path,()=>{o.value=!1});const a=s=>{s.detail===0?o.value=!o.value:o.value=!1},r=(s,c)=>c[c.length-1]===s;return(s,c)=>(N(),Z("div",{class:Ke(["navbar-dropdown-wrapper",{open:o.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":O(i),onClick:a},[fe("span",Np,ze(O(l).text),1),jp],8,Vp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":O(i),onClick:c[0]||(c[0]=h=>o.value=!o.value)},[fe("span",Yp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:He(()=>[ci(fe("ul",Bp,[(N(!0),Z(Pe,null,zt(O(l).children,h=>(N(),Z("li",{key:h.text,class:"navbar-dropdown-item"},[h.children?(N(),Z(Pe,{key:0},[fe("h4",Up,[h.link?(N(),we(kt,{key:0,item:h,onFocusout:p=>r(h,O(l).children)&&h.children.length===0&&(o.value=!1)},null,8,["item","onFocusout"])):(N(),Z("span",Wp,ze(h.text),1))]),fe("ul",Xp,[(N(!0),Z(Pe,null,zt(h.children,p=>(N(),Z("li",{key:p.link,class:"navbar-dropdown-subitem"},[oe(kt,{item:p,onFocusout:m=>r(p,h.children)&&r(h,O(l).children)&&(o.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(N(),we(kt,{key:1,item:h,onFocusout:p=>r(h,O(l).children)&&(o.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[mi,o.value]])]),_:1})],2))}}),Kp=Te(qp,[["__file","NavbarDropdown.vue"]]),aa=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Gp=(e,t)=>{if(t.hash===e)return!0;const l=aa(t.path),i=aa(e);return l===i},jr=(e,t)=>e.link&&Gp(e.link,t)?!0:e.children?e.children.some(l=>jr(l,t)):!1,$r=e=>!Ul(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Qp={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Jp=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const l=$r(e);return l!==null?Qp[l]:null},Zp=({docsRepo:e,docsBranch:t,docsDir:l,filePathRelative:i,editLinkPattern:o})=>{if(!i)return null;const n=Jp({docsRepo:e,editLinkPattern:o});return n?n.replace(/:repo/,Ul(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,ur(`${dr(l)}/${i}`)):null},em={key:0,class:"navbar-items"},tm=ue({__name:"NavbarItems",setup(e){const t=()=>{const c=Zt(),h=Wl(),p=jo(),m=$e();return Y(()=>{var _,L,H;const g=Object.keys(p.value.locales);if(g.length<2)return[];const x=c.currentRoute.value.path,P=c.currentRoute.value.fullPath,E=c.currentRoute.value.hash;return[{text:(_=m.value.selectLanguageText)!=null?_:"unknown language",ariaLabel:(H=(L=m.value.selectLanguageAriaLabel)!=null?L:m.value.selectLanguageText)!=null?H:"unknown language",children:g.map(U=>{var G,C,S,F,re,j;const ee=(C=(G=p.value.locales)==null?void 0:G[U])!=null?C:{},w=(F=(S=m.value.locales)==null?void 0:S[U])!=null?F:{},v=`${ee.lang}`,q=(re=w.selectLanguageName)!=null?re:v;let B;if(v===p.value.lang)B=P;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?B=`${le}${E}`:B=(j=w.home)!=null?j:U}return{text:q,link:B}})}]})},l=()=>{const c=$e(),h=Y(()=>c.value.repo),p=Y(()=>h.value?$r(h.value):null),m=Y(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=Y(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return Y(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Ho(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return Y(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=Y(()=>[...n.value,...a.value,...r.value]);return(c,h)=>O(s).length?(N(),Z("nav",em,[(N(!0),Z(Pe,null,zt(O(s),p=>(N(),Z("div",{key:p.text,class:"navbar-item"},[p.children?(N(),we(Kp,{key:0,item:p},null,8,["item"])):(N(),we(kt,{key:1,item:p},null,8,["item"]))]))),128))])):Ae("v-if",!0)}}),Yr=Te(tm,[["__file","NavbarItems.vue"]]),lm=["title"],im={class:"icon",focusable:"false",viewBox:"0 0 32 32"},om=jc('',9),nm=[om],am={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rm=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),sm=[rm],cm=ue({__name:"ToggleColorModeButton",setup(e){const t=$e(),l=Mo(),i=()=>{l.value=!l.value};return(o,n)=>(N(),Z("button",{class:"toggle-color-mode-button",title:O(t).toggleColorMode,onClick:i},[ci((N(),Z("svg",im,nm,512)),[[mi,!O(l)]]),ci((N(),Z("svg",am,sm,512)),[[mi,O(l)]])],8,lm))}}),hm=Te(cm,[["__file","ToggleColorModeButton.vue"]]),dm=["title"],um=fe("div",{class:"icon","aria-hidden":"true"},[fe("span"),fe("span"),fe("span")],-1),pm=[um],mm=ue({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=$e();return(l,i)=>(N(),Z("div",{class:"toggle-sidebar-button",title:O(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:i[0]||(i[0]=o=>l.$emit("toggle"))},pm,8,dm))}}),fm=Te(mm,[["__file","ToggleSidebarButton.vue"]]),gm=ue({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=$e(),l=ye(null),i=ye(null),o=ye(0),n=Y(()=>o.value?{maxWidth:o.value+"px"}:{});Je(()=>{const s=a(l.value,"paddingLeft")+a(l.value,"paddingRight"),c=()=>{var h;window.innerWidth<=719?o.value=0:o.value=l.value.offsetWidth-s-(((h=i.value)==null?void 0:h.offsetWidth)||0)};c(),window.addEventListener("resize",c,!1),window.addEventListener("orientationchange",c,!1)});function a(r,s){var p,m,g;const c=(g=(m=(p=r==null?void 0:r.ownerDocument)==null?void 0:p.defaultView)==null?void 0:m.getComputedStyle(r,null))==null?void 0:g[s],h=Number.parseInt(c,10);return Number.isNaN(h)?0:h}return(r,s)=>{const c=_t("NavbarSearch");return N(),Z("header",{ref_key:"navbar",ref:l,class:"navbar"},[oe(fm,{onToggle:s[0]||(s[0]=h=>r.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:i},[oe(Hp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Yr,{class:"can-hide"}),Re(r.$slots,"after"),O(t).colorModeSwitch?(N(),we(hm,{key:0})):Ae("v-if",!0),oe(c)],4)],512)}}}),km=Te(gm,[["__file","Navbar.vue"]]),vm={class:"page-meta"},bm={key:0,class:"meta-item edit-link"},_m={key:1,class:"meta-item last-updated"},ym={class:"meta-item-label"},xm={class:"meta-item-info"},Em={key:2,class:"meta-item contributors"},Cm={class:"meta-item-label"},Rm={class:"meta-item-info"},Pm=["title"],Lm=Mt(", "),Tm=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var _,L,H;if(!((L=(_=h.value.editLink)!=null?_:s.value.editLink)!=null?L:!0))return null;const{repo:m,docsRepo:g=m,docsBranch:x="main",docsDir:P="",editLinkText:E}=s.value;if(!g)return null;const k=Zp({docsRepo:g,docsBranch:x,docsDir:P,filePathRelative:c.value.filePathRelative,editLinkPattern:(H=h.value.editLinkPattern)!=null?H:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var g,x,P,E;return!((x=(g=h.value.lastUpdated)!=null?g:s.value.lastUpdated)!=null?x:!0)||!((P=c.value.git)!=null&&P.updatedTime)?null:new Date((E=c.value.git)==null?void 0:E.updatedTime).toLocaleString()})},i=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var m,g,x,P;return((g=(m=h.value.contributors)!=null?m:s.value.contributors)!=null?g:!0)&&(P=(x=c.value.git)==null?void 0:x.contributors)!=null?P:null})},o=$e(),n=t(),a=l(),r=i();return(s,c)=>{const h=_t("ClientOnly");return N(),Z("footer",vm,[O(n)?(N(),Z("div",bm,[oe(kt,{class:"meta-item-label",item:O(n)},null,8,["item"])])):Ae("v-if",!0),O(a)?(N(),Z("div",_m,[fe("span",ym,ze(O(o).lastUpdatedText)+": ",1),oe(h,null,{default:He(()=>[fe("span",xm,ze(O(a)),1)]),_:1})])):Ae("v-if",!0),O(r)&&O(r).length?(N(),Z("div",Em,[fe("span",Cm,ze(O(o).contributorsText)+": ",1),fe("span",Rm,[(N(!0),Z(Pe,null,zt(O(r),(p,m)=>(N(),Z(Pe,{key:m},[fe("span",{class:"contributor",title:`email: ${p.email}`},ze(p.name),9,Pm),m!==O(r).length-1?(N(),Z(Pe,{key:0},[Lm],64)):Ae("v-if",!0)],64))),128))])])):Ae("v-if",!0)])}}}),Am=Te(Tm,[["__file","PageMeta.vue"]]),Im={key:0,class:"page-nav"},wm={class:"inner"},Om={key:0,class:"prev"},Fm={key:1,class:"next"},zm=ue({__name:"PageNav",setup(e){const t=s=>s===!1?null:be(s)?Ho(s):Oo(s)?s:!1,l=(s,c,h)=>{const p=s.findIndex(m=>m.link===c);if(p!==-1){const m=s[p+h];return m!=null&&m.link?m:null}for(const m of s)if(m.children){const g=l(m.children,c,h);if(g)return g}return null},i=vt(),o=So(),n=St(),a=Y(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=Y(()=>{const s=t(i.value.next);return s!==!1?s:l(o.value,n.path,1)});return(s,c)=>O(a)||O(r)?(N(),Z("nav",Im,[fe("p",wm,[O(a)?(N(),Z("span",Om,[oe(kt,{item:O(a)},null,8,["item"])])):Ae("v-if",!0),O(r)?(N(),Z("span",Fm,[oe(kt,{item:O(r)},null,8,["item"])])):Ae("v-if",!0)])])):Ae("v-if",!0)}}),Dm=Te(zm,[["__file","PageNav.vue"]]),Mm={class:"page"},Hm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),Z("main",Mm,[Re(t.$slots,"top"),fe("div",Hm,[Re(t.$slots,"content-top"),oe(i),Re(t.$slots,"content-bottom")]),oe(Am),oe(Dm),Re(t.$slots,"bottom")])}}}),Vm=Te(Sm,[["__file","Page.vue"]]),Nm=["onKeydown"],jm={class:"sidebar-item-children"},$m=ue({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:l,depth:i}=Ei(t),o=St(),n=Zt(),a=Y(()=>jr(l.value,o)),r=Y(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=Y(()=>l.value.collapsible?a.value:!0),[c,h]=Au(s.value),p=g=>{l.value.collapsible&&(g.preventDefault(),h())},m=n.afterEach(g=>{jl(()=>{c.value=s.value})});return Yl(()=>{m()}),(g,x)=>{var E;const P=_t("SidebarItem",!0);return N(),Z("li",null,[O(l).link?(N(),we(kt,{key:0,class:Ke(O(r)),item:O(l)},null,8,["class","item"])):(N(),Z("p",{key:1,tabindex:"0",class:Ke(O(r)),onClick:p,onKeydown:Eh(p,["enter"])},[Mt(ze(O(l).text)+" ",1),O(l).collapsible?(N(),Z("span",{key:0,class:Ke(["arrow",O(c)?"down":"right"])},null,2)):Ae("v-if",!0)],42,Nm)),(E=O(l).children)!=null&&E.length?(N(),we(Nr,{key:2},{default:He(()=>[ci(fe("ul",jm,[(N(!0),Z(Pe,null,zt(O(l).children,k=>(N(),we(P,{key:`${O(i)}${k.text}${k.link}`,item:k,depth:O(i)+1},null,8,["item","depth"]))),128))],512),[[mi,O(c)]])]),_:1})):Ae("v-if",!0)])}}}),Ym=Te($m,[["__file","SidebarItem.vue"]]),Bm={key:0,class:"sidebar-items"},Um=ue({__name:"SidebarItems",setup(e){const t=St(),l=So();return Je(()=>{dt(()=>t.hash,i=>{const o=document.querySelector(".sidebar");if(!o)return;const n=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${i}"]`);if(!n)return;const{top:a,height:r}=o.getBoundingClientRect(),{top:s,height:c}=n.getBoundingClientRect();sa+r&&n.scrollIntoView(!1)})}),(i,o)=>O(l).length?(N(),Z("ul",Bm,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),we(Ym,{key:`${n.text}${n.link}`,item:n},null,8,["item"]))),128))])):Ae("v-if",!0)}}),Wm=Te(Um,[["__file","SidebarItems.vue"]]),Xm={class:"sidebar"},qm=ue({__name:"Sidebar",setup(e){return(t,l)=>(N(),Z("aside",Xm,[oe(Yr),Re(t.$slots,"top"),oe(Wm),Re(t.$slots,"bottom")]))}}),Km=Te(qm,[["__file","Sidebar.vue"]]),Gm=ue({__name:"Layout",setup(e){const t=Ot(),l=vt(),i=$e(),o=Y(()=>l.value.navbar!==!1&&i.value.navbar!==!1),n=So(),a=ye(!1),r=E=>{a.value=typeof E=="boolean"?E:!a.value},s={x:0,y:0},c=E=>{s.x=E.changedTouches[0].clientX,s.y=E.changedTouches[0].clientY},h=E=>{const k=E.changedTouches[0].clientX-s.x,_=E.changedTouches[0].clientY-s.y;Math.abs(k)>Math.abs(_)&&Math.abs(k)>40&&(k>0&&s.x<=80?r(!0):r(!1))},p=Y(()=>[{"no-navbar":!o.value,"no-sidebar":!n.value.length,"sidebar-open":a.value},l.value.pageClass]);let m;Je(()=>{m=Zt().afterEach(()=>{r(!1)})}),Li(()=>{m()});const g=Hr(),x=g.resolve,P=g.pending;return(E,k)=>(N(),Z("div",{class:Ke(["theme-container",O(p)]),onTouchstart:c,onTouchend:h},[Re(E.$slots,"navbar",{},()=>[O(o)?(N(),we(km,{key:0,onToggleSidebar:r},{before:He(()=>[Re(E.$slots,"navbar-before")]),after:He(()=>[Re(E.$slots,"navbar-after")]),_:3})):Ae("v-if",!0)]),fe("div",{class:"sidebar-mask",onClick:k[0]||(k[0]=_=>r(!1))}),Re(E.$slots,"sidebar",{},()=>[oe(Km,null,{top:He(()=>[Re(E.$slots,"sidebar-top")]),bottom:He(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Bl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(P)},{default:He(()=>[(N(),we(Vm,{key:O(t).path},{top:He(()=>[Re(E.$slots,"page-top")]),"content-top":He(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":He(()=>[Re(E.$slots,"page-content-bottom")]),bottom:He(()=>[Re(E.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Qm=Te(Gm,[["__file","Layout.vue"]]),Jm={class:"theme-container"},Zm={class:"page"},ef={class:"theme-default-content"},tf=fe("h1",null,"404",-1),lf=ue({__name:"NotFound",setup(e){var r,s,c;const t=Wl(),l=$e(),i=(r=l.value.notFound)!=null?r:["Not Found"],o=()=>i[Math.floor(Math.random()*i.length)],n=(s=l.value.home)!=null?s:t.value,a=(c=l.value.backToHome)!=null?c:"Back to home";return(h,p)=>{const m=_t("RouterLink");return N(),Z("div",Jm,[fe("main",Zm,[fe("div",ef,[tf,fe("blockquote",null,ze(o()),1),oe(m,{to:O(n)},{default:He(()=>[Mt(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Te(lf,[["__file","NotFound.vue"]]);const nf=Ht({enhance({app:e,router:t}){e.component("Badge",gu),e.component("CodeGroup",ku),e.component("CodeGroupItem",yu),e.component("AutoLinkExternalIcon",()=>{const i=e.component("ExternalLinkIcon");return i?he(i):null}),e.component("NavbarSearch",()=>{const i=e.component("Docsearch")||e.component("SearchBox");return i?he(i):null});const l=t.options.scrollBehavior;t.options.scrollBehavior=async(...i)=>(await Hr().wait(),l(...i))},setup(){np(),sp()},layouts:{Layout:Qm,NotFound:of}}),af=(e,t)=>t.some(l=>{if(be(l))return l===e.key;const{key:i,ctrl:o=!1,shift:n=!1,alt:a=!1}=l;return i===e.key&&o===e.ctrlKey&&n===e.shiftKey&&a===e.altKey}),rf=/[^\x00-\x7F]/,sf=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ra=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),sa=(e,t)=>{const l=t.join(" "),i=sf(e);if(rf.test(e))return i.some(a=>l.toLowerCase().indexOf(a)>-1);const o=e.endsWith(" ");return new RegExp(i.map((a,r)=>i.length===r+1&&!o?`(?=.*\\b${ra(a)})`:`(?=.*\\b${ra(a)}\\b)`).join("")+".+","gi").test(l)},cf=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const l=i=>{!e.value||af(i,t.value)&&!e.value.contains(i.target)&&(i.preventDefault(),e.value.focus())};Je(()=>{document.addEventListener("keydown",l)}),Yl(()=>{document.removeEventListener("keydown",l)})},hf=[{title:"Home",headers:[{level:3,title:"All Hook process in one step, everything is simplified",slug:"all-hook-process-in-one-step-everything-is-simplified",link:"#all-hook-process-in-one-step-everything-is-simplified",children:[]}],path:"/en/",pathLocale:"/en/",extraFields:[]},{title:"\u9996\u9875",headers:[{level:3,title:"\u6240\u6709 Hook \u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D\uFF0C\u62D2\u7EDD\u7E41\u7410",slug:"\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",link:"#\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",children:[]}],path:"/zh-cn/",pathLocale:"/zh-cn/",extraFields:[]},{title:"About this Document",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/en/about/about.html",pathLocale:"/en/",extraFields:[]},{title:"Changelog",headers:[{level:3,title:"1.1.5 | 2023.01.13",slug:"_1-1-5-2023-01-13",link:"#_1-1-5-2023-01-13",children:[]},{level:3,title:"1.1.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/en/about/changelog.html",pathLocale:"/en/",extraFields:[]},{title:"Contact Us",headers:[{level:2,title:"Help with Maintenance",slug:"help-with-maintenance",link:"#help-with-maintenance",children:[]}],path:"/en/about/contacts.html",pathLocale:"/en/",extraFields:[]},{title:"Looking for Future",headers:[{level:2,title:"Unresolved Issues",slug:"unresolved-issues",link:"#unresolved-issues",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"Future Plans",slug:"future-plans",link:"#future-plans",children:[{level:3,title:"Lite Version Supported for Standalone Use",slug:"lite-version-supported-for-standalone-use",link:"#lite-version-supported-for-standalone-use",children:[]},{level:3,title:"Support for More Hook Framework",slug:"support-for-more-hook-framework",link:"#support-for-more-hook-framework",children:[]}]}],path:"/en/about/future.html",pathLocale:"/en/",extraFields:[]},{title:"Document Introduce",headers:[{level:2,title:"Function Description",slug:"function-description",link:"#function-description",children:[]},{level:2,title:"Function Example Description",slug:"function-example-description",link:"#function-example-description",children:[]},{level:2,title:"Change Record Description",slug:"change-record-description",link:"#change-record-description",children:[]},{level:2,title:"Related Symbols Description",slug:"related-symbols-description",link:"#related-symbols-description",children:[]}],path:"/en/api/home.html",pathLocale:"/en/",extraFields:[]},{title:"Usage Example",headers:[{level:2,title:"Structure Diagram",slug:"structure-diagram",link:"#structure-diagram",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"A Simple Hook Example",slug:"a-simple-hook-example",link:"#a-simple-hook-example",children:[{level:3,title:"Hook App",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook System Framework",slug:"hook-system-framework",link:"#hook-system-framework",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"Remove Hook",slug:"remove-hook",link:"#remove-hook",children:[]}]},{level:2,title:"Exception Handling",slug:"exception-handling",link:"#exception-handling",children:[{level:3,title:"Listen for Exceptions",slug:"listen-for-exceptions",link:"#listen-for-exceptions",children:[]},{level:3,title:"Throw an Exception",slug:"throw-an-exception",link:"#throw-an-exception",children:[]}]},{level:2,title:"Status Monitor",slug:"status-monitor",link:"#status-monitor",children:[]},{level:2,title:"Expansion Usage",slug:"expansion-usage",link:"#expansion-usage",children:[{level:3,title:"Multiple Hosts",slug:"multiple-hosts",link:"#multiple-hosts",children:[]},{level:3,title:"Multiple Processes",slug:"multiple-processes",link:"#multiple-processes",children:[]}]},{level:2,title:"Writing Optimization",slug:"writing-optimization",link:"#writing-optimization",children:[]},{level:2,title:"Xposed Module own Active State",slug:"xposed-module-own-active-state",link:"#xposed-module-own-active-state",children:[]}],path:"/en/guide/example.html",pathLocale:"/en/",extraFields:[]},{title:"Introduce",headers:[{level:2,title:"Background",slug:"background",link:"#background",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Language Requirement",slug:"language-requirement",link:"#language-requirement",children:[]},{level:2,title:"Source of Inspiration",slug:"source-of-inspiration",link:"#source-of-inspiration",children:[]},{level:2,title:"Suppored Hook Framework",slug:"suppored-hook-framework",link:"#suppored-hook-framework",children:[]}],path:"/en/guide/home.html",pathLocale:"/en/",extraFields:[]},{title:"Basic Knowledge",headers:[{level:2,title:"Related Introduction",slug:"related-introduction",link:"#related-introduction",children:[{level:3,title:"What is Xposed",slug:"what-is-xposed",link:"#what-is-xposed",children:[]},{level:3,title:"What can Xposed do",slug:"what-can-xposed-do",link:"#what-can-xposed-do",children:[]},{level:3,title:"Development Process",slug:"development-process",link:"#development-process",children:[]},{level:3,title:"Derivatives",slug:"derivatives",link:"#derivatives",children:[]},{level:3,title:"What YukiHookAPI does",slug:"what-yukihookapi-does",link:"#what-yukihookapi-does",children:[]}]},{level:2,title:"Let's Started",slug:"let-s-started",link:"#let-s-started",children:[]}],path:"/en/guide/knowledge.html",pathLocale:"/en/",extraFields:[]},{title:"Migrate from Xposed API",headers:[{level:2,title:"Migrate Hook Entry Point",slug:"migrate-hook-entry-point",link:"#migrate-hook-entry-point",children:[]},{level:2,title:"Migrate Hook Method Body",slug:"migrate-hook-method-body",link:"#migrate-hook-method-body",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"Migrate Other Features",slug:"migrate-other-features",link:"#migrate-other-features",children:[]}],path:"/en/guide/move-to-new-api.html",pathLocale:"/en/",extraFields:[]},{title:"Quick Start",headers:[{level:2,title:"Environment Requirements",slug:"environment-requirements",link:"#environment-requirements",children:[]},{level:2,title:"Automatically Build Project",slug:"automatically-build-project",link:"#automatically-build-project",children:[]},{level:2,title:"Manually Configure Project",slug:"manually-configure-project",link:"#manually-configure-project",children:[{level:3,title:"Create Project",slug:"create-project",link:"#create-project",children:[]},{level:3,title:"Integration Dependencies",slug:"integration-dependencies",link:"#integration-dependencies",children:[]},{level:3,title:"Use as Xposed Module",slug:"use-as-xposed-module",link:"#use-as-xposed-module",children:[]},{level:3,title:"Use as Hook API",slug:"use-as-hook-api",link:"#use-as-hook-api",children:[]}]}],path:"/en/guide/quick-start.html",pathLocale:"/en/",extraFields:[]},{title:"API Basic Configs",headers:[{level:2,title:"Function Configs",slug:"function-configs",link:"#function-configs",children:[{level:3,title:"configs Method",slug:"configs-method",link:"#configs-method",children:[]}]},{level:2,title:"Hooker Configs",slug:"hooker-configs",link:"#hooker-configs",children:[{level:3,title:"Created by lambda",slug:"created-by-lambda",link:"#created-by-lambda",children:[]},{level:3,title:"Created by Custom Hooker",slug:"created-by-custom-hooker",link:"#created-by-custom-hooker",children:[]},{level:3,title:"Expansion Features",slug:"expansion-features",link:"#expansion-features",children:[]},{level:3,title:"Precautions",slug:"precautions",link:"#precautions",children:[]}]},{level:2,title:"Precautions when using as Hook API",slug:"precautions-when-using-as-hook-api",link:"#precautions-when-using-as-hook-api",children:[]}],path:"/en/config/api-example.html",pathLocale:"/en/",extraFields:[]},{title:"API Exception Handling",headers:[{level:2,title:"Non-Blocking Exceptions",slug:"non-blocking-exceptions",link:"#non-blocking-exceptions",children:[]},{level:2,title:"Blocking Exceptions",slug:"blocking-exceptions",link:"#blocking-exceptions",children:[]}],path:"/en/config/api-exception.html",pathLocale:"/en/",extraFields:[]},{title:"Use as Hook API Configs",headers:[{level:2,title:"Dependency Configs",slug:"dependency-configs",link:"#dependency-configs",children:[]},{level:2,title:"Entry Configs",slug:"entry-configs",link:"#entry-configs",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/en/config/api-using.html",pathLocale:"/en/",extraFields:[]},{title:"R8 & Proguard Obfuscate",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/en/config/r8-proguard.html",pathLocale:"/en/",extraFields:[]},{title:"Use as Xposed Module Configs",headers:[{level:2,title:"Dependency Configs",slug:"dependency-configs",link:"#dependency-configs",children:[]},{level:2,title:"Custom Automatic Builder",slug:"custom-automatic-builder",link:"#custom-automatic-builder",children:[{level:3,title:"InjectYukiHookWithXposed Annotation",slug:"injectyukihookwithxposed-annotation",link:"#injectyukihookwithxposed-annotation",children:[]},{level:3,title:"IYukiHookXposedInit Interface",slug:"iyukihookxposedinit-interface",link:"#iyukihookxposedinit-interface",children:[]}]},{level:2,title:"Native Xposed API Events",slug:"native-xposed-api-events",link:"#native-xposed-api-events",children:[]}],path:"/en/config/xposed-using.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookAPI Project Builder",headers:[{level:2,title:"Get Project",slug:"get-project",link:"#get-project",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[{level:3,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:3,title:"Config Template",slug:"config-template",link:"#config-template",children:[]},{level:3,title:"Multilingual Support",slug:"multilingual-support",link:"#multilingual-support",children:[]}]}],path:"/en/tools/yukihookapi-projectbuilder.html",pathLocale:"/en/",extraFields:[]},{title:"\u5173\u4E8E\u6B64\u6587\u6863",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/zh-cn/about/about.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u66F4\u65B0\u65E5\u5FD7",headers:[{level:3,title:"1.1.5 | 2023.01.13",slug:"_1-1-5-2023-01-13",link:"#_1-1-5-2023-01-13",children:[]},{level:3,title:"1.1.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/zh-cn/about/changelog.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8054\u7CFB\u6211\u4EEC",headers:[{level:2,title:"\u52A9\u529B\u7EF4\u62A4",slug:"\u52A9\u529B\u7EF4\u62A4",link:"#\u52A9\u529B\u7EF4\u62A4",children:[]}],path:"/zh-cn/about/contacts.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5C55\u671B\u672A\u6765",headers:[{level:2,title:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",slug:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",link:"#\u672A\u89E3\u51B3\u7684\u95EE\u9898",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"\u672A\u6765\u7684\u8BA1\u5212",slug:"\u672A\u6765\u7684\u8BA1\u5212",link:"#\u672A\u6765\u7684\u8BA1\u5212",children:[{level:3,title:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C",slug:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",link:"#\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",children:[]},{level:3,title:"\u652F\u6301\u66F4\u591A Hook Framework",slug:"\u652F\u6301\u66F4\u591A-hook-framework",link:"#\u652F\u6301\u66F4\u591A-hook-framework",children:[]}]}],path:"/zh-cn/about/future.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u57FA\u672C\u914D\u7F6E",headers:[{level:2,title:"\u529F\u80FD\u914D\u7F6E",slug:"\u529F\u80FD\u914D\u7F6E",link:"#\u529F\u80FD\u914D\u7F6E",children:[{level:3,title:"configs \u65B9\u6CD5",slug:"configs-\u65B9\u6CD5",link:"#configs-\u65B9\u6CD5",children:[]}]},{level:2,title:"Hooker \u914D\u7F6E",slug:"hooker-\u914D\u7F6E",link:"#hooker-\u914D\u7F6E",children:[{level:3,title:"\u901A\u8FC7 lambda \u521B\u5EFA",slug:"\u901A\u8FC7-lambda-\u521B\u5EFA",link:"#\u901A\u8FC7-lambda-\u521B\u5EFA",children:[]},{level:3,title:"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA",slug:"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",link:"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",children:[]},{level:3,title:"\u6269\u5C55\u7279\u6027",slug:"\u6269\u5C55\u7279\u6027",link:"#\u6269\u5C55\u7279\u6027",children:[]},{level:3,title:"\u6CE8\u610F\u4E8B\u9879",slug:"\u6CE8\u610F\u4E8B\u9879",link:"#\u6CE8\u610F\u4E8B\u9879",children:[]}]},{level:2,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",children:[]}],path:"/zh-cn/config/api-example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u5F02\u5E38\u5904\u7406",headers:[{level:2,title:"\u975E\u963B\u65AD\u5F02\u5E38",slug:"\u975E\u963B\u65AD\u5F02\u5E38",link:"#\u975E\u963B\u65AD\u5F02\u5E38",children:[]},{level:2,title:"\u963B\u65AD\u5F02\u5E38",slug:"\u963B\u65AD\u5F02\u5E38",link:"#\u963B\u65AD\u5F02\u5E38",children:[]}],path:"/zh-cn/config/api-exception.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u5165\u53E3\u914D\u7F6E",slug:"\u5165\u53E3\u914D\u7F6E",link:"#\u5165\u53E3\u914D\u7F6E",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/zh-cn/config/api-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"R8 \u4E0E Proguard \u6DF7\u6DC6",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/zh-cn/config/r8-proguard.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",slug:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",link:"#\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",children:[{level:3,title:"InjectYukiHookWithXposed \u6CE8\u89E3",slug:"injectyukihookwithxposed-\u6CE8\u89E3",link:"#injectyukihookwithxposed-\u6CE8\u89E3",children:[]},{level:3,title:"IYukiHookXposedInit \u63A5\u53E3",slug:"iyukihookxposedinit-\u63A5\u53E3",link:"#iyukihookxposedinit-\u63A5\u53E3",children:[]}]},{level:2,title:"\u539F\u751F Xposed API \u4E8B\u4EF6",slug:"\u539F\u751F-xposed-api-\u4E8B\u4EF6",link:"#\u539F\u751F-xposed-api-\u4E8B\u4EF6",children:[]}],path:"/zh-cn/config/xposed-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u6587\u6863\u4ECB\u7ECD",headers:[{level:2,title:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",slug:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",link:"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",children:[]},{level:2,title:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",slug:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",link:"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",children:[]},{level:2,title:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",slug:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",link:"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",children:[]},{level:2,title:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",slug:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",link:"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",children:[]}],path:"/zh-cn/api/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u7528\u6CD5\u793A\u4F8B",headers:[{level:2,title:"\u7ED3\u6784\u56FE\u89E3",slug:"\u7ED3\u6784\u56FE\u89E3",link:"#\u7ED3\u6784\u56FE\u89E3",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"\u4E00\u4E2A\u7B80\u5355\u7684 Hook \u4F8B\u5B50",slug:"\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",link:"#\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",children:[{level:3,title:"Hook APP",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook \u7CFB\u7EDF\u6846\u67B6",slug:"hook-\u7CFB\u7EDF\u6846\u67B6",link:"#hook-\u7CFB\u7EDF\u6846\u67B6",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"\u89E3\u9664 Hook",slug:"\u89E3\u9664-hook",link:"#\u89E3\u9664-hook",children:[]}]},{level:2,title:"\u5F02\u5E38\u5904\u7406",slug:"\u5F02\u5E38\u5904\u7406",link:"#\u5F02\u5E38\u5904\u7406",children:[{level:3,title:"\u76D1\u542C\u5F02\u5E38",slug:"\u76D1\u542C\u5F02\u5E38",link:"#\u76D1\u542C\u5F02\u5E38",children:[]},{level:3,title:"\u629B\u51FA\u5F02\u5E38",slug:"\u629B\u51FA\u5F02\u5E38",link:"#\u629B\u51FA\u5F02\u5E38",children:[]}]},{level:2,title:"\u72B6\u6001\u76D1\u542C",slug:"\u72B6\u6001\u76D1\u542C",link:"#\u72B6\u6001\u76D1\u542C",children:[]},{level:2,title:"\u6269\u5C55\u7528\u6CD5",slug:"\u6269\u5C55\u7528\u6CD5",link:"#\u6269\u5C55\u7528\u6CD5",children:[{level:3,title:"\u591A\u4E2A\u5BBF\u4E3B",slug:"\u591A\u4E2A\u5BBF\u4E3B",link:"#\u591A\u4E2A\u5BBF\u4E3B",children:[]},{level:3,title:"\u591A\u4E2A\u8FDB\u7A0B",slug:"\u591A\u4E2A\u8FDB\u7A0B",link:"#\u591A\u4E2A\u8FDB\u7A0B",children:[]}]},{level:2,title:"\u5199\u6CD5\u4F18\u5316",slug:"\u5199\u6CD5\u4F18\u5316",link:"#\u5199\u6CD5\u4F18\u5316",children:[]},{level:2,title:"Xposed \u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]}],path:"/zh-cn/guide/example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECB\u7ECD",headers:[{level:2,title:"\u80CC\u666F",slug:"\u80CC\u666F",link:"#\u80CC\u666F",children:[]},{level:2,title:"\u7528\u9014",slug:"\u7528\u9014",link:"#\u7528\u9014",children:[]},{level:2,title:"\u8BED\u8A00\u8981\u6C42",slug:"\u8BED\u8A00\u8981\u6C42",link:"#\u8BED\u8A00\u8981\u6C42",children:[]},{level:2,title:"\u7075\u611F\u6765\u6E90",slug:"\u7075\u611F\u6765\u6E90",link:"#\u7075\u611F\u6765\u6E90",children:[]},{level:2,title:"\u652F\u6301\u7684 Hook Framework",slug:"\u652F\u6301\u7684-hook-framework",link:"#\u652F\u6301\u7684-hook-framework",children:[]}],path:"/zh-cn/guide/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u57FA\u7840\u77E5\u8BC6",headers:[{level:2,title:"\u76F8\u5173\u4ECB\u7ECD",slug:"\u76F8\u5173\u4ECB\u7ECD",link:"#\u76F8\u5173\u4ECB\u7ECD",children:[{level:3,title:"Xposed \u662F\u4EC0\u4E48",slug:"xposed-\u662F\u4EC0\u4E48",link:"#xposed-\u662F\u4EC0\u4E48",children:[]},{level:3,title:"Xposed \u80FD\u505A\u4EC0\u4E48",slug:"xposed-\u80FD\u505A\u4EC0\u4E48",link:"#xposed-\u80FD\u505A\u4EC0\u4E48",children:[]},{level:3,title:"\u53D1\u5C55\u8FC7\u7A0B",slug:"\u53D1\u5C55\u8FC7\u7A0B",link:"#\u53D1\u5C55\u8FC7\u7A0B",children:[]},{level:3,title:"\u884D\u751F\u4EA7\u54C1",slug:"\u884D\u751F\u4EA7\u54C1",link:"#\u884D\u751F\u4EA7\u54C1",children:[]},{level:3,title:"YukiHookAPI \u505A\u4E86\u4EC0\u4E48",slug:"yukihookapi-\u505A\u4E86\u4EC0\u4E48",link:"#yukihookapi-\u505A\u4E86\u4EC0\u4E48",children:[]}]},{level:2,title:"\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",slug:"\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",link:"#\u8BA9\u6211\u4EEC\u5F00\u59CB\u5427",children:[]}],path:"/zh-cn/guide/knowledge.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECE Xposed API \u8FC1\u79FB",headers:[{level:2,title:"\u8FC1\u79FB Hook \u5165\u53E3\u70B9",slug:"\u8FC1\u79FB-hook-\u5165\u53E3\u70B9",link:"#\u8FC1\u79FB-hook-\u5165\u53E3\u70B9",children:[]},{level:2,title:"\u8FC1\u79FB Hook \u65B9\u6CD5\u4F53",slug:"\u8FC1\u79FB-hook-\u65B9\u6CD5\u4F53",link:"#\u8FC1\u79FB-hook-\u65B9\u6CD5\u4F53",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",slug:"\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",link:"#\u8FC1\u79FB\u5176\u5B83\u529F\u80FD",children:[]}],path:"/zh-cn/guide/move-to-new-api.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5FEB\u901F\u5F00\u59CB",headers:[{level:2,title:"\u73AF\u5883\u8981\u6C42",slug:"\u73AF\u5883\u8981\u6C42",link:"#\u73AF\u5883\u8981\u6C42",children:[]},{level:2,title:"\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",slug:"\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",link:"#\u81EA\u52A8\u6784\u5EFA\u9879\u76EE",children:[]},{level:2,title:"\u624B\u52A8\u914D\u7F6E\u9879\u76EE",slug:"\u624B\u52A8\u914D\u7F6E\u9879\u76EE",link:"#\u624B\u52A8\u914D\u7F6E\u9879\u76EE",children:[{level:3,title:"\u521B\u5EFA\u9879\u76EE",slug:"\u521B\u5EFA\u9879\u76EE",link:"#\u521B\u5EFA\u9879\u76EE",children:[]},{level:3,title:"\u96C6\u6210\u4F9D\u8D56",slug:"\u96C6\u6210\u4F9D\u8D56",link:"#\u96C6\u6210\u4F9D\u8D56",children:[]},{level:3,title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528",slug:"\u4F5C\u4E3A-xposed-\u6A21\u5757\u4F7F\u7528",link:"#\u4F5C\u4E3A-xposed-\u6A21\u5757\u4F7F\u7528",children:[]},{level:3,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528",children:[]}]}],path:"/zh-cn/guide/quick-start.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookAPI \u6784\u5EFA\u5DE5\u5177",headers:[{level:2,title:"\u83B7\u53D6\u9879\u76EE",slug:"\u83B7\u53D6\u9879\u76EE",link:"#\u83B7\u53D6\u9879\u76EE",children:[]},{level:2,title:"\u4F7F\u7528\u65B9\u6CD5",slug:"\u4F7F\u7528\u65B9\u6CD5",link:"#\u4F7F\u7528\u65B9\u6CD5",children:[{level:3,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:3,title:"\u914D\u7F6E\u6A21\u677F",slug:"\u914D\u7F6E\u6A21\u677F",link:"#\u914D\u7F6E\u6A21\u677F",children:[]},{level:3,title:"\u591A\u8BED\u8A00\u652F\u6301",slug:"\u591A\u8BED\u8A00\u652F\u6301",link:"#\u591A\u8BED\u8A00\u652F\u6301",children:[]}]}],path:"/zh-cn/tools/yukihookapi-projectbuilder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Host Resource Injection Extension",headers:[{level:2,title:"Inject Module App's Resources",slug:"inject-module-app-s-resources",link:"#inject-module-app-s-resources",children:[]},{level:2,title:"Register Module App's Activity",slug:"register-module-app-s-activity",link:"#register-module-app-s-activity",children:[]},{level:2,title:"Create ContextThemeWrapper Proxy",slug:"create-contextthemewrapper-proxy",link:"#create-contextthemewrapper-proxy",children:[]},{level:2,title:"ClassLoader Conflict Problem",slug:"classloader-conflict-problem",link:"#classloader-conflict-problem",children:[]}],path:"/en/api/special-features/host-inject.html",pathLocale:"/en/",extraFields:[]},{title:"Host Lifecycle Extension",headers:[{level:2,title:"Listener Lifecycle",slug:"listener-lifecycle",link:"#listener-lifecycle",children:[]},{level:2,title:"Register System Broadcast",slug:"register-system-broadcast",link:"#register-system-broadcast",children:[]}],path:"/en/api/special-features/host-lifecycle.html",pathLocale:"/en/",extraFields:[]},{title:"Debug Logs",headers:[{level:2,title:"Normal Logs",slug:"normal-logs",link:"#normal-logs",children:[]},{level:2,title:"Error Logs",slug:"error-logs",link:"#error-logs",children:[]},{level:2,title:"Save Logs and Custom Elements",slug:"save-logs-and-custom-elements",link:"#save-logs-and-custom-elements",children:[]}],path:"/en/api/special-features/logger.html",pathLocale:"/en/",extraFields:[]},{title:"Reflection Extensions",headers:[{level:2,title:"Class Extensions",slug:"class-extensions",link:"#class-extensions",children:[{level:3,title:"Object Conversion",slug:"object-conversion",link:"#object-conversion",children:[]},{level:3,title:"Existential Judgment",slug:"existential-judgment",link:"#existential-judgment",children:[]},{level:3,title:"Vague Search",slug:"vague-search",link:"#vague-search",children:[]}]},{level:2,title:"Member Extensions",slug:"member-extensions",link:"#member-extensions",children:[{level:3,title:"Find and Reflection",slug:"find-and-reflection",link:"#find-and-reflection",children:[]},{level:3,title:"Optional Find Conditions",slug:"optional-find-conditions",link:"#optional-find-conditions",children:[]},{level:3,title:"Find in Super Class",slug:"find-in-super-class",link:"#find-in-super-class",children:[]},{level:3,title:"Vague Find",slug:"vague-find",link:"#vague-find",children:[]},{level:3,title:"Multiple Find",slug:"multiple-find",link:"#multiple-find",children:[]},{level:3,title:"Static Bytecode",slug:"static-bytecode",link:"#static-bytecode",children:[]},{level:3,title:"Obfuscated Bytecode",slug:"obfuscated-bytecode",link:"#obfuscated-bytecode",children:[]},{level:3,title:"Directly Called",slug:"directly-called",link:"#directly-called",children:[]},{level:3,title:"Original Called",slug:"original-called",link:"#original-called",children:[]},{level:3,title:"Find Again",slug:"find-again",link:"#find-again",children:[]},{level:3,title:"Relative Matching",slug:"relative-matching",link:"#relative-matching",children:[]},{level:3,title:"Calling Generics",slug:"calling-generics",link:"#calling-generics",children:[]},{level:3,title:"Pay Attention of Trap",slug:"pay-attention-of-trap",link:"#pay-attention-of-trap",children:[]}]},{level:2,title:"Common Type Extensions",slug:"common-type-extensions",link:"#common-type-extensions",children:[]}],path:"/en/api/special-features/reflection.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module and Host Channel",headers:[{level:2,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:2,title:"Determine Module App and Host App Version Match",slug:"determine-module-app-and-host-app-version-match",link:"#determine-module-app-and-host-app-version-match",children:[]},{level:2,title:"Rules for Callback Event Response",slug:"rules-for-callback-event-response",link:"#rules-for-callback-event-response",children:[]},{level:2,title:"Security Instructions",slug:"security-instructions",link:"#security-instructions",children:[]}],path:"/en/api/special-features/xposed-channel.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module Data Storage",headers:[{level:2,title:"Use in Activity",slug:"use-in-activity",link:"#use-in-activity",children:[]},{level:2,title:"Use in PreferenceFragment",slug:"use-in-preferencefragment",link:"#use-in-preferencefragment",children:[]}],path:"/en/api/special-features/xposed-storage.html",pathLocale:"/en/",extraFields:[]},{title:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55",headers:[{level:2,title:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90 (Resources)",slug:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",link:"#\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",children:[]},{level:2,title:"\u6CE8\u518C\u6A21\u5757 Activity",slug:"\u6CE8\u518C\u6A21\u5757-activity",link:"#\u6CE8\u518C\u6A21\u5757-activity",children:[]},{level:2,title:"\u521B\u5EFA ContextThemeWrapper \u4EE3\u7406",slug:"\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",link:"#\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",children:[]},{level:2,title:"ClassLoader \u51B2\u7A81\u95EE\u9898",slug:"classloader-\u51B2\u7A81\u95EE\u9898",link:"#classloader-\u51B2\u7A81\u95EE\u9898",children:[]}],path:"/zh-cn/api/special-features/host-inject.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55",headers:[{level:2,title:"\u76D1\u542C\u751F\u547D\u5468\u671F",slug:"\u76D1\u542C\u751F\u547D\u5468\u671F",link:"#\u76D1\u542C\u751F\u547D\u5468\u671F",children:[]},{level:2,title:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",slug:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",link:"#\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",children:[]}],path:"/zh-cn/api/special-features/host-lifecycle.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8C03\u8BD5\u65E5\u5FD7",headers:[{level:2,title:"\u666E\u901A\u65E5\u5FD7",slug:"\u666E\u901A\u65E5\u5FD7",link:"#\u666E\u901A\u65E5\u5FD7",children:[]},{level:2,title:"\u9519\u8BEF\u65E5\u5FD7",slug:"\u9519\u8BEF\u65E5\u5FD7",link:"#\u9519\u8BEF\u65E5\u5FD7",children:[]},{level:2,title:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",slug:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",link:"#\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",children:[]}],path:"/zh-cn/api/special-features/logger.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",headers:[{level:2,title:"Class \u6269\u5C55",slug:"class-\u6269\u5C55",link:"#class-\u6269\u5C55",children:[{level:3,title:"\u5BF9\u8C61\u8F6C\u6362",slug:"\u5BF9\u8C61\u8F6C\u6362",link:"#\u5BF9\u8C61\u8F6C\u6362",children:[]},{level:3,title:"\u5B58\u5728\u5224\u65AD",slug:"\u5B58\u5728\u5224\u65AD",link:"#\u5B58\u5728\u5224\u65AD",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E",link:"#\u6A21\u7CCA\u67E5\u627E",children:[]}]},{level:2,title:"Member \u6269\u5C55",slug:"member-\u6269\u5C55",link:"#member-\u6269\u5C55",children:[{level:3,title:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",slug:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",link:"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",children:[]},{level:3,title:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",slug:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",link:"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",children:[]},{level:3,title:"\u5728\u7236\u7C7B\u67E5\u627E",slug:"\u5728\u7236\u7C7B\u67E5\u627E",link:"#\u5728\u7236\u7C7B\u67E5\u627E",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E-1",link:"#\u6A21\u7CCA\u67E5\u627E-1",children:[]},{level:3,title:"\u591A\u91CD\u67E5\u627E",slug:"\u591A\u91CD\u67E5\u627E-1",link:"#\u591A\u91CD\u67E5\u627E-1",children:[]},{level:3,title:"\u9759\u6001\u5B57\u8282\u7801",slug:"\u9759\u6001\u5B57\u8282\u7801",link:"#\u9759\u6001\u5B57\u8282\u7801",children:[]},{level:3,title:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",slug:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",link:"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",children:[]},{level:3,title:"\u76F4\u63A5\u8C03\u7528",slug:"\u76F4\u63A5\u8C03\u7528",link:"#\u76F4\u63A5\u8C03\u7528",children:[]},{level:3,title:"\u539F\u59CB\u8C03\u7528",slug:"\u539F\u59CB\u8C03\u7528",link:"#\u539F\u59CB\u8C03\u7528",children:[]},{level:3,title:"\u518D\u6B21\u67E5\u627E",slug:"\u518D\u6B21\u67E5\u627E",link:"#\u518D\u6B21\u67E5\u627E",children:[]},{level:3,title:"\u76F8\u5BF9\u5339\u914D",slug:"\u76F8\u5BF9\u5339\u914D",link:"#\u76F8\u5BF9\u5339\u914D",children:[]},{level:3,title:"\u8C03\u7528\u6CDB\u578B",slug:"\u8C03\u7528\u6CDB\u578B",link:"#\u8C03\u7528\u6CDB\u578B",children:[]},{level:3,title:"\u6CE8\u610F\u8BEF\u533A",slug:"\u6CE8\u610F\u8BEF\u533A",link:"#\u6CE8\u610F\u8BEF\u533A",children:[]}]},{level:2,title:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",slug:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",link:"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55",children:[]}],path:"/zh-cn/api/special-features/reflection.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865",headers:[{level:2,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:2,title:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",slug:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",link:"#\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",children:[]},{level:2,title:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",slug:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",link:"#\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",children:[]},{level:2,title:"\u5B89\u5168\u6027\u8BF4\u660E",slug:"\u5B89\u5168\u6027\u8BF4\u660E",link:"#\u5B89\u5168\u6027\u8BF4\u660E",children:[]}],path:"/zh-cn/api/special-features/xposed-channel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8",headers:[{level:2,title:"\u5728 Activity \u4E2D\u4F7F\u7528",slug:"\u5728-activity-\u4E2D\u4F7F\u7528",link:"#\u5728-activity-\u4E2D\u4F7F\u7528",children:[]},{level:2,title:"\u5728 PreferenceFragment \u4E2D\u4F7F\u7528",slug:"\u5728-preferencefragment-\u4E2D\u4F7F\u7528",link:"#\u5728-preferencefragment-\u4E2D\u4F7F\u7528",children:[]}],path:"/zh-cn/api/special-features/xposed-storage.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"isModuleActive - field",slug:"ismoduleactive-field",link:"#ismoduleactive-field",children:[]},{level:3,title:"isXposedModuleActive - field",slug:"isxposedmoduleactive-field",link:"#isxposedmoduleactive-field",children:[]},{level:3,title:"isTaiChiModuleActive - field",slug:"istaichimoduleactive-field",link:"#istaichimoduleactive-field",children:[]},{level:3,title:"isSupportResourcesHook - field",slug:"issupportresourceshook-field",link:"#issupportresourceshook-field",children:[]},{level:3,title:"Executor - object",slug:"executor-object",link:"#executor-object",children:[]}]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"isModuleActive - field",slug:"ismoduleactive-field",link:"#ismoduleactive-field",children:[]},{level:3,title:"isXposedModuleActive - field",slug:"isxposedmoduleactive-field",link:"#isxposedmoduleactive-field",children:[]},{level:3,title:"isTaiChiModuleActive - field",slug:"istaichimoduleactive-field",link:"#istaichimoduleactive-field",children:[]},{level:3,title:"isSupportResourcesHook - field",slug:"issupportresourceshook-field",link:"#issupportresourceshook-field",children:[]},{level:3,title:"Executor - object",slug:"executor-object",link:"#executor-object",children:[]}]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/en/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",pathLocale:"/en/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookClass - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookResources - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",pathLocale:"/en/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",pathLocale:"/en/",extraFields:[]},{title:"YukiBaseHooker - class",headers:[{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",pathLocale:"/en/",extraFields:[]},{title:"YukiMemberHookCreator - class",headers:[{level:2,title:"PRIORITY_DEFAULT - field",slug:"priority-default-field",link:"#priority-default-field",children:[]},{level:2,title:"PRIORITY_LOWEST - field",slug:"priority-lowest-field",link:"#priority-lowest-field",children:[]},{level:2,title:"PRIORITY_HIGHEST - field",slug:"priority-highest-field",link:"#priority-highest-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"injectMember - method",slug:"injectmember-method",link:"#injectmember-method",children:[]},{level:2,title:"useDangerousOperation - method",slug:"usedangerousoperation-method",link:"#usedangerousoperation-method",children:[]},{level:2,title:"MemberHookCreator - class",slug:"memberhookcreator-class",link:"#memberhookcreator-class",children:[{level:3,title:"members - method",slug:"members-method",link:"#members-method",children:[]},{level:3,title:"allMembers - method",slug:"allmembers-method",link:"#allmembers-method",children:[]},{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"HookParam.field - i-ext-method",slug:"hookparam-field-i-ext-method",link:"#hookparam-field-i-ext-method",children:[]},{level:3,title:"HookParam.method - i-ext-method",slug:"hookparam-method-i-ext-method",link:"#hookparam-method-i-ext-method",children:[]},{level:3,title:"HookParam.constructor - i-ext-method",slug:"hookparam-constructor-i-ext-method",link:"#hookparam-constructor-i-ext-method",children:[]},{level:3,title:"HookParam.injectMember - i-ext-method",slug:"hookparam-injectmember-i-ext-method",link:"#hookparam-injectmember-i-ext-method",children:[]},{level:3,title:"beforeHook - method",slug:"beforehook-method",link:"#beforehook-method",children:[]},{level:3,title:"afterHook - method",slug:"afterhook-method",link:"#afterhook-method",children:[]},{level:3,title:"replaceAny - method",slug:"replaceany-method",link:"#replaceany-method",children:[]},{level:3,title:"replaceUnit - method",slug:"replaceunit-method",link:"#replaceunit-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"intercept - method",slug:"intercept-method",link:"#intercept-method",children:[]},{level:3,title:"removeSelf - method",slug:"removeself-method",link:"#removeself-method",children:[]},{level:3,title:"HookCallback - class",slug:"hookcallback-class",link:"#hookcallback-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"by - method",slug:"by-method-1",link:"#by-method-1",children:[]},{level:3,title:"onPrepareHook - method",slug:"onpreparehook-method",link:"#onpreparehook-method",children:[]},{level:3,title:"onHookClassNotFoundFailure - method",slug:"onhookclassnotfoundfailure-method",link:"#onhookclassnotfoundfailure-method",children:[]},{level:3,title:"ignoredHookClassNotFoundFailure - method",slug:"ignoredhookclassnotfoundfailure-method",link:"#ignoredhookclassnotfoundfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResourcesHookCreator - class",headers:[{level:2,title:"injectResource - method",slug:"injectresource-method",link:"#injectresource-method",children:[]},{level:2,title:"ResourcesHookCreator - class",slug:"resourceshookcreator-class",link:"#resourceshookcreator-class",children:[{level:3,title:"resourceId - field",slug:"resourceid-field",link:"#resourceid-field",children:[]},{level:3,title:"conditions - method",slug:"conditions-method",link:"#conditions-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"replaceToModuleResource - method",slug:"replacetomoduleresource-method",link:"#replacetomoduleresource-method",children:[]},{level:3,title:"injectAsLayout - method",slug:"injectaslayout-method",link:"#injectaslayout-method",children:[]},{level:3,title:"ConditionFinder - class",slug:"conditionfinder-class",link:"#conditionfinder-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]},{level:3,title:"onHookingFailure - method",slug:"onhookingfailure-method",link:"#onhookingfailure-method",children:[]},{level:3,title:"ignoredHookingFailure - method",slug:"ignoredhookingfailure-method",link:"#ignoredhookingfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"MembersType - class",slug:"memberstype-class",link:"#memberstype-class",children:[{level:3,title:"ALL - enum",slug:"all-enum",link:"#all-enum",children:[]},{level:3,title:"METHOD - enum",slug:"method-enum",link:"#method-enum",children:[]},{level:3,title:"CONSTRUCTOR - enum",slug:"constructor-enum",link:"#constructor-enum",children:[]}]},{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"ClassLoader.onLoadClass - ext-method",slug:"classloader-onloadclass-ext-method",link:"#classloader-onloadclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/en/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSED_ENVIRONMENT - enum",slug:"xposed-environment-enum",link:"#xposed-environment-enum",children:[]},{level:3,title:"SCOPE - enum",slug:"scope-enum",link:"#scope-enum",children:[]},{level:3,title:"BOTH - enum",slug:"both-enum",link:"#both-enum",children:[]}]},{level:2,title:"YukiLoggerData - class",slug:"yukiloggerdata-class",link:"#yukiloggerdata-class",children:[]},{level:2,title:"YukiHookLogger - object",slug:"yukihooklogger-object",link:"#yukihooklogger-object",children:[{level:3,title:"inMemoryData - field",slug:"inmemorydata-field",link:"#inmemorydata-field",children:[]},{level:3,title:"contents - field",slug:"contents-field",link:"#contents-field",children:[]},{level:3,title:"contents - method",slug:"contents-method",link:"#contents-method",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/en/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"dataExtra - field",slug:"dataextra-field",link:"#dataextra-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/en/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/en/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookClass - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookResources - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiMemberHookCreator - class",headers:[{level:2,title:"PRIORITY_DEFAULT - field",slug:"priority-default-field",link:"#priority-default-field",children:[]},{level:2,title:"PRIORITY_LOWEST - field",slug:"priority-lowest-field",link:"#priority-lowest-field",children:[]},{level:2,title:"PRIORITY_HIGHEST - field",slug:"priority-highest-field",link:"#priority-highest-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"injectMember - method",slug:"injectmember-method",link:"#injectmember-method",children:[]},{level:2,title:"useDangerousOperation - method",slug:"usedangerousoperation-method",link:"#usedangerousoperation-method",children:[]},{level:2,title:"MemberHookCreator - class",slug:"memberhookcreator-class",link:"#memberhookcreator-class",children:[{level:3,title:"members - method",slug:"members-method",link:"#members-method",children:[]},{level:3,title:"allMembers - method",slug:"allmembers-method",link:"#allmembers-method",children:[]},{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"HookParam.field - i-ext-method",slug:"hookparam-field-i-ext-method",link:"#hookparam-field-i-ext-method",children:[]},{level:3,title:"HookParam.method - i-ext-method",slug:"hookparam-method-i-ext-method",link:"#hookparam-method-i-ext-method",children:[]},{level:3,title:"HookParam.constructor - i-ext-method",slug:"hookparam-constructor-i-ext-method",link:"#hookparam-constructor-i-ext-method",children:[]},{level:3,title:"HookParam.injectMember - i-ext-method",slug:"hookparam-injectmember-i-ext-method",link:"#hookparam-injectmember-i-ext-method",children:[]},{level:3,title:"beforeHook - method",slug:"beforehook-method",link:"#beforehook-method",children:[]},{level:3,title:"afterHook - method",slug:"afterhook-method",link:"#afterhook-method",children:[]},{level:3,title:"replaceAny - method",slug:"replaceany-method",link:"#replaceany-method",children:[]},{level:3,title:"replaceUnit - method",slug:"replaceunit-method",link:"#replaceunit-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"intercept - method",slug:"intercept-method",link:"#intercept-method",children:[]},{level:3,title:"removeSelf - method",slug:"removeself-method",link:"#removeself-method",children:[]},{level:3,title:"HookCallback - class",slug:"hookcallback-class",link:"#hookcallback-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"by - method",slug:"by-method-1",link:"#by-method-1",children:[]},{level:3,title:"onPrepareHook - method",slug:"onpreparehook-method",link:"#onpreparehook-method",children:[]},{level:3,title:"onHookClassNotFoundFailure - method",slug:"onhookclassnotfoundfailure-method",link:"#onhookclassnotfoundfailure-method",children:[]},{level:3,title:"ignoredHookClassNotFoundFailure - method",slug:"ignoredhookclassnotfoundfailure-method",link:"#ignoredhookclassnotfoundfailure-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResourcesHookCreator - class",headers:[{level:2,title:"injectResource - method",slug:"injectresource-method",link:"#injectresource-method",children:[]},{level:2,title:"ResourcesHookCreator - class",slug:"resourceshookcreator-class",link:"#resourceshookcreator-class",children:[{level:3,title:"resourceId - field",slug:"resourceid-field",link:"#resourceid-field",children:[]},{level:3,title:"conditions - method",slug:"conditions-method",link:"#conditions-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"replaceToModuleResource - method",slug:"replacetomoduleresource-method",link:"#replacetomoduleresource-method",children:[]},{level:3,title:"injectAsLayout - method",slug:"injectaslayout-method",link:"#injectaslayout-method",children:[]},{level:3,title:"ConditionFinder - class",slug:"conditionfinder-class",link:"#conditionfinder-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]},{level:3,title:"onHookingFailure - method",slug:"onhookingfailure-method",link:"#onhookingfailure-method",children:[]},{level:3,title:"ignoredHookingFailure - method",slug:"ignoredhookingfailure-method",link:"#ignoredhookingfailure-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiBaseHooker - class",headers:[{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"MembersType - class",slug:"memberstype-class",link:"#memberstype-class",children:[{level:3,title:"ALL - enum",slug:"all-enum",link:"#all-enum",children:[]},{level:3,title:"METHOD - enum",slug:"method-enum",link:"#method-enum",children:[]},{level:3,title:"CONSTRUCTOR - enum",slug:"constructor-enum",link:"#constructor-enum",children:[]}]},{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"ClassLoader.onLoadClass - ext-method",slug:"classloader-onloadclass-ext-method",link:"#classloader-onloadclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSED_ENVIRONMENT - enum",slug:"xposed-environment-enum",link:"#xposed-environment-enum",children:[]},{level:3,title:"SCOPE - enum",slug:"scope-enum",link:"#scope-enum",children:[]},{level:3,title:"BOTH - enum",slug:"both-enum",link:"#both-enum",children:[]}]},{level:2,title:"YukiLoggerData - class",slug:"yukiloggerdata-class",link:"#yukiloggerdata-class",children:[]},{level:2,title:"YukiHookLogger - object",slug:"yukihooklogger-object",link:"#yukihooklogger-object",children:[{level:3,title:"inMemoryData - field",slug:"inmemorydata-field",link:"#inmemorydata-field",children:[]},{level:3,title:"contents - field",slug:"contents-field",link:"#contents-field",children:[]},{level:3,title:"contents - method",slug:"contents-method",link:"#contents-method",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"dataExtra - field",slug:"dataextra-field",link:"#dataextra-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"allowSendTooLargeData - method",slug:"allowsendtoolargedata-method",link:"#allowsendtoolargedata-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isPreferencesAvailable - field",slug:"ispreferencesavailable-field",link:"#ispreferencesavailable-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/en/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/en/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"allowSendTooLargeData - method",slug:"allowsendtoolargedata-method",link:"#allowsendtoolargedata-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isPreferencesAvailable - field",slug:"ispreferencesavailable-field",link:"#ispreferencesavailable-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",pathLocale:"/en/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method-1",link:"#onnosuchconstructor-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",pathLocale:"/en/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",pathLocale:"/en/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method-1",link:"#onnosuchmethod-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",pathLocale:"/en/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method-1",link:"#onnosuchconstructor-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Process - class",slug:"process-class",link:"#process-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method-1",link:"#remedys-method-1",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method-1",link:"#onnosuchmethod-method-1",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiXposedEvent - object",headers:[{level:2,title:"events - method",slug:"events-method",link:"#events-method",children:[]},{level:2,title:"onInitZygote - method",slug:"oninitzygote-method",link:"#oninitzygote-method",children:[]},{level:2,title:"onHandleLoadPackage - method",slug:"onhandleloadpackage-method",link:"#onhandleloadpackage-method",children:[]},{level:2,title:"onHandleInitPackageResources - method",slug:"onhandleinitpackageresources-method",link:"#onhandleinitpackageresources-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",pathLocale:"/en/",extraFields:[]},{title:"YukiModuleResources - class",headers:[{level:2,title:"fwd - method",slug:"fwd-method",link:"#fwd-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResForwarder - class",headers:[{level:2,title:"id - field",slug:"id-field",link:"#id-field",children:[]},{level:2,title:"resources - field",slug:"resources-field",link:"#resources-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResources - class",headers:[{level:2,title:"LayoutInflatedParam - class",slug:"layoutinflatedparam-class",link:"#layoutinflatedparam-class",children:[{level:3,title:"variantName - field",slug:"variantname-field",link:"#variantname-field",children:[]},{level:3,title:"currentView - field",slug:"currentview-field",link:"#currentview-field",children:[]},{level:3,title:"findViewByIdentifier - method",slug:"findviewbyidentifier-method",link:"#findviewbyidentifier-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",pathLocale:"/en/",extraFields:[]},{title:"ChannelData - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",pathLocale:"/en/",extraFields:[]},{title:"ChannelPriority - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleClassLoader - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"excludeHostClasses - method",slug:"excludehostclasses-method",link:"#excludehostclasses-method",children:[]},{level:3,title:"excludeModuleClasses - method",slug:"excludemoduleclasses-method",link:"#excludemoduleclasses-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",pathLocale:"/en/",extraFields:[]},{title:"PrefsData - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",pathLocale:"/en/",extraFields:[]},{title:"ModulePreferenceFragment - class",headers:[{level:2,title:"onCreatePreferencesInModuleApp - method",slug:"oncreatepreferencesinmoduleapp-method",link:"#oncreatepreferencesinmoduleapp-method",children:[]},{level:2,title:"onSharedPreferenceChanged - method",slug:"onsharedpreferencechanged-method",link:"#onsharedpreferencechanged-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",pathLocale:"/en/",extraFields:[]},{title:"YukiXposedEvent - object",headers:[{level:2,title:"events - method",slug:"events-method",link:"#events-method",children:[]},{level:2,title:"onInitZygote - method",slug:"oninitzygote-method",link:"#oninitzygote-method",children:[]},{level:2,title:"onHandleLoadPackage - method",slug:"onhandleloadpackage-method",link:"#onhandleloadpackage-method",children:[]},{level:2,title:"onHandleInitPackageResources - method",slug:"onhandleinitpackageresources-method",link:"#onhandleinitpackageresources-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiModuleResources - class",headers:[{level:2,title:"fwd - method",slug:"fwd-method",link:"#fwd-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResForwarder - class",headers:[{level:2,title:"id - field",slug:"id-field",link:"#id-field",children:[]},{level:2,title:"resources - field",slug:"resources-field",link:"#resources-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiResources - class",headers:[{level:2,title:"LayoutInflatedParam - class",slug:"layoutinflatedparam-class",link:"#layoutinflatedparam-class",children:[{level:3,title:"variantName - field",slug:"variantname-field",link:"#variantname-field",children:[]},{level:3,title:"currentView - field",slug:"currentview-field",link:"#currentview-field",children:[]},{level:3,title:"findViewByIdentifier - method",slug:"findviewbyidentifier-method",link:"#findviewbyidentifier-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ChannelData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ChannelPriority - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleClassLoader - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"excludeHostClasses - method",slug:"excludehostclasses-method",link:"#excludehostclasses-method",children:[]},{level:3,title:"excludeModuleClasses - method",slug:"excludemoduleclasses-method",link:"#excludemoduleclasses-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PrefsData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModulePreferenceFragment - class",headers:[{level:2,title:"onCreatePreferencesInModuleApp - method",slug:"oncreatepreferencesinmoduleapp-method",link:"#oncreatepreferencesinmoduleapp-method",children:[]},{level:2,title:"onSharedPreferenceChanged - method",slug:"onsharedpreferencechanged-method",link:"#onsharedpreferencechanged-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",pathLocale:"/en/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",pathLocale:"/en/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",pathLocale:"/en/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",pathLocale:"/en/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",pathLocale:"/en/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/en/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Br=ye(hf),df=()=>Br;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Br.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=Y(()=>e.value.filter(n=>n.pathLocale===t.value));return Y(()=>{const n=l.value.trim().toLowerCase();if(!n)return[];const a=[],r=(s,c)=>{sa(n,[c.title])&&a.push({link:`${s.path}#${c.slug}`,title:s.title,header:c.title});for(const h of c.children){if(a.length>=i.value)return;r(s,h)}};for(const s of o.value){if(a.length>=i.value)break;if(sa(n,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const c of s.headers){if(a.length>=i.value)break;r(s,c)}}return a})},pf=e=>{const t=ye(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},mf=ue({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:l,maxSuggestions:i}=Ei(e),o=Zt(),n=Wl(),a=df(),r=ye(null),s=ye(!1),c=ye(""),h=Y(()=>{var L;return(L=t.value[n.value])!=null?L:{}}),p=uf({searchIndex:a,routeLocale:n,query:c,maxSuggestions:i}),{focusIndex:m,focusNext:g,focusPrev:x}=pf(p);cf({input:r,hotKeys:l});const P=Y(()=>s.value&&!!p.value.length),E=()=>{!P.value||x()},k=()=>{!P.value||g()},_=L=>{if(!P.value)return;const H=p.value[L];!H||o.push(H.link).then(()=>{c.value="",m.value=0})};return()=>he("form",{class:"search-box",role:"search"},[he("input",{ref:r,type:"search",placeholder:h.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:L=>c.value=L.target.value,onKeydown:L=>{switch(L.key){case"ArrowUp":{E();break}case"ArrowDown":{k();break}case"Enter":{L.preventDefault(),_(m.value);break}}}}),P.value&&he("ul",{class:"suggestions",onMouseleave:()=>m.value=-1},p.value.map(({link:L,title:H,header:U},ee)=>he("li",{class:["suggestion",{focus:m.value===ee}],onMouseenter:()=>m.value=ee,onMousedown:()=>_(ee)},he("a",{href:L,onClick:w=>w.preventDefault()},[he("span",{class:"page-title"},H),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Ht({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Yd,Xd,nu,cu,mu,nf,vf];var Ur=ye(es),Wr=Co({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),gt=ye(Wr),Ot=()=>gt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{Ur.value[e.key]=()=>Promise.resolve(e),e.key===gt.value.key&&(gt.value=e)});var Xr=Symbol(""),vt=()=>{const e=Me(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=Me(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=Me(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=Me(No);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},At=ye(Th),Gr=()=>At;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{At.value=e});var Qr=Symbol(""),jo=()=>{const e=Me(Qr);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},xf=Symbol(""),Ut=gl({resolvePageData:async e=>{const t=Ur.value[e],l=await(t==null?void 0:t());return l!=null?l:Wr},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,l)=>{const i=be(t.description)?t.description:l.description,o=[...te(t.head)?t.head:[],...l.head,["title",{},e],["meta",{name:"description",content:i}]];return Ih(o)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>pr(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),$o=ue({name:"ClientOnly",setup(e,t){const l=ye(!1);return Je(()=>{l.value=!0}),()=>{var i,o;return l.value?(o=(i=t.slots).default)==null?void 0:o.call(i):null}}}),Ef=ue({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Ot(),l=Y(()=>mr[e.pageKey||t.value.key]);return()=>l.value?he(l.value):he("div","404 Not Found")}}),Cf="Layout",Rf="NotFound",Pf=oi.reduce((e,t)=>({...e,...t.layouts}),{}),ca=ue({name:"Vuepress",setup(){const e=Ot(),t=Y(()=>{let l;if(e.value.path){const i=e.value.frontmatter.layout;be(i)?l=i:l=Cf}else l=Rf;return Pf[l]});return()=>he(t.value)}}),Yo=e=>Ul(e)?e:`${Gr().value.base}${ur(e)}`;const Lf=[["v-8daa1a0e","/",{title:""},["/index.html","/index.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/index.md"]],["v-c0c85b84","/zh-cn/",{title:"\u9996\u9875"},["/zh-cn/index.html","/zh-cn/index.md"]],["v-7a15fe3b","/en/about/about.html",{title:"About this Document"},["/en/about/about","/en/about/about.md"]],["v-3f851d14","/en/about/changelog.html",{title:"Changelog"},["/en/about/changelog","/en/about/changelog.md"]],["v-193cf592","/en/about/contacts.html",{title:"Contact Us"},["/en/about/contacts","/en/about/contacts.md"]],["v-ae7b83f2","/en/about/future.html",{title:"Looking for Future"},["/en/about/future","/en/about/future.md"]],["v-64fc7bb8","/en/api/home.html",{title:"Document Introduce"},["/en/api/home","/en/api/home.md"]],["v-7b22efaf","/en/guide/example.html",{title:"Usage Example"},["/en/guide/example","/en/guide/example.md"]],["v-efb45d4c","/en/guide/home.html",{title:"Introduce"},["/en/guide/home","/en/guide/home.md"]],["v-277b35ca","/en/guide/knowledge.html",{title:"Basic Knowledge"},["/en/guide/knowledge","/en/guide/knowledge.md"]],["v-77d752a2","/en/guide/move-to-new-api.html",{title:"Migrate from Xposed API"},["/en/guide/move-to-new-api","/en/guide/move-to-new-api.md"]],["v-72889797","/en/guide/quick-start.html",{title:"Quick Start"},["/en/guide/quick-start","/en/guide/quick-start.md"]],["v-9cfea7fc","/en/config/api-example.html",{title:"API Basic Configs"},["/en/config/api-example","/en/config/api-example.md"]],["v-72c12b7d","/en/config/api-exception.html",{title:"API Exception Handling"},["/en/config/api-exception","/en/config/api-exception.md"]],["v-793879e8","/en/config/api-using.html",{title:"Use as Hook API Configs"},["/en/config/api-using","/en/config/api-using.md"]],["v-29d6c1ba","/en/config/r8-proguard.html",{title:"R8 & Proguard Obfuscate"},["/en/config/r8-proguard","/en/config/r8-proguard.md"]],["v-24e71de7","/en/config/xposed-using.html",{title:"Use as Xposed Module Configs"},["/en/config/xposed-using","/en/config/xposed-using.md"]],["v-55c11626","/en/tools/yukihookapi-projectbuilder.html",{title:"YukiHookAPI Project Builder"},["/en/tools/yukihookapi-projectbuilder","/en/tools/yukihookapi-projectbuilder.md"]],["v-41967128","/zh-cn/about/about.html",{title:"\u5173\u4E8E\u6B64\u6587\u6863"},["/zh-cn/about/about","/zh-cn/about/about.md"]],["v-0e6c3476","/zh-cn/about/changelog.html",{title:"\u66F4\u65B0\u65E5\u5FD7"},["/zh-cn/about/changelog","/zh-cn/about/changelog.md"]],["v-6cf86266","/zh-cn/about/contacts.html",{title:"\u8054\u7CFB\u6211\u4EEC"},["/zh-cn/about/contacts","/zh-cn/about/contacts.md"]],["v-3106ca14","/zh-cn/about/future.html",{title:"\u5C55\u671B\u672A\u6765"},["/zh-cn/about/future","/zh-cn/about/future.md"]],["v-c6114c9e","/zh-cn/config/api-example.html",{title:"API \u57FA\u672C\u914D\u7F6E"},["/zh-cn/config/api-example","/zh-cn/config/api-example.md"]],["v-5b43296c","/zh-cn/config/api-exception.html",{title:"API \u5F02\u5E38\u5904\u7406"},["/zh-cn/config/api-exception","/zh-cn/config/api-exception.md"]],["v-2ee67152","/zh-cn/config/api-using.html",{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E"},["/zh-cn/config/api-using","/zh-cn/config/api-using.md"]],["v-154d6f69","/zh-cn/config/r8-proguard.html",{title:"R8 \u4E0E Proguard \u6DF7\u6DC6"},["/zh-cn/config/r8-proguard","/zh-cn/config/r8-proguard.md"]],["v-af73b3d0","/zh-cn/config/xposed-using.html",{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E"},["/zh-cn/config/xposed-using","/zh-cn/config/xposed-using.md"]],["v-c8deafb2","/zh-cn/api/home.html",{title:"\u6587\u6863\u4ECB\u7ECD"},["/zh-cn/api/home","/zh-cn/api/home.md"]],["v-13b430a0","/zh-cn/guide/example.html",{title:"\u7528\u6CD5\u793A\u4F8B"},["/zh-cn/guide/example","/zh-cn/guide/example.md"]],["v-6a609e09","/zh-cn/guide/home.html",{title:"\u4ECB\u7ECD"},["/zh-cn/guide/home","/zh-cn/guide/home.md"]],["v-b4f1a468","/zh-cn/guide/knowledge.html",{title:"\u57FA\u7840\u77E5\u8BC6"},["/zh-cn/guide/knowledge","/zh-cn/guide/knowledge.md"]],["v-c0d5dada","/zh-cn/guide/move-to-new-api.html",{title:"\u4ECE Xposed API \u8FC1\u79FB"},["/zh-cn/guide/move-to-new-api","/zh-cn/guide/move-to-new-api.md"]],["v-24840ff0","/zh-cn/guide/quick-start.html",{title:"\u5FEB\u901F\u5F00\u59CB"},["/zh-cn/guide/quick-start","/zh-cn/guide/quick-start.md"]],["v-a2fab4d6","/zh-cn/tools/yukihookapi-projectbuilder.html",{title:"YukiHookAPI \u6784\u5EFA\u5DE5\u5177"},["/zh-cn/tools/yukihookapi-projectbuilder","/zh-cn/tools/yukihookapi-projectbuilder.md"]],["v-12042f1f","/en/api/special-features/host-inject.html",{title:"Host Resource Injection Extension"},["/en/api/special-features/host-inject","/en/api/special-features/host-inject.md"]],["v-deaff1d0","/en/api/special-features/host-lifecycle.html",{title:"Host Lifecycle Extension"},["/en/api/special-features/host-lifecycle","/en/api/special-features/host-lifecycle.md"]],["v-33c1dc26","/en/api/special-features/logger.html",{title:"Debug Logs"},["/en/api/special-features/logger","/en/api/special-features/logger.md"]],["v-581ddb9c","/en/api/special-features/reflection.html",{title:"Reflection Extensions"},["/en/api/special-features/reflection","/en/api/special-features/reflection.md"]],["v-2e6ad66c","/en/api/special-features/xposed-channel.html",{title:"Xposed Module and Host Channel"},["/en/api/special-features/xposed-channel","/en/api/special-features/xposed-channel.md"]],["v-68bebbf4","/en/api/special-features/xposed-storage.html",{title:"Xposed Module Data Storage"},["/en/api/special-features/xposed-storage","/en/api/special-features/xposed-storage.md"]],["v-6ac5be8e","/zh-cn/api/special-features/host-inject.html",{title:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55"},["/zh-cn/api/special-features/host-inject","/zh-cn/api/special-features/host-inject.md"]],["v-357a8d49","/zh-cn/api/special-features/host-lifecycle.html",{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55"},["/zh-cn/api/special-features/host-lifecycle","/zh-cn/api/special-features/host-lifecycle.md"]],["v-1f0f591e","/zh-cn/api/special-features/logger.html",{title:"\u8C03\u8BD5\u65E5\u5FD7"},["/zh-cn/api/special-features/logger","/zh-cn/api/special-features/logger.md"]],["v-001858e3","/zh-cn/api/special-features/reflection.html",{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55"},["/zh-cn/api/special-features/reflection","/zh-cn/api/special-features/reflection.md"]],["v-598546c6","/zh-cn/api/special-features/xposed-channel.html",{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865"},["/zh-cn/api/special-features/xposed-channel","/zh-cn/api/special-features/xposed-channel.md"]],["v-0d914225","/zh-cn/api/special-features/xposed-storage.html",{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8"},["/zh-cn/api/special-features/xposed-storage","/zh-cn/api/special-features/xposed-storage.md"]],["v-053599a5","/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",{title:"YukiHookAPI - object"},["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"]],["v-6931cb54","/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",{title:"YukiHookAPI - object"},["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.md"]],["v-818b3ca6","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",{title:"InjectYukiHookWithXposed - annotation"},["/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.md"]],["v-b6a815c4","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",{title:"CurrentClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.md"]],["v-0183e3fc","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",{title:"GenericClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.md"]],["v-57506200","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",{title:"HookClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.md"]],["v-9af56c1a","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",{title:"HookResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.md"]],["v-032b1710","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",{title:"VariousClass - class"},["/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.md"]],["v-e288ce96","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",{title:"YukiBaseHooker - class"},["/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.md"]],["v-71147891","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5ed1ceee","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-0d0fcec2","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"]],["v-65091354","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",{title:"YukiHookFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.md"]],["v-36aec5ad","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",{title:"LoggerFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"]],["v-60cbe1b4","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-b381a126","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-30f3ba1e","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",{title:"InjectYukiHookWithXposed - annotation"},["/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.md"]],["v-6e47300f","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",{title:"CurrentClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.md"]],["v-69c1c226","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",{title:"GenericClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.md"]],["v-735374af","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",{title:"HookClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.md"]],["v-1c516d22","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",{title:"HookResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.md"]],["v-66735bfe","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",{title:"VariousClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.md"]],["v-3ac40680","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5e81af42","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-516df326","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",{title:"YukiBaseHooker - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.md"]],["v-213d88b3","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"]],["v-448e9585","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",{title:"YukiHookFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.md"]],["v-004a009e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",{title:"LoggerFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"]],["v-75a9b636","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-100b529c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-8293d958","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-7b0abf86","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-5309e4a0","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-a2615d0c","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-ba01a600","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-7fec5836","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-7414265a","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-003862c2","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-1d680acc","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-5e874c45","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-4ea62475","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-ef79cde2","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-5acc12ab","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-14ec8671","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-4709ad58","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-632be8ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-5858709e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-763140ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-4fca92c0","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.md"]],["v-2a898c66","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.md"]],["v-a71937aa","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"]],["v-42e0f0ab","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md"]],["v-a4aa4d00","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"]],["v-0f719471","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.md"]],["v-45111efc","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.md"]],["v-1e2cbc9c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"]],["v-22449c48","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md"]],["v-fd738322","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"]],["v-19e7277e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",{title:"YukiXposedEvent - object"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.md"]],["v-8455e04e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.md"]],["v-7b087cce","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.md"]],["v-a00b4de6","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",{title:"YukiResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.md"]],["v-2f64a2d4","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",{title:"ChannelData - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.md"]],["v-87027140","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",{title:"ChannelPriority - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md"]],["v-2d4e0da6","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",{title:"ModuleClassLoader - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.md"]],["v-58ed8298","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",{title:"PrefsData - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.md"]],["v-23e1a817","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",{title:"ModulePreferenceFragment - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.md"]],["v-0a4de82f","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html",{title:"YukiXposedEvent - object"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.md"]],["v-8266e0ec","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.md"]],["v-aa38fa86","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.md"]],["v-21b3b17e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html",{title:"YukiResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.md"]],["v-493d37f6","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html",{title:"ChannelData - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.md"]],["v-b57870de","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html",{title:"ChannelPriority - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.md"]],["v-4b468415","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html",{title:"ModuleClassLoader - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.md"]],["v-d99f7f36","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",{title:"PrefsData - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.md"]],["v-53bcae06","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html",{title:"ModulePreferenceFragment - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.md"]],["v-52995ef7","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.md"]],["v-8d5ce71a","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.md"]],["v-f5b1ffb2","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.md"]],["v-652b815b","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.md"]],["v-08b70f7f","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.md"]],["v-21f64ebf","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.md"]],["v-77f11cf9","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.md"]],["v-64827680","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.md"]],["v-1b2ad030","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.md"]],["v-547a3c3c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.md"]],["v-58c26516","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.md"]],["v-80fd32ec","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.md"]],["v-a42f54a4","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.md"]],["v-3e67a42e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.md"]],["v-2cab152c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.md"]],["v-5388621e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.md"]],["v-2d5d16db","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",{title:"ModuleAppActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"]],["v-cadbe48e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",{title:"ModuleAppCompatActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"]],["v-78731c50","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",{title:"ModuleContextThemeWrapper - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.md"]],["v-1446bdca","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",{title:"ModuleAppActivity - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"]],["v-c7cef530","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",{title:"ModuleAppCompatActivity - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"]],["v-44efb702","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",{title:"ModuleContextThemeWrapper - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.md"]],["v-5e375d98","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.md"]],["v-b8000f3a","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Tf=()=>Lf.reduce((e,[t,l,i,o])=>(e.push({name:t,path:l,component:ca,meta:i},...o.map(n=>({path:n,redirect:l}))),e),[{name:"404",path:"/:catchAll(.*)",component:ca}]),Af=Gh,If=()=>{const e=Fd({history:Af(dr(At.value.base)),routes:Tf(),scrollBehavior:(t,l,i)=>i||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,l)=>{var i;(t.path!==l.path||l===mt)&&([gt.value]=await Promise.all([Ut.resolvePageData(t.name),(i=mr[t.name])==null?void 0:i.__asyncLoader()]))}),e},wf=e=>{e.component("ClientOnly",$o),e.component("Content",Ef)},Of=(e,t)=>{const l=Y(()=>Ut.resolveRouteLocale(At.value.locales,t.currentRoute.value.path)),i=Y(()=>Ut.resolveSiteLocaleData(At.value,l.value)),o=Y(()=>Ut.resolvePageFrontmatter(gt.value)),n=Y(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=Y(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=Y(()=>Ut.resolvePageLang(gt.value));return e.provide(No,l),e.provide(Qr,i),e.provide(Xr,o),e.provide(_f,n),e.provide(qr,a),e.provide(Kr,r),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>o.value},$head:{get:()=>a.value},$headTitle:{get:()=>n.value},$lang:{get:()=>r.value},$page:{get:()=>gt.value},$routeLocale:{get:()=>l.value},$site:{get:()=>At.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>Yo}}),{pageData:gt,pageFrontmatter:o,pageHead:a,pageHeadTitle:n,pageLang:r,routeLocale:l,siteData:At,siteLocaleData:i}},Ff=()=>{const e=St(),t=bf(),l=yf(),i=ye([]),o=()=>{t.value.forEach(a=>{const r=zf(a);r&&i.value.push(r)})},n=()=>{document.documentElement.lang=l.value,i.value.forEach(a=>{a.parentNode===document.head&&document.head.removeChild(a)}),i.value.splice(0,i.value.length),t.value.forEach(a=>{const r=Df(a);r!==null&&(document.head.appendChild(r),i.value.push(r))})};Gt(xf,n),Je(()=>{o(),n(),dt(()=>e.path,()=>n())})},zf=([e,t,l=""])=>{const i=Object.entries(t).map(([r,s])=>be(s)?`[${r}="${s}"]`:s===!0?`[${r}]`:"").join(""),o=`head > ${e}${i}`;return Array.from(document.querySelectorAll(o)).find(r=>r.innerText===l)||null},Df=([e,t,l])=>{if(!be(e))return null;const i=document.createElement(e);return Oo(t)&&Object.entries(t).forEach(([o,n])=>{be(n)?i.setAttribute(o,n):n===!0&&i.setAttribute(o,"")}),be(l)&&i.appendChild(document.createTextNode(l)),i},Mf=Ph,Hf=async()=>{var l;const e=Mf({name:"VuepressApp",setup(){var i;Ff();for(const o of oi)(i=o.setup)==null||i.call(o);return()=>[he(Pr),...oi.flatMap(({rootComponents:o=[]})=>o.map(n=>he(n)))]}}),t=If();wf(e),Of(e,t);for(const i of oi)await((l=i.enhance)==null?void 0:l.call(i,{app:e,router:t,siteData:At}));return e.use(t),{app:e,router:t}};Hf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Te as _,jc as a,fe as b,Z as c,Hf as createVueApp,oe as d,Mt as e,N as o,_t as r,He as w}; diff --git a/docs/assets/changelog.html.06fcff6b.js b/docs/assets/changelog.html.06fcff6b.js new file mode 100644 index 000000000..20703d8f7 --- /dev/null +++ b/docs/assets/changelog.html.06fcff6b.js @@ -0,0 +1 @@ +const l=JSON.parse('{"key":"v-3f851d14","path":"/en/about/changelog.html","title":"Changelog","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.6 | 2023.01.21","slug":"_1-1-6-2023-01-21","link":"#_1-1-6-2023-01-21","children":[]},{"level":3,"title":"1.1.5 | 2023.01.13","slug":"_1-1-5-2023-01-13","link":"#_1-1-5-2023-01-13","children":[]},{"level":3,"title":"1.1.4 | 2022.10.04","slug":"_1-1-4-2022-10-04","link":"#_1-1-4-2022-10-04","children":[]},{"level":3,"title":"1.1.3 | 2022.09.30","slug":"_1-1-3-2022-09-30","link":"#_1-1-3-2022-09-30","children":[]},{"level":3,"title":"1.1.2 | 2022.09.30","slug":"_1-1-2-2022-09-30","link":"#_1-1-2-2022-09-30","children":[]},{"level":3,"title":"1.1.1 | 2022.09.28","slug":"_1-1-1-2022-09-28","link":"#_1-1-1-2022-09-28","children":[]},{"level":3,"title":"1.1.0 | 2022.09.28","slug":"_1-1-0-2022-09-28","link":"#_1-1-0-2022-09-28","children":[]},{"level":3,"title":"1.0.92 | 2022.05.31","slug":"_1-0-92-2022-05-31","link":"#_1-0-92-2022-05-31","children":[]},{"level":3,"title":"1.0.91 | 2022.05.29","slug":"_1-0-91-2022-05-29","link":"#_1-0-91-2022-05-29","children":[]},{"level":3,"title":"1.0.90 | 2022.05.27","slug":"_1-0-90-2022-05-27","link":"#_1-0-90-2022-05-27","children":[]},{"level":3,"title":"1.0.89 | 2022.05.26","slug":"_1-0-89-2022-05-26","link":"#_1-0-89-2022-05-26","children":[]},{"level":3,"title":"1.0.88 | 2022.05.25","slug":"_1-0-88-2022-05-25","link":"#_1-0-88-2022-05-25","children":[]},{"level":3,"title":"1.0.87 | 2022.05.10","slug":"_1-0-87-2022-05-10","link":"#_1-0-87-2022-05-10","children":[]},{"level":3,"title":"1.0.86 | 2022.05.06","slug":"_1-0-86-2022-05-06","link":"#_1-0-86-2022-05-06","children":[]},{"level":3,"title":"1.0.85 | 2022.05.04","slug":"_1-0-85-2022-05-04","link":"#_1-0-85-2022-05-04","children":[]},{"level":3,"title":"1.0.83 | 2022.05.04","slug":"_1-0-83-2022-05-04","link":"#_1-0-83-2022-05-04","children":[]},{"level":3,"title":"1.0.82 | 2022.05.04","slug":"_1-0-82-2022-05-04","link":"#_1-0-82-2022-05-04","children":[]},{"level":3,"title":"1.0.81 | 2022.05.04","slug":"_1-0-81-2022-05-04","link":"#_1-0-81-2022-05-04","children":[]},{"level":3,"title":"1.0.80 | 2022.05.01","slug":"_1-0-80-2022-05-01","link":"#_1-0-80-2022-05-01","children":[]},{"level":3,"title":"1.0.78 | 2022.04.18","slug":"_1-0-78-2022-04-18","link":"#_1-0-78-2022-04-18","children":[]},{"level":3,"title":"1.0.77 | 2022.04.15","slug":"_1-0-77-2022-04-15","link":"#_1-0-77-2022-04-15","children":[]},{"level":3,"title":"1.0.75 | 2022.04.13","slug":"_1-0-75-2022-04-13","link":"#_1-0-75-2022-04-13","children":[]},{"level":3,"title":"1.0.73 | 2022.04.10","slug":"_1-0-73-2022-04-10","link":"#_1-0-73-2022-04-10","children":[]},{"level":3,"title":"1.0.72 | 2022.04.09","slug":"_1-0-72-2022-04-09","link":"#_1-0-72-2022-04-09","children":[]},{"level":3,"title":"1.0.71 | 2022.04.04","slug":"_1-0-71-2022-04-04","link":"#_1-0-71-2022-04-04","children":[]},{"level":3,"title":"1.0.70 | 2022.04.04","slug":"_1-0-70-2022-04-04","link":"#_1-0-70-2022-04-04","children":[]},{"level":3,"title":"1.0.69 | 2022.03.30","slug":"_1-0-69-2022-03-30","link":"#_1-0-69-2022-03-30","children":[]},{"level":3,"title":"1.0.68 | 2022.03.29","slug":"_1-0-68-2022-03-29","link":"#_1-0-68-2022-03-29","children":[]},{"level":3,"title":"1.0.67 | 2022.03.27","slug":"_1-0-67-2022-03-27","link":"#_1-0-67-2022-03-27","children":[]},{"level":3,"title":"1.0.66 | 2022.03.25","slug":"_1-0-66-2022-03-25","link":"#_1-0-66-2022-03-25","children":[]},{"level":3,"title":"1.0.65 | 2022.03.25","slug":"_1-0-65-2022-03-25","link":"#_1-0-65-2022-03-25","children":[]},{"level":3,"title":"1.0.6 | 2022.03.20","slug":"_1-0-6-2022-03-20","link":"#_1-0-6-2022-03-20","children":[]},{"level":3,"title":"1.0.55 | 2022.03.18","slug":"_1-0-55-2022-03-18","link":"#_1-0-55-2022-03-18","children":[]},{"level":3,"title":"1.0.5 | 2022.03.18","slug":"_1-0-5-2022-03-18","link":"#_1-0-5-2022-03-18","children":[]},{"level":3,"title":"1.0.4 | 2022.03.06","slug":"_1-0-4-2022-03-06","link":"#_1-0-4-2022-03-06","children":[]},{"level":3,"title":"1.0.3 | 2022.03.02","slug":"_1-0-3-2022-03-02","link":"#_1-0-3-2022-03-02","children":[]},{"level":3,"title":"1.0.2 | 2022.02.18","slug":"_1-0-2-2022-02-18","link":"#_1-0-2-2022-02-18","children":[]},{"level":3,"title":"1.0.1 | 2022.02.15","slug":"_1-0-1-2022-02-15","link":"#_1-0-1-2022-02-15","children":[]},{"level":3,"title":"1.0 | 2022.02.14","slug":"_1-0-2022-02-14","link":"#_1-0-2022-02-14","children":[]}],"git":{"updatedTime":1674232325000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":8}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.9ab752eb.js b/docs/assets/changelog.html.1fa81630.js similarity index 89% rename from docs/assets/changelog.html.9ab752eb.js rename to docs/assets/changelog.html.1fa81630.js index a85acae33..026b2dac6 100644 --- a/docs/assets/changelog.html.9ab752eb.js +++ b/docs/assets/changelog.html.1fa81630.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-3f851d14","path":"/en/about/changelog.html","title":"Changelog","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.5 | 2023.01.13","slug":"_1-1-5-2023-01-13","link":"#_1-1-5-2023-01-13","children":[]},{"level":3,"title":"1.1.4 | 2022.10.04","slug":"_1-1-4-2022-10-04","link":"#_1-1-4-2022-10-04","children":[]},{"level":3,"title":"1.1.3 | 2022.09.30","slug":"_1-1-3-2022-09-30","link":"#_1-1-3-2022-09-30","children":[]},{"level":3,"title":"1.1.2 | 2022.09.30","slug":"_1-1-2-2022-09-30","link":"#_1-1-2-2022-09-30","children":[]},{"level":3,"title":"1.1.1 | 2022.09.28","slug":"_1-1-1-2022-09-28","link":"#_1-1-1-2022-09-28","children":[]},{"level":3,"title":"1.1.0 | 2022.09.28","slug":"_1-1-0-2022-09-28","link":"#_1-1-0-2022-09-28","children":[]},{"level":3,"title":"1.0.92 | 2022.05.31","slug":"_1-0-92-2022-05-31","link":"#_1-0-92-2022-05-31","children":[]},{"level":3,"title":"1.0.91 | 2022.05.29","slug":"_1-0-91-2022-05-29","link":"#_1-0-91-2022-05-29","children":[]},{"level":3,"title":"1.0.90 | 2022.05.27","slug":"_1-0-90-2022-05-27","link":"#_1-0-90-2022-05-27","children":[]},{"level":3,"title":"1.0.89 | 2022.05.26","slug":"_1-0-89-2022-05-26","link":"#_1-0-89-2022-05-26","children":[]},{"level":3,"title":"1.0.88 | 2022.05.25","slug":"_1-0-88-2022-05-25","link":"#_1-0-88-2022-05-25","children":[]},{"level":3,"title":"1.0.87 | 2022.05.10","slug":"_1-0-87-2022-05-10","link":"#_1-0-87-2022-05-10","children":[]},{"level":3,"title":"1.0.86 | 2022.05.06","slug":"_1-0-86-2022-05-06","link":"#_1-0-86-2022-05-06","children":[]},{"level":3,"title":"1.0.85 | 2022.05.04","slug":"_1-0-85-2022-05-04","link":"#_1-0-85-2022-05-04","children":[]},{"level":3,"title":"1.0.83 | 2022.05.04","slug":"_1-0-83-2022-05-04","link":"#_1-0-83-2022-05-04","children":[]},{"level":3,"title":"1.0.82 | 2022.05.04","slug":"_1-0-82-2022-05-04","link":"#_1-0-82-2022-05-04","children":[]},{"level":3,"title":"1.0.81 | 2022.05.04","slug":"_1-0-81-2022-05-04","link":"#_1-0-81-2022-05-04","children":[]},{"level":3,"title":"1.0.80 | 2022.05.01","slug":"_1-0-80-2022-05-01","link":"#_1-0-80-2022-05-01","children":[]},{"level":3,"title":"1.0.78 | 2022.04.18","slug":"_1-0-78-2022-04-18","link":"#_1-0-78-2022-04-18","children":[]},{"level":3,"title":"1.0.77 | 2022.04.15","slug":"_1-0-77-2022-04-15","link":"#_1-0-77-2022-04-15","children":[]},{"level":3,"title":"1.0.75 | 2022.04.13","slug":"_1-0-75-2022-04-13","link":"#_1-0-75-2022-04-13","children":[]},{"level":3,"title":"1.0.73 | 2022.04.10","slug":"_1-0-73-2022-04-10","link":"#_1-0-73-2022-04-10","children":[]},{"level":3,"title":"1.0.72 | 2022.04.09","slug":"_1-0-72-2022-04-09","link":"#_1-0-72-2022-04-09","children":[]},{"level":3,"title":"1.0.71 | 2022.04.04","slug":"_1-0-71-2022-04-04","link":"#_1-0-71-2022-04-04","children":[]},{"level":3,"title":"1.0.70 | 2022.04.04","slug":"_1-0-70-2022-04-04","link":"#_1-0-70-2022-04-04","children":[]},{"level":3,"title":"1.0.69 | 2022.03.30","slug":"_1-0-69-2022-03-30","link":"#_1-0-69-2022-03-30","children":[]},{"level":3,"title":"1.0.68 | 2022.03.29","slug":"_1-0-68-2022-03-29","link":"#_1-0-68-2022-03-29","children":[]},{"level":3,"title":"1.0.67 | 2022.03.27","slug":"_1-0-67-2022-03-27","link":"#_1-0-67-2022-03-27","children":[]},{"level":3,"title":"1.0.66 | 2022.03.25","slug":"_1-0-66-2022-03-25","link":"#_1-0-66-2022-03-25","children":[]},{"level":3,"title":"1.0.65 | 2022.03.25","slug":"_1-0-65-2022-03-25","link":"#_1-0-65-2022-03-25","children":[]},{"level":3,"title":"1.0.6 | 2022.03.20","slug":"_1-0-6-2022-03-20","link":"#_1-0-6-2022-03-20","children":[]},{"level":3,"title":"1.0.55 | 2022.03.18","slug":"_1-0-55-2022-03-18","link":"#_1-0-55-2022-03-18","children":[]},{"level":3,"title":"1.0.5 | 2022.03.18","slug":"_1-0-5-2022-03-18","link":"#_1-0-5-2022-03-18","children":[]},{"level":3,"title":"1.0.4 | 2022.03.06","slug":"_1-0-4-2022-03-06","link":"#_1-0-4-2022-03-06","children":[]},{"level":3,"title":"1.0.3 | 2022.03.02","slug":"_1-0-3-2022-03-02","link":"#_1-0-3-2022-03-02","children":[]},{"level":3,"title":"1.0.2 | 2022.02.18","slug":"_1-0-2-2022-02-18","link":"#_1-0-2-2022-02-18","children":[]},{"level":3,"title":"1.0.1 | 2022.02.15","slug":"_1-0-1-2022-02-15","link":"#_1-0-1-2022-02-15","children":[]},{"level":3,"title":"1.0 | 2022.02.14","slug":"_1-0-2022-02-14","link":"#_1-0-2022-02-14","children":[]}],"git":{"updatedTime":1673554573000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; +const l=JSON.parse('{"key":"v-0e6c3476","path":"/zh-cn/about/changelog.html","title":"\u66F4\u65B0\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.6 | 2023.01.21","slug":"_1-1-6-2023-01-21","link":"#_1-1-6-2023-01-21","children":[]},{"level":3,"title":"1.1.5 | 2023.01.13","slug":"_1-1-5-2023-01-13","link":"#_1-1-5-2023-01-13","children":[]},{"level":3,"title":"1.1.4 | 2022.10.04","slug":"_1-1-4-2022-10-04","link":"#_1-1-4-2022-10-04","children":[]},{"level":3,"title":"1.1.3 | 2022.09.30","slug":"_1-1-3-2022-09-30","link":"#_1-1-3-2022-09-30","children":[]},{"level":3,"title":"1.1.2 | 2022.09.30","slug":"_1-1-2-2022-09-30","link":"#_1-1-2-2022-09-30","children":[]},{"level":3,"title":"1.1.1 | 2022.09.28","slug":"_1-1-1-2022-09-28","link":"#_1-1-1-2022-09-28","children":[]},{"level":3,"title":"1.1.0 | 2022.09.28","slug":"_1-1-0-2022-09-28","link":"#_1-1-0-2022-09-28","children":[]},{"level":3,"title":"1.0.92 | 2022.05.31","slug":"_1-0-92-2022-05-31","link":"#_1-0-92-2022-05-31","children":[]},{"level":3,"title":"1.0.91 | 2022.05.29","slug":"_1-0-91-2022-05-29","link":"#_1-0-91-2022-05-29","children":[]},{"level":3,"title":"1.0.90 | 2022.05.27","slug":"_1-0-90-2022-05-27","link":"#_1-0-90-2022-05-27","children":[]},{"level":3,"title":"1.0.89 | 2022.05.26","slug":"_1-0-89-2022-05-26","link":"#_1-0-89-2022-05-26","children":[]},{"level":3,"title":"1.0.88 | 2022.05.25","slug":"_1-0-88-2022-05-25","link":"#_1-0-88-2022-05-25","children":[]},{"level":3,"title":"1.0.87 | 2022.05.10","slug":"_1-0-87-2022-05-10","link":"#_1-0-87-2022-05-10","children":[]},{"level":3,"title":"1.0.86 | 2022.05.06","slug":"_1-0-86-2022-05-06","link":"#_1-0-86-2022-05-06","children":[]},{"level":3,"title":"1.0.85 | 2022.05.04","slug":"_1-0-85-2022-05-04","link":"#_1-0-85-2022-05-04","children":[]},{"level":3,"title":"1.0.83 | 2022.05.04","slug":"_1-0-83-2022-05-04","link":"#_1-0-83-2022-05-04","children":[]},{"level":3,"title":"1.0.82 | 2022.05.04","slug":"_1-0-82-2022-05-04","link":"#_1-0-82-2022-05-04","children":[]},{"level":3,"title":"1.0.81 | 2022.05.04","slug":"_1-0-81-2022-05-04","link":"#_1-0-81-2022-05-04","children":[]},{"level":3,"title":"1.0.80 | 2022.05.01","slug":"_1-0-80-2022-05-01","link":"#_1-0-80-2022-05-01","children":[]},{"level":3,"title":"1.0.78 | 2022.04.18","slug":"_1-0-78-2022-04-18","link":"#_1-0-78-2022-04-18","children":[]},{"level":3,"title":"1.0.77 | 2022.04.15","slug":"_1-0-77-2022-04-15","link":"#_1-0-77-2022-04-15","children":[]},{"level":3,"title":"1.0.75 | 2022.04.13","slug":"_1-0-75-2022-04-13","link":"#_1-0-75-2022-04-13","children":[]},{"level":3,"title":"1.0.73 | 2022.04.10","slug":"_1-0-73-2022-04-10","link":"#_1-0-73-2022-04-10","children":[]},{"level":3,"title":"1.0.72 | 2022.04.09","slug":"_1-0-72-2022-04-09","link":"#_1-0-72-2022-04-09","children":[]},{"level":3,"title":"1.0.71 | 2022.04.04","slug":"_1-0-71-2022-04-04","link":"#_1-0-71-2022-04-04","children":[]},{"level":3,"title":"1.0.70 | 2022.04.04","slug":"_1-0-70-2022-04-04","link":"#_1-0-70-2022-04-04","children":[]},{"level":3,"title":"1.0.69 | 2022.03.30","slug":"_1-0-69-2022-03-30","link":"#_1-0-69-2022-03-30","children":[]},{"level":3,"title":"1.0.68 | 2022.03.29","slug":"_1-0-68-2022-03-29","link":"#_1-0-68-2022-03-29","children":[]},{"level":3,"title":"1.0.67 | 2022.03.27","slug":"_1-0-67-2022-03-27","link":"#_1-0-67-2022-03-27","children":[]},{"level":3,"title":"1.0.66 | 2022.03.25","slug":"_1-0-66-2022-03-25","link":"#_1-0-66-2022-03-25","children":[]},{"level":3,"title":"1.0.65 | 2022.03.25","slug":"_1-0-65-2022-03-25","link":"#_1-0-65-2022-03-25","children":[]},{"level":3,"title":"1.0.6 | 2022.03.20","slug":"_1-0-6-2022-03-20","link":"#_1-0-6-2022-03-20","children":[]},{"level":3,"title":"1.0.55 | 2022.03.18","slug":"_1-0-55-2022-03-18","link":"#_1-0-55-2022-03-18","children":[]},{"level":3,"title":"1.0.5 | 2022.03.18","slug":"_1-0-5-2022-03-18","link":"#_1-0-5-2022-03-18","children":[]},{"level":3,"title":"1.0.4 | 2022.03.06","slug":"_1-0-4-2022-03-06","link":"#_1-0-4-2022-03-06","children":[]},{"level":3,"title":"1.0.3 | 2022.03.02","slug":"_1-0-3-2022-03-02","link":"#_1-0-3-2022-03-02","children":[]},{"level":3,"title":"1.0.2 | 2022.02.18","slug":"_1-0-2-2022-02-18","link":"#_1-0-2-2022-02-18","children":[]},{"level":3,"title":"1.0.1 | 2022.02.15","slug":"_1-0-1-2022-02-15","link":"#_1-0-1-2022-02-15","children":[]},{"level":3,"title":"1.0 | 2022.02.14","slug":"_1-0-2022-02-14","link":"#_1-0-2022-02-14","children":[]}],"git":{"updatedTime":1674232325000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":10}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.47310692.js b/docs/assets/changelog.html.47310692.js deleted file mode 100644 index f9ba7ace9..000000000 --- a/docs/assets/changelog.html.47310692.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,r as c,o as s,c as l,b as e,d as t,a as i,e as o}from"./app.a3fd8dd4.js";const r={},h=i('

    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-1-5-2023-01-13",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),_=o(" 1.1.5 | 2023.01.13 \u2002"),p=i('
    • 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 protection
    • YukiHookDataChannel 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 data
    • YukiHookDataChannel has added the function of automatically segmenting when the sent data is too large, only supports List, Map, Set, String types
    • YukiHookLogger 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),f={id:"_1-1-4-2022-10-04",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),k=o(" 1.1.4 | 2022.10.04 \u2002"),y=i("
    • 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),b={id:"_1-1-3-2022-09-30",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),v=o(" 1.1.3 | 2022.09.30 \u2002"),w=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),A={id:"_1-1-2-2022-09-30",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),P=o(" 1.1.2 | 2022.09.30 \u2002"),C=i('
    • 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),F={id:"_1-1-1-2022-09-28",tabindex:"-1"},M=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),I=o(" 1.1.1 | 2022.09.28 \u2002"),Y=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),R={id:"_1-1-0-2022-09-28",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),z=o(" 1.1.0 | 2022.09.28 \u2002"),D=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),L=o("Change the help documentation framework to "),T={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},X=o("VuePress"),j=i('
  • 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 only
  • Convert Class and Method of Hook App Demo to Java to provide better demo effect
  • Fixed code comment naming in Hook Module Demo
  • Refactored a lot of low-level Hook logic and the docking method of Xposed API
  • Removed 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 array
  • Optimized automatic handler to merge referenced jar into stub project
  • ',9),W=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 "),O={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},N=o("5ec1cff"),B=o(" for the feedback and solutions provided"),E=i("
  • Internal closure processing for the methods of API private tool classes to avoid polluting the top-level namespace
  • Fixed Creater naming to Creator for all reflection and Hook classes
  • Added YukiHookAPI.Status.compiledTimestamp function, which can get the compilation completion timestamp when used as an Xposed module
  • Added YukiHookAPI.Status.isXposedEnvironment function, which can determine whether the current (Xposed) host environment or module environment is
  • The 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 configuration
  • Added 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 calling
  • CurrentClass adds name and simpleName functions
  • Completely rewrite the core method of ReflectionTool, sorting and classifying different search conditions
  • Fixed the problem that Member obtained by directly calling declared in ReflectionTool throws an exception
  • Fixed UndefinedType in ReflectionTool is not correctly judged in Method and Constructor conditions
  • Added a friendly prompt method when the reflection search result is abnormal, which can specifically locate the problem that Member cannot be found under specified conditions
  • Added 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 in
  • Added paramCount { ... } condition in Method and Constructor of reflection search, now you can directly get it in it to customize your judgment condition
  • The current method is added to the FieldFinder result, which can directly create a call space for the result instance
  • Modified 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),q=e("code",null,"as*",-1),U=o(" function in "),V=e("code",null,"ModifierRules",-1),K=o(" renamed to "),Z=e("code",null,"is*",-1),G=o(", thanks to "),J={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Q=o("Kitsune"),$=o(" suggestion"),ee=i("
  • 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),oe=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 "),te=e("strong",null,"AA",-1),de=o(" and "),ie={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ne=o("Kitsune"),ce=o(" for suggestions"),ae=o("Fixed the problem that the object obtained by "),se=e("code",null,"appClassLoader",-1),le=o(" is incorrect in system applications in some systems, thanks to "),re={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},he=o("Luckyzyx"),ue=o(" for the feedback"),me=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),_e=o("Fixed the problem of wrong value of "),pe=e("code",null,"getStringSet",-1),fe=o(" method in "),ge=e("code",null,"YukiHookModulePrefs",-1),ke=o(" and optimize the code style, thanks to "),ye={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},be=o("Teddy_Zhu"),xe=o(),ve={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},we=o("PR"),Ae=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),He=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),Pe=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),Ce=o("Added automatic hook "),Fe=e("code",null,"SharedPreferences",-1),Me=o(" to fix the problem that file permissions are not "),Ie=e("code",null,"0664",-1),Ye=o(" in some systems, thanks to "),Re={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Se=o("5ec1cff"),ze=o(" for the feedback and implementation code provided"),De=i("
  • Added YukiHookAPI.Configs.isEnableHookSharedPreferences function, which is disabled by default and can be enabled if the permission of SharedPreferences is incorrect
  • Fixed 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 feedback
  • Detach 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 declared
  • Added module resource injection and Activity proxy functions, you can call injectModuleAppResources and registerModuleAppActivities to use
  • Added 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 called
  • obsolete classOf and clazz extension methods, add toClass and toClassOrNull usage, please move to the new method now
  • VariousClass 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 host
  • The onFailureThrowToApp function is added to the Hook callback, which can be directly thrown to the host when an exception occurs
  • Modified the printing logic of the debug log, the time-consuming records in the reflection search function will only be printed during the Hook process
  • Added the function of removing Hook in the Hook process, you can use the remove and removeSelf methods to remove the hook
  • Fixed 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 function
  • Added 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),Le=o("Added "),Te=e("code",null,"array",-1),Xe=o(" type to Resources Hook, thanks to "),je={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},We=o("PR"),Oe=o(" of "),Ne={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},Be=o("GSWXXN"),Ee=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),qe=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),Ue=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),Ve=e("li",null,"Updated Demo API version to 33",-1),Ke={id:"_1-0-92-2022-05-31",tabindex:"-1"},Ze=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),Ge=o(" 1.0.92 | 2022.05.31 \u2002"),Je=i("
    • 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),Qe={id:"_1-0-91-2022-05-29",tabindex:"-1"},$e=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),eo=o(" 1.0.91 | 2022.05.29 \u2002"),oo=o("Fixed the "),to=e("code",null,"ClassLoader",-1),io=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),no={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},co=o("Luckyzyx"),ao=o(" for the feedback"),so=i("
  • Fixed YukiHookDataChannel not being able to call back the current Activity broadcast on ZUI and systems below Android 12
  • Integrate 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),lo={id:"_1-0-90-2022-05-27",tabindex:"-1"},ro=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),ho=o(" 1.0.90 | 2022.05.27 \u2002"),uo=i("
    • 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),mo={id:"_1-0-89-2022-05-26",tabindex:"-1"},_o=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),po=o(" 1.0.89 | 2022.05.26 \u2002"),fo=i("
    • 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),go={id:"_1-0-88-2022-05-25",tabindex:"-1"},ko=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),yo=o(" 1.0.88 | 2022.05.25 \u2002"),bo=i("
    • 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),xo={id:"_1-0-87-2022-05-10",tabindex:"-1"},vo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),wo=o(" 1.0.87 | 2022.05.10 \u2002"),Ao=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),Ho={id:"_1-0-86-2022-05-06",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Co=o(" 1.0.86 | 2022.05.06 \u2002"),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"},Io=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Yo=o(" 1.0.85 | 2022.05.04 \u2002"),Ro=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),So={id:"_1-0-83-2022-05-04",tabindex:"-1"},zo=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Do=o(" 1.0.83 | 2022.05.04 \u2002"),Lo=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"},Xo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),jo=o(" 1.0.82 | 2022.05.04 \u2002"),Wo=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),Oo={id:"_1-0-81-2022-05-04",tabindex:"-1"},No=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Bo=o(" 1.0.81 | 2022.05.04 \u2002"),Eo=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),qo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Uo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),Vo=o(" 1.0.80 | 2022.05.01 \u2002"),Ko=i("
  • The InjectYukiHookWithXposed annotation adds the entryClassName function, which can customize the generated xposed_init entry class name
  • YukiHookXposedInitProxy renamed to IYukiHookXposedInit, the original interface name has been invalidated and will be deleted directly in subsequent versions
  • Added initZygote and Resources Hook functions to support Hook Layout
  • Added onXposedEvent method to listen to all events of native Xposed API
  • Perform inline processing on the lambda of the Hook function to avoid generating excessively broken anonymous classes and improve the running performance after compilation
  • Fixed PrefsData compiled method body copy is too large
  • Added XSharePreference readability test, which will automatically print a warning log if it fails
  • PackageParam adds appResources, moduleAppResources, moduleAppFilePath functions
  • loadApp of PackageParam adds the function of not writing name, and all APPs are filtered by default
  • PackageParam adds the loadZygote method, which can directly hook the system framework
  • PackageParam added resources().hook function
  • Optimization method, construction method, variable search function, the error log that cannot be found will display the set query conditions first
  • Added hasExtends extension method to determine whether the current Class has an inheritance relationship
  • Added isSupportResourcesHook function to determine whether resource hooks are currently supported (Resources Hook)
  • current function adds superClass method to call superclass
  • New superClass query conditions for search methods, construction methods and variables, you can continue to search in the parent class
  • YukiHookAPI lots of methods are decoupled from Xposed API
  • Added native Hook priority function of Xposed API
  • Fixed the problem that isFirstApplication may be inaccurate
  • Block the problem that MiuiCatcherPatch repeatedly calls the Hook entry method on the MIUI system
  • Optimize Hook entry calling method to avoid multiple calls due to Hook Framework issues
  • ",21),Zo=o("Fixed the problem that Hook "),Go=e("code",null,"ClassLoader",-1),Jo=o(" causes Hook to freeze, thanks to "),Qo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},$o=o("WankkoRee"),et=o(" for the feedback"),ot=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),tt=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),dt=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),it={id:"_1-0-78-2022-04-18",tabindex:"-1"},nt=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),ct=o(" 1.0.78 | 2022.04.18 \u2002"),at=i("
  • YukiHookModulePrefs adds isRunInNewXShareMode method, which can be used to determine whether the module is currently in New XSharePreference mode
  • Fixed YukiHookModulePrefs working in New XSharePreference mode
  • Added ModulePreferenceFragment, now you can completely replace PreferenceFragmentCompat and start using the new functionality
  • ",3),st=o("Adapt the Sp data storage solution of "),lt=e("code",null,"PreferenceFragmentCompat",-1),rt=o(", thanks to "),ht={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},ut=o("mahoshojoHCG"),mt=o(" for feedback"),_t=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),pt=e("li",null,"Fixed some bugs in documentation and code comments",-1),ft={id:"_1-0-77-2022-04-15",tabindex:"-1"},gt=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),kt=o(" 1.0.77 | 2022.04.15 \u2002"),yt=e("code",null,"YukiHookModulePrefs",-1),bt=o(" added "),xt=e("code",null,"clear",-1),vt=o(" method, thanks to "),wt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},At=o("WankkoRee"),Ht=o(" for the suggestion"),Pt=i("
  • YukiHookModulePrefs added getStringSet, putStringSet, all methods
  • Added any method to args of HookParam
  • Added ModuleApplication, which can be inherited in modules to achieve more functions
  • Connect all findClass functions to the Xposed API, and continue to use native ClassLoader in non-hosted environments
  • Fixed some possible bugs
  • ",5),Ct={id:"_1-0-75-2022-04-13",tabindex:"-1"},Ft=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Mt=o(" 1.0.75 | 2022.04.13 \u2002"),It=o("Corrected the logic recognition part of the automatic handler, thanks to "),Yt={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Rt=o("ApeaSuperz"),St=o(" contribution"),zt=i("
  • Fixed an issue where the reference to a doc comment was not changed
  • firstArgs and lastArgs methods have been removed from HookParam, now you can use args().first() and args().last() instead of it
  • Removed default parameter index = 0 in args() in HookParam, now you can use args().first() or args(index = 0) to replace it
  • The result function in HookParam adds generic matching, now you can use result<T> to match the known return value type of your target method
  • The 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 improved
  • Added android type in type
  • ",6),Dt={id:"_1-0-73-2022-04-10",tabindex:"-1"},Lt=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),Tt=o(" 1.0.73 | 2022.04.10 \u2002"),Xt=o("Fixed some Chinese translation errors in documents, thanks to "),jt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Wt=o("WankkoRee"),Ot=o(" for their contributions"),Nt=o("Fixed the problem that "),Bt=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Et=o(" throws an exception when the content is empty in some cases, thanks to "),qt={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Ut=o("Luckyzyx"),Vt=o(" for the feedback"),Kt=e("li",null,"Fixed some known bugs and improve Hook stability",-1),Zt={id:"_1-0-72-2022-04-09",tabindex:"-1"},Gt=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Jt=o(" 1.0.72 | 2022.04.09 \u2002"),Qt=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),$t={id:"_1-0-71-2022-04-04",tabindex:"-1"},ed=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),od=o(" 1.0.71 | 2022.04.04 \u2002"),td=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),dd={id:"_1-0-70-2022-04-04",tabindex:"-1"},id=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),nd=o(" 1.0.70 | 2022.04.04 \u2002"),cd=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),ad=o("Add "),sd=e("code",null,"isUseAppClassLoader",-1),ld=o(" function in Hook process, thanks to "),rd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},hd=o("WankkoRee"),ud=o(" for feedback"),md=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),_d=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),pd=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),fd=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),gd=o("Fixed "),kd=e("code",null,"allMethods",-1),yd=o(" not throwing an exception when it is not hooked to a method, thanks to "),bd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},xd=o("WankkoRee"),vd=o(" for the feedback"),wd=o("Added Hook status monitoring function, thanks to "),Ad={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Hd=o("WankkoRee"),Pd=o(" for the suggestion"),Cd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),Fd=o("Added obfuscated method and variable lookup function, you can use different types of filter "),Md=e("code",null,"index",-1),Id=o(" to locate the specified method and variable, thanks to "),Yd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Rd=o("WankkoRee"),Sd=o(" for the ideas provided"),zd=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),Dd=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),Ld=o("Fixed a lot of bugs in the hook process, thanks to "),Td={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Xd=o("WankkoRee"),jd=o(" for contributing to this project"),Wd={id:"_1-0-69-2022-03-30",tabindex:"-1"},Od=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Nd=o(" 1.0.69 | 2022.03.30 \u2002"),Bd=e("li",null,"Added and improved annotations for some method functions",-1),Ed=e("li",null,"Added more example Hook content in Demo",-1),qd=o("Fixed the issue that only the last one takes effect when "),Ud=e("code",null,"allMethods",-1),Vd=o(" is used multiple times in a Hook instance, thanks to "),Kd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Zd=o("WankkoRee"),Gd=o(" for the feedback"),Jd={id:"_1-0-68-2022-03-29",tabindex:"-1"},Qd=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),$d=o(" 1.0.68 | 2022.03.29 \u2002"),ei=i("
    • 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),oi={id:"_1-0-67-2022-03-27",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),di=o(" 1.0.67 | 2022.03.27 \u2002"),ii=i("
    • 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),ni={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),ai=o(" 1.0.66 | 2022.03.25 \u2002"),si=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),li={id:"_1-0-65-2022-03-25",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),hi=o(" 1.0.65 | 2022.03.25 \u2002"),ui=i("
    • 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),mi={id:"_1-0-6-2022-03-20",tabindex:"-1"},_i=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),pi=o(" 1.0.6 | 2022.03.20 \u2002"),fi=i("
    • 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),gi={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),yi=o(" 1.0.55 | 2022.03.18 \u2002"),bi=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 "),e("code",null,"java"),o(" types")]),e("li",null,"Fixed compatibility issues between new and old Kotlin APIs")],-1),xi={id:"_1-0-5-2022-03-18",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),wi=o(" 1.0.5 | 2022.03.18 \u2002"),Ai=i("
    • 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),Hi={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),Ci=o(" 1.0.4 | 2022.03.06 \u2002"),Fi=i("
    • 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),Mi={id:"_1-0-3-2022-03-02",tabindex:"-1"},Ii=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Yi=o(" 1.0.3 | 2022.03.02 \u2002"),Ri=i("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),Si={id:"_1-0-2-2022-02-18",tabindex:"-1"},zi=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Di=o(" 1.0.2 | 2022.02.18 \u2002"),Li=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),Ti={id:"_1-0-1-2022-02-15",tabindex:"-1"},Xi=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),ji=o(" 1.0.1 | 2022.02.15 \u2002"),Wi=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 "),e("code",null,"java"),o(" type in "),e("code",null,"type")]),e("li",null,"Fixed the issue that ignored errors still output in the console")],-1),Oi={id:"_1-0-2022-02-14",tabindex:"-1"},Ni=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Bi=o(" 1.0 | 2022.02.14 \u2002"),Ei=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function qi(Ui,Vi){const d=c("Badge"),n=c("ExternalLinkIcon");return s(),l("div",null,[h,e("h3",u,[m,_,t(d,{type:"tip",text:"latest",vertical:"middle"})]),p,e("h3",f,[g,k,t(d,{type:"warning",text:"stale",vertical:"middle"})]),y,e("h3",b,[x,v,t(d,{type:"warning",text:"stale",vertical:"middle"})]),w,e("h3",A,[H,P,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),C,e("h3",F,[M,I,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Y,e("h3",R,[S,z,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[D,e("li",null,[L,e("a",T,[X,t(n)])]),j,e("li",null,[W,e("a",O,[N,t(n)]),B]),E,e("li",null,[q,U,V,K,Z,G,e("a",J,[Q,t(n)]),$]),ee,e("li",null,[oe,te,de,e("a",ie,[ne,t(n)]),ce]),e("li",null,[ae,se,le,e("a",re,[he,t(n)]),ue]),me,e("li",null,[_e,pe,fe,ge,ke,e("a",ye,[be,t(n)]),xe,e("a",ve,[we,t(n)])]),Ae,He,Pe,e("li",null,[Ce,Fe,Me,Ie,Ye,e("a",Re,[Se,t(n)]),ze]),De,e("li",null,[Le,Te,Xe,e("a",je,[We,t(n)]),Oe,e("a",Ne,[Be,t(n)])]),Ee,qe,Ue,Ve]),e("h3",Ke,[Ze,Ge,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Je,e("h3",Qe,[$e,eo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[oo,to,io,e("a",no,[co,t(n)]),ao]),so]),e("h3",lo,[ro,ho,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),uo,e("h3",mo,[_o,po,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fo,e("h3",go,[ko,yo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),bo,e("h3",xo,[vo,wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ao,e("h3",Ho,[Po,Co,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Fo,e("h3",Mo,[Io,Yo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ro,e("h3",So,[zo,Do,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Lo,e("h3",To,[Xo,jo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Wo,e("h3",Oo,[No,Bo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Eo,e("h3",qo,[Uo,Vo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Ko,e("li",null,[Zo,Go,Jo,e("a",Qo,[$o,t(n)]),et]),ot,tt,dt]),e("h3",it,[nt,ct,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[at,e("li",null,[st,lt,rt,e("a",ht,[ut,t(n)]),mt]),_t,pt]),e("h3",ft,[gt,kt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[yt,bt,xt,vt,e("a",wt,[At,t(n)]),Ht]),Pt]),e("h3",Ct,[Ft,Mt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[It,e("a",Yt,[Rt,t(n)]),St]),zt]),e("h3",Dt,[Lt,Tt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Xt,e("a",jt,[Wt,t(n)]),Ot]),e("li",null,[Nt,Bt,Et,e("a",qt,[Ut,t(n)]),Vt]),Kt]),e("h3",Zt,[Gt,Jt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Qt,e("h3",$t,[ed,od,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),td,e("h3",dd,[id,nd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[cd,e("li",null,[ad,sd,ld,e("a",rd,[hd,t(n)]),ud]),md,_d,pd,fd,e("li",null,[gd,kd,yd,e("a",bd,[xd,t(n)]),vd]),e("li",null,[wd,e("a",Ad,[Hd,t(n)]),Pd]),Cd,e("li",null,[Fd,Md,Id,e("a",Yd,[Rd,t(n)]),Sd]),zd,Dd,e("li",null,[Ld,e("a",Td,[Xd,t(n)]),jd])]),e("h3",Wd,[Od,Nd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Bd,Ed,e("li",null,[qd,Ud,Vd,e("a",Kd,[Zd,t(n)]),Gd])]),e("h3",Jd,[Qd,$d,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ei,e("h3",oi,[ti,di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ii,e("h3",ni,[ci,ai,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),si,e("h3",li,[ri,hi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ui,e("h3",mi,[_i,pi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fi,e("h3",gi,[ki,yi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),bi,e("h3",xi,[vi,wi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ai,e("h3",Hi,[Pi,Ci,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Fi,e("h3",Mi,[Ii,Yi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ri,e("h3",Si,[zi,Di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Li,e("h3",Ti,[Xi,ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Wi,e("h3",Oi,[Ni,Bi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ei])}const Zi=a(r,[["render",qi],["__file","changelog.html.vue"]]);export{Zi as default}; diff --git a/docs/assets/changelog.html.5a1e8ed3.js b/docs/assets/changelog.html.5a1e8ed3.js new file mode 100644 index 000000000..b23b2f5d2 --- /dev/null +++ b/docs/assets/changelog.html.5a1e8ed3.js @@ -0,0 +1 @@ +import{_ as a,r as c,o as s,c as l,b as e,d as t,a as i,e as o}from"./app.2bc5d8f3.js";const r={},h=i('

    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-1-6-2023-01-21",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),_=o(" 1.1.6 | 2023.01.21 \u2002"),p=i("
    • 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),f={id:"_1-1-5-2023-01-13",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),k=o(" 1.1.5 | 2023.01.13 \u2002"),y=i('
    • 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 protection
    • YukiHookDataChannel 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 data
    • YukiHookDataChannel has added the function of automatically segmenting when the sent data is too large, only supports List, Map, Set, String types
    • YukiHookLogger 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),b={id:"_1-1-4-2022-10-04",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),v=o(" 1.1.4 | 2022.10.04 \u2002"),w=i("
    • 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),A={id:"_1-1-3-2022-09-30",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),P=o(" 1.1.3 | 2022.09.30 \u2002"),C=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),F={id:"_1-1-2-2022-09-30",tabindex:"-1"},M=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),I=o(" 1.1.2 | 2022.09.30 \u2002"),Y=i('
    • 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),R={id:"_1-1-1-2022-09-28",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),L=o(" 1.1.1 | 2022.09.28 \u2002"),X=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),z={id:"_1-1-0-2022-09-28",tabindex:"-1"},D=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),T=o(" 1.1.0 | 2022.09.28 \u2002"),j=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),W=o("Change the help documentation framework to "),O={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},N=o("VuePress"),B=i('
  • 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 only
  • Convert Class and Method of Hook App Demo to Java to provide better demo effect
  • Fixed code comment naming in Hook Module Demo
  • Refactored a lot of low-level Hook logic and the docking method of Xposed API
  • Removed 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 array
  • Optimized automatic handler to merge referenced jar into stub project
  • ',9),E=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 "),q={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},U=o("5ec1cff"),V=o(" for the feedback and solutions provided"),K=i("
  • Internal closure processing for the methods of API private tool classes to avoid polluting the top-level namespace
  • Fixed Creater naming to Creator for all reflection and Hook classes
  • Added YukiHookAPI.Status.compiledTimestamp function, which can get the compilation completion timestamp when used as an Xposed module
  • Added YukiHookAPI.Status.isXposedEnvironment function, which can determine whether the current (Xposed) host environment or module environment is
  • The 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 configuration
  • Added 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 calling
  • CurrentClass adds name and simpleName functions
  • Completely rewrite the core method of ReflectionTool, sorting and classifying different search conditions
  • Fixed the problem that Member obtained by directly calling declared in ReflectionTool throws an exception
  • Fixed UndefinedType in ReflectionTool is not correctly judged in Method and Constructor conditions
  • Added a friendly prompt method when the reflection search result is abnormal, which can specifically locate the problem that Member cannot be found under specified conditions
  • Added 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 in
  • Added paramCount { ... } condition in Method and Constructor of reflection search, now you can directly get it in it to customize your judgment condition
  • The current method is added to the FieldFinder result, which can directly create a call space for the result instance
  • Modified 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),Z=e("code",null,"as*",-1),G=o(" function in "),J=e("code",null,"ModifierRules",-1),Q=o(" renamed to "),$=e("code",null,"is*",-1),ee=o(", thanks to "),oe={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},te=o("Kitsune"),de=o(" suggestion"),ie=i("
  • 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),ne=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 "),ce=e("strong",null,"AA",-1),ae=o(" and "),se={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},le=o("Kitsune"),re=o(" for suggestions"),he=o("Fixed the problem that the object obtained by "),ue=e("code",null,"appClassLoader",-1),me=o(" is incorrect in system applications in some systems, thanks to "),_e={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},pe=o("Luckyzyx"),fe=o(" for the feedback"),ge=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),ke=o("Fixed the problem of wrong value of "),ye=e("code",null,"getStringSet",-1),be=o(" method in "),xe=e("code",null,"YukiHookModulePrefs",-1),ve=o(" and optimize the code style, thanks to "),we={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},Ae=o("Teddy_Zhu"),He=o(),Pe={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ce=o("PR"),Fe=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),Me=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),Ie=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),Ye=o("Added automatic hook "),Re=e("code",null,"SharedPreferences",-1),Se=o(" to fix the problem that file permissions are not "),Le=e("code",null,"0664",-1),Xe=o(" in some systems, thanks to "),ze={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},De=o("5ec1cff"),Te=o(" for the feedback and implementation code provided"),je=i("
  • Added YukiHookAPI.Configs.isEnableHookSharedPreferences function, which is disabled by default and can be enabled if the permission of SharedPreferences is incorrect
  • Fixed 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 feedback
  • Detach 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 declared
  • Added module resource injection and Activity proxy functions, you can call injectModuleAppResources and registerModuleAppActivities to use
  • Added 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 called
  • obsolete classOf and clazz extension methods, add toClass and toClassOrNull usage, please move to the new method now
  • VariousClass 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 host
  • The onFailureThrowToApp function is added to the Hook callback, which can be directly thrown to the host when an exception occurs
  • Modified the printing logic of the debug log, the time-consuming records in the reflection search function will only be printed during the Hook process
  • Added the function of removing Hook in the Hook process, you can use the remove and removeSelf methods to remove the hook
  • Fixed 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 function
  • Added 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),We=o("Added "),Oe=e("code",null,"array",-1),Ne=o(" type to Resources Hook, thanks to "),Be={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},Ee=o("PR"),qe=o(" of "),Ue={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},Ve=o("GSWXXN"),Ke=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),Ze=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),Ge=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),Je=e("li",null,"Updated Demo API version to 33",-1),Qe={id:"_1-0-92-2022-05-31",tabindex:"-1"},$e=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),eo=o(" 1.0.92 | 2022.05.31 \u2002"),oo=i("
    • 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),to={id:"_1-0-91-2022-05-29",tabindex:"-1"},io=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),no=o(" 1.0.91 | 2022.05.29 \u2002"),co=o("Fixed the "),ao=e("code",null,"ClassLoader",-1),so=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),lo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ro=o("Luckyzyx"),ho=o(" for the feedback"),uo=i("
  • Fixed YukiHookDataChannel not being able to call back the current Activity broadcast on ZUI and systems below Android 12
  • Integrate 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),mo={id:"_1-0-90-2022-05-27",tabindex:"-1"},_o=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),po=o(" 1.0.90 | 2022.05.27 \u2002"),fo=i("
    • 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),go={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),yo=o(" 1.0.89 | 2022.05.26 \u2002"),bo=i("
    • 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),xo={id:"_1-0-88-2022-05-25",tabindex:"-1"},vo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),wo=o(" 1.0.88 | 2022.05.25 \u2002"),Ao=i("
    • 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),Ho={id:"_1-0-87-2022-05-10",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Co=o(" 1.0.87 | 2022.05.10 \u2002"),Fo=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),Mo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Io=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Yo=o(" 1.0.86 | 2022.05.06 \u2002"),Ro=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),So={id:"_1-0-85-2022-05-04",tabindex:"-1"},Lo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Xo=o(" 1.0.85 | 2022.05.04 \u2002"),zo=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),Do={id:"_1-0-83-2022-05-04",tabindex:"-1"},To=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),jo=o(" 1.0.83 | 2022.05.04 \u2002"),Wo=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),Oo={id:"_1-0-82-2022-05-04",tabindex:"-1"},No=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),Bo=o(" 1.0.82 | 2022.05.04 \u2002"),Eo=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),qo={id:"_1-0-81-2022-05-04",tabindex:"-1"},Uo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Vo=o(" 1.0.81 | 2022.05.04 \u2002"),Ko=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),Zo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Go=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),Jo=o(" 1.0.80 | 2022.05.01 \u2002"),Qo=i("
  • The InjectYukiHookWithXposed annotation adds the entryClassName function, which can customize the generated xposed_init entry class name
  • YukiHookXposedInitProxy renamed to IYukiHookXposedInit, the original interface name has been invalidated and will be deleted directly in subsequent versions
  • Added initZygote and Resources Hook functions to support Hook Layout
  • Added onXposedEvent method to listen to all events of native Xposed API
  • Perform inline processing on the lambda of the Hook function to avoid generating excessively broken anonymous classes and improve the running performance after compilation
  • Fixed PrefsData compiled method body copy is too large
  • Added XSharePreference readability test, which will automatically print a warning log if it fails
  • PackageParam adds appResources, moduleAppResources, moduleAppFilePath functions
  • loadApp of PackageParam adds the function of not writing name, and all APPs are filtered by default
  • PackageParam adds the loadZygote method, which can directly hook the system framework
  • PackageParam added resources().hook function
  • Optimization method, construction method, variable search function, the error log that cannot be found will display the set query conditions first
  • Added hasExtends extension method to determine whether the current Class has an inheritance relationship
  • Added isSupportResourcesHook function to determine whether resource hooks are currently supported (Resources Hook)
  • current function adds superClass method to call superclass
  • New superClass query conditions for search methods, construction methods and variables, you can continue to search in the parent class
  • YukiHookAPI lots of methods are decoupled from Xposed API
  • Added native Hook priority function of Xposed API
  • Fixed the problem that isFirstApplication may be inaccurate
  • Block the problem that MiuiCatcherPatch repeatedly calls the Hook entry method on the MIUI system
  • Optimize Hook entry calling method to avoid multiple calls due to Hook Framework issues
  • ",21),$o=o("Fixed the problem that Hook "),et=e("code",null,"ClassLoader",-1),ot=o(" causes Hook to freeze, thanks to "),tt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},dt=o("WankkoRee"),it=o(" for the feedback"),nt=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),ct=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),at=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),st={id:"_1-0-78-2022-04-18",tabindex:"-1"},lt=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),rt=o(" 1.0.78 | 2022.04.18 \u2002"),ht=i("
  • YukiHookModulePrefs adds isRunInNewXShareMode method, which can be used to determine whether the module is currently in New XSharePreference mode
  • Fixed YukiHookModulePrefs working in New XSharePreference mode
  • Added ModulePreferenceFragment, now you can completely replace PreferenceFragmentCompat and start using the new functionality
  • ",3),ut=o("Adapt the Sp data storage solution of "),mt=e("code",null,"PreferenceFragmentCompat",-1),_t=o(", thanks to "),pt={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},ft=o("mahoshojoHCG"),gt=o(" for feedback"),kt=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),yt=e("li",null,"Fixed some bugs in documentation and code comments",-1),bt={id:"_1-0-77-2022-04-15",tabindex:"-1"},xt=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),vt=o(" 1.0.77 | 2022.04.15 \u2002"),wt=e("code",null,"YukiHookModulePrefs",-1),At=o(" added "),Ht=e("code",null,"clear",-1),Pt=o(" method, thanks to "),Ct={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ft=o("WankkoRee"),Mt=o(" for the suggestion"),It=i("
  • YukiHookModulePrefs added getStringSet, putStringSet, all methods
  • Added any method to args of HookParam
  • Added ModuleApplication, which can be inherited in modules to achieve more functions
  • Connect all findClass functions to the Xposed API, and continue to use native ClassLoader in non-hosted environments
  • Fixed some possible bugs
  • ",5),Yt={id:"_1-0-75-2022-04-13",tabindex:"-1"},Rt=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),St=o(" 1.0.75 | 2022.04.13 \u2002"),Lt=o("Corrected the logic recognition part of the automatic handler, thanks to "),Xt={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},zt=o("ApeaSuperz"),Dt=o(" contribution"),Tt=i("
  • Fixed an issue where the reference to a doc comment was not changed
  • firstArgs and lastArgs methods have been removed from HookParam, now you can use args().first() and args().last() instead of it
  • Removed default parameter index = 0 in args() in HookParam, now you can use args().first() or args(index = 0) to replace it
  • The result function in HookParam adds generic matching, now you can use result<T> to match the known return value type of your target method
  • The 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 improved
  • Added android type in type
  • ",6),jt={id:"_1-0-73-2022-04-10",tabindex:"-1"},Wt=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),Ot=o(" 1.0.73 | 2022.04.10 \u2002"),Nt=o("Fixed some Chinese translation errors in documents, thanks to "),Bt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Et=o("WankkoRee"),qt=o(" for their contributions"),Ut=o("Fixed the problem that "),Vt=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Kt=o(" throws an exception when the content is empty in some cases, thanks to "),Zt={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Gt=o("Luckyzyx"),Jt=o(" for the feedback"),Qt=e("li",null,"Fixed some known bugs and improve Hook stability",-1),$t={id:"_1-0-72-2022-04-09",tabindex:"-1"},ed=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),od=o(" 1.0.72 | 2022.04.09 \u2002"),td=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),dd={id:"_1-0-71-2022-04-04",tabindex:"-1"},id=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),nd=o(" 1.0.71 | 2022.04.04 \u2002"),cd=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),ad={id:"_1-0-70-2022-04-04",tabindex:"-1"},sd=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),ld=o(" 1.0.70 | 2022.04.04 \u2002"),rd=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),hd=o("Add "),ud=e("code",null,"isUseAppClassLoader",-1),md=o(" function in Hook process, thanks to "),_d={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},pd=o("WankkoRee"),fd=o(" for feedback"),gd=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),kd=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),yd=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),bd=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),xd=o("Fixed "),vd=e("code",null,"allMethods",-1),wd=o(" not throwing an exception when it is not hooked to a method, thanks to "),Ad={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Hd=o("WankkoRee"),Pd=o(" for the feedback"),Cd=o("Added Hook status monitoring function, thanks to "),Fd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Md=o("WankkoRee"),Id=o(" for the suggestion"),Yd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),Rd=o("Added obfuscated method and variable lookup function, you can use different types of filter "),Sd=e("code",null,"index",-1),Ld=o(" to locate the specified method and variable, thanks to "),Xd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},zd=o("WankkoRee"),Dd=o(" for the ideas provided"),Td=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),jd=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),Wd=o("Fixed a lot of bugs in the hook process, thanks to "),Od={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Nd=o("WankkoRee"),Bd=o(" for contributing to this project"),Ed={id:"_1-0-69-2022-03-30",tabindex:"-1"},qd=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Ud=o(" 1.0.69 | 2022.03.30 \u2002"),Vd=e("li",null,"Added and improved annotations for some method functions",-1),Kd=e("li",null,"Added more example Hook content in Demo",-1),Zd=o("Fixed the issue that only the last one takes effect when "),Gd=e("code",null,"allMethods",-1),Jd=o(" is used multiple times in a Hook instance, thanks to "),Qd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},$d=o("WankkoRee"),ei=o(" for the feedback"),oi={id:"_1-0-68-2022-03-29",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),di=o(" 1.0.68 | 2022.03.29 \u2002"),ii=i("
    • 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),ni={id:"_1-0-67-2022-03-27",tabindex:"-1"},ci=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),ai=o(" 1.0.67 | 2022.03.27 \u2002"),si=i("
    • 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),li={id:"_1-0-66-2022-03-25",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),hi=o(" 1.0.66 | 2022.03.25 \u2002"),ui=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),mi={id:"_1-0-65-2022-03-25",tabindex:"-1"},_i=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),pi=o(" 1.0.65 | 2022.03.25 \u2002"),fi=i("
    • 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),gi={id:"_1-0-6-2022-03-20",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),yi=o(" 1.0.6 | 2022.03.20 \u2002"),bi=i("
    • 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),xi={id:"_1-0-55-2022-03-18",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),wi=o(" 1.0.55 | 2022.03.18 \u2002"),Ai=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 "),e("code",null,"java"),o(" types")]),e("li",null,"Fixed compatibility issues between new and old Kotlin APIs")],-1),Hi={id:"_1-0-5-2022-03-18",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Ci=o(" 1.0.5 | 2022.03.18 \u2002"),Fi=i("
    • 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),Mi={id:"_1-0-4-2022-03-06",tabindex:"-1"},Ii=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Yi=o(" 1.0.4 | 2022.03.06 \u2002"),Ri=i("
    • 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),Si={id:"_1-0-3-2022-03-02",tabindex:"-1"},Li=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Xi=o(" 1.0.3 | 2022.03.02 \u2002"),zi=i("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),Di={id:"_1-0-2-2022-02-18",tabindex:"-1"},Ti=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),ji=o(" 1.0.2 | 2022.02.18 \u2002"),Wi=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),Oi={id:"_1-0-1-2022-02-15",tabindex:"-1"},Ni=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Bi=o(" 1.0.1 | 2022.02.15 \u2002"),Ei=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 "),e("code",null,"java"),o(" type in "),e("code",null,"type")]),e("li",null,"Fixed the issue that ignored errors still output in the console")],-1),qi={id:"_1-0-2022-02-14",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Vi=o(" 1.0 | 2022.02.14 \u2002"),Ki=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function Zi(Gi,Ji){const d=c("Badge"),n=c("ExternalLinkIcon");return s(),l("div",null,[h,e("h3",u,[m,_,t(d,{type:"tip",text:"latest",vertical:"middle"})]),p,e("h3",f,[g,k,t(d,{type:"warning",text:"stale",vertical:"middle"})]),y,e("h3",b,[x,v,t(d,{type:"warning",text:"stale",vertical:"middle"})]),w,e("h3",A,[H,P,t(d,{type:"warning",text:"stale",vertical:"middle"})]),C,e("h3",F,[M,I,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Y,e("h3",R,[S,L,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),X,e("h3",z,[D,T,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[j,e("li",null,[W,e("a",O,[N,t(n)])]),B,e("li",null,[E,e("a",q,[U,t(n)]),V]),K,e("li",null,[Z,G,J,Q,$,ee,e("a",oe,[te,t(n)]),de]),ie,e("li",null,[ne,ce,ae,e("a",se,[le,t(n)]),re]),e("li",null,[he,ue,me,e("a",_e,[pe,t(n)]),fe]),ge,e("li",null,[ke,ye,be,xe,ve,e("a",we,[Ae,t(n)]),He,e("a",Pe,[Ce,t(n)])]),Fe,Me,Ie,e("li",null,[Ye,Re,Se,Le,Xe,e("a",ze,[De,t(n)]),Te]),je,e("li",null,[We,Oe,Ne,e("a",Be,[Ee,t(n)]),qe,e("a",Ue,[Ve,t(n)])]),Ke,Ze,Ge,Je]),e("h3",Qe,[$e,eo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),oo,e("h3",to,[io,no,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[co,ao,so,e("a",lo,[ro,t(n)]),ho]),uo]),e("h3",mo,[_o,po,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fo,e("h3",go,[ko,yo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),bo,e("h3",xo,[vo,wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ao,e("h3",Ho,[Po,Co,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Fo,e("h3",Mo,[Io,Yo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ro,e("h3",So,[Lo,Xo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),zo,e("h3",Do,[To,jo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Wo,e("h3",Oo,[No,Bo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Eo,e("h3",qo,[Uo,Vo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ko,e("h3",Zo,[Go,Jo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Qo,e("li",null,[$o,et,ot,e("a",tt,[dt,t(n)]),it]),nt,ct,at]),e("h3",st,[lt,rt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[ht,e("li",null,[ut,mt,_t,e("a",pt,[ft,t(n)]),gt]),kt,yt]),e("h3",bt,[xt,vt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[wt,At,Ht,Pt,e("a",Ct,[Ft,t(n)]),Mt]),It]),e("h3",Yt,[Rt,St,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Lt,e("a",Xt,[zt,t(n)]),Dt]),Tt]),e("h3",jt,[Wt,Ot,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Nt,e("a",Bt,[Et,t(n)]),qt]),e("li",null,[Ut,Vt,Kt,e("a",Zt,[Gt,t(n)]),Jt]),Qt]),e("h3",$t,[ed,od,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),td,e("h3",dd,[id,nd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),cd,e("h3",ad,[sd,ld,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[rd,e("li",null,[hd,ud,md,e("a",_d,[pd,t(n)]),fd]),gd,kd,yd,bd,e("li",null,[xd,vd,wd,e("a",Ad,[Hd,t(n)]),Pd]),e("li",null,[Cd,e("a",Fd,[Md,t(n)]),Id]),Yd,e("li",null,[Rd,Sd,Ld,e("a",Xd,[zd,t(n)]),Dd]),Td,jd,e("li",null,[Wd,e("a",Od,[Nd,t(n)]),Bd])]),e("h3",Ed,[qd,Ud,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Vd,Kd,e("li",null,[Zd,Gd,Jd,e("a",Qd,[$d,t(n)]),ei])]),e("h3",oi,[ti,di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ii,e("h3",ni,[ci,ai,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),si,e("h3",li,[ri,hi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ui,e("h3",mi,[_i,pi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fi,e("h3",gi,[ki,yi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),bi,e("h3",xi,[vi,wi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ai,e("h3",Hi,[Pi,Ci,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Fi,e("h3",Mi,[Ii,Yi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ri,e("h3",Si,[Li,Xi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),zi,e("h3",Di,[Ti,ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Wi,e("h3",Oi,[Ni,Bi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ei,e("h3",qi,[Ui,Vi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ki])}const $i=a(r,[["render",Zi],["__file","changelog.html.vue"]]);export{$i as default}; diff --git a/docs/assets/changelog.html.9c2f128d.js b/docs/assets/changelog.html.9c2f128d.js deleted file mode 100644 index 4cea14dad..000000000 --- a/docs/assets/changelog.html.9c2f128d.js +++ /dev/null @@ -1 +0,0 @@ -const l=JSON.parse('{"key":"v-0e6c3476","path":"/zh-cn/about/changelog.html","title":"\u66F4\u65B0\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.5 | 2023.01.13","slug":"_1-1-5-2023-01-13","link":"#_1-1-5-2023-01-13","children":[]},{"level":3,"title":"1.1.4 | 2022.10.04","slug":"_1-1-4-2022-10-04","link":"#_1-1-4-2022-10-04","children":[]},{"level":3,"title":"1.1.3 | 2022.09.30","slug":"_1-1-3-2022-09-30","link":"#_1-1-3-2022-09-30","children":[]},{"level":3,"title":"1.1.2 | 2022.09.30","slug":"_1-1-2-2022-09-30","link":"#_1-1-2-2022-09-30","children":[]},{"level":3,"title":"1.1.1 | 2022.09.28","slug":"_1-1-1-2022-09-28","link":"#_1-1-1-2022-09-28","children":[]},{"level":3,"title":"1.1.0 | 2022.09.28","slug":"_1-1-0-2022-09-28","link":"#_1-1-0-2022-09-28","children":[]},{"level":3,"title":"1.0.92 | 2022.05.31","slug":"_1-0-92-2022-05-31","link":"#_1-0-92-2022-05-31","children":[]},{"level":3,"title":"1.0.91 | 2022.05.29","slug":"_1-0-91-2022-05-29","link":"#_1-0-91-2022-05-29","children":[]},{"level":3,"title":"1.0.90 | 2022.05.27","slug":"_1-0-90-2022-05-27","link":"#_1-0-90-2022-05-27","children":[]},{"level":3,"title":"1.0.89 | 2022.05.26","slug":"_1-0-89-2022-05-26","link":"#_1-0-89-2022-05-26","children":[]},{"level":3,"title":"1.0.88 | 2022.05.25","slug":"_1-0-88-2022-05-25","link":"#_1-0-88-2022-05-25","children":[]},{"level":3,"title":"1.0.87 | 2022.05.10","slug":"_1-0-87-2022-05-10","link":"#_1-0-87-2022-05-10","children":[]},{"level":3,"title":"1.0.86 | 2022.05.06","slug":"_1-0-86-2022-05-06","link":"#_1-0-86-2022-05-06","children":[]},{"level":3,"title":"1.0.85 | 2022.05.04","slug":"_1-0-85-2022-05-04","link":"#_1-0-85-2022-05-04","children":[]},{"level":3,"title":"1.0.83 | 2022.05.04","slug":"_1-0-83-2022-05-04","link":"#_1-0-83-2022-05-04","children":[]},{"level":3,"title":"1.0.82 | 2022.05.04","slug":"_1-0-82-2022-05-04","link":"#_1-0-82-2022-05-04","children":[]},{"level":3,"title":"1.0.81 | 2022.05.04","slug":"_1-0-81-2022-05-04","link":"#_1-0-81-2022-05-04","children":[]},{"level":3,"title":"1.0.80 | 2022.05.01","slug":"_1-0-80-2022-05-01","link":"#_1-0-80-2022-05-01","children":[]},{"level":3,"title":"1.0.78 | 2022.04.18","slug":"_1-0-78-2022-04-18","link":"#_1-0-78-2022-04-18","children":[]},{"level":3,"title":"1.0.77 | 2022.04.15","slug":"_1-0-77-2022-04-15","link":"#_1-0-77-2022-04-15","children":[]},{"level":3,"title":"1.0.75 | 2022.04.13","slug":"_1-0-75-2022-04-13","link":"#_1-0-75-2022-04-13","children":[]},{"level":3,"title":"1.0.73 | 2022.04.10","slug":"_1-0-73-2022-04-10","link":"#_1-0-73-2022-04-10","children":[]},{"level":3,"title":"1.0.72 | 2022.04.09","slug":"_1-0-72-2022-04-09","link":"#_1-0-72-2022-04-09","children":[]},{"level":3,"title":"1.0.71 | 2022.04.04","slug":"_1-0-71-2022-04-04","link":"#_1-0-71-2022-04-04","children":[]},{"level":3,"title":"1.0.70 | 2022.04.04","slug":"_1-0-70-2022-04-04","link":"#_1-0-70-2022-04-04","children":[]},{"level":3,"title":"1.0.69 | 2022.03.30","slug":"_1-0-69-2022-03-30","link":"#_1-0-69-2022-03-30","children":[]},{"level":3,"title":"1.0.68 | 2022.03.29","slug":"_1-0-68-2022-03-29","link":"#_1-0-68-2022-03-29","children":[]},{"level":3,"title":"1.0.67 | 2022.03.27","slug":"_1-0-67-2022-03-27","link":"#_1-0-67-2022-03-27","children":[]},{"level":3,"title":"1.0.66 | 2022.03.25","slug":"_1-0-66-2022-03-25","link":"#_1-0-66-2022-03-25","children":[]},{"level":3,"title":"1.0.65 | 2022.03.25","slug":"_1-0-65-2022-03-25","link":"#_1-0-65-2022-03-25","children":[]},{"level":3,"title":"1.0.6 | 2022.03.20","slug":"_1-0-6-2022-03-20","link":"#_1-0-6-2022-03-20","children":[]},{"level":3,"title":"1.0.55 | 2022.03.18","slug":"_1-0-55-2022-03-18","link":"#_1-0-55-2022-03-18","children":[]},{"level":3,"title":"1.0.5 | 2022.03.18","slug":"_1-0-5-2022-03-18","link":"#_1-0-5-2022-03-18","children":[]},{"level":3,"title":"1.0.4 | 2022.03.06","slug":"_1-0-4-2022-03-06","link":"#_1-0-4-2022-03-06","children":[]},{"level":3,"title":"1.0.3 | 2022.03.02","slug":"_1-0-3-2022-03-02","link":"#_1-0-3-2022-03-02","children":[]},{"level":3,"title":"1.0.2 | 2022.02.18","slug":"_1-0-2-2022-02-18","link":"#_1-0-2-2022-02-18","children":[]},{"level":3,"title":"1.0.1 | 2022.02.15","slug":"_1-0-1-2022-02-15","link":"#_1-0-1-2022-02-15","children":[]},{"level":3,"title":"1.0 | 2022.02.14","slug":"_1-0-2022-02-14","link":"#_1-0-2022-02-14","children":[]}],"git":{"updatedTime":1673554573000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":9}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.c208c868.js b/docs/assets/changelog.html.c208c868.js deleted file mode 100644 index 75e505c33..000000000 --- a/docs/assets/changelog.html.c208c868.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as t,o as n,c as a,b as e,d,e as o,a as i}from"./app.a3fd8dd4.js";const r={},_=e("h1",{id:"\u66F4\u65B0\u65E5\u5FD7",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u66F4\u65B0\u65E5\u5FD7","aria-hidden":"true"},"#"),o(" \u66F4\u65B0\u65E5\u5FD7")],-1),h=e("blockquote",null,[e("p",null,[o("\u8FD9\u91CC\u8BB0\u5F55\u4E86 "),e("code",null,"YukiHookAPI"),o(" \u7684\u7248\u672C\u66F4\u65B0\u5386\u53F2\u3002")])],-1),u=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"\u7279\u522B\u6CE8\u610F"),e("p",null,"\u6211\u4EEC\u53EA\u4F1A\u5BF9\u6700\u65B0\u7684 API \u7248\u672C\u8FDB\u884C\u7EF4\u62A4\uFF0C\u82E5\u4F60\u6B63\u5728\u4F7F\u7528\u8FC7\u65F6\u7684 API \u7248\u672C\u5219\u4EE3\u8868\u4F60\u81EA\u613F\u653E\u5F03\u4E00\u5207\u7EF4\u62A4\u7684\u53EF\u80FD\u6027\u3002")],-1),k={id:"_1-1-5-2023-01-13",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),g=o(" 1.1.5 | 2023.01.13 \u2002"),f=i('
    • \u89C4\u8303\u5E76\u4F18\u5316\u6574\u4F53\u4EE3\u7801\u98CE\u683C
    • \u5BF9\u90E8\u5206\u5185\u90E8\u8C03\u7528\u7684 API \u8FDB\u884C\u4E86\u79C1\u6709\u5316\u5904\u7406
    • \u5E95\u5C42 API \u63A5\u53E3\u6574\u4F53\u89E3\u8026\u5408\uFF0C\u4E3A\u517C\u5BB9\u66F4\u591A Hook Framework \u505A\u51C6\u5907
    • \u5C06\u90E8\u5206\u96C6\u6210\u4E8E API \u4E2D\u7684\u529F\u80FD\u79FB\u52A8\u5230 ksp-xposed \u4F9D\u8D56 (\u89E3\u8026\u5408)\uFF0C\u5355\u72EC\u5F15\u5165 api \u4F9D\u8D56\u5C06\u4E0D\u518D\u5305\u542B\u7B2C\u4E09\u65B9\u5E93\u7B49\u529F\u80FD\u7684\u5F15\u7528
    • \u6587\u6863 \u5FEB\u901F\u5F00\u59CB \u9875\u9762\u52A0\u5165 YukiHookAPI.Configs.isDebug \u4F55\u65F6\u9700\u8981\u5173\u95ED\u7684\u8BF4\u660E
    • \u89C4\u8303\u7C7B\u578B\u5B9A\u4E49\u4E2D\u7684 Java \u539F\u59CB\u7C7B\u578B (Primitive Type) \u5E76\u540C\u6B65\u66F4\u65B0\u5230\u6587\u6863
    • Java type \u65B0\u589E NumberClass \u7C7B\u578B
    • \u6539\u8FDB\u4E86 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u7684\u8BC6\u522B\u80FD\u529B
    • \u63A5\u7BA1\u4E86 Xposed \u6A21\u5757\u88C5\u8F7D\u540E\u7684\u5168\u90E8\u5F02\u5E38\uFF0C\u82E5\u53D1\u751F\u5F02\u5E38\u5C06\u4F1A\u81EA\u52A8\u62E6\u622A\u5E76\u6253\u5370\u9519\u8BEF\u65E5\u5FD7
    • \u4FEE\u6539\u7C7B\u578B\u5B9A\u4E49\u4E2D\u8F83\u4F4E Android \u7CFB\u7EDF\u7248\u672C (Android 5.0) \u4E2D\u4E0D\u5B58\u5728\u7684 Class \u4E3A\u7A7A\u5B89\u5168\u7C7B\u578B
    • \u9002\u914D\u5E76\u652F\u6301\u539F\u751F Xposed\uFF0C\u6700\u4F4E\u63A8\u8350\u7248\u672C\u4E3A Android 7.0
    • Hook \u5165\u53E3\u7C7B\u65B0\u589E\u652F\u6301\u58F0\u660E\u4E3A object \u7C7B\u578B (\u5355\u4F8B)
    • \u4FEE\u590D Android 8 \u4EE5\u4E0B\u7CFB\u7EDF\u4E0D\u652F\u6301 Executable \u7C7B\u578B\u5BFC\u81F4 Hook \u5931\u6548\u7684\u95EE\u9898
    • \u4FEE\u590D Android 9 \u4EE5\u4E0B\u7CFB\u7EDF\u5728\u4F7F\u7528 Activity \u4EE3\u7406\u529F\u80FD\u65F6\u62A5\u9519\u95EE\u9898\u5E76\u9650\u5236\u6B64\u529F\u80FD\u6700\u4F4E\u652F\u6301\u7248\u672C\u4E3A Android 7.0
    • \u65B0\u589E\u7981\u6B62\u8D44\u6E90\u6CE8\u5165\u4E0E Activity \u4EE3\u7406\u529F\u80FD\u6CE8\u5165\u5F53\u524D\u6A21\u5757\u81EA\u8EAB\u5B9E\u4F8B\u8FDB\u7A0B\uFF0C\u9632\u6B62\u53D1\u751F\u95EE\u9898
    • \u4FEE\u590D\u4E00\u4E2A Hook \u8FC7\u7A0B\u4E2D\u65B9\u6CD5\u8FD4\u56DE\u503C\u7684\u5BF9\u8C61\u662F\u76EE\u6807\u7684\u7EE7\u627F\u7C7B\u548C\u63A5\u53E3\u65F6\u88AB\u8BC6\u522B\u4E3A\u8FD4\u56DE\u503C\u4E0D\u7B26\u7684\u4E25\u91CD\u9519\u8BEF
    • \u4FEE\u590D\u5728\u5F53\u524D Hook \u7684\u5B9E\u4F8B\u5BF9\u8C61\u662F\u9759\u6001\u7684\u60C5\u51B5\u4E0B\u8C03\u7528 HookParam.callOriginal\u3001HookParam.invokeOriginal \u51FA\u73B0\u5BF9\u8C61\u4E3A\u7A7A\u95EE\u9898
    • \u4F18\u5316\u5BF9\u592A\u6781\u6FC0\u6D3B\u65B9\u6CD5\u76F8\u5173\u5224\u65AD\u529F\u80FD\u4EE5\u53CA\u540C\u6B65\u66F4\u65B0\u6587\u6863\u76F8\u5173\u8BF4\u660E
    • \u4F5C\u5E9F\u4E86 YukiHookAPI.Status.executorName\u3001YukiHookAPI.Status.executorVersion\uFF0C\u8BF7\u8F6C\u79FB\u5230 YukiHookAPI.Status.Executor
    • \u9002\u914D\u4E86\u4E00\u4E9B\u7B2C\u4E09\u65B9 Hook Framework \u7684 YukiHookAPI.Status.Executor.name \u540D\u79F0\u663E\u793A\u529F\u80FD
    • \u65B0\u589E Class.extends\u3001Class.implements \u7B49\u65B9\u6CD5\uFF0C\u53EF\u66F4\u52A0\u65B9\u4FBF\u5730\u5224\u65AD\u5F53\u524D Class \u7684\u7EE7\u627F\u4E0E\u63A5\u53E3\u5173\u7CFB
    • \u65B0\u589E Class.toClass\u3001Class.toClassOrNull \u7B49\u76F8\u5173\u65B9\u6CD5\u7684\u540C\u540D\u6CDB\u578B\u65B9\u6CD5\uFF0C\u53EF\u4F7F\u7528\u6CDB\u578B\u6765\u7EA6\u675F\u5DF2\u77E5 Class \u7684\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B
    • \u4FEE\u6539 classOf<T> \u65B9\u6CD5\u7684\u8FD4\u56DE\u503C\u4E3A\u6CDB\u578B T\uFF0C\u4EE5\u7EA6\u675F\u5DF2\u77E5 Class \u7684\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B
    • \u65B0\u589E Class \u76F8\u5173\u6269\u5C55\u65B9\u6CD5\u7684 initialize \u53C2\u6570\uFF0C\u53EF\u63A7\u5236\u5728\u5F97\u5230 Class \u5BF9\u8C61\u65F6\u662F\u5426\u540C\u65F6\u521D\u59CB\u5316\u5176\u9759\u6001\u65B9\u6CD5\u5757
    • \u53D8\u91CF\u3001\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u529F\u80FD\u4E2D\u65B0\u589E param { ... }\u3001type { ... } \u7B49\u7528\u6CD5\uFF0C\u53EF\u5BF9\u67E5\u627E\u7684\u5BF9\u8C61\u589E\u52A0\u66F4\u52A0\u5177\u4F53\u7684\u6761\u4EF6\u5224\u65AD
    • PackageParam \u7684 loadApp \u65B9\u6CD5\u65B0\u589E isExcludeSelf \u53C2\u6570\uFF0C\u53EF\u7528\u4E8E\u6392\u9664 Hook \u76F8\u5173\u529F\u80FD\u6CE8\u5165\u6A21\u5757\u81EA\u8EAB\u5B9E\u4F8B\u8FDB\u7A0B
    • PackageParam \u7684 onAppLifecycle \u65B9\u6CD5\u65B0\u589E isOnFailureThrowToApp \u53C2\u6570\uFF0C\u53EF\u5C06\u751F\u547D\u5468\u671F\u65B9\u6CD5\u4F53\u5185\u53D1\u751F\u7684\u5F02\u5E38\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
    • \u4FEE\u6539 PackageParam \u4E2D\u7684 appClassLoader \u4E3A\u53EF\u4FEE\u6539\u53D8\u91CF\uFF0C\u53EF\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A8\u6001\u8BBE\u7F6E\u5BBF\u4E3B\u4F7F\u7528\u7684 ClassLoader
    • HookParam \u4E2D\u65B0\u589E dataExtra \u529F\u80FD\uFF0C\u53EF\u7528\u4E8E\u4E34\u65F6\u5B58\u50A8 Hook \u65B9\u6CD5\u4F53\u4E2D\u7684\u6570\u636E
    • \u4F5C\u5E9F YukiHookModulePrefs \u4E2D\u7684 isRunInNewXShareMode\u3001isXSharePrefsReadable\uFF0C\u7EDF\u4E00\u5408\u5E76\u5230 isPreferencesAvailable
    • Class.allFields\u3001Class.allMethods \u7B49\u76F8\u5173\u65B9\u6CD5\u65B0\u589E isAccessible \u53C2\u6570\uFF0C\u53EF\u63A7\u5236\u6210\u5458\u5BF9\u8C61\u4F55\u65F6\u53EF\u88AB\u8BBE\u7F6E\u4E3A\u53EF\u8BBF\u95EE\u7C7B\u578B
    • \u4FEE\u590D YukiHookDataChannel \u5B58\u5728\u591A\u4E2A\u5BBF\u4E3B\u65F6\u5728\u4E00\u4E2A Activity \u4E2D\u63A5\u6536\u76F8\u540C\u952E\u503C\u6570\u636E\u65F6\u4EC5\u4F1A\u56DE\u8C03\u6700\u540E\u4E00\u4E2A\u65B9\u6CD5\u4F53\u7684\u95EE\u9898
    • YukiHookDataChannel \u7684 wait \u7B49\u76F8\u5173\u65B9\u6CD5\u4E2D\u65B0\u589E priority \u53C2\u6570\uFF0C\u53EF\u4F20\u5165 ChannelPriority \u6765\u81EA\u5B9A\u4E49\u56DE\u8C03\u6570\u636E\u7ED3\u679C\u7684\u6761\u4EF6
    • YukiHookDataChannel \u65B0\u589E\u53D1\u9001\u6570\u636E\u65F6\u81EA\u52A8\u4F7F\u7528 ChannelDataWrapper \u7C7B\u578B\u5305\u88C5\u529F\u80FD\uFF0C\u63D0\u5347\u4F7F\u7528\u4F53\u9A8C\u5E76\u589E\u5F3A\u6570\u636E\u4FDD\u62A4
    • YukiHookDataChannel \u65B0\u589E\u9650\u5236\u4E00\u6B21\u6027\u53D1\u9001\u6570\u636E\u7684\u6700\u5927\u5B57\u8282\u5927\u5C0F\u529F\u80FD\uFF0C\u9632\u6B62\u6570\u636E\u8FC7\u5927\u9020\u6210 APP \u5D29\u6E83
    • YukiHookDataChannel \u65B0\u589E\u53D1\u9001\u6570\u636E\u8FC7\u5927\u65F6\u81EA\u52A8\u5206\u6BB5\u53D1\u9001\u529F\u80FD\uFF0C\u4EC5\u652F\u6301 List\u3001Map\u3001Set\u3001String \u7C7B\u578B
    • YukiHookLogger \u65B0\u589E contents \u65B9\u6CD5\u4E0E saveToFile \u7684 data \u53C2\u6570\uFF0C\u53EF\u4F20\u5165\u81EA\u5B9A\u4E49\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u8FDB\u884C\u683C\u5F0F\u5316\u6216\u4FDD\u5B58\u5230\u6587\u4EF6
    • \u4FEE\u590D YukiHookLogger \u5904\u7406\u540E\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5305\u540D\u53EF\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0D\u6B63\u786E\u7684\u95EE\u9898
    • \u4FEE\u590D Xposed \u6A21\u5757\u88C5\u8F7D\u8D44\u6E90\u94A9\u5B50 (Resources Hook) \u4E8B\u4EF6\u65F6\u5728\u90E8\u5206\u7CFB\u7EDF\u4E0A (\u90E8\u5206\u7CFB\u7EDF APP \u4E2D) \u5305\u540D\u53EF\u80FD\u4E0D\u6B63\u786E\u7684\u95EE\u9898
    ',1),m={id:"_1-1-4-2022-10-04",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),P=o(" 1.1.4 | 2022.10.04 \u2002"),b=i("
    • \u4FEE\u590D YukiHookDataChannel \u53EF\u80FD\u4E0D\u80FD\u54CD\u5E94\u7CFB\u7EDF\u6846\u67B6\u4E2D\u54CD\u5E94\u5E7F\u64AD\u4E8B\u4EF6\u7684\u95EE\u9898\uFF0C\u5728 Android 13 \u4E2D\u590D\u73B0
    • \u4FEE\u590D YukiHookDataChannel \u957F\u8FBE\u591A\u4E2A\u7248\u672C\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u65E0\u6CD5\u4E0E\u6A21\u5757\u901A\u8BAF\u7684\u95EE\u9898
    • YukiHookDataChannel \u4E2D\u65B0\u589E obtainLoggerInMemoryData \u65B9\u6CD5\uFF0C\u53EF\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u5171\u4EAB\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E
    • \u4FEE\u6539 YukiHookLogger.inMemoryData \u7684\u7C7B\u578B\u4E3A ArrayList \u5E76\u4FEE\u6539 YukiLoggerData \u4E3A data class
    • \u4FEE\u590D YukiLoggerData \u5728\u6A21\u5757\u4E2D\u5305\u540D\u4E3A\u7A7A\u6253\u5370\u7A7A\u767D\u7684\u95EE\u9898
    • PackageParam \u4E2D\u65B0\u589E loadApp\u3001loadZygote\u3001loadSystem\u3001withProcess \u7684\u540C\u540D\u591A\u53C2\u6570\u65B9\u6CD5
    • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),x={id:"_1-1-3-2022-09-30",tabindex:"-1"},C=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),y=o(" 1.1.3 | 2022.09.30 \u2002"),A=e("ul",null,[e("li",null,"\u4FEE\u590D\u4E00\u4E2A\u65E0\u6CD5\u81EA\u5B9A\u4E49 Hook \u5165\u53E3\u7C7B\u540D\u7684\u81F4\u547D\u9519\u8BEF"),e("li",null,[o("\u6DFB\u52A0 "),e("code",null,"LoggerFactory"),o(" \u4E2D\u7684\u90E8\u5206\u4EE3\u7801\u6CE8\u91CA\u6587\u6848\u5E76\u66F4\u65B0\u7279\u8272\u529F\u80FD\u6587\u6863")])],-1),v={id:"_1-1-2-2022-09-30",tabindex:"-1"},Y=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),M=o(" 1.1.2 | 2022.09.30 \u2002"),I=i('
    • \u6587\u6863 \u57FA\u7840\u77E5\u8BC6 \u9875\u9762\u65B0\u589E English \u7248\u672C\u53CB\u60C5\u94FE\u63A5
    • \u4FEE\u590D YukiBaseHooker \u6CE8\u91CA\u4E2D\u7684 English \u6587\u6863\u94FE\u63A5\u9519\u8BEF\u95EE\u9898
    • \u4FEE\u590D ModuleClassLoader \u4E2D\u7684 ClassCastException \u95EE\u9898
    • \u4FEE\u6B63\u5E76\u89C4\u8303\u90E8\u5206\u4EE3\u7801\u6CE8\u91CA
    • \u65B0\u589E ModuleClassLoader \u6392\u9664\u5217\u8868\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528 excludeHostClasses \u548C excludeModuleClasses \u65B9\u6CD5\u6765\u81EA\u5B9A\u4E49\u6392\u9664\u5217\u8868
    • \u65B0\u589E YukiLoggerData \u5B9E\u65F6\u65E5\u5FD7\u6570\u636E\u7C7B\uFF0C\u53EF\u5B9E\u65F6\u901A\u8FC7 YukiHookLogger.inMemoryData \u83B7\u53D6\u65E5\u5FD7\u6570\u7EC4
    • \u65B0\u589E ClassLoader.listOfClasses \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5\u83B7\u53D6\u5F53\u524D Dex \u4E2D\u7684\u5168\u90E8 Class
    ',1),R={id:"_1-1-1-2022-09-28",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),X=o(" 1.1.1 | 2022.09.28 \u2002"),L=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E86\u6587\u6863 "),e("a",{href:"../guide/knowledge"},"\u57FA\u7840\u77E5\u8BC6"),o(" \u9875\u9762\u53CB\u60C5\u94FE\u63A5\u9519\u8BEF\u7684\u95EE\u9898")]),e("li",null,[o("\u4FEE\u590D\u4E86\u6587\u6863 "),e("code",null,"favicon"),o(" \u4E0D\u663E\u793A\u7684\u95EE\u9898")]),e("li",null,[o("\u4FEE\u590D "),e("code",null,"DexClassFinder"),o(" \u67E5\u627E\u6761\u4EF6\u4E2D\u7684 BUG")])],-1),F={id:"_1-1-0-2022-09-28",tabindex:"-1"},D=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),B=o(" 1.1.0 | 2022.09.28 \u2002"),W=e("li",null,[o("\u8FD9\u662F\u4E00\u6B21\u5927\u7248\u672C\u66F4\u65B0\uFF0C\u6709\u5173\u66F4\u65B0\u65E5\u5FD7\u4E2D\u63D0\u5230\u7684\u53D8\u5316\u53CA\u7528\u6CD5\u8BF7\u53C2\u8003 "),e("a",{href:"../api/home"},"API \u6587\u6863"),o(" \u4EE5\u53CA "),e("a",{href:"../api/special-features/reflection"},"\u7279\u8272\u529F\u80FD")],-1),U=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),T={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},w=o("VuePress"),G=i('
  • \u7EDF\u4E00\u5E76\u89C4\u8303\u6587\u6863\u4E2D\u7684\u672F\u8BED\u540D\u8BCD\uFF0C\u4F8B\u5982\u201C\u67E5\u8BE2\u201D\u4E00\u5F8B\u66F4\u6539\u4E3A\u4E86\u201C\u67E5\u627E\u201D\uFF0CXposedHelper \u62FC\u5199\u9519\u8BEF\u4FEE\u6539\u4E3A\u4E86 XposedHelpers
  • \u6587\u6863 \u57FA\u7840\u77E5\u8BC6 \u9875\u9762\u52A0\u5165\u53CB\u60C5\u94FE\u63A5\uFF0C\u4EC5\u9650\u7B80\u4F53\u4E2D\u6587
  • \u5C06 Hook App Demo \u7684 Class \u4E0E Method \u8F6C\u4E3A Java \u4EE5\u63D0\u4F9B\u66F4\u597D\u7684\u6F14\u793A\u6548\u679C
  • \u4FEE\u6B63\u4E86 Hook Module Demo \u4E2D\u7684\u4EE3\u7801\u6CE8\u91CA\u547D\u540D
  • \u91CD\u6784\u4E86\u5927\u91CF\u5E95\u5C42 Hook \u903B\u8F91\u53CA Xposed API \u7684\u5BF9\u63A5\u65B9\u5F0F
  • \u79FB\u9664\u4E86 HookParamWrapper\uFF0C\u73B0\u5DF2\u5C06\u5176\u76F4\u63A5\u4E0E YukiBridgeFactory \u5BF9\u63A5
  • \u79FB\u52A8\u90E8\u5206 YukiHookBridge \u4E2D\u7684\u65B9\u6CD5\u5230 AppParasitics
  • \u79FB\u9664\u4E86 HookParam.args \u4E0E\u5E95\u5C42\u7684\u76F4\u63A5\u5BF9\u63A5\u65B9\u6CD5 setArgs\uFF0C\u76F4\u63A5\u83B7\u53D6\u5E76\u8BBE\u7F6E\u5F53\u524D\u6570\u7EC4\u7684\u5BF9\u8C61
  • \u4F18\u5316\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u5C06\u5F15\u7528\u7684 jar \u5408\u5E76\u5230 stub \u9879\u76EE
  • ',9),E=o("\u4FEE\u590D\u591A\u9879\u76EE\u6253\u5305\u65F6\u6A21\u5757\u5305\u540D\u65E0\u6CD5\u6B63\u786E\u5339\u914D\u7684\u95EE\u9898\u4EE5\u53CA\u4FEE\u6539\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u6A21\u5757\u5305\u540D\u5339\u914D\u903B\u8F91\uFF0C\u611F\u8C22 "),N={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},O=o("5ec1cff"),j=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),z=i("
  • \u5BF9 API \u79C1\u6709\u5DE5\u5177\u7C7B\u7684\u65B9\u6CD5\u8FDB\u884C\u4E86 internal \u95ED\u5305\u5904\u7406\uFF0C\u907F\u514D\u6C61\u67D3\u9876\u7EA7\u547D\u540D\u7A7A\u95F4
  • \u4FEE\u6B63\u4E86\u6240\u6709\u53CD\u5C04\u548C Hook \u7C7B\u7684 Creater \u547D\u540D\u5230 Creator
  • \u65B0\u589E YukiHookAPI.Status.compiledTimestamp \u529F\u80FD\uFF0C\u53EF\u4EE5\u5728\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u65F6\u83B7\u53D6\u7F16\u8BD1\u5B8C\u6210\u7684\u65F6\u95F4\u6233
  • \u65B0\u589E YukiHookAPI.Status.isXposedEnvironment \u529F\u80FD\uFF0C\u53EF\u4EE5\u5224\u65AD\u5F53\u524D\u4E3A (Xposed) \u5BBF\u4E3B\u73AF\u5883\u8FD8\u662F\u6A21\u5757\u73AF\u5883
  • \u8C03\u8BD5\u65E5\u5FD7\u529F\u80FD\u8FDB\u884C\u4E86\u5927\u6539\u7248\uFF0C\u73B0\u5DF2\u5C06 YukiHookAPI.Configs.debugTag \u7B49\u529F\u80FD\u5408\u5E76\u5230 YukiHookLogger.Configs \u4E2D
  • \u8C03\u8BD5\u65E5\u5FD7\u65B0\u589E\u53EF\u6307\u5B9A\u6253\u5370\u4F7F\u7528\u7684\u65B9\u6CD5\u4E3A XposedBridge.log \u6216 Logd
  • \u8C03\u8BD5\u65E5\u5FD7\u4E2D\u9ED8\u8BA4\u52A0\u5165\u5F53\u524D\u5BBF\u4E3B\u7684\u5305\u540D\u4EE5\u53CA\u5F53\u524D\u7528\u6237 ID\uFF0C\u4EE5\u4F9B\u8C03\u8BD5\uFF0C\u4F60\u53EF\u4EE5\u5728 debugLog \u914D\u7F6E\u4E2D\u81EA\u884C\u66F4\u6539
  • \u65B0\u589E generic \u529F\u80FD\uFF0C\u53EF\u5BF9\u6CDB\u578B\u8FDB\u884C\u53CD\u5C04\u548C\u8C03\u7528\uFF0C\u4F60\u53EF\u4EE5\u5728 Class \u6216 CurrentClass \u4E2D\u4F7F\u7528\u5B83
  • \u4F5C\u5E9F buildOfAny \u65B9\u6CD5\uFF0C\u73B0\u5728\u8BF7\u76F4\u63A5\u4F7F\u7528 buildOf \u65B9\u6CD5 (\u4E0D\u5E26\u6CDB\u578B) \u6765\u4F7F\u7528\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5BF9\u8C61\u5E76\u5F97\u5230\u7ED3\u679C Any
  • \u4FEE\u590D hasExtends \u4F7F\u7528\u8FC7\u7A0B\u53D1\u751F\u7A7A\u6307\u9488\u5F02\u5E38\u7684\u95EE\u9898
  • CurrentClass \u65B0\u589E\u975E lambda \u65B9\u5F0F\u7684\u8C03\u7528\u65B9\u6CD5
  • CurrentClass \u65B0\u589E name \u4E0E simpleName \u529F\u80FD
  • \u5B8C\u5168\u91CD\u5199 ReflectionTool \u7684\u6838\u5FC3\u65B9\u6CD5\uFF0C\u5C06\u4E0D\u540C\u7684\u67E5\u627E\u6761\u4EF6\u8FDB\u884C\u4E86\u6574\u7406\u5206\u7C7B
  • \u4FEE\u590D ReflectionTool \u4E2D\u53EF\u80FD\u7684\u76F4\u63A5\u8C03\u7528 declared \u83B7\u53D6\u7684 Member \u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898
  • \u4FEE\u590D ReflectionTool \u4E2D UndefinedType \u672A\u5728 Method \u4E0E Constructor \u6761\u4EF6\u4E2D\u6B63\u786E\u5224\u65AD\u7684\u95EE\u9898
  • \u65B0\u589E\u53CD\u5C04\u67E5\u627E\u7ED3\u679C\u53D1\u751F\u5F02\u5E38\u65F6\u7684\u53CB\u597D\u63D0\u793A\u65B9\u5F0F\uFF0C\u53EF\u5177\u4F53\u5B9A\u4F4D\u5230\u6307\u5B9A\u6761\u4EF6\u627E\u4E0D\u5230 Member \u7684\u95EE\u9898
  • \u53CD\u5C04\u67E5\u627E Method\u3001Constructor \u4E2D\u65B0\u589E VagueType \u6761\u4EF6\uFF0C\u53EF\u4F7F\u7528\u5728 param \u6761\u4EF6\u4E2D\u7528\u4E8E\u5FFD\u7565\u4F60\u4E0D\u60F3\u586B\u5199\u7684\u53C2\u6570
  • \u53CD\u5C04\u67E5\u627E Method\u3001Constructor \u4E2D\u65B0\u589E paramCount { ... } \u6761\u4EF6\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u76F4\u63A5\u62FF\u5230\u5176\u4E2D\u7684 it \u6765\u81EA\u5B9A\u4E49\u4F60\u7684\u5224\u65AD\u6761\u4EF6
  • FieldFinder \u7ED3\u679C\u4E2D\u65B0\u589E current \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5\u5BF9\u7ED3\u679C\u5B9E\u4F8B\u521B\u5EFA\u8C03\u7528\u7A7A\u95F4
  • \u4FEE\u6539\u4E86\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u4E2D\u7684 modifiers \u6761\u4EF6\u4EE5\u53CA name \u6761\u4EF6\uFF0C\u73B0\u5728\u4F60\u9700\u8981\u5BF9\u6B64\u65B9\u6CD5\u4F53\u7ED3\u5C3E\u8FD4\u56DE\u4E00\u4E2A Boolean \u4EE5\u4F7F\u6761\u4EF6\u6210\u7ACB
  • ",20),V=e("code",null,"ModifierRules",-1),Z=o(" \u4E2D\u7684 "),K=e("code",null,"as*",-1),J=o(" \u529F\u80FD\u6539\u540D\u4E3A "),q=e("code",null,"is*",-1),Q=o("\uFF0C\u611F\u8C22 "),$={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ee=o("Kitsune"),oe=o(" \u7684\u5EFA\u8BAE"),de=i("
  • FieldFinder \u4E2D\u65B0\u589E RemedyPlan \u529F\u80FD
  • \u65B0\u589E Dex \u4E2D\u7684 Class \u6A21\u7CCA\u67E5\u627E\u529F\u80FD (Beta)\uFF0C\u4F60\u73B0\u5728\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 searchClass \u529F\u80FD\u6765\u4F7F\u7528\u6307\u5B9A\u6761\u4EF6\u6A21\u7CCA\u67E5\u627E Class
  • ",2),ce=o("\u65B0\u589E\u53CD\u5C04\u67E5\u627E\u4E2D\u7684\u591A\u91CD\u67E5\u627E\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528\u76F8\u5BF9\u67E5\u627E\u6761\u4EF6\u540C\u65F6\u83B7\u53D6\u591A\u4E2A\u67E5\u627E\u7ED3\u679C\uFF0C\u611F\u8C22 "),ie=e("strong",null,"AA",-1),le=o(" \u4EE5\u53CA "),te={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},se=o("Kitsune"),ne=o(" \u7684\u5EFA\u8BAE"),ae=o("\u4FEE\u590D "),re=e("code",null,"appClassLoader",-1),_e=o(" \u83B7\u53D6\u5230\u7684\u5BF9\u8C61\u5728\u67D0\u4E9B\u7CFB\u7EDF\u4E2D\u7684\u7CFB\u7EDF\u5E94\u7528\u4E2D\u4E0D\u6B63\u786E\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),he={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ue=o("Luckyzyx"),ke=o(" \u7684\u53CD\u9988"),pe=e("li",null,[o("\u4FEE\u6539\u4E86 "),e("code",null,"XposedBridge.invokeOriginalMethod"),o(" \u7684\u8C03\u7528\u65B9\u5F0F\u5E76\u5728 "),e("code",null,"MethodFinder.Result.Instance"),o(" \u4E2D\u589E\u52A0 "),e("code",null,"original"),o(" \u529F\u80FD")],-1),ge=o("\u4FEE\u590D "),fe=e("code",null,"YukiHookModulePrefs",-1),me=o(" \u4E2D "),He=e("code",null,"getStringSet",-1),Pe=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),be={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},xe=o("Teddy_Zhu"),Ce=o(" \u7684 "),ye={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ae=o("PR"),ve=e("li",null,[o("\u4FEE\u6539 "),e("code",null,"YukiHookModulePrefs"),o("\uFF0C\u62E6\u622A "),e("code",null,"XSharePreference"),o(" \u53EF\u80FD\u4E0D\u5B58\u5728\u7684\u5F02\u5E38")],-1),Ye=e("li",null,[o("\u4FEE\u590D "),e("code",null,"YukiHookDataChannel"),o(" \u5728\u67D0\u4E9B\u7B2C\u4E09\u65B9 ROM \u7CFB\u7EDF\u6846\u67B6\u4E2D\u65E0\u6CD5\u6CE8\u518C\u6210\u529F\u7684\u95EE\u9898")],-1),Me=e("li",null,[o("\u5B89\u5168\u5316 "),e("code",null,"YukiHookDataChannel"),o("\uFF0C\u73B0\u5728\u5B83\u53EA\u80FD\u5728\u6765\u81EA\u6307\u5B9A\u5305\u540D\u7684\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u901A\u4FE1")],-1),Ie=o("\u65B0\u589E\u81EA\u52A8 Hook "),Re=e("code",null,"SharedPreferences",-1),Se=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),Xe=e("code",null,"0664",-1),Le=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Fe={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},De=o("5ec1cff"),Be=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),We=i("
  • \u65B0\u589E YukiHookAPI.Configs.isEnableHookSharedPreferences \u529F\u80FD\uFF0C\u9ED8\u8BA4\u5173\u95ED\uFF0C\u82E5 SharedPreferences \u7684\u6743\u9650\u9519\u8BEF\u53EF\u8FDB\u884C\u542F\u7528
  • \u4FEE\u590D\u67E5\u627E Constructor \u65F6\u65E0\u53C2\u6784\u9020\u65B9\u6CD5\u5728\u4E0D\u586B\u5199\u67E5\u627E\u6761\u4EF6\u65F6\u65E0\u6CD5\u627E\u5230\u7684 BUG\uFF0C\u611F\u8C22 B5 KAKA \u7684\u53CD\u9988
  • \u5206\u79BB\u4F4D\u4E8E injectMember \u4E2D method\u3001constructor \u7684 Result \u5B9E\u4F8B\u5230 Process
  • \u5728 Hook \u8FC7\u7A0B\u4E2D\u65B0\u589E useDangerousOperation \u65B9\u6CD5\uFF0C\u672A\u8FDB\u884C\u58F0\u660E\u65F6\u5728 Hook \u5371\u9669\u5217\u8868\u4E2D\u7684\u529F\u80FD\u540E\u4F1A\u81EA\u52A8\u505C\u6B62 Hook \u5E76\u6253\u5370\u9519\u8BEF
  • \u65B0\u589E\u6A21\u5757\u8D44\u6E90\u6CE8\u5165\u4E0E Activity \u4EE3\u7406\u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u8C03\u7528 injectModuleAppResources \u53CA registerModuleAppActivities \u6765\u4F7F\u7528
  • \u65B0\u589E ModuleContextThemeWrapper \u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u8C03\u7528 applyModuleTheme \u5728\u4EFB\u610F Activity \u4E2D\u521B\u5EFA\u6A21\u5757\u7684 Context
  • \u65B0\u589E ClassLoader.onLoadClass \u529F\u80FD\uFF0C\u53EF\u7528\u4E8E\u76D1\u542C ClassLoader \u7684 loadClass \u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u4E8B\u4EF6
  • \u4F5C\u5E9F\u4E86 classOf \u4E0E clazz \u6269\u5C55\u65B9\u6CD5\uFF0C\u65B0\u589E toClass \u4EE5\u53CA toClassOrNull \u7528\u6CD5\uFF0C\u8BF7\u73B0\u5728\u8F6C\u79FB\u5230\u65B0\u7684\u65B9\u6CD5
  • VariousClass \u65B0\u589E getOrNull \u65B9\u6CD5\uFF0C\u53EF\u5728\u5339\u914D\u4E0D\u5230 Class \u7684\u65F6\u5019\u4E0D\u629B\u51FA\u5F02\u5E38\u800C\u662F\u8FD4\u56DE null
  • PackageParam.hook \u4E2D\u79FB\u9664\u4E86 isUseAppClassLoader \u53C2\u6570\uFF0C\u4FEE\u6539\u4E3A isForceUseAbsolute \u5E76\u81EA\u52A8\u5339\u914D\u76EE\u6807 Class
  • PackageParam \u65B0\u589E systemContext \u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u5728\u4EFB\u610F\u65F6\u95F4\u8C03\u7528\u6B64\u529F\u80FD\u83B7\u53D6\u4E00\u4E2A\u6301\u4E45\u5316\u7684 Context
  • \u4E0D\u518D\u5BF9\u5916\u5F00\u653E HookClass \u4E2D\u7684\u4EFB\u4F55\u65B9\u6CD5
  • HookParam \u4E2D\u65B0\u589E throwToApp \u529F\u80FD\uFF0C\u53EF\u5C06\u5F02\u5E38\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
  • Hook \u56DE\u8C03\u4E2D\u65B0\u589E onFailureThrowToApp \u529F\u80FD\uFF0C\u53EF\u5728\u53D1\u751F\u5F02\u5E38\u65F6\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
  • \u4FEE\u6539\u4E86\u8C03\u8BD5\u65E5\u5FD7\u7684\u6253\u5370\u903B\u8F91\uFF0C\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u4E2D\u7684\u8017\u65F6\u8BB0\u5F55\u4EC5\u4F1A\u5728 Hook \u8FC7\u7A0B\u4E2D\u8FDB\u884C\u6253\u5370
  • Hook \u8FC7\u7A0B\u4E2D\u65B0\u589E\u89E3\u9664 Hook \u529F\u80FD\uFF0C\u53EF\u4F7F\u7528 remove \u53CA removeSelf \u65B9\u6CD5\u89E3\u9664 Hook
  • \u4FEE\u590D\u5728 ReplaceHook \u5931\u8D25\u7684\u65F6\u5019\u5BFC\u81F4\u5BBF\u4E3B\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u73B0\u4FEE\u6539\u4E3A\u8C03\u7528\u539F\u59CB\u65B9\u6CD5\u4FDD\u8BC1\u5BBF\u4E3B\u529F\u80FD\u6B63\u5E38\u8FD0\u884C
  • \u65B0\u589E Hook \u8FC7\u7A0B\u4E2D\u5BF9\u65B9\u6CD5\u8FD4\u56DE\u503C\u7684\u68C0\u67E5\u529F\u80FD\uFF0C\u5728\u8FD4\u56DE\u503C\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u4E0B\u4F1A\u6839\u636E\u60C5\u666F\u81EA\u52A8\u629B\u51FA\u5F02\u5E38\u6216\u6253\u5370\u9519\u8BEF
  • ",18),Ue=o("Resources Hook \u4E2D\u65B0\u589E "),Te=e("code",null,"array",-1),we=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),Ge={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},Ee=o("GSWXXN"),Ne=o(" \u7684 "),Oe={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},je=o("PR"),ze=e("li",null,[o("\u79FB\u52A8 "),e("code",null,"me.weishu.reflection"),o(" \u5230 "),e("code",null,"thirdparty"),o(" \u9632\u6B62\u540C\u65F6\u5F15\u5165\u7684\u540C\u540D\u4F9D\u8D56\u51B2\u7A81")],-1),Ve=e("li",null,"\u79FB\u9664 Hook \u65B9\u6CD5\u4F53\u4E3A\u7A7A\u65F6\u629B\u51FA\u7684\u5F02\u5E38\uFF0C\u4FEE\u6539\u4E3A\u6253\u5370\u8B66\u544A\u65E5\u5FD7",-1),Ze=e("li",null,[o("\u4FEE\u6539 "),e("code",null,"AppLifecycle"),o(" \u7684\u5F02\u5E38\u5904\u7406\u903B\u8F91\uFF0C\u5F53\u5176\u53D1\u751F\u5F02\u5E38\u65F6\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B")],-1),Ke=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),Je={id:"_1-0-92-2022-05-31",tabindex:"-1"},qe=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),Qe=o(" 1.0.92 | 2022.05.31 \u2002"),$e=i("
    • \u4FEE\u6B63\u4E86\u5927\u91CF\u65B9\u6CD5\u4E2D callback \u7684\u547D\u540D\u65B9\u6CD5
    • \u66F4\u6362\u65B9\u6848\u518D\u6B21\u4FEE\u590D YukiHookDataChannel \u5728\u4F4E\u4E8E Android 12 \u7684\u8BBE\u5907\u4E0A\u4E0D\u80FD\u56DE\u8C03\u5F53\u524D Activity \u5E7F\u64AD\u7684\u95EE\u9898
    • InjectYukiHookWithXposed \u6CE8\u89E3\u65B0\u589E isUsingResourcesHook \u529F\u80FD\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u9009\u62E9\u6027\u5173\u95ED\u81EA\u52A8\u751F\u6210 IXposedHookInitPackageResources \u7684\u4F9D\u8D56\u63A5\u53E3\u4E86
    ",1),eo={id:"_1-0-91-2022-05-29",tabindex:"-1"},oo=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),co=o(" 1.0.91 | 2022.05.29 \u2002"),io=o("\u4FEE\u590D\u90E8\u5206\u8BBE\u5907\u7684\u5B9A\u5236\u7CFB\u7EDF\u5728 LSPosed \u73AF\u5883\u4E0B\u5F00\u673A\u542F\u52A8\u83B7\u53D6\u7684 "),lo=e("code",null,"ClassLoader",-1),to=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),so={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},no=o("Luckyzyx"),ao=o(" \u7684\u53CD\u9988"),ro=i("
  • \u4FEE\u590D YukiHookDataChannel \u5728 ZUI \u4EE5\u53CA\u4F4E\u4E8E Android 12 \u7684\u7CFB\u7EDF\u4E0A\u4E0D\u80FD\u56DE\u8C03\u5F53\u524D Activity \u5E7F\u64AD\u7684\u95EE\u9898
  • \u6574\u5408 YukiHookModuleStatus \u529F\u80FD\u5230 YukiHookAPI.Status\uFF0C\u91CD\u5199\u4E86\u5927\u91CF\u65B9\u6CD5\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u53CC\u5411\u5224\u65AD\u6A21\u5757\u6FC0\u6D3B\u7B49\u72B6\u6001\u4FE1\u606F
  • ",2),_o={id:"_1-0-90-2022-05-27",tabindex:"-1"},ho=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),uo=o(" 1.0.90 | 2022.05.27 \u2002"),ko=i("
    • \u4FEE\u590D YukiHookDataChannel \u5728\u6A21\u5757\u8BBE\u7F6E\u76D1\u542C\u56DE\u8C03\u65F6\u95EA\u9000\u7684\u95EE\u9898
    • \u4FEE\u590D YukiHookDataChannel \u5728\u975E\u5F53\u524D Activity \u60C5\u51B5\u4E0B\u4F9D\u7136\u4F1A\u56DE\u8C03\u7684\u95EE\u9898
    • \u79FB\u9664 YukiHookDataChannel \u56DE\u8C03\u4E8B\u4EF6\u7684\u9ED8\u8BA4\u503C\uFF0C\u6CA1\u6709\u5373\u4E0D\u56DE\u8C03
    • \u79FB\u9664 YukiHookModulePrefs \u5728 XShare \u4E0D\u53EF\u8BFB\u7684\u60C5\u51B5\u4E0B\u6253\u5370\u7684\u8B66\u544A
    • \u65B0\u589E YukiHookModulePrefs \u4E2D\u7684 isXSharePrefsReadable \u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D\u7684 XShare \u662F\u5426\u53EF\u7528
    ",1),po={id:"_1-0-89-2022-05-26",tabindex:"-1"},go=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),fo=o(" 1.0.89 | 2022.05.26 \u2002"),mo=i("
    • \u4FEE\u590D YukiHookDataChannel \u4E0D\u80FD\u91CD\u590D\u8BBE\u7F6E\u76D1\u542C\u7684\u95EE\u9898\uFF0C\u5E76\u52A0\u5165\u5728\u6A21\u5757\u4E0D\u540C Activity \u4E2D\u91CD\u590D\u54CD\u5E94\u548C\u81EA\u52A8\u8DDF\u968F Activity \u9500\u6BC1\u76D1\u542C\u529F\u80FD
    • \u65B0\u589E YukiHookDataChannel \u91CD\u590D\u76D1\u542C\u7528\u4F8B\u8BF4\u660E\u6587\u6863
    • \u52A0\u5165 onAlreadyHooked \u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D\u65B9\u6CD5\u662F\u5426\u88AB\u91CD\u590D Hook
    • \u4FEE\u6539\u90E8\u5206\u91CD\u590D\u6DFB\u52A0 HashMap \u7684\u903B\u8F91\uFF0C\u79FB\u9664 putIfAbsent \u65B9\u6CD5\uFF0C\u5141\u8BB8\u8986\u76D6\u6DFB\u52A0
    • \u4FEE\u590D\u4E86\u51E0\u5904\u53EF\u80FD\u7684 BUG
    ",1),Ho={id:"_1-0-88-2022-05-25",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),bo=o(" 1.0.88 | 2022.05.25 \u2002"),xo=i("
    • \u5BF9 Xposed API \u5B8C\u5168\u89E3\u8026\u5408
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
    • \u5C06 YukiHookModuleStatus \u4ECE\u81EA\u52A8\u751F\u6210\u4EE3\u7801\u4E2D\u5206\u79BB\uFF0C\u5E76\u52A0\u5165 isEnableHookModuleStatus \u7684\u5F00\u5173\uFF0C\u7531\u4F60\u51B3\u5B9A\u662F\u5426\u542F\u7528
    • \u5BF9 API \u5927\u91CF\u7C7B\u7684\u6784\u9020\u65B9\u6CD5\u8FDB\u884C\u4E86 internal \u95ED\u5305\u5904\u7406
    • \u5C06 YukiHookModulePrefs \u8BBE\u7F6E\u4E3A\u5355\u4F8B\u8FD0\u884C\uFF0C\u9632\u6B62\u91CD\u590D\u521B\u5EFA\u6D6A\u8D39\u7CFB\u7EDF\u8D44\u6E90
    • \u4FEE\u590D\u81EA 1.0.80 \u7248\u672C\u540E\u65E0\u6CD5\u5D4C\u5957 Hook \u7684 BUG\uFF0C\u5E76\u4F18\u5316\u5D4C\u5957 Hook \u76F8\u5173\u529F\u80FD
    • \u4FEE\u6539 Hooker \u5B58\u50A8\u65B9\u6848\u7531 HashSet \u5230 HashMap\uFF0C\u9632\u6B62\u91CD\u590D\u6DFB\u52A0 Hooker \u7684\u95EE\u9898
    • \u4FEE\u6539 Hook \u6838\u5FC3\u5B9E\u73B0\u65B9\u6CD5\uFF0C\u52A0\u5165\u67E5\u91CD\uFF0C\u907F\u514D\u91CD\u590D Hook \u591A\u6B21\u56DE\u8C03 HookParam \u65B9\u6CD5
    • MethodFinder \u4E0E FieldFinder \u52A0\u5165\u67E5\u627E\u6A21\u7CCA\u65B9\u6CD5\u3001\u53D8\u91CF\u540D\u79F0\u529F\u80FD\uFF0C\u53EF\u8C03\u7528 name { ... } \u6765\u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\uFF0C\u652F\u6301\u6B63\u5219
    • \u4F18\u5316\u5E76\u4FEE\u6539 appContext \u7684\u83B7\u53D6\u65B9\u5F0F\uFF0C\u964D\u4F4E\u4F1A\u53D6\u5230\u7A7A\u7684\u95EE\u9898\u7684\u53EF\u80FD\u6027
    • \u4FEE\u6539\u81EA\u52A8\u751F\u6210\u7684\u4EE3\u7801\u4E2D logger \u7684\u6253\u5370 TAG \u9ED8\u8BA4\u4E3A\u4F60\u81EA\u5B9A\u4E49\u7684\u540D\u79F0\uFF0C\u65B9\u4FBF\u8FDB\u884C\u8C03\u8BD5
    • \u4F18\u5316 YukiHookBridge \u7684 Hooker \u5B9E\u73B0\u65B9\u5F0F\uFF0C\u63D0\u5347 Hook \u6027\u80FD
    • PackageParam \u589E\u52A0 onAppLifecycle \u65B9\u6CD5\uFF0C\u53EF\u539F\u751F\u76D1\u542C\u5BBF\u4E3B\u7684\u751F\u547D\u5468\u671F\u4EE5\u53CA\u5B9E\u73B0\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u529F\u80FD
    • \u65B0\u589E YukiHookDataChannel \u529F\u80FD\uFF0C\u53EF\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4FDD\u6301\u5B58\u6D3B\u7684\u60C5\u51B5\u4E0B\u4F7F\u7528\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u8FDB\u884C\u901A\u8BAF
    • YukiHookDataChannel \u589E\u52A0 checkingVersionEquals \u65B9\u6CD5\uFF0C\u53EF\u901A\u8FC7\u76D1\u542C\u6765\u9A8C\u8BC1\u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u66F4\u65B0\u7248\u672C\u4E0D\u5339\u914D\u95EE\u9898
    • demo-module \u7684\u793A\u4F8B\u4EE3\u7801\u4E2D\u65B0\u589E Java \u7248\u672C\u7684\u793A\u4F8B\uFF0C\u4EC5\u4F9B\u53C2\u8003
    ",1),Co={id:"_1-0-87-2022-05-10",tabindex:"-1"},yo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Ao=o(" 1.0.87 | 2022.05.10 \u2002"),vo=e("ul",null,[e("li",null,[o("\u65B0\u589E "),e("code",null,"refreshModuleAppResources"),o(" \u529F\u80FD\uFF0C\u4EE5\u9002\u914D\u8BED\u8A00\u533A\u57DF\u3001\u5B57\u4F53\u5927\u5C0F\u3001\u5206\u8FA8\u7387\u6539\u53D8\u7B49\u60C5\u51B5\u4E0B\u7684 Resources \u5237\u65B0")]),e("li",null,[o("\u65B0\u589E "),e("code",null,"isEnableModuleAppResourcesCache"),o(" \u529F\u80FD\uFF0C\u53EF\u81EA\u884C\u8BBE\u7F6E\u662F\u5426\u81EA\u52A8\u7F13\u5B58\u5F53\u524D\u6A21\u5757\u7684 Resources")])],-1),Yo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Mo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Io=o(" 1.0.86 | 2022.05.06 \u2002"),Ro=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E0D\u652F\u6301 Resources Hook(\u8D44\u6E90\u94A9\u5B50) \u7684\u60C5\u51B5\u4E0B\u5728 "),e("code",null,"initZygote"),o(" \u65F6\u6301\u7EED\u62A5\u9519\u7684\u95EE\u9898\uFF0C\u590D\u73B0\u5728 "),e("strong",null,"ZUI"),o("/"),e("strong",null,"LSPosed CI(1.8.3-6550)")]),e("li",null,"\u4F18\u5316\u5E76\u5BF9 Resources Hook \u8FDB\u884C\u5F02\u5E38\u5904\u7406\uFF0C\u53EA\u6709\u88AB\u4F7F\u7528\u540E\u4E0D\u652F\u6301\u624D\u4F1A\u6253\u5370\u9519\u8BEF\u548C\u8B66\u544A")],-1),So={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),Lo=o(" 1.0.85 | 2022.05.04 \u2002"),Fo=i("
    • \u4FEE\u590D\u65E0\u6CD5 Hook \u7CFB\u7EDF\u6846\u67B6\u7684\u4E25\u91CD\u95EE\u9898\uFF0C\u4ECE 1.0.80 \u5F00\u59CB\u51FA\u73B0
    • \u8C03\u8BD5\u65E5\u5FD7\u4E2D\u65B0\u589E\u533A\u5206 initZygote \u88C5\u8F7D\u7684\u5305\u540D\u4E3A android-zygote\uFF0CpackageName \u4FDD\u6301 android \u4E0D\u53D8
    ",1),Do={id:"_1-0-83-2022-05-04",tabindex:"-1"},Bo=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Wo=o(" 1.0.83 | 2022.05.04 \u2002"),Uo=e("ul",null,[e("li",null,[o("\u4FEE\u590D "),e("code",null,"YukiHookModuleStatus"),o(" \u5728 "),e("code",null,"loadSystem"),o(" \u540E\u5927\u91CF\u62A5\u9519\u7684\u95EE\u9898")]),e("li",null,[o("\u65B0\u589E "),e("code",null,"type"),o(" \u4E2D\u7684 "),e("code",null,"android"),o(" \u7C7B\u578B")]),e("li",null,"\u66F4\u65B0\u5E2E\u52A9\u6587\u6863\u7684\u793A\u4F8B\u8BF4\u660E")],-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),Go=o(" 1.0.82 | 2022.05.04 \u2002"),Eo=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E86\u4E00\u5904\u6982\u5FF5\u6DF7\u6DC6\u9519\u8BEF\uFF0C\u533A\u5206 "),e("code",null,"initZygote"),o(" \u4E0E\u7CFB\u7EDF\u6846\u67B6\u7684\u5173\u7CFB\uFF0C\u4E4B\u524D\u7684\u6CE8\u91CA\u548C\u6587\u6863\u6709\u95EE\u9898\uFF0C\u975E\u5E38\u62B1\u6B49")]),e("li",null,[e("code",null,"PackageParam"),o(" \u65B0\u589E "),e("code",null,"loadSystem"),o(" \u65B9\u6CD5\uFF0C\u4E0D\u9700\u8981\u518D\u5199 "),e("code",null,'loadApp(name = "android")'),o(" \u5373\u53EF Hook \u7CFB\u7EDF\u6846\u67B6")])],-1),No={id:"_1-0-81-2022-05-04",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),jo=o(" 1.0.81 | 2022.05.04 \u2002"),zo=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4F7F\u7528 "),e("code",null,"by"),o(" \u65B9\u6CD5\u8BBE\u7F6E\u6761\u4EF6\u540E Hook \u65B9\u6CD5\u4F53\u5185\u67E5\u627E\u4E0D\u5230\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4F9D\u7136\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u7684\u95EE\u9898")]),e("li",null,"\u5728\u6267\u884C Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165\u5168\u5C40\u65E5\u5FD7\u663E\u793A\u5F53\u524D Hook APP \u7684\u5305\u540D\uFF0C\u5E76\u4FEE\u590D\u4E00\u5904\u9519\u8BEF\u65E5\u5FD7\u6253\u5370\u6837\u5F0F\u7684\u95EE\u9898")],-1),Vo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Zo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),Ko=o(" 1.0.80 | 2022.05.01 \u2002"),Jo=i("
  • InjectYukiHookWithXposed \u6CE8\u89E3\u65B0\u589E entryClassName \u529F\u80FD\uFF0C\u53EF\u81EA\u5B9A\u4E49\u751F\u6210\u7684 xposed_init \u5165\u53E3\u7C7B\u540D
  • YukiHookXposedInitProxy \u66F4\u540D\u4E3A IYukiHookXposedInit\uFF0C\u539F\u63A5\u53E3\u540D\u79F0\u5DF2\u4F5C\u5E9F\uFF0C\u5C06\u5728\u540E\u7EED\u7248\u672C\u4E2D\u76F4\u63A5\u88AB\u5220\u9664
  • \u65B0\u589E initZygote \u4E0E Resources Hook \u529F\u80FD\uFF0C\u652F\u6301 Hook Layout
  • \u65B0\u589E onXposedEvent \u65B9\u6CD5\uFF0C\u53EF\u76D1\u542C\u539F\u751F Xposed API \u7684\u5168\u90E8\u4E8B\u4EF6
  • \u5BF9 Hook \u529F\u80FD\u7684 lambda \u8FDB\u884C inline \u5904\u7406\uFF0C\u907F\u514D\u751F\u6210\u8FC7\u788E\u7684\u533F\u540D\u7C7B\uFF0C\u63D0\u5347\u7F16\u8BD1\u540E\u7684\u8FD0\u884C\u6027\u80FD
  • \u4FEE\u590D PrefsData \u7F16\u8BD1\u540E\u7684\u65B9\u6CD5\u4F53\u590D\u5236\u8FC7\u5927\u7684\u95EE\u9898
  • \u589E\u52A0 XSharePreference \u53EF\u8BFB\u6027\u6D4B\u8BD5\uFF0C\u5931\u8D25\u540E\u4F1A\u81EA\u52A8\u6253\u5370\u8B66\u544A\u65E5\u5FD7
  • PackageParam \u65B0\u589E appResources\u3001moduleAppResources\u3001moduleAppFilePath \u529F\u80FD
  • PackageParam \u7684 loadApp \u65B0\u589E\u4E0D\u5199 name \u529F\u80FD\uFF0C\u9ED8\u8BA4\u7B5B\u9009\u5168\u90E8 APP
  • PackageParam \u65B0\u589E loadZygote \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5 Hook \u7CFB\u7EDF\u6846\u67B6
  • PackageParam \u65B0\u589E resources().hook \u529F\u80FD
  • \u4F18\u5316\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u67E5\u627E\u529F\u80FD\uFF0C\u627E\u4E0D\u5230\u7684\u9519\u8BEF\u65E5\u5FD7\u5C06\u4F18\u5148\u663E\u793A\u5DF2\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6
  • \u589E\u52A0 hasExtends \u6269\u5C55\u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D Class \u662F\u5426\u6709\u7EE7\u627F\u5173\u7CFB
  • \u589E\u52A0 isSupportResourcesHook \u529F\u80FD\uFF0C\u5224\u65AD\u5F53\u524D\u662F\u5426\u652F\u6301\u8D44\u6E90\u94A9\u5B50(Resources Hook)
  • current \u529F\u80FD\u65B0\u589E superClass \u65B9\u6CD5\u8C03\u7528\u7236\u7C7B
  • \u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u65B0\u589E superClass \u67E5\u627E\u6761\u4EF6\uFF0C\u53EF\u7EE7\u7EED\u5728\u7236\u7C7B\u4E2D\u67E5\u627E
  • YukiHookAPI \u5927\u91CF\u65B9\u6CD5\u4E0E Xposed API \u89E3\u8026\u5408
  • \u65B0\u589E Xposed API \u7684\u539F\u751F Hook \u4F18\u5148\u7EA7\u529F\u80FD
  • \u4FEE\u590D isFirstApplication \u53EF\u80FD\u5224\u65AD\u4E0D\u51C6\u786E\u7684\u95EE\u9898
  • \u5C4F\u853D MIUI \u7CFB\u7EDF\u4E0A MiuiCatcherPatch \u91CD\u590D\u8C03\u7528 Hook \u5165\u53E3\u65B9\u6CD5\u7684\u95EE\u9898
  • \u4F18\u5316 Hook \u5165\u53E3\u8C03\u7528\u65B9\u6CD5\uFF0C\u907F\u514D\u56E0\u4E3A Hook Framework \u95EE\u9898\u5BFC\u81F4\u591A\u6B21\u8C03\u7528
  • ",21),qo=o("\u4FEE\u590D Hook "),Qo=e("code",null,"ClassLoader",-1),$o=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),ed={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},od=o("WankkoRee"),dd=o(" \u7684\u53CD\u9988"),cd=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),id=e("li",null,[o("Java "),e("code",null,"type"),o(" \u65B0\u589E "),e("code",null,"ClassLoader"),o(" \u7C7B\u578B")],-1),ld=e("li",null,"\u4F18\u5316 API \u5E2E\u52A9\u6587\u6863\uFF0C\u4FEE\u590D\u53EF\u80FD\u6301\u7EED\u7F13\u5B58\u9875\u9762\u7684\u95EE\u9898",-1),td={id:"_1-0-78-2022-04-18",tabindex:"-1"},sd=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),nd=o(" 1.0.78 | 2022.04.18 \u2002"),ad=i("
  • YukiHookModulePrefs \u65B0\u589E isRunInNewXShareMode \u65B9\u6CD5\uFF0C\u53EF\u7528\u4E8E\u5224\u65AD\u6A21\u5757\u5F53\u524D\u662F\u5426\u5904\u4E8E New XSharePreference \u6A21\u5F0F
  • \u4FEE\u590D YukiHookModulePrefs \u5728 New XSharePreference \u6A21\u5F0F\u4E0B\u5DE5\u4F5C\u7684\u90E8\u5206\u95EE\u9898
  • \u65B0\u589E ModulePreferenceFragment\uFF0C\u73B0\u5728\uFF0C\u4F60\u53EF\u4EE5\u5B8C\u5168\u66FF\u6362\u6389 PreferenceFragmentCompat \u5E76\u5F00\u59CB\u4F7F\u7528\u65B0\u7684\u529F\u80FD
  • ",3),rd=o("\u9002\u914D "),_d=e("code",null,"PreferenceFragmentCompat",-1),hd=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),ud={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},kd=o("mahoshojoHCG"),pd=o(" \u7684\u53CD\u9988"),gd=e("li",null,[o("\u66F4\u65B0\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u4EE5\u53CA "),e("code",null,"Kotlin"),o(" \u4F9D\u8D56\u5230\u6700\u65B0\u7248\u672C")],-1),fd=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),md={id:"_1-0-77-2022-04-15",tabindex:"-1"},Hd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),Pd=o(" 1.0.77 | 2022.04.15 \u2002"),bd=e("code",null,"YukiHookModulePrefs",-1),xd=o(" \u65B0\u589E "),Cd=e("code",null,"clear",-1),yd=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),Ad={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},vd=o("WankkoRee"),Yd=o(" \u7684\u5EFA\u8BAE"),Md=i("
  • YukiHookModulePrefs \u65B0\u589E getStringSet\u3001putStringSet\u3001all \u65B9\u6CD5
  • HookParam \u7684 args \u589E\u52A0 any \u65B9\u6CD5
  • \u65B0\u589E ModuleApplication\uFF0C\u53EF\u5728\u6A21\u5757\u4E2D\u7EE7\u627F\u6B64\u7C7B\u5B9E\u73B0\u66F4\u591A\u529F\u80FD
  • \u5BF9\u63A5\u5168\u90E8\u7684 findClass \u529F\u80FD\u5230 Xposed API\uFF0C\u5728\u975E\u5BBF\u4E3B\u73AF\u5883\u7EE7\u7EED\u4F7F\u7528\u539F\u751F ClassLoader
  • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
  • ",5),Id={id:"_1-0-75-2022-04-13",tabindex:"-1"},Rd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Sd=o(" 1.0.75 | 2022.04.13 \u2002"),Xd=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),Ld={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Fd=o("ApeaSuperz"),Dd=o(" \u7684\u8D21\u732E"),Bd=i("
  • \u4FEE\u6B63\u4E00\u5904\u6587\u6863\u6CE8\u91CA\u7684\u5F15\u7528\u672A\u66F4\u6539\u7684\u95EE\u9898
  • HookParam \u4E2D\u5220\u9664\u4E86 firstArgs \u4E0E lastArgs \u65B9\u6CD5\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 args().first() \u4E0E args().last() \u6765\u53D6\u4EE3\u5B83
  • HookParam \u4E2D\u5220\u9664\u4E86 args() \u4E2D\u7684\u9ED8\u8BA4\u53C2\u6570 index = 0\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 args().first() \u6216 args(index = 0) \u6765\u53D6\u4EE3\u5B83
  • HookParam \u4E2D result \u529F\u80FD\u589E\u52A0\u4E86\u6CDB\u578B\u5339\u914D\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 result<T> \u6765\u5339\u914D\u4F60\u7684\u76EE\u6807\u65B9\u6CD5\u5DF2\u77E5\u8FD4\u56DE\u503C\u7C7B\u578B\u4E86
  • \u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u529F\u80FD\u65B0\u589E emptyParam \u6761\u4EF6\uFF0C\u5E76\u5B8C\u5584\u4E86\u6587\u6863\u76F8\u5173\u9700\u8981\u6CE8\u610F\u7684\u67E5\u627E\u6761\u4EF6\u8BEF\u533A
  • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
  • ",6),Wd=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),Ud=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),Td={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},wd=o("WankkoRee"),Gd=o(" \u7684\u8D21\u732E"),Ed=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),Nd=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Od=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),jd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},zd=o("Luckyzyx"),Vd=o(" \u7684\u53CD\u9988"),Zd=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),Kd={id:"_1-0-72-2022-04-09",tabindex:"-1"},Jd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),qd=o(" 1.0.72 | 2022.04.09 \u2002"),Qd=e("ul",null,[e("li",null,"\u66F4\u65B0 API \u6587\u6863\u5230\u65B0\u7684\u5730\u5740"),e("li",null,[e("code",null,"PackageParam"),o(" \u4E2D\u52A0\u5165 "),e("code",null,"appContext"),o(" \u529F\u80FD")]),e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027")],-1),$d={id:"_1-0-71-2022-04-04",tabindex:"-1"},ec=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),oc=o(" 1.0.71 | 2022.04.04 \u2002"),dc=e("ul",null,[e("li",null,"\u4FEE\u590D VariousClass \u65E0\u6CD5\u5339\u914D\u65F6\u4F1A\u505C\u6B62 Hook \u629B\u51FA\u5F02\u5E38\u7684\u4E25\u91CD\u95EE\u9898")],-1),cc={id:"_1-0-70-2022-04-04",tabindex:"-1"},ic=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),lc=o(" 1.0.70 | 2022.04.04 \u2002"),tc=e("li",null,[o("\u4FEE\u590D "),e("code",null,"instanceClass"),o(" \u5728\u9759\u6001\u5B9E\u4F8B\u4E2D\u8C03\u7528\u540E\u62A5\u9519\u95EE\u9898")],-1),sc=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),nc=e("code",null,"isUseAppClassLoader",-1),ac=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),rc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},_c=o("WankkoRee"),hc=o(" \u7684\u53CD\u9988"),uc=e("li",null,[o("\u52A0\u5165 "),e("code",null,"withProcess"),o(" \u529F\u80FD\uFF0C\u53EF\u6839\u636E APP \u5F53\u524D\u6307\u5B9A\u8FDB\u7A0B\u8FDB\u884C Hook")],-1),kc=e("li",null,"\u4FEE\u590D\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u548C\u53D8\u91CF\u7684\u4E25\u91CD\u903B\u8F91\u9519\u8BEF\u95EE\u9898",-1),pc=e("li",null,"\u4FEE\u590D Hook \u76EE\u6807\u7C7B\u4E0D\u5B58\u5728\u7684\u65F6\u5019\u65E0\u6CD5\u5FFD\u7565\u5F02\u5E38\u8F93\u51FA\u7684\u95EE\u9898",-1),gc=e("li",null,"\u4FEE\u590D\u90E8\u5206\u60C5\u51B5\u4E0B APP \u542F\u52A8\u65B9\u6CD5\u88C5\u8F7D\u8FC7\u5FEB\u5BFC\u81F4 Hook \u4E0D\u80FD\u751F\u6548\u7684\u95EE\u9898",-1),fc=o("\u4FEE\u590D "),mc=e("code",null,"allMethods",-1),Hc=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Pc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},bc=o("WankkoRee"),xc=o(" \u7684\u53CD\u9988"),Cc=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),yc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ac=o("WankkoRee"),vc=o(" \u7684\u5EFA\u8BAE"),Yc=e("li",null,"\u4FEE\u6539 Xposed \u5165\u53E3\u6CE8\u5165\u7C7B\u7684\u65B9\u5F0F\uFF0C\u91CD\u65B0\u58F0\u660E API \u7684\u5B9A\u4E49\u57DF",-1),Mc=o("\u52A0\u5165\u6DF7\u6DC6\u7684\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u7684\u67E5\u627E\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528\u4E0D\u540C\u7C7B\u578B\u7B5B\u9009 "),Ic=e("code",null,"index",-1),Rc=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),Sc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Xc=o("WankkoRee"),Lc=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),Fc=e("li",null,[o("\u67E5\u627E\u65B9\u6CD5\u3001\u53D8\u91CF\u65F6\u5141\u8BB8\u4F20\u5165\u591A\u79CD\u7C7B\u578B\uFF0C\u4F8B\u5982 "),e("code",null,"String"),o(" \u58F0\u660E\u7684\u7C7B\u540D\u548C "),e("code",null,"VariousClass")],-1),Dc=e("li",null,[o("\u52A0\u5165\u5168\u65B0\u7684 "),e("code",null,"current"),o(" \u529F\u80FD\uFF0C\u53EF\u5BF9\u4EFB\u610F\u7684\u7C7B\u6784\u5EFA\u4E00\u4E2A\u53CD\u5C04\u65B9\u6CD5\u64CD\u4F5C\u7A7A\u95F4\uFF0C\u65B9\u4FBF\u5730\u8C03\u7528\u548C\u4FEE\u6539\u5176\u4E2D\u7684\u65B9\u6CD5\u548C\u53D8\u91CF")],-1),Bc=o("\u4FEE\u590D\u4E86 Hook \u8FC7\u7A0B\u4E2D\u7684\u5927\u91CF BUG\uFF0C\u611F\u8C22 "),Wc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Uc=o("WankkoRee"),Tc=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),wc={id:"_1-0-69-2022-03-30",tabindex:"-1"},Gc=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Ec=o(" 1.0.69 | 2022.03.30 \u2002"),Nc=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),Oc=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),jc=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),zc=e("code",null,"allMethods",-1),Vc=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Zc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Kc=o("WankkoRee"),Jc=o(" \u7684\u53CD\u9988"),qc={id:"_1-0-68-2022-03-29",tabindex:"-1"},Qc=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),$c=o(" 1.0.68 | 2022.03.29 \u2002"),ei=i("
    • \u589E\u52A0 Demo \u4E2D\u7684\u65B0\u7528\u4F8B\u548C LSPosed \u4F5C\u7528\u57DF
    • \u589E\u52A0 Member \u67E5\u627E\u7F13\u5B58\u548C\u67E5\u627E\u7F13\u5B58\u914D\u7F6E\u5F00\u5173
    • \u79FB\u9664\u548C\u4FEE\u6539 MethodFinder\u3001FieldFinder \u4EE5\u53CA HookParam \u76F8\u5173\u65B9\u6CD5\u7684\u8C03\u7528
    • \u589E\u52A0\u66F4\u591A Finder \u4E2D\u7684 cast \u7C7B\u578B\u5E76\u652F\u6301 cast \u4E3A\u6570\u7EC4
    • \u6574\u4F53\u7684\u6027\u80FD\u548C\u7A33\u5B9A\u6027\u63D0\u5347
    • \u4FEE\u590D\u4E0A\u4E00\u4E2A\u7248\u672C\u53EF\u80FD\u5B58\u5728\u7684 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),ci=o(" 1.0.67 | 2022.03.27 \u2002"),ii=i("
    • \u589E\u52A0\u4E09\u4E2A Finder \u4E2D\u7684 modifiers \u529F\u80FD\uFF0C\u53EF\u7B5B\u9009 static\u3001native\u3001public\u3001abstract \u7B49\u8BF8\u591A\u63CF\u8FF0\u7C7B\u578B
    • \u589E\u52A0\u65B9\u6CD5\u548C\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u65F6\u53EF\u6A21\u7CCA\u65B9\u6CD5\u53C2\u6570\u7C7B\u578B\u4E3A\u6307\u5B9A\u4E2A\u6570\u8FDB\u884C\u67E5\u627E
    • \u589E\u52A0 Member \u7684 hasModifiers \u6269\u5C55\u529F\u80FD
    • \u589E\u52A0 MethodFinder \u548C ConstructorFinder \u4E2D\u7684 give \u65B9\u6CD5\uFF0C\u53EF\u83B7\u5F97\u539F\u59CB\u7C7B\u578B
    • \u589E\u52A0 YukiHookModulePrefs \u4E2D\u7684 PrefsData \u6A21\u677F\u529F\u80FD
    • \u5F7B\u5E95\u5BF9\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u53CA\u53D8\u91CF\u7684\u67E5\u627E\u65B9\u6848\u8FDB\u884C\u91CD\u6784
    • \u4F18\u5316\u4EE3\u7801\u6CE8\u91CA\uFF0C\u4FEE\u590D\u4E86\u53EF\u80FD\u4EA7\u751F\u7684 BUG
    ",1),li={id:"_1-0-66-2022-03-25",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),si=o(" 1.0.66 | 2022.03.25 \u2002"),ni=e("ul",null,[e("li",null,[o("\u4FEE\u590D "),e("code",null,"MethodFinder"),o(" \u4E2D\u7684\u4E00\u4E2A\u4E25\u91CD\u95EE\u9898")]),e("li",null,[o("\u589E\u52A0 "),e("code",null,"hookParam"),o(" \u4E2D\u7684 "),e("code",null,"args"),o(" \u8C03\u7528\u65B9\u6CD5")]),e("li",null,"\u4FEE\u590D\u5176\u5B83\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898\u4EE5\u53CA\u4FEE\u590D\u90E8\u5206\u7C7B\u7684\u6CE8\u91CA\u95EE\u9898")],-1),ai={id:"_1-0-65-2022-03-25",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),_i=o(" 1.0.65 | 2022.03.25 \u2002"),hi=i("
    • \u91CD\u65B0\u53D1\u5E03\u7248\u672C\u4FEE\u590D Maven \u4ED3\u5E93\u56E0\u4E3A\u7F13\u5B58\u95EE\u9898\u65B0\u7248\u672C\u4E0D\u6B63\u786E\u7684\u60C5\u51B5
    • \u589E\u52A0 MethodFinder \u4E0E FieldFinder \u65B0\u7684\u8FD4\u56DE\u503C\u8C03\u7528\u65B9\u6CD5
    • \u4FEE\u590D\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898\uFF0C\u5E76\u4FEE\u590D\u592A\u6781\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898
    • \u4FEE\u590D\u81EA\u52A8\u751F\u6210 Xposed \u5165\u53E3\u7C7B\u53EF\u80FD\u53D1\u751F\u7684\u95EE\u9898
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B\u4EE5\u53CA java \u7C7B\u578B
    ",1),ui={id:"_1-0-6-2022-03-20",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),pi=o(" 1.0.6 | 2022.03.20 \u2002"),gi=i("
    • \u4FEE\u590D YukiHookModulePrefs \u5728\u4F7F\u7528\u4E00\u6B21 direct \u5FFD\u7565\u7F13\u5B58\u540E\u6BCF\u6B21\u90FD\u5FFD\u7565\u7684 BUG
    • \u589E\u52A0\u65B0\u7684 API\uFF0C\u4F5C\u5E9F\u4E86 isActive \u5224\u65AD\u6A21\u5757\u6FC0\u6D3B\u7684\u4F20\u7EDF\u7528\u6CD5
    • \u4FEE\u590D\u975E Xposed \u73AF\u5883\u4F7F\u7528 API \u65F6\u6253\u5370\u8C03\u8BD5\u65E5\u5FD7\u7684\u95EE\u9898
    • \u4FEE\u590D\u67E5\u627E Field \u65F6\u7684\u65E5\u5FD7\u8F93\u51FA\u95EE\u9898\u548C\u672A\u62E6\u622A\u7684\u5F02\u5E38\u95EE\u9898
    • \u89E3\u8026\u5408 ReflectionUtils \u4E2D\u7684 Xposed API
    • \u589E\u52A0 YukiHookModuleStatus \u65B9\u6CD5\u540D\u79F0\u7684\u6DF7\u6DC6\uFF0C\u4EE5\u7CBE\u7B80\u6A21\u5757\u751F\u6210\u7684\u4F53\u79EF
    • \u88C5\u8F7D\u6A21\u5757\u81EA\u8EAB Hook \u65F6\u5C06\u4E0D\u518D\u6253\u5370\u6B22\u8FCE\u4FE1\u606F
    • \u4FEE\u590D\u4E0A\u4E00\u4E2A\u7248\u672C\u4ECD\u7136\u5B58\u5728\u7684\u67D0\u4E9B BUG
    ",1),fi={id:"_1-0-55-2022-03-18",tabindex:"-1"},mi=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),Hi=o(" 1.0.55 | 2022.03.18 \u2002"),Pi=e("ul",null,[e("li",null,"\u4FEE\u6B63\u4E00\u5904\u6CE8\u91CA\u9519\u8BEF"),e("li",null,"\u4E34\u65F6\u4FEE\u590D\u4E00\u4E2A BUG"),e("li",null,[o("\u589E\u52A0\u4E86 "),e("code",null,"type"),o(" \u4E2D\u7684\u5927\u91CF "),e("code",null,"android"),o(" \u7C7B\u578B\u4EE5\u53CA\u5C11\u91CF "),e("code",null,"java"),o(" \u7C7B\u578B")]),e("li",null,"\u4FEE\u590D\u65B0\u7248\u4E0E\u65E7\u7248 Kotlin APIs \u7684\u517C\u5BB9\u6027\u95EE\u9898")],-1),bi={id:"_1-0-5-2022-03-18",tabindex:"-1"},xi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Ci=o(" 1.0.5 | 2022.03.18 \u2002"),yi=i("
    • \u4FEE\u590D\u65E7\u7248\u672C LSPosed \u6846\u67B6\u60C5\u51B5\u4E0B\u6B22\u8FCE\u4FE1\u606F\u591A\u6B21\u6253\u5370\u7684\u95EE\u9898
    • \u6DFB\u52A0 onInit \u65B9\u6CD5\u6765\u914D\u7F6E YukiHookAPI
    • \u65B0\u589E executorName \u548C executorVersion \u6765\u83B7\u53D6\u5F53\u524D Hook Framework \u7684\u540D\u79F0\u548C\u7248\u672C\u53F7
    • \u65B0\u589E by \u65B9\u6CD5\u6765\u8BBE\u7F6E Hook \u7684\u65F6\u673A\u548C\u6761\u4EF6
    • YukiHookModulePrefs \u65B0\u589E\u53EF\u63A7\u5236\u7684\u952E\u503C\u7F13\u5B58\uFF0C\u53EF\u5728\u5BBF\u4E3B\u8FD0\u884C\u65F6\u6A21\u5757\u52A8\u6001\u66F4\u65B0\u6570\u636E
    • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),Ai={id:"_1-0-4-2022-03-06",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Yi=o(" 1.0.4 | 2022.03.06 \u2002"),Mi=i("
    • \u4FEE\u590D LSPosed \u5728\u6700\u65B0\u7248\u672C\u4E2D\u542F\u7528\u201C\u53EA\u6709\u6A21\u5757classloader\u53EF\u4EE5\u4F7F\u7528Xposed API\u201D\u9009\u9879\u540E\u627E\u4E0D\u5230 XposedBridge \u7684\u95EE\u9898
    • \u6DFB\u52A0 YukiHookAPI \u7684\u5E38\u91CF\u7248\u672C\u540D\u79F0\u548C\u7248\u672C\u53F7
    • \u65B0\u589E hasField \u65B9\u6CD5\u4EE5\u53CA isAllowPrintingLogs \u914D\u7F6E\u53C2\u6570
    • \u65B0\u589E isDebug \u5F00\u542F\u7684\u60C5\u51B5\u4E0B API \u5C06\u81EA\u52A8\u6253\u5370\u6B22\u8FCE\u4FE1\u606F\u6D4B\u8BD5\u6A21\u5757\u662F\u5426\u751F\u6548
    ",1),Ii={id:"_1-0-3-2022-03-02",tabindex:"-1"},Ri=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Si=o(" 1.0.3 | 2022.03.02 \u2002"),Xi=i("
    • \u4FEE\u590D\u4E00\u4E2A\u6F5C\u5728\u6027\u7684\u5F02\u5E38\u672A\u62E6\u622A BUG
    • \u589E\u52A0 ignoredError \u529F\u80FD
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
    • \u589E\u52A0\u76D1\u542C hook \u540E\u7684 ClassNotFound \u529F\u80FD
    ",1),Li={id:"_1-0-2-2022-02-18",tabindex:"-1"},Fi=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Di=o(" 1.0.2 | 2022.02.18 \u2002"),Bi=e("ul",null,[e("li",null,"\u4FEE\u590D Windows \u4E0B\u65E0\u6CD5\u627E\u5230\u9879\u76EE\u8DEF\u5F84\u7684\u95EE\u9898"),e("li",null,[o("\u79FB\u9664\u90E8\u5206\u53CD\u5C04 API\uFF0C\u5408\u5E76\u81F3 "),e("code",null,"BaseFinder"),o(" \u8FDB\u884C\u6574\u5408")]),e("li",null,"\u589E\u52A0\u76F4\u63A5\u4F7F\u7528\u5B57\u7B26\u4E32\u521B\u5EFA Hook \u7684\u65B9\u6CD5")],-1),Wi={id:"_1-0-1-2022-02-15",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Ti=o(" 1.0.1 | 2022.02.15 \u2002"),wi=i("
    • RemedyPlan \u589E\u52A0 onFind \u529F\u80FD
    • \u6574\u5408\u5E76\u4FEE\u6539\u4E86\u90E8\u5206\u53CD\u5C04 API \u4EE3\u7801
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 java \u7C7B\u578B
    • \u4FEE\u590D\u5FFD\u7565\u9519\u8BEF\u5728\u63A7\u5236\u53F0\u4ECD\u7136\u8F93\u51FA\u7684\u95EE\u9898
    ",1),Gi={id:"_1-0-2022-02-14",tabindex:"-1"},Ei=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Ni=o(" 1.0 | 2022.02.14 \u2002"),Oi=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function ji(zi,Vi){const c=t("Badge"),l=t("ExternalLinkIcon");return n(),a("div",null,[_,h,u,e("h3",k,[p,g,d(c,{type:"tip",text:"\u6700\u65B0",vertical:"middle"})]),f,e("h3",m,[H,P,d(c,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),b,e("h3",x,[C,y,d(c,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),A,e("h3",v,[Y,M,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),I,e("h3",R,[S,X,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),L,e("h3",F,[D,B,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[W,e("li",null,[U,e("a",T,[w,d(l)])]),G,e("li",null,[E,e("a",N,[O,d(l)]),j]),z,e("li",null,[V,Z,K,J,q,Q,e("a",$,[ee,d(l)]),oe]),de,e("li",null,[ce,ie,le,e("a",te,[se,d(l)]),ne]),e("li",null,[ae,re,_e,e("a",he,[ue,d(l)]),ke]),pe,e("li",null,[ge,fe,me,He,Pe,e("a",be,[xe,d(l)]),Ce,e("a",ye,[Ae,d(l)])]),ve,Ye,Me,e("li",null,[Ie,Re,Se,Xe,Le,e("a",Fe,[De,d(l)]),Be]),We,e("li",null,[Ue,Te,we,e("a",Ge,[Ee,d(l)]),Ne,e("a",Oe,[je,d(l)])]),ze,Ve,Ze,Ke]),e("h3",Je,[qe,Qe,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),$e,e("h3",eo,[oo,co,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[io,lo,to,e("a",so,[no,d(l)]),ao]),ro]),e("h3",_o,[ho,uo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ko,e("h3",po,[go,fo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),mo,e("h3",Ho,[Po,bo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),xo,e("h3",Co,[yo,Ao,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),vo,e("h3",Yo,[Mo,Io,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ro,e("h3",So,[Xo,Lo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Fo,e("h3",Do,[Bo,Wo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Uo,e("h3",To,[wo,Go,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Eo,e("h3",No,[Oo,jo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),zo,e("h3",Vo,[Zo,Ko,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Jo,e("li",null,[qo,Qo,$o,e("a",ed,[od,d(l)]),dd]),cd,id,ld]),e("h3",td,[sd,nd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[ad,e("li",null,[rd,_d,hd,e("a",ud,[kd,d(l)]),pd]),gd,fd]),e("h3",md,[Hd,Pd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[bd,xd,Cd,yd,e("a",Ad,[vd,d(l)]),Yd]),Md]),e("h3",Id,[Rd,Sd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Xd,e("a",Ld,[Fd,d(l)]),Dd]),Bd]),Wd,e("ul",null,[e("li",null,[Ud,e("a",Td,[wd,d(l)]),Gd]),e("li",null,[Ed,Nd,Od,e("a",jd,[zd,d(l)]),Vd]),Zd]),e("h3",Kd,[Jd,qd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Qd,e("h3",$d,[ec,oc,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),dc,e("h3",cc,[ic,lc,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[tc,e("li",null,[sc,nc,ac,e("a",rc,[_c,d(l)]),hc]),uc,kc,pc,gc,e("li",null,[fc,mc,Hc,e("a",Pc,[bc,d(l)]),xc]),e("li",null,[Cc,e("a",yc,[Ac,d(l)]),vc]),Yc,e("li",null,[Mc,Ic,Rc,e("a",Sc,[Xc,d(l)]),Lc]),Fc,Dc,e("li",null,[Bc,e("a",Wc,[Uc,d(l)]),Tc])]),e("h3",wc,[Gc,Ec,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Nc,Oc,e("li",null,[jc,zc,Vc,e("a",Zc,[Kc,d(l)]),Jc])]),e("h3",qc,[Qc,$c,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ei,e("h3",oi,[di,ci,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ii,e("h3",li,[ti,si,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ni,e("h3",ai,[ri,_i,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hi,e("h3",ui,[ki,pi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),gi,e("h3",fi,[mi,Hi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Pi,e("h3",bi,[xi,Ci,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),yi,e("h3",Ai,[vi,Yi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Mi,e("h3",Ii,[Ri,Si,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Xi,e("h3",Li,[Fi,Di,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Bi,e("h3",Wi,[Ui,Ti,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),wi,e("h3",Gi,[Ei,Ni,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Oi])}const Ki=s(r,[["render",ji],["__file","changelog.html.vue"]]);export{Ki as default}; diff --git a/docs/assets/changelog.html.f25a879d.js b/docs/assets/changelog.html.f25a879d.js new file mode 100644 index 000000000..2713d41ae --- /dev/null +++ b/docs/assets/changelog.html.f25a879d.js @@ -0,0 +1 @@ +import{_ as s,r as t,o as n,c as a,b as e,d,e as o,a as i}from"./app.2bc5d8f3.js";const r={},_=e("h1",{id:"\u66F4\u65B0\u65E5\u5FD7",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u66F4\u65B0\u65E5\u5FD7","aria-hidden":"true"},"#"),o(" \u66F4\u65B0\u65E5\u5FD7")],-1),h=e("blockquote",null,[e("p",null,[o("\u8FD9\u91CC\u8BB0\u5F55\u4E86 "),e("code",null,"YukiHookAPI"),o(" \u7684\u7248\u672C\u66F4\u65B0\u5386\u53F2\u3002")])],-1),u=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"\u7279\u522B\u6CE8\u610F"),e("p",null,"\u6211\u4EEC\u53EA\u4F1A\u5BF9\u6700\u65B0\u7684 API \u7248\u672C\u8FDB\u884C\u7EF4\u62A4\uFF0C\u82E5\u4F60\u6B63\u5728\u4F7F\u7528\u8FC7\u65F6\u7684 API \u7248\u672C\u5219\u4EE3\u8868\u4F60\u81EA\u613F\u653E\u5F03\u4E00\u5207\u7EF4\u62A4\u7684\u53EF\u80FD\u6027\u3002")],-1),k={id:"_1-1-6-2023-01-21",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),g=o(" 1.1.6 | 2023.01.21 \u2002"),m=i("
    • \u4FEE\u590D Xposed \u6A21\u5757\u88C5\u8F7D\u65F6\u53EF\u80FD\u5B58\u5728\u540C\u4E00\u4E2A\u8FDB\u7A0B\u591A\u4E2A\u5305\u540D\u7684\u60C5\u51B5\u5BFC\u81F4 PackageParam \u4FDD\u6301\u5355\u4F8B\u540E ClassLoader \u4E0D\u7B26\u7684\u4E25\u91CD\u95EE\u9898
    • \u65B0\u589E\u540C\u4E00\u4E2A\u8FDB\u7A0B\u591A\u4E2A\u5305\u540D\u7684\u60C5\u51B5\u4E0B\u672A\u533A\u5206\u5305\u540D\u65F6\uFF0C\u505C\u6B62\u88C5\u8F7D\u5355\u4F8B\u5316\u7684\u5B50 Hooker \u5E76\u6253\u5370\u8B66\u544A\u4FE1\u606F
    • \u4FEE\u590D HookParam.callOriginal\u3001HookParam.invokeOriginal \u7B49\u65B9\u6CD5\u8C03\u7528\u539F\u59CB\u65B9\u6CD5\u65F6\u53C2\u6570\u4E2A\u6570\u4E0D\u6B63\u786E\u7684\u95EE\u9898
    • \u4FEE\u6539 MethodFinder\u3001ConstructorFinder\u3001ReflectionFactory \u4E2D\u53CD\u5C04\u8C03\u7528\u7684\u65B9\u6CD5\u53C2\u6570\u540D param \u4E3A args
    • \u65B0\u589E Xposed \u6A21\u5757\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u4E2D\u5224\u65AD\u5165\u53E3\u7C7B\u6784\u9020\u65B9\u6CD5\u53C2\u6570\u529F\u80FD\uFF0C\u5165\u53E3\u7C7B\u9700\u8981\u4FDD\u8BC1\u5176\u4E0D\u5B58\u5728\u4EFB\u4F55\u6784\u9020\u65B9\u6CD5\u53C2\u6570
    ",1),f={id:"_1-1-5-2023-01-13",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),P=o(" 1.1.5 | 2023.01.13 \u2002"),b=i('
    • \u89C4\u8303\u5E76\u4F18\u5316\u6574\u4F53\u4EE3\u7801\u98CE\u683C
    • \u5BF9\u90E8\u5206\u5185\u90E8\u8C03\u7528\u7684 API \u8FDB\u884C\u4E86\u79C1\u6709\u5316\u5904\u7406
    • \u5E95\u5C42 API \u63A5\u53E3\u6574\u4F53\u89E3\u8026\u5408\uFF0C\u4E3A\u517C\u5BB9\u66F4\u591A Hook Framework \u505A\u51C6\u5907
    • \u5C06\u90E8\u5206\u96C6\u6210\u4E8E API \u4E2D\u7684\u529F\u80FD\u79FB\u52A8\u5230 ksp-xposed \u4F9D\u8D56 (\u89E3\u8026\u5408)\uFF0C\u5355\u72EC\u5F15\u5165 api \u4F9D\u8D56\u5C06\u4E0D\u518D\u5305\u542B\u7B2C\u4E09\u65B9\u5E93\u7B49\u529F\u80FD\u7684\u5F15\u7528
    • \u6587\u6863 \u5FEB\u901F\u5F00\u59CB \u9875\u9762\u52A0\u5165 YukiHookAPI.Configs.isDebug \u4F55\u65F6\u9700\u8981\u5173\u95ED\u7684\u8BF4\u660E
    • \u89C4\u8303\u7C7B\u578B\u5B9A\u4E49\u4E2D\u7684 Java \u539F\u59CB\u7C7B\u578B (Primitive Type) \u5E76\u540C\u6B65\u66F4\u65B0\u5230\u6587\u6863
    • Java type \u65B0\u589E NumberClass \u7C7B\u578B
    • \u6539\u8FDB\u4E86 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u7684\u8BC6\u522B\u80FD\u529B
    • \u63A5\u7BA1\u4E86 Xposed \u6A21\u5757\u88C5\u8F7D\u540E\u7684\u5168\u90E8\u5F02\u5E38\uFF0C\u82E5\u53D1\u751F\u5F02\u5E38\u5C06\u4F1A\u81EA\u52A8\u62E6\u622A\u5E76\u6253\u5370\u9519\u8BEF\u65E5\u5FD7
    • \u4FEE\u6539\u7C7B\u578B\u5B9A\u4E49\u4E2D\u8F83\u4F4E Android \u7CFB\u7EDF\u7248\u672C (Android 5.0) \u4E2D\u4E0D\u5B58\u5728\u7684 Class \u4E3A\u7A7A\u5B89\u5168\u7C7B\u578B
    • \u9002\u914D\u5E76\u652F\u6301\u539F\u751F Xposed\uFF0C\u6700\u4F4E\u63A8\u8350\u7248\u672C\u4E3A Android 7.0
    • Hook \u5165\u53E3\u7C7B\u65B0\u589E\u652F\u6301\u58F0\u660E\u4E3A object \u7C7B\u578B (\u5355\u4F8B)
    • \u4FEE\u590D Android 8 \u4EE5\u4E0B\u7CFB\u7EDF\u4E0D\u652F\u6301 Executable \u7C7B\u578B\u5BFC\u81F4 Hook \u5931\u6548\u7684\u95EE\u9898
    • \u4FEE\u590D Android 9 \u4EE5\u4E0B\u7CFB\u7EDF\u5728\u4F7F\u7528 Activity \u4EE3\u7406\u529F\u80FD\u65F6\u62A5\u9519\u95EE\u9898\u5E76\u9650\u5236\u6B64\u529F\u80FD\u6700\u4F4E\u652F\u6301\u7248\u672C\u4E3A Android 7.0
    • \u65B0\u589E\u7981\u6B62\u8D44\u6E90\u6CE8\u5165\u4E0E Activity \u4EE3\u7406\u529F\u80FD\u6CE8\u5165\u5F53\u524D\u6A21\u5757\u81EA\u8EAB\u5B9E\u4F8B\u8FDB\u7A0B\uFF0C\u9632\u6B62\u53D1\u751F\u95EE\u9898
    • \u4FEE\u590D\u4E00\u4E2A Hook \u8FC7\u7A0B\u4E2D\u65B9\u6CD5\u8FD4\u56DE\u503C\u7684\u5BF9\u8C61\u662F\u76EE\u6807\u7684\u7EE7\u627F\u7C7B\u548C\u63A5\u53E3\u65F6\u88AB\u8BC6\u522B\u4E3A\u8FD4\u56DE\u503C\u4E0D\u7B26\u7684\u4E25\u91CD\u9519\u8BEF
    • \u4FEE\u590D\u5728\u5F53\u524D Hook \u7684\u5B9E\u4F8B\u5BF9\u8C61\u662F\u9759\u6001\u7684\u60C5\u51B5\u4E0B\u8C03\u7528 HookParam.callOriginal\u3001HookParam.invokeOriginal \u51FA\u73B0\u5BF9\u8C61\u4E3A\u7A7A\u95EE\u9898
    • \u4F18\u5316\u5BF9\u592A\u6781\u6FC0\u6D3B\u65B9\u6CD5\u76F8\u5173\u5224\u65AD\u529F\u80FD\u4EE5\u53CA\u540C\u6B65\u66F4\u65B0\u6587\u6863\u76F8\u5173\u8BF4\u660E
    • \u4F5C\u5E9F\u4E86 YukiHookAPI.Status.executorName\u3001YukiHookAPI.Status.executorVersion\uFF0C\u8BF7\u8F6C\u79FB\u5230 YukiHookAPI.Status.Executor
    • \u9002\u914D\u4E86\u4E00\u4E9B\u7B2C\u4E09\u65B9 Hook Framework \u7684 YukiHookAPI.Status.Executor.name \u540D\u79F0\u663E\u793A\u529F\u80FD
    • \u65B0\u589E Class.extends\u3001Class.implements \u7B49\u65B9\u6CD5\uFF0C\u53EF\u66F4\u52A0\u65B9\u4FBF\u5730\u5224\u65AD\u5F53\u524D Class \u7684\u7EE7\u627F\u4E0E\u63A5\u53E3\u5173\u7CFB
    • \u65B0\u589E Class.toClass\u3001Class.toClassOrNull \u7B49\u76F8\u5173\u65B9\u6CD5\u7684\u540C\u540D\u6CDB\u578B\u65B9\u6CD5\uFF0C\u53EF\u4F7F\u7528\u6CDB\u578B\u6765\u7EA6\u675F\u5DF2\u77E5 Class \u7684\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B
    • \u4FEE\u6539 classOf<T> \u65B9\u6CD5\u7684\u8FD4\u56DE\u503C\u4E3A\u6CDB\u578B T\uFF0C\u4EE5\u7EA6\u675F\u5DF2\u77E5 Class \u7684\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B
    • \u65B0\u589E Class \u76F8\u5173\u6269\u5C55\u65B9\u6CD5\u7684 initialize \u53C2\u6570\uFF0C\u53EF\u63A7\u5236\u5728\u5F97\u5230 Class \u5BF9\u8C61\u65F6\u662F\u5426\u540C\u65F6\u521D\u59CB\u5316\u5176\u9759\u6001\u65B9\u6CD5\u5757
    • \u53D8\u91CF\u3001\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u529F\u80FD\u4E2D\u65B0\u589E param { ... }\u3001type { ... } \u7B49\u7528\u6CD5\uFF0C\u53EF\u5BF9\u67E5\u627E\u7684\u5BF9\u8C61\u589E\u52A0\u66F4\u52A0\u5177\u4F53\u7684\u6761\u4EF6\u5224\u65AD
    • PackageParam \u7684 loadApp \u65B9\u6CD5\u65B0\u589E isExcludeSelf \u53C2\u6570\uFF0C\u53EF\u7528\u4E8E\u6392\u9664 Hook \u76F8\u5173\u529F\u80FD\u6CE8\u5165\u6A21\u5757\u81EA\u8EAB\u5B9E\u4F8B\u8FDB\u7A0B
    • PackageParam \u7684 onAppLifecycle \u65B9\u6CD5\u65B0\u589E isOnFailureThrowToApp \u53C2\u6570\uFF0C\u53EF\u5C06\u751F\u547D\u5468\u671F\u65B9\u6CD5\u4F53\u5185\u53D1\u751F\u7684\u5F02\u5E38\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
    • \u4FEE\u6539 PackageParam \u4E2D\u7684 appClassLoader \u4E3A\u53EF\u4FEE\u6539\u53D8\u91CF\uFF0C\u53EF\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A8\u6001\u8BBE\u7F6E\u5BBF\u4E3B\u4F7F\u7528\u7684 ClassLoader
    • HookParam \u4E2D\u65B0\u589E dataExtra \u529F\u80FD\uFF0C\u53EF\u7528\u4E8E\u4E34\u65F6\u5B58\u50A8 Hook \u65B9\u6CD5\u4F53\u4E2D\u7684\u6570\u636E
    • \u4F5C\u5E9F YukiHookModulePrefs \u4E2D\u7684 isRunInNewXShareMode\u3001isXSharePrefsReadable\uFF0C\u7EDF\u4E00\u5408\u5E76\u5230 isPreferencesAvailable
    • Class.allFields\u3001Class.allMethods \u7B49\u76F8\u5173\u65B9\u6CD5\u65B0\u589E isAccessible \u53C2\u6570\uFF0C\u53EF\u63A7\u5236\u6210\u5458\u5BF9\u8C61\u4F55\u65F6\u53EF\u88AB\u8BBE\u7F6E\u4E3A\u53EF\u8BBF\u95EE\u7C7B\u578B
    • \u4FEE\u590D YukiHookDataChannel \u5B58\u5728\u591A\u4E2A\u5BBF\u4E3B\u65F6\u5728\u4E00\u4E2A Activity \u4E2D\u63A5\u6536\u76F8\u540C\u952E\u503C\u6570\u636E\u65F6\u4EC5\u4F1A\u56DE\u8C03\u6700\u540E\u4E00\u4E2A\u65B9\u6CD5\u4F53\u7684\u95EE\u9898
    • YukiHookDataChannel \u7684 wait \u7B49\u76F8\u5173\u65B9\u6CD5\u4E2D\u65B0\u589E priority \u53C2\u6570\uFF0C\u53EF\u4F20\u5165 ChannelPriority \u6765\u81EA\u5B9A\u4E49\u56DE\u8C03\u6570\u636E\u7ED3\u679C\u7684\u6761\u4EF6
    • YukiHookDataChannel \u65B0\u589E\u53D1\u9001\u6570\u636E\u65F6\u81EA\u52A8\u4F7F\u7528 ChannelDataWrapper \u7C7B\u578B\u5305\u88C5\u529F\u80FD\uFF0C\u63D0\u5347\u4F7F\u7528\u4F53\u9A8C\u5E76\u589E\u5F3A\u6570\u636E\u4FDD\u62A4
    • YukiHookDataChannel \u65B0\u589E\u9650\u5236\u4E00\u6B21\u6027\u53D1\u9001\u6570\u636E\u7684\u6700\u5927\u5B57\u8282\u5927\u5C0F\u529F\u80FD\uFF0C\u9632\u6B62\u6570\u636E\u8FC7\u5927\u9020\u6210 APP \u5D29\u6E83
    • YukiHookDataChannel \u65B0\u589E\u53D1\u9001\u6570\u636E\u8FC7\u5927\u65F6\u81EA\u52A8\u5206\u6BB5\u53D1\u9001\u529F\u80FD\uFF0C\u4EC5\u652F\u6301 List\u3001Map\u3001Set\u3001String \u7C7B\u578B
    • YukiHookLogger \u65B0\u589E contents \u65B9\u6CD5\u4E0E saveToFile \u7684 data \u53C2\u6570\uFF0C\u53EF\u4F20\u5165\u81EA\u5B9A\u4E49\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u8FDB\u884C\u683C\u5F0F\u5316\u6216\u4FDD\u5B58\u5230\u6587\u4EF6
    • \u4FEE\u590D YukiHookLogger \u5904\u7406\u540E\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5305\u540D\u53EF\u80FD\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0D\u6B63\u786E\u7684\u95EE\u9898
    • \u4FEE\u590D Xposed \u6A21\u5757\u88C5\u8F7D\u8D44\u6E90\u94A9\u5B50 (Resources Hook) \u4E8B\u4EF6\u65F6\u5728\u90E8\u5206\u7CFB\u7EDF\u4E0A (\u90E8\u5206\u7CFB\u7EDF APP \u4E2D) \u5305\u540D\u53EF\u80FD\u4E0D\u6B63\u786E\u7684\u95EE\u9898
    ',1),x={id:"_1-1-4-2022-10-04",tabindex:"-1"},C=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),y=o(" 1.1.4 | 2022.10.04 \u2002"),A=i("
    • \u4FEE\u590D YukiHookDataChannel \u53EF\u80FD\u4E0D\u80FD\u54CD\u5E94\u7CFB\u7EDF\u6846\u67B6\u4E2D\u54CD\u5E94\u5E7F\u64AD\u4E8B\u4EF6\u7684\u95EE\u9898\uFF0C\u5728 Android 13 \u4E2D\u590D\u73B0
    • \u4FEE\u590D YukiHookDataChannel \u957F\u8FBE\u591A\u4E2A\u7248\u672C\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u65E0\u6CD5\u4E0E\u6A21\u5757\u901A\u8BAF\u7684\u95EE\u9898
    • YukiHookDataChannel \u4E2D\u65B0\u589E obtainLoggerInMemoryData \u65B9\u6CD5\uFF0C\u53EF\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u5171\u4EAB\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E
    • \u4FEE\u6539 YukiHookLogger.inMemoryData \u7684\u7C7B\u578B\u4E3A ArrayList \u5E76\u4FEE\u6539 YukiLoggerData \u4E3A data class
    • \u4FEE\u590D YukiLoggerData \u5728\u6A21\u5757\u4E2D\u5305\u540D\u4E3A\u7A7A\u6253\u5370\u7A7A\u767D\u7684\u95EE\u9898
    • PackageParam \u4E2D\u65B0\u589E loadApp\u3001loadZygote\u3001loadSystem\u3001withProcess \u7684\u540C\u540D\u591A\u53C2\u6570\u65B9\u6CD5
    • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),v={id:"_1-1-3-2022-09-30",tabindex:"-1"},Y=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),M=o(" 1.1.3 | 2022.09.30 \u2002"),I=e("ul",null,[e("li",null,"\u4FEE\u590D\u4E00\u4E2A\u65E0\u6CD5\u81EA\u5B9A\u4E49 Hook \u5165\u53E3\u7C7B\u540D\u7684\u81F4\u547D\u9519\u8BEF"),e("li",null,[o("\u6DFB\u52A0 "),e("code",null,"LoggerFactory"),o(" \u4E2D\u7684\u90E8\u5206\u4EE3\u7801\u6CE8\u91CA\u6587\u6848\u5E76\u66F4\u65B0\u7279\u8272\u529F\u80FD\u6587\u6863")])],-1),R={id:"_1-1-2-2022-09-30",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),X=o(" 1.1.2 | 2022.09.30 \u2002"),L=i('
    • \u6587\u6863 \u57FA\u7840\u77E5\u8BC6 \u9875\u9762\u65B0\u589E English \u7248\u672C\u53CB\u60C5\u94FE\u63A5
    • \u4FEE\u590D YukiBaseHooker \u6CE8\u91CA\u4E2D\u7684 English \u6587\u6863\u94FE\u63A5\u9519\u8BEF\u95EE\u9898
    • \u4FEE\u590D ModuleClassLoader \u4E2D\u7684 ClassCastException \u95EE\u9898
    • \u4FEE\u6B63\u5E76\u89C4\u8303\u90E8\u5206\u4EE3\u7801\u6CE8\u91CA
    • \u65B0\u589E ModuleClassLoader \u6392\u9664\u5217\u8868\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528 excludeHostClasses \u548C excludeModuleClasses \u65B9\u6CD5\u6765\u81EA\u5B9A\u4E49\u6392\u9664\u5217\u8868
    • \u65B0\u589E YukiLoggerData \u5B9E\u65F6\u65E5\u5FD7\u6570\u636E\u7C7B\uFF0C\u53EF\u5B9E\u65F6\u901A\u8FC7 YukiHookLogger.inMemoryData \u83B7\u53D6\u65E5\u5FD7\u6570\u7EC4
    • \u65B0\u589E ClassLoader.listOfClasses \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5\u83B7\u53D6\u5F53\u524D Dex \u4E2D\u7684\u5168\u90E8 Class
    ',1),F={id:"_1-1-1-2022-09-28",tabindex:"-1"},D=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),B=o(" 1.1.1 | 2022.09.28 \u2002"),W=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E86\u6587\u6863 "),e("a",{href:"../guide/knowledge"},"\u57FA\u7840\u77E5\u8BC6"),o(" \u9875\u9762\u53CB\u60C5\u94FE\u63A5\u9519\u8BEF\u7684\u95EE\u9898")]),e("li",null,[o("\u4FEE\u590D\u4E86\u6587\u6863 "),e("code",null,"favicon"),o(" \u4E0D\u663E\u793A\u7684\u95EE\u9898")]),e("li",null,[o("\u4FEE\u590D "),e("code",null,"DexClassFinder"),o(" \u67E5\u627E\u6761\u4EF6\u4E2D\u7684 BUG")])],-1),U={id:"_1-1-0-2022-09-28",tabindex:"-1"},w=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),T=o(" 1.1.0 | 2022.09.28 \u2002"),G=e("li",null,[o("\u8FD9\u662F\u4E00\u6B21\u5927\u7248\u672C\u66F4\u65B0\uFF0C\u6709\u5173\u66F4\u65B0\u65E5\u5FD7\u4E2D\u63D0\u5230\u7684\u53D8\u5316\u53CA\u7528\u6CD5\u8BF7\u53C2\u8003 "),e("a",{href:"../api/home"},"API \u6587\u6863"),o(" \u4EE5\u53CA "),e("a",{href:"../api/special-features/reflection"},"\u7279\u8272\u529F\u80FD")],-1),E=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),N={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},O=o("VuePress"),j=i('
  • \u7EDF\u4E00\u5E76\u89C4\u8303\u6587\u6863\u4E2D\u7684\u672F\u8BED\u540D\u8BCD\uFF0C\u4F8B\u5982\u201C\u67E5\u8BE2\u201D\u4E00\u5F8B\u66F4\u6539\u4E3A\u4E86\u201C\u67E5\u627E\u201D\uFF0CXposedHelper \u62FC\u5199\u9519\u8BEF\u4FEE\u6539\u4E3A\u4E86 XposedHelpers
  • \u6587\u6863 \u57FA\u7840\u77E5\u8BC6 \u9875\u9762\u52A0\u5165\u53CB\u60C5\u94FE\u63A5\uFF0C\u4EC5\u9650\u7B80\u4F53\u4E2D\u6587
  • \u5C06 Hook App Demo \u7684 Class \u4E0E Method \u8F6C\u4E3A Java \u4EE5\u63D0\u4F9B\u66F4\u597D\u7684\u6F14\u793A\u6548\u679C
  • \u4FEE\u6B63\u4E86 Hook Module Demo \u4E2D\u7684\u4EE3\u7801\u6CE8\u91CA\u547D\u540D
  • \u91CD\u6784\u4E86\u5927\u91CF\u5E95\u5C42 Hook \u903B\u8F91\u53CA Xposed API \u7684\u5BF9\u63A5\u65B9\u5F0F
  • \u79FB\u9664\u4E86 HookParamWrapper\uFF0C\u73B0\u5DF2\u5C06\u5176\u76F4\u63A5\u4E0E YukiBridgeFactory \u5BF9\u63A5
  • \u79FB\u52A8\u90E8\u5206 YukiHookBridge \u4E2D\u7684\u65B9\u6CD5\u5230 AppParasitics
  • \u79FB\u9664\u4E86 HookParam.args \u4E0E\u5E95\u5C42\u7684\u76F4\u63A5\u5BF9\u63A5\u65B9\u6CD5 setArgs\uFF0C\u76F4\u63A5\u83B7\u53D6\u5E76\u8BBE\u7F6E\u5F53\u524D\u6570\u7EC4\u7684\u5BF9\u8C61
  • \u4F18\u5316\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u5C06\u5F15\u7528\u7684 jar \u5408\u5E76\u5230 stub \u9879\u76EE
  • ',9),z=o("\u4FEE\u590D\u591A\u9879\u76EE\u6253\u5305\u65F6\u6A21\u5757\u5305\u540D\u65E0\u6CD5\u6B63\u786E\u5339\u914D\u7684\u95EE\u9898\u4EE5\u53CA\u4FEE\u6539\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u6A21\u5757\u5305\u540D\u5339\u914D\u903B\u8F91\uFF0C\u611F\u8C22 "),V={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Z=o("5ec1cff"),K=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),J=i("
  • \u5BF9 API \u79C1\u6709\u5DE5\u5177\u7C7B\u7684\u65B9\u6CD5\u8FDB\u884C\u4E86 internal \u95ED\u5305\u5904\u7406\uFF0C\u907F\u514D\u6C61\u67D3\u9876\u7EA7\u547D\u540D\u7A7A\u95F4
  • \u4FEE\u6B63\u4E86\u6240\u6709\u53CD\u5C04\u548C Hook \u7C7B\u7684 Creater \u547D\u540D\u5230 Creator
  • \u65B0\u589E YukiHookAPI.Status.compiledTimestamp \u529F\u80FD\uFF0C\u53EF\u4EE5\u5728\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u65F6\u83B7\u53D6\u7F16\u8BD1\u5B8C\u6210\u7684\u65F6\u95F4\u6233
  • \u65B0\u589E YukiHookAPI.Status.isXposedEnvironment \u529F\u80FD\uFF0C\u53EF\u4EE5\u5224\u65AD\u5F53\u524D\u4E3A (Xposed) \u5BBF\u4E3B\u73AF\u5883\u8FD8\u662F\u6A21\u5757\u73AF\u5883
  • \u8C03\u8BD5\u65E5\u5FD7\u529F\u80FD\u8FDB\u884C\u4E86\u5927\u6539\u7248\uFF0C\u73B0\u5DF2\u5C06 YukiHookAPI.Configs.debugTag \u7B49\u529F\u80FD\u5408\u5E76\u5230 YukiHookLogger.Configs \u4E2D
  • \u8C03\u8BD5\u65E5\u5FD7\u65B0\u589E\u53EF\u6307\u5B9A\u6253\u5370\u4F7F\u7528\u7684\u65B9\u6CD5\u4E3A XposedBridge.log \u6216 Logd
  • \u8C03\u8BD5\u65E5\u5FD7\u4E2D\u9ED8\u8BA4\u52A0\u5165\u5F53\u524D\u5BBF\u4E3B\u7684\u5305\u540D\u4EE5\u53CA\u5F53\u524D\u7528\u6237 ID\uFF0C\u4EE5\u4F9B\u8C03\u8BD5\uFF0C\u4F60\u53EF\u4EE5\u5728 debugLog \u914D\u7F6E\u4E2D\u81EA\u884C\u66F4\u6539
  • \u65B0\u589E generic \u529F\u80FD\uFF0C\u53EF\u5BF9\u6CDB\u578B\u8FDB\u884C\u53CD\u5C04\u548C\u8C03\u7528\uFF0C\u4F60\u53EF\u4EE5\u5728 Class \u6216 CurrentClass \u4E2D\u4F7F\u7528\u5B83
  • \u4F5C\u5E9F buildOfAny \u65B9\u6CD5\uFF0C\u73B0\u5728\u8BF7\u76F4\u63A5\u4F7F\u7528 buildOf \u65B9\u6CD5 (\u4E0D\u5E26\u6CDB\u578B) \u6765\u4F7F\u7528\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5BF9\u8C61\u5E76\u5F97\u5230\u7ED3\u679C Any
  • \u4FEE\u590D hasExtends \u4F7F\u7528\u8FC7\u7A0B\u53D1\u751F\u7A7A\u6307\u9488\u5F02\u5E38\u7684\u95EE\u9898
  • CurrentClass \u65B0\u589E\u975E lambda \u65B9\u5F0F\u7684\u8C03\u7528\u65B9\u6CD5
  • CurrentClass \u65B0\u589E name \u4E0E simpleName \u529F\u80FD
  • \u5B8C\u5168\u91CD\u5199 ReflectionTool \u7684\u6838\u5FC3\u65B9\u6CD5\uFF0C\u5C06\u4E0D\u540C\u7684\u67E5\u627E\u6761\u4EF6\u8FDB\u884C\u4E86\u6574\u7406\u5206\u7C7B
  • \u4FEE\u590D ReflectionTool \u4E2D\u53EF\u80FD\u7684\u76F4\u63A5\u8C03\u7528 declared \u83B7\u53D6\u7684 Member \u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898
  • \u4FEE\u590D ReflectionTool \u4E2D UndefinedType \u672A\u5728 Method \u4E0E Constructor \u6761\u4EF6\u4E2D\u6B63\u786E\u5224\u65AD\u7684\u95EE\u9898
  • \u65B0\u589E\u53CD\u5C04\u67E5\u627E\u7ED3\u679C\u53D1\u751F\u5F02\u5E38\u65F6\u7684\u53CB\u597D\u63D0\u793A\u65B9\u5F0F\uFF0C\u53EF\u5177\u4F53\u5B9A\u4F4D\u5230\u6307\u5B9A\u6761\u4EF6\u627E\u4E0D\u5230 Member \u7684\u95EE\u9898
  • \u53CD\u5C04\u67E5\u627E Method\u3001Constructor \u4E2D\u65B0\u589E VagueType \u6761\u4EF6\uFF0C\u53EF\u4F7F\u7528\u5728 param \u6761\u4EF6\u4E2D\u7528\u4E8E\u5FFD\u7565\u4F60\u4E0D\u60F3\u586B\u5199\u7684\u53C2\u6570
  • \u53CD\u5C04\u67E5\u627E Method\u3001Constructor \u4E2D\u65B0\u589E paramCount { ... } \u6761\u4EF6\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u76F4\u63A5\u62FF\u5230\u5176\u4E2D\u7684 it \u6765\u81EA\u5B9A\u4E49\u4F60\u7684\u5224\u65AD\u6761\u4EF6
  • FieldFinder \u7ED3\u679C\u4E2D\u65B0\u589E current \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5\u5BF9\u7ED3\u679C\u5B9E\u4F8B\u521B\u5EFA\u8C03\u7528\u7A7A\u95F4
  • \u4FEE\u6539\u4E86\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u4E2D\u7684 modifiers \u6761\u4EF6\u4EE5\u53CA name \u6761\u4EF6\uFF0C\u73B0\u5728\u4F60\u9700\u8981\u5BF9\u6B64\u65B9\u6CD5\u4F53\u7ED3\u5C3E\u8FD4\u56DE\u4E00\u4E2A Boolean \u4EE5\u4F7F\u6761\u4EF6\u6210\u7ACB
  • ",20),q=e("code",null,"ModifierRules",-1),Q=o(" \u4E2D\u7684 "),$=e("code",null,"as*",-1),ee=o(" \u529F\u80FD\u6539\u540D\u4E3A "),oe=e("code",null,"is*",-1),de=o("\uFF0C\u611F\u8C22 "),ce={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ie=o("Kitsune"),le=o(" \u7684\u5EFA\u8BAE"),te=i("
  • FieldFinder \u4E2D\u65B0\u589E RemedyPlan \u529F\u80FD
  • \u65B0\u589E Dex \u4E2D\u7684 Class \u6A21\u7CCA\u67E5\u627E\u529F\u80FD (Beta)\uFF0C\u4F60\u73B0\u5728\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 searchClass \u529F\u80FD\u6765\u4F7F\u7528\u6307\u5B9A\u6761\u4EF6\u6A21\u7CCA\u67E5\u627E Class
  • ",2),se=o("\u65B0\u589E\u53CD\u5C04\u67E5\u627E\u4E2D\u7684\u591A\u91CD\u67E5\u627E\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528\u76F8\u5BF9\u67E5\u627E\u6761\u4EF6\u540C\u65F6\u83B7\u53D6\u591A\u4E2A\u67E5\u627E\u7ED3\u679C\uFF0C\u611F\u8C22 "),ne=e("strong",null,"AA",-1),ae=o(" \u4EE5\u53CA "),re={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},_e=o("Kitsune"),he=o(" \u7684\u5EFA\u8BAE"),ue=o("\u4FEE\u590D "),ke=e("code",null,"appClassLoader",-1),pe=o(" \u83B7\u53D6\u5230\u7684\u5BF9\u8C61\u5728\u67D0\u4E9B\u7CFB\u7EDF\u4E2D\u7684\u7CFB\u7EDF\u5E94\u7528\u4E2D\u4E0D\u6B63\u786E\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),ge={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},me=o("Luckyzyx"),fe=o(" \u7684\u53CD\u9988"),He=e("li",null,[o("\u4FEE\u6539\u4E86 "),e("code",null,"XposedBridge.invokeOriginalMethod"),o(" \u7684\u8C03\u7528\u65B9\u5F0F\u5E76\u5728 "),e("code",null,"MethodFinder.Result.Instance"),o(" \u4E2D\u589E\u52A0 "),e("code",null,"original"),o(" \u529F\u80FD")],-1),Pe=o("\u4FEE\u590D "),be=e("code",null,"YukiHookModulePrefs",-1),xe=o(" \u4E2D "),Ce=e("code",null,"getStringSet",-1),ye=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),Ae={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},ve=o("Teddy_Zhu"),Ye=o(" \u7684 "),Me={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ie=o("PR"),Re=e("li",null,[o("\u4FEE\u6539 "),e("code",null,"YukiHookModulePrefs"),o("\uFF0C\u62E6\u622A "),e("code",null,"XSharePreference"),o(" \u53EF\u80FD\u4E0D\u5B58\u5728\u7684\u5F02\u5E38")],-1),Se=e("li",null,[o("\u4FEE\u590D "),e("code",null,"YukiHookDataChannel"),o(" \u5728\u67D0\u4E9B\u7B2C\u4E09\u65B9 ROM \u7CFB\u7EDF\u6846\u67B6\u4E2D\u65E0\u6CD5\u6CE8\u518C\u6210\u529F\u7684\u95EE\u9898")],-1),Xe=e("li",null,[o("\u5B89\u5168\u5316 "),e("code",null,"YukiHookDataChannel"),o("\uFF0C\u73B0\u5728\u5B83\u53EA\u80FD\u5728\u6765\u81EA\u6307\u5B9A\u5305\u540D\u7684\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u901A\u4FE1")],-1),Le=o("\u65B0\u589E\u81EA\u52A8 Hook "),Fe=e("code",null,"SharedPreferences",-1),De=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),Be=e("code",null,"0664",-1),We=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Ue={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},we=o("5ec1cff"),Te=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),Ge=i("
  • \u65B0\u589E YukiHookAPI.Configs.isEnableHookSharedPreferences \u529F\u80FD\uFF0C\u9ED8\u8BA4\u5173\u95ED\uFF0C\u82E5 SharedPreferences \u7684\u6743\u9650\u9519\u8BEF\u53EF\u8FDB\u884C\u542F\u7528
  • \u4FEE\u590D\u67E5\u627E Constructor \u65F6\u65E0\u53C2\u6784\u9020\u65B9\u6CD5\u5728\u4E0D\u586B\u5199\u67E5\u627E\u6761\u4EF6\u65F6\u65E0\u6CD5\u627E\u5230\u7684 BUG\uFF0C\u611F\u8C22 B5 KAKA \u7684\u53CD\u9988
  • \u5206\u79BB\u4F4D\u4E8E injectMember \u4E2D method\u3001constructor \u7684 Result \u5B9E\u4F8B\u5230 Process
  • \u5728 Hook \u8FC7\u7A0B\u4E2D\u65B0\u589E useDangerousOperation \u65B9\u6CD5\uFF0C\u672A\u8FDB\u884C\u58F0\u660E\u65F6\u5728 Hook \u5371\u9669\u5217\u8868\u4E2D\u7684\u529F\u80FD\u540E\u4F1A\u81EA\u52A8\u505C\u6B62 Hook \u5E76\u6253\u5370\u9519\u8BEF
  • \u65B0\u589E\u6A21\u5757\u8D44\u6E90\u6CE8\u5165\u4E0E Activity \u4EE3\u7406\u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u8C03\u7528 injectModuleAppResources \u53CA registerModuleAppActivities \u6765\u4F7F\u7528
  • \u65B0\u589E ModuleContextThemeWrapper \u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u8C03\u7528 applyModuleTheme \u5728\u4EFB\u610F Activity \u4E2D\u521B\u5EFA\u6A21\u5757\u7684 Context
  • \u65B0\u589E ClassLoader.onLoadClass \u529F\u80FD\uFF0C\u53EF\u7528\u4E8E\u76D1\u542C ClassLoader \u7684 loadClass \u65B9\u6CD5\u88AB\u8C03\u7528\u7684\u4E8B\u4EF6
  • \u4F5C\u5E9F\u4E86 classOf \u4E0E clazz \u6269\u5C55\u65B9\u6CD5\uFF0C\u65B0\u589E toClass \u4EE5\u53CA toClassOrNull \u7528\u6CD5\uFF0C\u8BF7\u73B0\u5728\u8F6C\u79FB\u5230\u65B0\u7684\u65B9\u6CD5
  • VariousClass \u65B0\u589E getOrNull \u65B9\u6CD5\uFF0C\u53EF\u5728\u5339\u914D\u4E0D\u5230 Class \u7684\u65F6\u5019\u4E0D\u629B\u51FA\u5F02\u5E38\u800C\u662F\u8FD4\u56DE null
  • PackageParam.hook \u4E2D\u79FB\u9664\u4E86 isUseAppClassLoader \u53C2\u6570\uFF0C\u4FEE\u6539\u4E3A isForceUseAbsolute \u5E76\u81EA\u52A8\u5339\u914D\u76EE\u6807 Class
  • PackageParam \u65B0\u589E systemContext \u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u5728\u4EFB\u610F\u65F6\u95F4\u8C03\u7528\u6B64\u529F\u80FD\u83B7\u53D6\u4E00\u4E2A\u6301\u4E45\u5316\u7684 Context
  • \u4E0D\u518D\u5BF9\u5916\u5F00\u653E HookClass \u4E2D\u7684\u4EFB\u4F55\u65B9\u6CD5
  • HookParam \u4E2D\u65B0\u589E throwToApp \u529F\u80FD\uFF0C\u53EF\u5C06\u5F02\u5E38\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
  • Hook \u56DE\u8C03\u4E2D\u65B0\u589E onFailureThrowToApp \u529F\u80FD\uFF0C\u53EF\u5728\u53D1\u751F\u5F02\u5E38\u65F6\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B
  • \u4FEE\u6539\u4E86\u8C03\u8BD5\u65E5\u5FD7\u7684\u6253\u5370\u903B\u8F91\uFF0C\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u4E2D\u7684\u8017\u65F6\u8BB0\u5F55\u4EC5\u4F1A\u5728 Hook \u8FC7\u7A0B\u4E2D\u8FDB\u884C\u6253\u5370
  • Hook \u8FC7\u7A0B\u4E2D\u65B0\u589E\u89E3\u9664 Hook \u529F\u80FD\uFF0C\u53EF\u4F7F\u7528 remove \u53CA removeSelf \u65B9\u6CD5\u89E3\u9664 Hook
  • \u4FEE\u590D\u5728 ReplaceHook \u5931\u8D25\u7684\u65F6\u5019\u5BFC\u81F4\u5BBF\u4E3B\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u73B0\u4FEE\u6539\u4E3A\u8C03\u7528\u539F\u59CB\u65B9\u6CD5\u4FDD\u8BC1\u5BBF\u4E3B\u529F\u80FD\u6B63\u5E38\u8FD0\u884C
  • \u65B0\u589E Hook \u8FC7\u7A0B\u4E2D\u5BF9\u65B9\u6CD5\u8FD4\u56DE\u503C\u7684\u68C0\u67E5\u529F\u80FD\uFF0C\u5728\u8FD4\u56DE\u503C\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u4E0B\u4F1A\u6839\u636E\u60C5\u666F\u81EA\u52A8\u629B\u51FA\u5F02\u5E38\u6216\u6253\u5370\u9519\u8BEF
  • ",18),Ee=o("Resources Hook \u4E2D\u65B0\u589E "),Ne=e("code",null,"array",-1),Oe=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),je={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},ze=o("GSWXXN"),Ve=o(" \u7684 "),Ze={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},Ke=o("PR"),Je=e("li",null,[o("\u79FB\u52A8 "),e("code",null,"me.weishu.reflection"),o(" \u5230 "),e("code",null,"thirdparty"),o(" \u9632\u6B62\u540C\u65F6\u5F15\u5165\u7684\u540C\u540D\u4F9D\u8D56\u51B2\u7A81")],-1),qe=e("li",null,"\u79FB\u9664 Hook \u65B9\u6CD5\u4F53\u4E3A\u7A7A\u65F6\u629B\u51FA\u7684\u5F02\u5E38\uFF0C\u4FEE\u6539\u4E3A\u6253\u5370\u8B66\u544A\u65E5\u5FD7",-1),Qe=e("li",null,[o("\u4FEE\u6539 "),e("code",null,"AppLifecycle"),o(" \u7684\u5F02\u5E38\u5904\u7406\u903B\u8F91\uFF0C\u5F53\u5176\u53D1\u751F\u5F02\u5E38\u65F6\u76F4\u63A5\u629B\u7ED9\u5BBF\u4E3B")],-1),$e=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),eo={id:"_1-0-92-2022-05-31",tabindex:"-1"},oo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),co=o(" 1.0.92 | 2022.05.31 \u2002"),io=i("
    • \u4FEE\u6B63\u4E86\u5927\u91CF\u65B9\u6CD5\u4E2D callback \u7684\u547D\u540D\u65B9\u6CD5
    • \u66F4\u6362\u65B9\u6848\u518D\u6B21\u4FEE\u590D YukiHookDataChannel \u5728\u4F4E\u4E8E Android 12 \u7684\u8BBE\u5907\u4E0A\u4E0D\u80FD\u56DE\u8C03\u5F53\u524D Activity \u5E7F\u64AD\u7684\u95EE\u9898
    • InjectYukiHookWithXposed \u6CE8\u89E3\u65B0\u589E isUsingResourcesHook \u529F\u80FD\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u9009\u62E9\u6027\u5173\u95ED\u81EA\u52A8\u751F\u6210 IXposedHookInitPackageResources \u7684\u4F9D\u8D56\u63A5\u53E3\u4E86
    ",1),lo={id:"_1-0-91-2022-05-29",tabindex:"-1"},to=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),so=o(" 1.0.91 | 2022.05.29 \u2002"),no=o("\u4FEE\u590D\u90E8\u5206\u8BBE\u5907\u7684\u5B9A\u5236\u7CFB\u7EDF\u5728 LSPosed \u73AF\u5883\u4E0B\u5F00\u673A\u542F\u52A8\u83B7\u53D6\u7684 "),ao=e("code",null,"ClassLoader",-1),ro=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),_o={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ho=o("Luckyzyx"),uo=o(" \u7684\u53CD\u9988"),ko=i("
  • \u4FEE\u590D YukiHookDataChannel \u5728 ZUI \u4EE5\u53CA\u4F4E\u4E8E Android 12 \u7684\u7CFB\u7EDF\u4E0A\u4E0D\u80FD\u56DE\u8C03\u5F53\u524D Activity \u5E7F\u64AD\u7684\u95EE\u9898
  • \u6574\u5408 YukiHookModuleStatus \u529F\u80FD\u5230 YukiHookAPI.Status\uFF0C\u91CD\u5199\u4E86\u5927\u91CF\u65B9\u6CD5\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E2D\u53CC\u5411\u5224\u65AD\u6A21\u5757\u6FC0\u6D3B\u7B49\u72B6\u6001\u4FE1\u606F
  • ",2),po={id:"_1-0-90-2022-05-27",tabindex:"-1"},go=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),mo=o(" 1.0.90 | 2022.05.27 \u2002"),fo=i("
    • \u4FEE\u590D YukiHookDataChannel \u5728\u6A21\u5757\u8BBE\u7F6E\u76D1\u542C\u56DE\u8C03\u65F6\u95EA\u9000\u7684\u95EE\u9898
    • \u4FEE\u590D YukiHookDataChannel \u5728\u975E\u5F53\u524D Activity \u60C5\u51B5\u4E0B\u4F9D\u7136\u4F1A\u56DE\u8C03\u7684\u95EE\u9898
    • \u79FB\u9664 YukiHookDataChannel \u56DE\u8C03\u4E8B\u4EF6\u7684\u9ED8\u8BA4\u503C\uFF0C\u6CA1\u6709\u5373\u4E0D\u56DE\u8C03
    • \u79FB\u9664 YukiHookModulePrefs \u5728 XShare \u4E0D\u53EF\u8BFB\u7684\u60C5\u51B5\u4E0B\u6253\u5370\u7684\u8B66\u544A
    • \u65B0\u589E YukiHookModulePrefs \u4E2D\u7684 isXSharePrefsReadable \u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D\u7684 XShare \u662F\u5426\u53EF\u7528
    ",1),Ho={id:"_1-0-89-2022-05-26",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),bo=o(" 1.0.89 | 2022.05.26 \u2002"),xo=i("
    • \u4FEE\u590D YukiHookDataChannel \u4E0D\u80FD\u91CD\u590D\u8BBE\u7F6E\u76D1\u542C\u7684\u95EE\u9898\uFF0C\u5E76\u52A0\u5165\u5728\u6A21\u5757\u4E0D\u540C Activity \u4E2D\u91CD\u590D\u54CD\u5E94\u548C\u81EA\u52A8\u8DDF\u968F Activity \u9500\u6BC1\u76D1\u542C\u529F\u80FD
    • \u65B0\u589E YukiHookDataChannel \u91CD\u590D\u76D1\u542C\u7528\u4F8B\u8BF4\u660E\u6587\u6863
    • \u52A0\u5165 onAlreadyHooked \u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D\u65B9\u6CD5\u662F\u5426\u88AB\u91CD\u590D Hook
    • \u4FEE\u6539\u90E8\u5206\u91CD\u590D\u6DFB\u52A0 HashMap \u7684\u903B\u8F91\uFF0C\u79FB\u9664 putIfAbsent \u65B9\u6CD5\uFF0C\u5141\u8BB8\u8986\u76D6\u6DFB\u52A0
    • \u4FEE\u590D\u4E86\u51E0\u5904\u53EF\u80FD\u7684 BUG
    ",1),Co={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),Ao=o(" 1.0.88 | 2022.05.25 \u2002"),vo=i("
    • \u5BF9 Xposed API \u5B8C\u5168\u89E3\u8026\u5408
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
    • \u5C06 YukiHookModuleStatus \u4ECE\u81EA\u52A8\u751F\u6210\u4EE3\u7801\u4E2D\u5206\u79BB\uFF0C\u5E76\u52A0\u5165 isEnableHookModuleStatus \u7684\u5F00\u5173\uFF0C\u7531\u4F60\u51B3\u5B9A\u662F\u5426\u542F\u7528
    • \u5BF9 API \u5927\u91CF\u7C7B\u7684\u6784\u9020\u65B9\u6CD5\u8FDB\u884C\u4E86 internal \u95ED\u5305\u5904\u7406
    • \u5C06 YukiHookModulePrefs \u8BBE\u7F6E\u4E3A\u5355\u4F8B\u8FD0\u884C\uFF0C\u9632\u6B62\u91CD\u590D\u521B\u5EFA\u6D6A\u8D39\u7CFB\u7EDF\u8D44\u6E90
    • \u4FEE\u590D\u81EA 1.0.80 \u7248\u672C\u540E\u65E0\u6CD5\u5D4C\u5957 Hook \u7684 BUG\uFF0C\u5E76\u4F18\u5316\u5D4C\u5957 Hook \u76F8\u5173\u529F\u80FD
    • \u4FEE\u6539 Hooker \u5B58\u50A8\u65B9\u6848\u7531 HashSet \u5230 HashMap\uFF0C\u9632\u6B62\u91CD\u590D\u6DFB\u52A0 Hooker \u7684\u95EE\u9898
    • \u4FEE\u6539 Hook \u6838\u5FC3\u5B9E\u73B0\u65B9\u6CD5\uFF0C\u52A0\u5165\u67E5\u91CD\uFF0C\u907F\u514D\u91CD\u590D Hook \u591A\u6B21\u56DE\u8C03 HookParam \u65B9\u6CD5
    • MethodFinder \u4E0E FieldFinder \u52A0\u5165\u67E5\u627E\u6A21\u7CCA\u65B9\u6CD5\u3001\u53D8\u91CF\u540D\u79F0\u529F\u80FD\uFF0C\u53EF\u8C03\u7528 name { ... } \u6765\u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\uFF0C\u652F\u6301\u6B63\u5219
    • \u4F18\u5316\u5E76\u4FEE\u6539 appContext \u7684\u83B7\u53D6\u65B9\u5F0F\uFF0C\u964D\u4F4E\u4F1A\u53D6\u5230\u7A7A\u7684\u95EE\u9898\u7684\u53EF\u80FD\u6027
    • \u4FEE\u6539\u81EA\u52A8\u751F\u6210\u7684\u4EE3\u7801\u4E2D logger \u7684\u6253\u5370 TAG \u9ED8\u8BA4\u4E3A\u4F60\u81EA\u5B9A\u4E49\u7684\u540D\u79F0\uFF0C\u65B9\u4FBF\u8FDB\u884C\u8C03\u8BD5
    • \u4F18\u5316 YukiHookBridge \u7684 Hooker \u5B9E\u73B0\u65B9\u5F0F\uFF0C\u63D0\u5347 Hook \u6027\u80FD
    • PackageParam \u589E\u52A0 onAppLifecycle \u65B9\u6CD5\uFF0C\u53EF\u539F\u751F\u76D1\u542C\u5BBF\u4E3B\u7684\u751F\u547D\u5468\u671F\u4EE5\u53CA\u5B9E\u73B0\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u529F\u80FD
    • \u65B0\u589E YukiHookDataChannel \u529F\u80FD\uFF0C\u53EF\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4FDD\u6301\u5B58\u6D3B\u7684\u60C5\u51B5\u4E0B\u4F7F\u7528\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u8FDB\u884C\u901A\u8BAF
    • YukiHookDataChannel \u589E\u52A0 checkingVersionEquals \u65B9\u6CD5\uFF0C\u53EF\u901A\u8FC7\u76D1\u542C\u6765\u9A8C\u8BC1\u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u66F4\u65B0\u7248\u672C\u4E0D\u5339\u914D\u95EE\u9898
    • demo-module \u7684\u793A\u4F8B\u4EE3\u7801\u4E2D\u65B0\u589E Java \u7248\u672C\u7684\u793A\u4F8B\uFF0C\u4EC5\u4F9B\u53C2\u8003
    ",1),Yo={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),Io=o(" 1.0.87 | 2022.05.10 \u2002"),Ro=e("ul",null,[e("li",null,[o("\u65B0\u589E "),e("code",null,"refreshModuleAppResources"),o(" \u529F\u80FD\uFF0C\u4EE5\u9002\u914D\u8BED\u8A00\u533A\u57DF\u3001\u5B57\u4F53\u5927\u5C0F\u3001\u5206\u8FA8\u7387\u6539\u53D8\u7B49\u60C5\u51B5\u4E0B\u7684 Resources \u5237\u65B0")]),e("li",null,[o("\u65B0\u589E "),e("code",null,"isEnableModuleAppResourcesCache"),o(" \u529F\u80FD\uFF0C\u53EF\u81EA\u884C\u8BBE\u7F6E\u662F\u5426\u81EA\u52A8\u7F13\u5B58\u5F53\u524D\u6A21\u5757\u7684 Resources")])],-1),So={id:"_1-0-86-2022-05-06",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Lo=o(" 1.0.86 | 2022.05.06 \u2002"),Fo=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E0D\u652F\u6301 Resources Hook(\u8D44\u6E90\u94A9\u5B50) \u7684\u60C5\u51B5\u4E0B\u5728 "),e("code",null,"initZygote"),o(" \u65F6\u6301\u7EED\u62A5\u9519\u7684\u95EE\u9898\uFF0C\u590D\u73B0\u5728 "),e("strong",null,"ZUI"),o("/"),e("strong",null,"LSPosed CI(1.8.3-6550)")]),e("li",null,"\u4F18\u5316\u5E76\u5BF9 Resources Hook \u8FDB\u884C\u5F02\u5E38\u5904\u7406\uFF0C\u53EA\u6709\u88AB\u4F7F\u7528\u540E\u4E0D\u652F\u6301\u624D\u4F1A\u6253\u5370\u9519\u8BEF\u548C\u8B66\u544A")],-1),Do={id:"_1-0-85-2022-05-04",tabindex:"-1"},Bo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Wo=o(" 1.0.85 | 2022.05.04 \u2002"),Uo=i("
    • \u4FEE\u590D\u65E0\u6CD5 Hook \u7CFB\u7EDF\u6846\u67B6\u7684\u4E25\u91CD\u95EE\u9898\uFF0C\u4ECE 1.0.80 \u5F00\u59CB\u51FA\u73B0
    • \u8C03\u8BD5\u65E5\u5FD7\u4E2D\u65B0\u589E\u533A\u5206 initZygote \u88C5\u8F7D\u7684\u5305\u540D\u4E3A android-zygote\uFF0CpackageName \u4FDD\u6301 android \u4E0D\u53D8
    ",1),wo={id:"_1-0-83-2022-05-04",tabindex:"-1"},To=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Go=o(" 1.0.83 | 2022.05.04 \u2002"),Eo=e("ul",null,[e("li",null,[o("\u4FEE\u590D "),e("code",null,"YukiHookModuleStatus"),o(" \u5728 "),e("code",null,"loadSystem"),o(" \u540E\u5927\u91CF\u62A5\u9519\u7684\u95EE\u9898")]),e("li",null,[o("\u65B0\u589E "),e("code",null,"type"),o(" \u4E2D\u7684 "),e("code",null,"android"),o(" \u7C7B\u578B")]),e("li",null,"\u66F4\u65B0\u5E2E\u52A9\u6587\u6863\u7684\u793A\u4F8B\u8BF4\u660E")],-1),No={id:"_1-0-82-2022-05-04",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),jo=o(" 1.0.82 | 2022.05.04 \u2002"),zo=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4E86\u4E00\u5904\u6982\u5FF5\u6DF7\u6DC6\u9519\u8BEF\uFF0C\u533A\u5206 "),e("code",null,"initZygote"),o(" \u4E0E\u7CFB\u7EDF\u6846\u67B6\u7684\u5173\u7CFB\uFF0C\u4E4B\u524D\u7684\u6CE8\u91CA\u548C\u6587\u6863\u6709\u95EE\u9898\uFF0C\u975E\u5E38\u62B1\u6B49")]),e("li",null,[e("code",null,"PackageParam"),o(" \u65B0\u589E "),e("code",null,"loadSystem"),o(" \u65B9\u6CD5\uFF0C\u4E0D\u9700\u8981\u518D\u5199 "),e("code",null,'loadApp(name = "android")'),o(" \u5373\u53EF Hook \u7CFB\u7EDF\u6846\u67B6")])],-1),Vo={id:"_1-0-81-2022-05-04",tabindex:"-1"},Zo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Ko=o(" 1.0.81 | 2022.05.04 \u2002"),Jo=e("ul",null,[e("li",null,[o("\u4FEE\u590D\u4F7F\u7528 "),e("code",null,"by"),o(" \u65B9\u6CD5\u8BBE\u7F6E\u6761\u4EF6\u540E Hook \u65B9\u6CD5\u4F53\u5185\u67E5\u627E\u4E0D\u5230\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4F9D\u7136\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u7684\u95EE\u9898")]),e("li",null,"\u5728\u6267\u884C Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165\u5168\u5C40\u65E5\u5FD7\u663E\u793A\u5F53\u524D Hook APP \u7684\u5305\u540D\uFF0C\u5E76\u4FEE\u590D\u4E00\u5904\u9519\u8BEF\u65E5\u5FD7\u6253\u5370\u6837\u5F0F\u7684\u95EE\u9898")],-1),qo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Qo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),$o=o(" 1.0.80 | 2022.05.01 \u2002"),ed=i("
  • InjectYukiHookWithXposed \u6CE8\u89E3\u65B0\u589E entryClassName \u529F\u80FD\uFF0C\u53EF\u81EA\u5B9A\u4E49\u751F\u6210\u7684 xposed_init \u5165\u53E3\u7C7B\u540D
  • YukiHookXposedInitProxy \u66F4\u540D\u4E3A IYukiHookXposedInit\uFF0C\u539F\u63A5\u53E3\u540D\u79F0\u5DF2\u4F5C\u5E9F\uFF0C\u5C06\u5728\u540E\u7EED\u7248\u672C\u4E2D\u76F4\u63A5\u88AB\u5220\u9664
  • \u65B0\u589E initZygote \u4E0E Resources Hook \u529F\u80FD\uFF0C\u652F\u6301 Hook Layout
  • \u65B0\u589E onXposedEvent \u65B9\u6CD5\uFF0C\u53EF\u76D1\u542C\u539F\u751F Xposed API \u7684\u5168\u90E8\u4E8B\u4EF6
  • \u5BF9 Hook \u529F\u80FD\u7684 lambda \u8FDB\u884C inline \u5904\u7406\uFF0C\u907F\u514D\u751F\u6210\u8FC7\u788E\u7684\u533F\u540D\u7C7B\uFF0C\u63D0\u5347\u7F16\u8BD1\u540E\u7684\u8FD0\u884C\u6027\u80FD
  • \u4FEE\u590D PrefsData \u7F16\u8BD1\u540E\u7684\u65B9\u6CD5\u4F53\u590D\u5236\u8FC7\u5927\u7684\u95EE\u9898
  • \u589E\u52A0 XSharePreference \u53EF\u8BFB\u6027\u6D4B\u8BD5\uFF0C\u5931\u8D25\u540E\u4F1A\u81EA\u52A8\u6253\u5370\u8B66\u544A\u65E5\u5FD7
  • PackageParam \u65B0\u589E appResources\u3001moduleAppResources\u3001moduleAppFilePath \u529F\u80FD
  • PackageParam \u7684 loadApp \u65B0\u589E\u4E0D\u5199 name \u529F\u80FD\uFF0C\u9ED8\u8BA4\u7B5B\u9009\u5168\u90E8 APP
  • PackageParam \u65B0\u589E loadZygote \u65B9\u6CD5\uFF0C\u53EF\u76F4\u63A5 Hook \u7CFB\u7EDF\u6846\u67B6
  • PackageParam \u65B0\u589E resources().hook \u529F\u80FD
  • \u4F18\u5316\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u67E5\u627E\u529F\u80FD\uFF0C\u627E\u4E0D\u5230\u7684\u9519\u8BEF\u65E5\u5FD7\u5C06\u4F18\u5148\u663E\u793A\u5DF2\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6
  • \u589E\u52A0 hasExtends \u6269\u5C55\u65B9\u6CD5\uFF0C\u53EF\u5224\u65AD\u5F53\u524D Class \u662F\u5426\u6709\u7EE7\u627F\u5173\u7CFB
  • \u589E\u52A0 isSupportResourcesHook \u529F\u80FD\uFF0C\u5224\u65AD\u5F53\u524D\u662F\u5426\u652F\u6301\u8D44\u6E90\u94A9\u5B50(Resources Hook)
  • current \u529F\u80FD\u65B0\u589E superClass \u65B9\u6CD5\u8C03\u7528\u7236\u7C7B
  • \u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u65B0\u589E superClass \u67E5\u627E\u6761\u4EF6\uFF0C\u53EF\u7EE7\u7EED\u5728\u7236\u7C7B\u4E2D\u67E5\u627E
  • YukiHookAPI \u5927\u91CF\u65B9\u6CD5\u4E0E Xposed API \u89E3\u8026\u5408
  • \u65B0\u589E Xposed API \u7684\u539F\u751F Hook \u4F18\u5148\u7EA7\u529F\u80FD
  • \u4FEE\u590D isFirstApplication \u53EF\u80FD\u5224\u65AD\u4E0D\u51C6\u786E\u7684\u95EE\u9898
  • \u5C4F\u853D MIUI \u7CFB\u7EDF\u4E0A MiuiCatcherPatch \u91CD\u590D\u8C03\u7528 Hook \u5165\u53E3\u65B9\u6CD5\u7684\u95EE\u9898
  • \u4F18\u5316 Hook \u5165\u53E3\u8C03\u7528\u65B9\u6CD5\uFF0C\u907F\u514D\u56E0\u4E3A Hook Framework \u95EE\u9898\u5BFC\u81F4\u591A\u6B21\u8C03\u7528
  • ",21),od=o("\u4FEE\u590D Hook "),dd=e("code",null,"ClassLoader",-1),cd=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),id={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ld=o("WankkoRee"),td=o(" \u7684\u53CD\u9988"),sd=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),nd=e("li",null,[o("Java "),e("code",null,"type"),o(" \u65B0\u589E "),e("code",null,"ClassLoader"),o(" \u7C7B\u578B")],-1),ad=e("li",null,"\u4F18\u5316 API \u5E2E\u52A9\u6587\u6863\uFF0C\u4FEE\u590D\u53EF\u80FD\u6301\u7EED\u7F13\u5B58\u9875\u9762\u7684\u95EE\u9898",-1),rd={id:"_1-0-78-2022-04-18",tabindex:"-1"},_d=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),hd=o(" 1.0.78 | 2022.04.18 \u2002"),ud=i("
  • YukiHookModulePrefs \u65B0\u589E isRunInNewXShareMode \u65B9\u6CD5\uFF0C\u53EF\u7528\u4E8E\u5224\u65AD\u6A21\u5757\u5F53\u524D\u662F\u5426\u5904\u4E8E New XSharePreference \u6A21\u5F0F
  • \u4FEE\u590D YukiHookModulePrefs \u5728 New XSharePreference \u6A21\u5F0F\u4E0B\u5DE5\u4F5C\u7684\u90E8\u5206\u95EE\u9898
  • \u65B0\u589E ModulePreferenceFragment\uFF0C\u73B0\u5728\uFF0C\u4F60\u53EF\u4EE5\u5B8C\u5168\u66FF\u6362\u6389 PreferenceFragmentCompat \u5E76\u5F00\u59CB\u4F7F\u7528\u65B0\u7684\u529F\u80FD
  • ",3),kd=o("\u9002\u914D "),pd=e("code",null,"PreferenceFragmentCompat",-1),gd=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),md={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},fd=o("mahoshojoHCG"),Hd=o(" \u7684\u53CD\u9988"),Pd=e("li",null,[o("\u66F4\u65B0\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u4EE5\u53CA "),e("code",null,"Kotlin"),o(" \u4F9D\u8D56\u5230\u6700\u65B0\u7248\u672C")],-1),bd=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),xd={id:"_1-0-77-2022-04-15",tabindex:"-1"},Cd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),yd=o(" 1.0.77 | 2022.04.15 \u2002"),Ad=e("code",null,"YukiHookModulePrefs",-1),vd=o(" \u65B0\u589E "),Yd=e("code",null,"clear",-1),Md=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),Id={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Rd=o("WankkoRee"),Sd=o(" \u7684\u5EFA\u8BAE"),Xd=i("
  • YukiHookModulePrefs \u65B0\u589E getStringSet\u3001putStringSet\u3001all \u65B9\u6CD5
  • HookParam \u7684 args \u589E\u52A0 any \u65B9\u6CD5
  • \u65B0\u589E ModuleApplication\uFF0C\u53EF\u5728\u6A21\u5757\u4E2D\u7EE7\u627F\u6B64\u7C7B\u5B9E\u73B0\u66F4\u591A\u529F\u80FD
  • \u5BF9\u63A5\u5168\u90E8\u7684 findClass \u529F\u80FD\u5230 Xposed API\uFF0C\u5728\u975E\u5BBF\u4E3B\u73AF\u5883\u7EE7\u7EED\u4F7F\u7528\u539F\u751F ClassLoader
  • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
  • ",5),Ld={id:"_1-0-75-2022-04-13",tabindex:"-1"},Fd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Dd=o(" 1.0.75 | 2022.04.13 \u2002"),Bd=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),Wd={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Ud=o("ApeaSuperz"),wd=o(" \u7684\u8D21\u732E"),Td=i("
  • \u4FEE\u6B63\u4E00\u5904\u6587\u6863\u6CE8\u91CA\u7684\u5F15\u7528\u672A\u66F4\u6539\u7684\u95EE\u9898
  • HookParam \u4E2D\u5220\u9664\u4E86 firstArgs \u4E0E lastArgs \u65B9\u6CD5\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 args().first() \u4E0E args().last() \u6765\u53D6\u4EE3\u5B83
  • HookParam \u4E2D\u5220\u9664\u4E86 args() \u4E2D\u7684\u9ED8\u8BA4\u53C2\u6570 index = 0\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 args().first() \u6216 args(index = 0) \u6765\u53D6\u4EE3\u5B83
  • HookParam \u4E2D result \u529F\u80FD\u589E\u52A0\u4E86\u6CDB\u578B\u5339\u914D\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u4F7F\u7528 result<T> \u6765\u5339\u914D\u4F60\u7684\u76EE\u6807\u65B9\u6CD5\u5DF2\u77E5\u8FD4\u56DE\u503C\u7C7B\u578B\u4E86
  • \u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u529F\u80FD\u65B0\u589E emptyParam \u6761\u4EF6\uFF0C\u5E76\u5B8C\u5584\u4E86\u6587\u6863\u76F8\u5173\u9700\u8981\u6CE8\u610F\u7684\u67E5\u627E\u6761\u4EF6\u8BEF\u533A
  • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
  • ",6),Gd=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),Ed=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),Nd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Od=o("WankkoRee"),jd=o(" \u7684\u8D21\u732E"),zd=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),Vd=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Zd=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Kd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Jd=o("Luckyzyx"),qd=o(" \u7684\u53CD\u9988"),Qd=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),$d={id:"_1-0-72-2022-04-09",tabindex:"-1"},ec=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),oc=o(" 1.0.72 | 2022.04.09 \u2002"),dc=e("ul",null,[e("li",null,"\u66F4\u65B0 API \u6587\u6863\u5230\u65B0\u7684\u5730\u5740"),e("li",null,[e("code",null,"PackageParam"),o(" \u4E2D\u52A0\u5165 "),e("code",null,"appContext"),o(" \u529F\u80FD")]),e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027")],-1),cc={id:"_1-0-71-2022-04-04",tabindex:"-1"},ic=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),lc=o(" 1.0.71 | 2022.04.04 \u2002"),tc=e("ul",null,[e("li",null,"\u4FEE\u590D VariousClass \u65E0\u6CD5\u5339\u914D\u65F6\u4F1A\u505C\u6B62 Hook \u629B\u51FA\u5F02\u5E38\u7684\u4E25\u91CD\u95EE\u9898")],-1),sc={id:"_1-0-70-2022-04-04",tabindex:"-1"},nc=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),ac=o(" 1.0.70 | 2022.04.04 \u2002"),rc=e("li",null,[o("\u4FEE\u590D "),e("code",null,"instanceClass"),o(" \u5728\u9759\u6001\u5B9E\u4F8B\u4E2D\u8C03\u7528\u540E\u62A5\u9519\u95EE\u9898")],-1),_c=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),hc=e("code",null,"isUseAppClassLoader",-1),uc=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),kc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},pc=o("WankkoRee"),gc=o(" \u7684\u53CD\u9988"),mc=e("li",null,[o("\u52A0\u5165 "),e("code",null,"withProcess"),o(" \u529F\u80FD\uFF0C\u53EF\u6839\u636E APP \u5F53\u524D\u6307\u5B9A\u8FDB\u7A0B\u8FDB\u884C Hook")],-1),fc=e("li",null,"\u4FEE\u590D\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u7C7B\u548C\u53D8\u91CF\u7684\u4E25\u91CD\u903B\u8F91\u9519\u8BEF\u95EE\u9898",-1),Hc=e("li",null,"\u4FEE\u590D Hook \u76EE\u6807\u7C7B\u4E0D\u5B58\u5728\u7684\u65F6\u5019\u65E0\u6CD5\u5FFD\u7565\u5F02\u5E38\u8F93\u51FA\u7684\u95EE\u9898",-1),Pc=e("li",null,"\u4FEE\u590D\u90E8\u5206\u60C5\u51B5\u4E0B APP \u542F\u52A8\u65B9\u6CD5\u88C5\u8F7D\u8FC7\u5FEB\u5BFC\u81F4 Hook \u4E0D\u80FD\u751F\u6548\u7684\u95EE\u9898",-1),bc=o("\u4FEE\u590D "),xc=e("code",null,"allMethods",-1),Cc=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),yc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ac=o("WankkoRee"),vc=o(" \u7684\u53CD\u9988"),Yc=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),Mc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ic=o("WankkoRee"),Rc=o(" \u7684\u5EFA\u8BAE"),Sc=e("li",null,"\u4FEE\u6539 Xposed \u5165\u53E3\u6CE8\u5165\u7C7B\u7684\u65B9\u5F0F\uFF0C\u91CD\u65B0\u58F0\u660E API \u7684\u5B9A\u4E49\u57DF",-1),Xc=o("\u52A0\u5165\u6DF7\u6DC6\u7684\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u7684\u67E5\u627E\u529F\u80FD\uFF0C\u53EF\u4F7F\u7528\u4E0D\u540C\u7C7B\u578B\u7B5B\u9009 "),Lc=e("code",null,"index",-1),Fc=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),Dc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Bc=o("WankkoRee"),Wc=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),Uc=e("li",null,[o("\u67E5\u627E\u65B9\u6CD5\u3001\u53D8\u91CF\u65F6\u5141\u8BB8\u4F20\u5165\u591A\u79CD\u7C7B\u578B\uFF0C\u4F8B\u5982 "),e("code",null,"String"),o(" \u58F0\u660E\u7684\u7C7B\u540D\u548C "),e("code",null,"VariousClass")],-1),wc=e("li",null,[o("\u52A0\u5165\u5168\u65B0\u7684 "),e("code",null,"current"),o(" \u529F\u80FD\uFF0C\u53EF\u5BF9\u4EFB\u610F\u7684\u7C7B\u6784\u5EFA\u4E00\u4E2A\u53CD\u5C04\u65B9\u6CD5\u64CD\u4F5C\u7A7A\u95F4\uFF0C\u65B9\u4FBF\u5730\u8C03\u7528\u548C\u4FEE\u6539\u5176\u4E2D\u7684\u65B9\u6CD5\u548C\u53D8\u91CF")],-1),Tc=o("\u4FEE\u590D\u4E86 Hook \u8FC7\u7A0B\u4E2D\u7684\u5927\u91CF BUG\uFF0C\u611F\u8C22 "),Gc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ec=o("WankkoRee"),Nc=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),Oc={id:"_1-0-69-2022-03-30",tabindex:"-1"},jc=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),zc=o(" 1.0.69 | 2022.03.30 \u2002"),Vc=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),Zc=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),Kc=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),Jc=e("code",null,"allMethods",-1),qc=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Qc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},$c=o("WankkoRee"),ei=o(" \u7684\u53CD\u9988"),oi={id:"_1-0-68-2022-03-29",tabindex:"-1"},di=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),ci=o(" 1.0.68 | 2022.03.29 \u2002"),ii=i("
    • \u589E\u52A0 Demo \u4E2D\u7684\u65B0\u7528\u4F8B\u548C LSPosed \u4F5C\u7528\u57DF
    • \u589E\u52A0 Member \u67E5\u627E\u7F13\u5B58\u548C\u67E5\u627E\u7F13\u5B58\u914D\u7F6E\u5F00\u5173
    • \u79FB\u9664\u548C\u4FEE\u6539 MethodFinder\u3001FieldFinder \u4EE5\u53CA HookParam \u76F8\u5173\u65B9\u6CD5\u7684\u8C03\u7528
    • \u589E\u52A0\u66F4\u591A Finder \u4E2D\u7684 cast \u7C7B\u578B\u5E76\u652F\u6301 cast \u4E3A\u6570\u7EC4
    • \u6574\u4F53\u7684\u6027\u80FD\u548C\u7A33\u5B9A\u6027\u63D0\u5347
    • \u4FEE\u590D\u4E0A\u4E00\u4E2A\u7248\u672C\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),li={id:"_1-0-67-2022-03-27",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),si=o(" 1.0.67 | 2022.03.27 \u2002"),ni=i("
    • \u589E\u52A0\u4E09\u4E2A Finder \u4E2D\u7684 modifiers \u529F\u80FD\uFF0C\u53EF\u7B5B\u9009 static\u3001native\u3001public\u3001abstract \u7B49\u8BF8\u591A\u63CF\u8FF0\u7C7B\u578B
    • \u589E\u52A0\u65B9\u6CD5\u548C\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u65F6\u53EF\u6A21\u7CCA\u65B9\u6CD5\u53C2\u6570\u7C7B\u578B\u4E3A\u6307\u5B9A\u4E2A\u6570\u8FDB\u884C\u67E5\u627E
    • \u589E\u52A0 Member \u7684 hasModifiers \u6269\u5C55\u529F\u80FD
    • \u589E\u52A0 MethodFinder \u548C ConstructorFinder \u4E2D\u7684 give \u65B9\u6CD5\uFF0C\u53EF\u83B7\u5F97\u539F\u59CB\u7C7B\u578B
    • \u589E\u52A0 YukiHookModulePrefs \u4E2D\u7684 PrefsData \u6A21\u677F\u529F\u80FD
    • \u5F7B\u5E95\u5BF9\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u53CA\u53D8\u91CF\u7684\u67E5\u627E\u65B9\u6848\u8FDB\u884C\u91CD\u6784
    • \u4F18\u5316\u4EE3\u7801\u6CE8\u91CA\uFF0C\u4FEE\u590D\u4E86\u53EF\u80FD\u4EA7\u751F\u7684 BUG
    ",1),ai={id:"_1-0-66-2022-03-25",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),_i=o(" 1.0.66 | 2022.03.25 \u2002"),hi=e("ul",null,[e("li",null,[o("\u4FEE\u590D "),e("code",null,"MethodFinder"),o(" \u4E2D\u7684\u4E00\u4E2A\u4E25\u91CD\u95EE\u9898")]),e("li",null,[o("\u589E\u52A0 "),e("code",null,"hookParam"),o(" \u4E2D\u7684 "),e("code",null,"args"),o(" \u8C03\u7528\u65B9\u6CD5")]),e("li",null,"\u4FEE\u590D\u5176\u5B83\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898\u4EE5\u53CA\u4FEE\u590D\u90E8\u5206\u7C7B\u7684\u6CE8\u91CA\u95EE\u9898")],-1),ui={id:"_1-0-65-2022-03-25",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),pi=o(" 1.0.65 | 2022.03.25 \u2002"),gi=i("
    • \u91CD\u65B0\u53D1\u5E03\u7248\u672C\u4FEE\u590D Maven \u4ED3\u5E93\u56E0\u4E3A\u7F13\u5B58\u95EE\u9898\u65B0\u7248\u672C\u4E0D\u6B63\u786E\u7684\u60C5\u51B5
    • \u589E\u52A0 MethodFinder \u4E0E FieldFinder \u65B0\u7684\u8FD4\u56DE\u503C\u8C03\u7528\u65B9\u6CD5
    • \u4FEE\u590D\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898\uFF0C\u5E76\u4FEE\u590D\u592A\u6781\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898
    • \u4FEE\u590D\u81EA\u52A8\u751F\u6210 Xposed \u5165\u53E3\u7C7B\u53EF\u80FD\u53D1\u751F\u7684\u95EE\u9898
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B\u4EE5\u53CA java \u7C7B\u578B
    ",1),mi={id:"_1-0-6-2022-03-20",tabindex:"-1"},fi=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),Hi=o(" 1.0.6 | 2022.03.20 \u2002"),Pi=i("
    • \u4FEE\u590D YukiHookModulePrefs \u5728\u4F7F\u7528\u4E00\u6B21 direct \u5FFD\u7565\u7F13\u5B58\u540E\u6BCF\u6B21\u90FD\u5FFD\u7565\u7684 BUG
    • \u589E\u52A0\u65B0\u7684 API\uFF0C\u4F5C\u5E9F\u4E86 isActive \u5224\u65AD\u6A21\u5757\u6FC0\u6D3B\u7684\u4F20\u7EDF\u7528\u6CD5
    • \u4FEE\u590D\u975E Xposed \u73AF\u5883\u4F7F\u7528 API \u65F6\u6253\u5370\u8C03\u8BD5\u65E5\u5FD7\u7684\u95EE\u9898
    • \u4FEE\u590D\u67E5\u627E Field \u65F6\u7684\u65E5\u5FD7\u8F93\u51FA\u95EE\u9898\u548C\u672A\u62E6\u622A\u7684\u5F02\u5E38\u95EE\u9898
    • \u89E3\u8026\u5408 ReflectionUtils \u4E2D\u7684 Xposed API
    • \u589E\u52A0 YukiHookModuleStatus \u65B9\u6CD5\u540D\u79F0\u7684\u6DF7\u6DC6\uFF0C\u4EE5\u7CBE\u7B80\u6A21\u5757\u751F\u6210\u7684\u4F53\u79EF
    • \u88C5\u8F7D\u6A21\u5757\u81EA\u8EAB Hook \u65F6\u5C06\u4E0D\u518D\u6253\u5370\u6B22\u8FCE\u4FE1\u606F
    • \u4FEE\u590D\u4E0A\u4E00\u4E2A\u7248\u672C\u4ECD\u7136\u5B58\u5728\u7684\u67D0\u4E9B BUG
    ",1),bi={id:"_1-0-55-2022-03-18",tabindex:"-1"},xi=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),Ci=o(" 1.0.55 | 2022.03.18 \u2002"),yi=e("ul",null,[e("li",null,"\u4FEE\u6B63\u4E00\u5904\u6CE8\u91CA\u9519\u8BEF"),e("li",null,"\u4E34\u65F6\u4FEE\u590D\u4E00\u4E2A BUG"),e("li",null,[o("\u589E\u52A0\u4E86 "),e("code",null,"type"),o(" \u4E2D\u7684\u5927\u91CF "),e("code",null,"android"),o(" \u7C7B\u578B\u4EE5\u53CA\u5C11\u91CF "),e("code",null,"java"),o(" \u7C7B\u578B")]),e("li",null,"\u4FEE\u590D\u65B0\u7248\u4E0E\u65E7\u7248 Kotlin APIs \u7684\u517C\u5BB9\u6027\u95EE\u9898")],-1),Ai={id:"_1-0-5-2022-03-18",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Yi=o(" 1.0.5 | 2022.03.18 \u2002"),Mi=i("
    • \u4FEE\u590D\u65E7\u7248\u672C LSPosed \u6846\u67B6\u60C5\u51B5\u4E0B\u6B22\u8FCE\u4FE1\u606F\u591A\u6B21\u6253\u5370\u7684\u95EE\u9898
    • \u6DFB\u52A0 onInit \u65B9\u6CD5\u6765\u914D\u7F6E YukiHookAPI
    • \u65B0\u589E executorName \u548C executorVersion \u6765\u83B7\u53D6\u5F53\u524D Hook Framework \u7684\u540D\u79F0\u548C\u7248\u672C\u53F7
    • \u65B0\u589E by \u65B9\u6CD5\u6765\u8BBE\u7F6E Hook \u7684\u65F6\u673A\u548C\u6761\u4EF6
    • YukiHookModulePrefs \u65B0\u589E\u53EF\u63A7\u5236\u7684\u952E\u503C\u7F13\u5B58\uFF0C\u53EF\u5728\u5BBF\u4E3B\u8FD0\u884C\u65F6\u6A21\u5757\u52A8\u6001\u66F4\u65B0\u6570\u636E
    • \u4FEE\u590D\u4E86\u4E00\u4E9B\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),Ii={id:"_1-0-4-2022-03-06",tabindex:"-1"},Ri=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Si=o(" 1.0.4 | 2022.03.06 \u2002"),Xi=i("
    • \u4FEE\u590D LSPosed \u5728\u6700\u65B0\u7248\u672C\u4E2D\u542F\u7528\u201C\u53EA\u6709\u6A21\u5757classloader\u53EF\u4EE5\u4F7F\u7528Xposed API\u201D\u9009\u9879\u540E\u627E\u4E0D\u5230 XposedBridge \u7684\u95EE\u9898
    • \u6DFB\u52A0 YukiHookAPI \u7684\u5E38\u91CF\u7248\u672C\u540D\u79F0\u548C\u7248\u672C\u53F7
    • \u65B0\u589E hasField \u65B9\u6CD5\u4EE5\u53CA isAllowPrintingLogs \u914D\u7F6E\u53C2\u6570
    • \u65B0\u589E isDebug \u5F00\u542F\u7684\u60C5\u51B5\u4E0B API \u5C06\u81EA\u52A8\u6253\u5370\u6B22\u8FCE\u4FE1\u606F\u6D4B\u8BD5\u6A21\u5757\u662F\u5426\u751F\u6548
    ",1),Li={id:"_1-0-3-2022-03-02",tabindex:"-1"},Fi=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Di=o(" 1.0.3 | 2022.03.02 \u2002"),Bi=i("
    • \u4FEE\u590D\u4E00\u4E2A\u6F5C\u5728\u6027\u7684\u5F02\u5E38\u672A\u62E6\u622A BUG
    • \u589E\u52A0 ignoredError \u529F\u80FD
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 android \u7C7B\u578B
    • \u589E\u52A0\u76D1\u542C hook \u540E\u7684 ClassNotFound \u529F\u80FD
    ",1),Wi={id:"_1-0-2-2022-02-18",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),wi=o(" 1.0.2 | 2022.02.18 \u2002"),Ti=e("ul",null,[e("li",null,"\u4FEE\u590D Windows \u4E0B\u65E0\u6CD5\u627E\u5230\u9879\u76EE\u8DEF\u5F84\u7684\u95EE\u9898"),e("li",null,[o("\u79FB\u9664\u90E8\u5206\u53CD\u5C04 API\uFF0C\u5408\u5E76\u81F3 "),e("code",null,"BaseFinder"),o(" \u8FDB\u884C\u6574\u5408")]),e("li",null,"\u589E\u52A0\u76F4\u63A5\u4F7F\u7528\u5B57\u7B26\u4E32\u521B\u5EFA Hook \u7684\u65B9\u6CD5")],-1),Gi={id:"_1-0-1-2022-02-15",tabindex:"-1"},Ei=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Ni=o(" 1.0.1 | 2022.02.15 \u2002"),Oi=i("
    • RemedyPlan \u589E\u52A0 onFind \u529F\u80FD
    • \u6574\u5408\u5E76\u4FEE\u6539\u4E86\u90E8\u5206\u53CD\u5C04 API \u4EE3\u7801
    • \u589E\u52A0\u4E86 type \u4E2D\u7684 java \u7C7B\u578B
    • \u4FEE\u590D\u5FFD\u7565\u9519\u8BEF\u5728\u63A7\u5236\u53F0\u4ECD\u7136\u8F93\u51FA\u7684\u95EE\u9898
    ",1),ji={id:"_1-0-2022-02-14",tabindex:"-1"},zi=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Vi=o(" 1.0 | 2022.02.14 \u2002"),Zi=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function Ki(Ji,qi){const c=t("Badge"),l=t("ExternalLinkIcon");return n(),a("div",null,[_,h,u,e("h3",k,[p,g,d(c,{type:"tip",text:"\u6700\u65B0",vertical:"middle"})]),m,e("h3",f,[H,P,d(c,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),b,e("h3",x,[C,y,d(c,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),A,e("h3",v,[Y,M,d(c,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),I,e("h3",R,[S,X,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),L,e("h3",F,[D,B,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),W,e("h3",U,[w,T,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[G,e("li",null,[E,e("a",N,[O,d(l)])]),j,e("li",null,[z,e("a",V,[Z,d(l)]),K]),J,e("li",null,[q,Q,$,ee,oe,de,e("a",ce,[ie,d(l)]),le]),te,e("li",null,[se,ne,ae,e("a",re,[_e,d(l)]),he]),e("li",null,[ue,ke,pe,e("a",ge,[me,d(l)]),fe]),He,e("li",null,[Pe,be,xe,Ce,ye,e("a",Ae,[ve,d(l)]),Ye,e("a",Me,[Ie,d(l)])]),Re,Se,Xe,e("li",null,[Le,Fe,De,Be,We,e("a",Ue,[we,d(l)]),Te]),Ge,e("li",null,[Ee,Ne,Oe,e("a",je,[ze,d(l)]),Ve,e("a",Ze,[Ke,d(l)])]),Je,qe,Qe,$e]),e("h3",eo,[oo,co,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),io,e("h3",lo,[to,so,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[no,ao,ro,e("a",_o,[ho,d(l)]),uo]),ko]),e("h3",po,[go,mo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),fo,e("h3",Ho,[Po,bo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),xo,e("h3",Co,[yo,Ao,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),vo,e("h3",Yo,[Mo,Io,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ro,e("h3",So,[Xo,Lo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Fo,e("h3",Do,[Bo,Wo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Uo,e("h3",wo,[To,Go,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Eo,e("h3",No,[Oo,jo,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),zo,e("h3",Vo,[Zo,Ko,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Jo,e("h3",qo,[Qo,$o,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[ed,e("li",null,[od,dd,cd,e("a",id,[ld,d(l)]),td]),sd,nd,ad]),e("h3",rd,[_d,hd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[ud,e("li",null,[kd,pd,gd,e("a",md,[fd,d(l)]),Hd]),Pd,bd]),e("h3",xd,[Cd,yd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Ad,vd,Yd,Md,e("a",Id,[Rd,d(l)]),Sd]),Xd]),e("h3",Ld,[Fd,Dd,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Bd,e("a",Wd,[Ud,d(l)]),wd]),Td]),Gd,e("ul",null,[e("li",null,[Ed,e("a",Nd,[Od,d(l)]),jd]),e("li",null,[zd,Vd,Zd,e("a",Kd,[Jd,d(l)]),qd]),Qd]),e("h3",$d,[ec,oc,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),dc,e("h3",cc,[ic,lc,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),tc,e("h3",sc,[nc,ac,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[rc,e("li",null,[_c,hc,uc,e("a",kc,[pc,d(l)]),gc]),mc,fc,Hc,Pc,e("li",null,[bc,xc,Cc,e("a",yc,[Ac,d(l)]),vc]),e("li",null,[Yc,e("a",Mc,[Ic,d(l)]),Rc]),Sc,e("li",null,[Xc,Lc,Fc,e("a",Dc,[Bc,d(l)]),Wc]),Uc,wc,e("li",null,[Tc,e("a",Gc,[Ec,d(l)]),Nc])]),e("h3",Oc,[jc,zc,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Vc,Zc,e("li",null,[Kc,Jc,qc,e("a",Qc,[$c,d(l)]),ei])]),e("h3",oi,[di,ci,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ii,e("h3",li,[ti,si,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ni,e("h3",ai,[ri,_i,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hi,e("h3",ui,[ki,pi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),gi,e("h3",mi,[fi,Hi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Pi,e("h3",bi,[xi,Ci,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),yi,e("h3",Ai,[vi,Yi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Mi,e("h3",Ii,[Ri,Si,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Xi,e("h3",Li,[Fi,Di,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Bi,e("h3",Wi,[Ui,wi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ti,e("h3",Gi,[Ei,Ni,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Oi,e("h3",ji,[zi,Vi,d(c,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Zi])}const $i=s(r,[["render",Ki],["__file","changelog.html.vue"]]);export{$i as default}; diff --git a/docs/assets/contacts.html.248b9bb6.js b/docs/assets/contacts.html.513cc4ab.js similarity index 94% rename from docs/assets/contacts.html.248b9bb6.js rename to docs/assets/contacts.html.513cc4ab.js index 9b12e9b2c..972155f71 100644 --- a/docs/assets/contacts.html.248b9bb6.js +++ b/docs/assets/contacts.html.513cc4ab.js @@ -1 +1 @@ -import{_ as s,r as a,o as c,c as r,b as e,d as o,e as t}from"./app.a3fd8dd4.js";const i={},l=e("h1",{id:"contact-us",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),t(" Contact Us")],-1),_=e("blockquote",null,[e("p",null,"If you have any questions in use, or have any constructive suggestions, you can contact us.")],-1),h=t("Join us "),u={href:"https://t.me/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},d=t("Click to join Telegram group"),p=t("Find me on "),f=e("strong",null,"Twitter",-1),k=t(),m={href:"https://twitter.com/fankesyooni",target:"_blank",rel:"noopener noreferrer"},g=t("@fankesyooni"),y=e("h2",{id:"help-with-maintenance",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#help-with-maintenance","aria-hidden":"true"},"#"),t(" Help with Maintenance")],-1),b=e("p",null,[t("Thank you for choosing and using "),e("code",null,"YukiHookAPI"),t(".")],-1),x=e("p",null,"If you have code-related suggestions and requests, you can submit a Pull Request on Github.",-1);function v(I,w){const n=a("ExternalLinkIcon");return c(),r("div",null,[l,_,e("p",null,[h,e("a",u,[d,o(n)])]),e("p",null,[p,f,k,e("a",m,[g,o(n)])]),y,b,x])}const T=s(i,[["render",v],["__file","contacts.html.vue"]]);export{T as default}; +import{_ as s,r as a,o as c,c as r,b as e,d as o,e as t}from"./app.2bc5d8f3.js";const i={},l=e("h1",{id:"contact-us",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),t(" Contact Us")],-1),_=e("blockquote",null,[e("p",null,"If you have any questions in use, or have any constructive suggestions, you can contact us.")],-1),h=t("Join us "),u={href:"https://t.me/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},d=t("Click to join Telegram group"),p=t("Find me on "),f=e("strong",null,"Twitter",-1),k=t(),m={href:"https://twitter.com/fankesyooni",target:"_blank",rel:"noopener noreferrer"},g=t("@fankesyooni"),y=e("h2",{id:"help-with-maintenance",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#help-with-maintenance","aria-hidden":"true"},"#"),t(" Help with Maintenance")],-1),b=e("p",null,[t("Thank you for choosing and using "),e("code",null,"YukiHookAPI"),t(".")],-1),x=e("p",null,"If you have code-related suggestions and requests, you can submit a Pull Request on Github.",-1);function v(I,w){const n=a("ExternalLinkIcon");return c(),r("div",null,[l,_,e("p",null,[h,e("a",u,[d,o(n)])]),e("p",null,[p,f,k,e("a",m,[g,o(n)])]),y,b,x])}const T=s(i,[["render",v],["__file","contacts.html.vue"]]);export{T as default}; diff --git a/docs/assets/contacts.html.6417336b.js b/docs/assets/contacts.html.6c6acb04.js similarity index 91% rename from docs/assets/contacts.html.6417336b.js rename to docs/assets/contacts.html.6c6acb04.js index 84e205833..579436660 100644 --- a/docs/assets/contacts.html.6417336b.js +++ b/docs/assets/contacts.html.6c6acb04.js @@ -1 +1 @@ -import{_ as s,r,o as c,c as a,b as e,d as n,e as o}from"./app.a3fd8dd4.js";const _={},l=e("h1",{id:"\u8054\u7CFB\u6211\u4EEC",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8054\u7CFB\u6211\u4EEC","aria-hidden":"true"},"#"),o(" \u8054\u7CFB\u6211\u4EEC")],-1),d=e("blockquote",null,[e("p",null,"\u5982\u5728\u4F7F\u7528\u4E2D\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u6216\u6709\u4EFB\u4F55\u5EFA\u8BBE\u6027\u7684\u5EFA\u8BAE\uFF0C\u90FD\u53EF\u4EE5\u8054\u7CFB\u6211\u4EEC\u3002")],-1),h=o("\u52A0\u5165\u6211\u4EEC "),i={href:"https://t.me/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},u=o("\u70B9\u51FB\u52A0\u5165 Telegram \u7FA4\u7EC4"),p=o("\u5728 "),f=e("strong",null,"\u9177\u5B89",-1),k=o(" \u627E\u5230\u6211 "),m={href:"http://www.coolapk.com/u/876977",target:"_blank",rel:"noopener noreferrer"},x=o("@\u661F\u591C\u4E0D\u835F"),b=e("h2",{id:"\u52A9\u529B\u7EF4\u62A4",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u52A9\u529B\u7EF4\u62A4","aria-hidden":"true"},"#"),o(" \u52A9\u529B\u7EF4\u62A4")],-1),g=e("p",null,[o("\u611F\u8C22\u60A8\u9009\u62E9\u5E76\u4F7F\u7528 "),e("code",null,"YukiHookAPI"),o("\uFF0C\u5982\u6709\u4EE3\u7801\u76F8\u5173\u7684\u5EFA\u8BAE\u548C\u8BF7\u6C42\uFF0C\u53EF\u5728 Github \u63D0\u4EA4 Pull Request\u3002")],-1);function I(v,w){const t=r("ExternalLinkIcon");return c(),a("div",null,[l,d,e("p",null,[h,e("a",i,[u,n(t)])]),e("p",null,[p,f,k,e("a",m,[x,n(t)])]),b,g])}const E=s(_,[["render",I],["__file","contacts.html.vue"]]);export{E as default}; +import{_ as s,r,o as c,c as a,b as e,d as n,e as o}from"./app.2bc5d8f3.js";const _={},l=e("h1",{id:"\u8054\u7CFB\u6211\u4EEC",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8054\u7CFB\u6211\u4EEC","aria-hidden":"true"},"#"),o(" \u8054\u7CFB\u6211\u4EEC")],-1),d=e("blockquote",null,[e("p",null,"\u5982\u5728\u4F7F\u7528\u4E2D\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u6216\u6709\u4EFB\u4F55\u5EFA\u8BBE\u6027\u7684\u5EFA\u8BAE\uFF0C\u90FD\u53EF\u4EE5\u8054\u7CFB\u6211\u4EEC\u3002")],-1),h=o("\u52A0\u5165\u6211\u4EEC "),i={href:"https://t.me/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},u=o("\u70B9\u51FB\u52A0\u5165 Telegram \u7FA4\u7EC4"),p=o("\u5728 "),f=e("strong",null,"\u9177\u5B89",-1),k=o(" \u627E\u5230\u6211 "),m={href:"http://www.coolapk.com/u/876977",target:"_blank",rel:"noopener noreferrer"},x=o("@\u661F\u591C\u4E0D\u835F"),b=e("h2",{id:"\u52A9\u529B\u7EF4\u62A4",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u52A9\u529B\u7EF4\u62A4","aria-hidden":"true"},"#"),o(" \u52A9\u529B\u7EF4\u62A4")],-1),g=e("p",null,[o("\u611F\u8C22\u60A8\u9009\u62E9\u5E76\u4F7F\u7528 "),e("code",null,"YukiHookAPI"),o("\uFF0C\u5982\u6709\u4EE3\u7801\u76F8\u5173\u7684\u5EFA\u8BAE\u548C\u8BF7\u6C42\uFF0C\u53EF\u5728 Github \u63D0\u4EA4 Pull Request\u3002")],-1);function I(v,w){const t=r("ExternalLinkIcon");return c(),a("div",null,[l,d,e("p",null,[h,e("a",i,[u,n(t)])]),e("p",null,[p,f,k,e("a",m,[x,n(t)])]),b,g])}const E=s(_,[["render",I],["__file","contacts.html.vue"]]);export{E as default}; diff --git a/docs/assets/example.html.cffc8c16.js b/docs/assets/example.html.906264d8.js similarity index 99% rename from docs/assets/example.html.cffc8c16.js rename to docs/assets/example.html.906264d8.js index 912e0754d..e87bd43bc 100644 --- a/docs/assets/example.html.cffc8c16.js +++ b/docs/assets/example.html.906264d8.js @@ -1,4 +1,4 @@ -import{_ as o,r as p,o as i,c,b as s,d as a,a as l,e as n}from"./app.a3fd8dd4.js";const t={},r=l(`

    Usage Example

    Here is an introduction to the basic working method of YukiHookAPI and a list of simple Hook examples and common functions.

    Structure Diagram

    The structure below describes the basic working and principle of YukiHookAPI.

    Host Environment
    +import{_ as o,r as p,o as i,c,b as s,d as a,a as l,e as n}from"./app.2bc5d8f3.js";const t={},r=l(`

    Usage Example

    Here is an introduction to the basic working method of YukiHookAPI and a list of simple Hook examples and common functions.

    Structure Diagram

    The structure below describes the basic working and principle of YukiHookAPI.

    Host Environment
     \u2514\u2500\u2500 YukiMemberHookCreator
         \u2514\u2500\u2500 Class
             \u2514\u2500\u2500 MemberHookCreator
    diff --git a/docs/assets/example.html.996772ae.js b/docs/assets/example.html.d6055c02.js
    similarity index 99%
    rename from docs/assets/example.html.996772ae.js
    rename to docs/assets/example.html.d6055c02.js
    index 6a41e41a0..aba2e053c 100644
    --- a/docs/assets/example.html.996772ae.js
    +++ b/docs/assets/example.html.d6055c02.js
    @@ -1,4 +1,4 @@
    -import{_ as o,r as p,o as c,c as i,b as s,d as e,a as l,e as n}from"./app.a3fd8dd4.js";const r={},t=l(`

    \u7528\u6CD5\u793A\u4F8B

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u4EE5\u53CA\u5217\u4E3E\u4E86\u7B80\u5355\u7684 Hook \u4F8B\u5B50\u548C\u5E38\u7528\u529F\u80FD\u3002

    \u7ED3\u6784\u56FE\u89E3

    \u4E0B\u65B9\u7684\u7ED3\u6784\u63CF\u8FF0\u4E86 YukiHookAPI \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u548C\u539F\u7406\u3002

    Host Environment
    +import{_ as o,r as p,o as c,c as i,b as s,d as e,a as l,e as n}from"./app.2bc5d8f3.js";const r={},t=l(`

    \u7528\u6CD5\u793A\u4F8B

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u4EE5\u53CA\u5217\u4E3E\u4E86\u7B80\u5355\u7684 Hook \u4F8B\u5B50\u548C\u5E38\u7528\u529F\u80FD\u3002

    \u7ED3\u6784\u56FE\u89E3

    \u4E0B\u65B9\u7684\u7ED3\u6784\u63CF\u8FF0\u4E86 YukiHookAPI \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u548C\u539F\u7406\u3002

    Host Environment
     \u2514\u2500\u2500 YukiMemberHookCreator
         \u2514\u2500\u2500 Class
             \u2514\u2500\u2500 MemberHookCreator
    diff --git a/docs/assets/future.html.08846421.js b/docs/assets/future.html.7bfe69da.js
    similarity index 98%
    rename from docs/assets/future.html.08846421.js
    rename to docs/assets/future.html.7bfe69da.js
    index 1829928a7..d2a0b51a3 100644
    --- a/docs/assets/future.html.08846421.js
    +++ b/docs/assets/future.html.7bfe69da.js
    @@ -1 +1 @@
    -import{_ as e,o,c as a,a as d}from"./app.a3fd8dd4.js";const r={},c=d('

    \u5C55\u671B\u672A\u6765

    \u672A\u6765\u662F\u7F8E\u597D\u7684\uFF0C\u4E5F\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8BA9\u6211\u4EEC\u5171\u540C\u671F\u5F85 YukiHookAPI \u5728\u672A\u6765\u7684\u53D1\u5C55\u7A7A\u95F4\u3002

    \u672A\u89E3\u51B3\u7684\u95EE\u9898

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u5C1A\u672A\u89E3\u51B3\u7684\u95EE\u9898\u3002

    YukiHookModulePrefs

    \u76EE\u524D\u4EC5\u9650\u5B8C\u7F8E\u652F\u6301 LSPosed\uFF0C\u5176\u5B83 Xposed \u6846\u67B6\u9700\u8981\u964D\u7EA7\u6A21\u5757 API\u3002

    \u53EF\u80FD\u5B8C\u5168\u4E0D\u652F\u6301\u592A\u6781\uFF0C\u592A\u6781\u5728\u9AD8\u7248\u672C\u7CFB\u7EDF\u4E0A\u9700\u8981\u66F4\u4F4E\u7684 API \u624D\u80FD\u9002\u914D\u3002

    \u90E8\u5206 Xposed \u6A21\u5757\u5F00\u53D1\u8005\u76EE\u524D\u9009\u62E9 Hook \u76EE\u6807 APP \u5185\u7F6E Sp \u5B58\u50A8\u65B9\u6848\u89E3\u51B3\u6A21\u5757\u8BBE\u7F6E\u5171\u4EAB\u95EE\u9898\u3002

    \u540E\u671F Android \u7CFB\u7EDF\u7684\u6743\u9650\u5C06\u8D8A\u6765\u8D8A\u4E25\u683C\uFF0Cselinux \u5C31\u662F\u76EE\u524D\u9762\u4E34\u7684\u4E00\u4E2A\u5927\u95EE\u9898\uFF0C\u6709\u5F85\u8BA8\u8BBA\u548C\u7814\u7A76\u3002

    \u672A\u6765\u7684\u8BA1\u5212

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u53EF\u80FD\u4F1A\u5728\u540E\u671F\u6DFB\u52A0\u7684\u529F\u80FD\u3002

    \u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C

    \u5F85\u8BA8\u8BBA

    \u76EE\u524D API \u53EA\u652F\u6301\u901A\u8FC7\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7ED1\u5B9A\u5230 xposed_init\uFF0C\u82E5\u60A8\u4E0D\u559C\u6B22\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u4E00\u5B9A\u8981\u81EA\u5DF1\u5B9E\u73B0\u6A21\u5757\u88C5\u8F7D\u5165\u53E3\uFF0C\u672A\u6765\u4F1A\u6309\u7167\u9700\u6C42\u4EBA\u6570\u63A8\u51FA\u4EC5\u6709 API \u529F\u80FD\u7684 Lite \u7248\u672C\uFF0C\u4F60\u53EF\u5411\u6211\u4EEC\u63D0\u51FA issues\u3002

    API \u5DF2\u7ECF\u63D0\u4F9B\u4E86 Xposed \u539F\u751F API \u76D1\u542C\u63A5\u53E3\uFF0C\u4F60\u53EF\u4EE5 \u5728\u8FD9\u91CC \u627E\u5230\u6216\u67E5\u770B Demo \u7684\u5B9E\u73B0\u65B9\u6CD5\u3002

    \u652F\u6301\u66F4\u591A Hook Framework

    \u4F5C\u4E3A API \u6765\u8BB2\uFF0C\u76EE\u524D\u4EC5\u4EC5\u5BF9\u63A5 XposedBridge \u4F5C\u4E3A\u517C\u5BB9\u5C42\uFF0C\u8FD8\u662F\u6709\u4E00\u5B9A\u7684\u5C40\u9650\u6027\u3002

    \u5927\u90E8\u5206 inline hook \u6CA1\u6709 Java \u517C\u5BB9\u5C42\uFF0C\u540E\u671F\u53EF\u80FD\u4F1A\u8003\u8651 native hook \u7684 Java \u517C\u5BB9\u5C42\u9002\u914D\u3002

    ',17),i=[c];function t(s,h){return o(),a("div",null,i)}const p=e(r,[["render",t],["__file","future.html.vue"]]);export{p as default}; +import{_ as e,o,c as a,a as d}from"./app.2bc5d8f3.js";const r={},c=d('

    \u5C55\u671B\u672A\u6765

    \u672A\u6765\u662F\u7F8E\u597D\u7684\uFF0C\u4E5F\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8BA9\u6211\u4EEC\u5171\u540C\u671F\u5F85 YukiHookAPI \u5728\u672A\u6765\u7684\u53D1\u5C55\u7A7A\u95F4\u3002

    \u672A\u89E3\u51B3\u7684\u95EE\u9898

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u5C1A\u672A\u89E3\u51B3\u7684\u95EE\u9898\u3002

    YukiHookModulePrefs

    \u76EE\u524D\u4EC5\u9650\u5B8C\u7F8E\u652F\u6301 LSPosed\uFF0C\u5176\u5B83 Xposed \u6846\u67B6\u9700\u8981\u964D\u7EA7\u6A21\u5757 API\u3002

    \u53EF\u80FD\u5B8C\u5168\u4E0D\u652F\u6301\u592A\u6781\uFF0C\u592A\u6781\u5728\u9AD8\u7248\u672C\u7CFB\u7EDF\u4E0A\u9700\u8981\u66F4\u4F4E\u7684 API \u624D\u80FD\u9002\u914D\u3002

    \u90E8\u5206 Xposed \u6A21\u5757\u5F00\u53D1\u8005\u76EE\u524D\u9009\u62E9 Hook \u76EE\u6807 APP \u5185\u7F6E Sp \u5B58\u50A8\u65B9\u6848\u89E3\u51B3\u6A21\u5757\u8BBE\u7F6E\u5171\u4EAB\u95EE\u9898\u3002

    \u540E\u671F Android \u7CFB\u7EDF\u7684\u6743\u9650\u5C06\u8D8A\u6765\u8D8A\u4E25\u683C\uFF0Cselinux \u5C31\u662F\u76EE\u524D\u9762\u4E34\u7684\u4E00\u4E2A\u5927\u95EE\u9898\uFF0C\u6709\u5F85\u8BA8\u8BBA\u548C\u7814\u7A76\u3002

    \u672A\u6765\u7684\u8BA1\u5212

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u53EF\u80FD\u4F1A\u5728\u540E\u671F\u6DFB\u52A0\u7684\u529F\u80FD\u3002

    \u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C

    \u5F85\u8BA8\u8BBA

    \u76EE\u524D API \u53EA\u652F\u6301\u901A\u8FC7\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7ED1\u5B9A\u5230 xposed_init\uFF0C\u82E5\u60A8\u4E0D\u559C\u6B22\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u4E00\u5B9A\u8981\u81EA\u5DF1\u5B9E\u73B0\u6A21\u5757\u88C5\u8F7D\u5165\u53E3\uFF0C\u672A\u6765\u4F1A\u6309\u7167\u9700\u6C42\u4EBA\u6570\u63A8\u51FA\u4EC5\u6709 API \u529F\u80FD\u7684 Lite \u7248\u672C\uFF0C\u4F60\u53EF\u5411\u6211\u4EEC\u63D0\u51FA issues\u3002

    API \u5DF2\u7ECF\u63D0\u4F9B\u4E86 Xposed \u539F\u751F API \u76D1\u542C\u63A5\u53E3\uFF0C\u4F60\u53EF\u4EE5 \u5728\u8FD9\u91CC \u627E\u5230\u6216\u67E5\u770B Demo \u7684\u5B9E\u73B0\u65B9\u6CD5\u3002

    \u652F\u6301\u66F4\u591A Hook Framework

    \u4F5C\u4E3A API \u6765\u8BB2\uFF0C\u76EE\u524D\u4EC5\u4EC5\u5BF9\u63A5 XposedBridge \u4F5C\u4E3A\u517C\u5BB9\u5C42\uFF0C\u8FD8\u662F\u6709\u4E00\u5B9A\u7684\u5C40\u9650\u6027\u3002

    \u5927\u90E8\u5206 inline hook \u6CA1\u6709 Java \u517C\u5BB9\u5C42\uFF0C\u540E\u671F\u53EF\u80FD\u4F1A\u8003\u8651 native hook \u7684 Java \u517C\u5BB9\u5C42\u9002\u914D\u3002

    ',17),i=[c];function t(s,h){return o(),a("div",null,i)}const p=e(r,[["render",t],["__file","future.html.vue"]]);export{p as default}; diff --git a/docs/assets/future.html.bd412eee.js b/docs/assets/future.html.dce8f5dd.js similarity index 97% rename from docs/assets/future.html.bd412eee.js rename to docs/assets/future.html.dce8f5dd.js index 729e96824..57fb0dd90 100644 --- a/docs/assets/future.html.bd412eee.js +++ b/docs/assets/future.html.dce8f5dd.js @@ -1 +1 @@ -import{_ as e,o,c as t,a as r}from"./app.a3fd8dd4.js";const a={},i=r('

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic handler.

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    ',17),s=[i];function n(d,u){return o(),t("div",null,s)}const h=e(a,[["render",n],["__file","future.html.vue"]]);export{h as default}; +import{_ as e,o,c as t,a as r}from"./app.2bc5d8f3.js";const a={},i=r('

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic handler.

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    ',17),s=[i];function n(d,u){return o(),t("div",null,s)}const h=e(a,[["render",n],["__file","future.html.vue"]]);export{h as default}; diff --git a/docs/assets/home.html.15dfed7b.js b/docs/assets/home.html.1a5ea523.js similarity index 99% rename from docs/assets/home.html.15dfed7b.js rename to docs/assets/home.html.1a5ea523.js index b8a1e3b8c..d5fc939db 100644 --- a/docs/assets/home.html.15dfed7b.js +++ b/docs/assets/home.html.1a5ea523.js @@ -1,4 +1,4 @@ -import{_ as i,r as o,o as p,c as d,b as s,d as l,w as a,e,a as r}from"./app.a3fd8dd4.js";const A={},u=s("h1",{id:"introduce",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#introduce","aria-hidden":"true"},"#"),e(" Introduce")],-1),y=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),e(" is an integrated Hook API Framework, which does not provide any Hook functions, and needs the support of Xposed related basic APIs.")])],-1),m=s("h2",{id:"background",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),e(" Background")],-1),h=s("p",null,[e("This is an efficient Hook API rebuilt based on the Xposed API using "),s("code",null,"Kotlin"),e(", and creates rich function extensions for the development of Xposed Modules.")],-1),D=e("The name is taken from "),C={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},B=e('"\u3082\u3082\u304F\u308A" heroine Yuki Kurihara'),b=e("."),_=e("Formerly the Innocent Xposed API used in "),v={href:"https://github.com/fankes/TMore",target:"_blank",rel:"noopener noreferrer"},F=e("Development Learning Project"),k=e(", now renamed and open sourced."),f=r('

    Usage

    YukiHookAPI is built entirely with Kotlin lambda syntax.

    Abandoning the original less friendly XposedHelpers, you can use it to easily create Xposed Modules and easily implement custom Hook API.

    Language Requirement

    Please use Kotlin, the framework part of the code composition is also compatible with Java but the implementation of the basic Hook scene may not work at all.

    All demo code in this document will be described using Kotlin, if you don't know how to use Kotlin then you may not be able to use YukiHookAPI.

    ',6),g=e("Part of the Java Demo code can be found "),H={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/java",target:"_blank",rel:"noopener noreferrer"},P=e("here"),w=e(", but not recommended."),I=r('

    Source of Inspiration

    Previously, when we built an Xposed Module, we first needed to create an xposed_init file under assets.

    Then, manually fill in your own entry class name into the file and use XposedHelpers to implement our Hook logic.

    Since Kotlin is the main Android development language, this API is really not very elegant to use.

    Is there any easy to use, light, elegant solution?

    With this idea, YukiHookAPI was born.

    Now, we only need to write a small amount of code, and all the time and expense are handed over to automation.

    With Kotlin's elegant lambda writing and YukiHookAPI, you can make your Hook logic more beautiful and clear.

    The following example

    ',9),X=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"@InjectYukiHookWithXposed")]),e(` +import{_ as i,r as o,o as p,c as d,b as s,d as l,w as a,e,a as r}from"./app.2bc5d8f3.js";const A={},u=s("h1",{id:"introduce",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#introduce","aria-hidden":"true"},"#"),e(" Introduce")],-1),y=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),e(" is an integrated Hook API Framework, which does not provide any Hook functions, and needs the support of Xposed related basic APIs.")])],-1),m=s("h2",{id:"background",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#background","aria-hidden":"true"},"#"),e(" Background")],-1),h=s("p",null,[e("This is an efficient Hook API rebuilt based on the Xposed API using "),s("code",null,"Kotlin"),e(", and creates rich function extensions for the development of Xposed Modules.")],-1),D=e("The name is taken from "),C={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},B=e('"\u3082\u3082\u304F\u308A" heroine Yuki Kurihara'),b=e("."),_=e("Formerly the Innocent Xposed API used in "),v={href:"https://github.com/fankes/TMore",target:"_blank",rel:"noopener noreferrer"},F=e("Development Learning Project"),k=e(", now renamed and open sourced."),f=r('

    Usage

    YukiHookAPI is built entirely with Kotlin lambda syntax.

    Abandoning the original less friendly XposedHelpers, you can use it to easily create Xposed Modules and easily implement custom Hook API.

    Language Requirement

    Please use Kotlin, the framework part of the code composition is also compatible with Java but the implementation of the basic Hook scene may not work at all.

    All demo code in this document will be described using Kotlin, if you don't know how to use Kotlin then you may not be able to use YukiHookAPI.

    ',6),g=e("Part of the Java Demo code can be found "),H={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/java",target:"_blank",rel:"noopener noreferrer"},P=e("here"),w=e(", but not recommended."),I=r('

    Source of Inspiration

    Previously, when we built an Xposed Module, we first needed to create an xposed_init file under assets.

    Then, manually fill in your own entry class name into the file and use XposedHelpers to implement our Hook logic.

    Since Kotlin is the main Android development language, this API is really not very elegant to use.

    Is there any easy to use, light, elegant solution?

    With this idea, YukiHookAPI was born.

    Now, we only need to write a small amount of code, and all the time and expense are handed over to automation.

    With Kotlin's elegant lambda writing and YukiHookAPI, you can make your Hook logic more beautiful and clear.

    The following example

    ',9),X=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"@InjectYukiHookWithXposed")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"object"),s("span",{style:{color:"#ADBAC7"}}," HookEntry "),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"IYukiHookXposedInit"),s("span",{style:{color:"#ADBAC7"}}," {")]),e(` `),s("span",{class:"line"}),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),e(` diff --git a/docs/assets/home.html.10832de6.js b/docs/assets/home.html.a2c9c928.js similarity index 99% rename from docs/assets/home.html.10832de6.js rename to docs/assets/home.html.a2c9c928.js index 2e2af859a..aa2790b3f 100644 --- a/docs/assets/home.html.10832de6.js +++ b/docs/assets/home.html.a2c9c928.js @@ -1,4 +1,4 @@ -import{_ as i,r as o,o as p,c as d,b as s,d as e,w as a,e as l,a as r}from"./app.a3fd8dd4.js";const A={},y=s("h1",{id:"\u4ECB\u7ECD",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4ECB\u7ECD","aria-hidden":"true"},"#"),l(" \u4ECB\u7ECD")],-1),u=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),l(" \u662F\u4E00\u4E2A\u96C6\u6210\u5316\u7684 Hook API \u6846\u67B6\uFF0C\u672C\u8EAB\u4E0D\u63D0\u4F9B\u4EFB\u4F55 Hook \u529F\u80FD\uFF0C\u9700\u8981 Xposed \u76F8\u5173\u57FA\u7840 API \u7684\u652F\u6301\u3002")])],-1),D=s("h2",{id:"\u80CC\u666F",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u80CC\u666F","aria-hidden":"true"},"#"),l(" \u80CC\u666F")],-1),m=s("p",null,[l("\u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 "),s("code",null,"Kotlin"),l(" \u57FA\u4E8E Xposed API \u91CD\u65B0\u6784\u5EFA\u7684\u9AD8\u6548 Hook API\uFF0C\u540C\u65F6\u4E3A Xposed \u6A21\u5757\u7684\u5F00\u53D1\u6253\u9020\u4E86\u4E30\u5BCC\u7684\u529F\u80FD\u6269\u5C55\u3002")],-1),C=l("\u540D\u79F0\u53D6\u81EA "),h={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},B=l("\u300A\u3082\u3082\u304F\u308A\u300B\u5973\u4E3B \u6817\u539F \u96EA(Yuki)"),_=l("\u3002"),b=l("\u524D\u8EAB\u4E3A "),v={href:"https://github.com/fankes/TMore",target:"_blank",rel:"noopener noreferrer"},F=l("\u5F00\u53D1\u5B66\u4E60\u9879\u76EE"),k=l(" \u4E2D\u4F7F\u7528\u7684 Innocent Xposed API\uFF0C\u73B0\u5728\u91CD\u65B0\u547D\u540D\u5E76\u5F00\u6E90\u3002"),f=r('

    \u7528\u9014

    YukiHookAPI \u5B8C\u5168\u91C7\u7528 Kotlin lambda \u8BED\u6CD5\u6784\u5EFA\u3002

    \u629B\u5F03\u539F\u59CB\u4E0D\u592A\u53CB\u597D\u7684 XposedHelpers\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5B83\u6765\u8F7B\u677E\u521B\u5EFA Xposed \u6A21\u5757\u4EE5\u53CA\u8F7B\u677E\u5B9E\u73B0\u81EA\u5B9A\u4E49 Hook API\u3002

    \u8BED\u8A00\u8981\u6C42

    \u8BF7\u4F7F\u7528 Kotlin\uFF0C\u6846\u67B6\u90E8\u5206\u4EE3\u7801\u6784\u6210\u540C\u6837\u517C\u5BB9 Java \u4F46\u57FA\u7840 Hook \u573A\u666F\u7684\u5B9E\u73B0\u53EF\u80FD\u5B8C\u5168\u65E0\u6CD5\u4F7F\u7528\u3002

    \u6587\u6863\u5168\u90E8\u7684 Demo \u793A\u4F8B\u4EE3\u7801\u90FD\u5C06\u4F7F\u7528 Kotlin \u8FDB\u884C\u63CF\u8FF0\uFF0C\u5982\u679C\u4F60\u5B8C\u5168\u4E0D\u4F1A\u4F7F\u7528 Kotlin \u90A3\u4F60\u5C06\u6709\u53EF\u80FD\u65E0\u6CD5\u4F7F\u7528 YukiHookAPI\u3002

    ',6),g=l("\u90E8\u5206 Java Demo \u4EE3\u7801\u53EF\u5728 "),H={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/java",target:"_blank",rel:"noopener noreferrer"},P=l("\u8FD9\u91CC"),I=l(" \u627E\u5230\uFF0C\u4F46\u4E0D\u63A8\u8350\u4F7F\u7528\u3002"),X=r('

    \u7075\u611F\u6765\u6E90

    \u4EE5\u524D\uFF0C\u6211\u4EEC\u5728\u6784\u5EFA Xposed \u6A21\u5757\u7684\u65F6\u5019\uFF0C\u9996\u5148\u9700\u8981\u5728 assets \u4E0B\u521B\u5EFA xposed_init \u6587\u4EF6\u3002

    \u7136\u540E\uFF0C\u5C06\u81EA\u5DF1\u7684\u5165\u53E3\u7C7B\u540D\u624B\u52A8\u586B\u5165\u6587\u4EF6\u4E2D\uFF0C\u4F7F\u7528 XposedHelpers \u53BB\u5B9E\u73B0\u6211\u4EEC\u7684 Hook \u903B\u8F91\u3002

    \u81EA Kotlin \u4F5C\u4E3A Android \u4E3B\u8981\u5F00\u53D1\u8BED\u8A00\u4EE5\u6765\uFF0C\u8FD9\u5957 API \u7528\u8D77\u6765\u786E\u5B9E\u5DF2\u7ECF\u4E0D\u662F\u5F88\u4F18\u96C5\u4E86\u3002

    \u6709\u6CA1\u6709\u4EC0\u4E48 \u597D\u7528\u3001\u8F7B\u91CF\u3001\u4F18\u96C5 \u7684\u89E3\u51B3\u529E\u6CD5\u5462\uFF1F

    \u672C\u7740\u8FD9\u6837\u7684\u60F3\u6CD5\uFF0CYukiHookAPI \u8BDE\u751F\u4E86\u3002

    \u73B0\u5728\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u7F16\u5199\u5C11\u91CF\u7684\u4EE3\u7801\uFF0C\u4E00\u5207\u65F6\u95F4\u5F00\u9500\u548C\u82B1\u8D39\u4EA4\u7ED9\u81EA\u52A8\u5316\u5904\u7406\u3002

    \u501F\u52A9 Kotlin \u4F18\u96C5\u7684 lambda \u5199\u6CD5\u4EE5\u53CA YukiHookAPI\uFF0C\u53EF\u4EE5\u8BA9\u4F60\u7684 Hook \u903B\u8F91\u66F4\u52A0\u7F8E\u89C2\u6E05\u6670\u3002

    \u793A\u4F8B\u5982\u4E0B

    ',9),Y=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"@InjectYukiHookWithXposed")]),l(` +import{_ as i,r as o,o as p,c as d,b as s,d as e,w as a,e as l,a as r}from"./app.2bc5d8f3.js";const A={},y=s("h1",{id:"\u4ECB\u7ECD",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u4ECB\u7ECD","aria-hidden":"true"},"#"),l(" \u4ECB\u7ECD")],-1),u=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),l(" \u662F\u4E00\u4E2A\u96C6\u6210\u5316\u7684 Hook API \u6846\u67B6\uFF0C\u672C\u8EAB\u4E0D\u63D0\u4F9B\u4EFB\u4F55 Hook \u529F\u80FD\uFF0C\u9700\u8981 Xposed \u76F8\u5173\u57FA\u7840 API \u7684\u652F\u6301\u3002")])],-1),D=s("h2",{id:"\u80CC\u666F",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u80CC\u666F","aria-hidden":"true"},"#"),l(" \u80CC\u666F")],-1),m=s("p",null,[l("\u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 "),s("code",null,"Kotlin"),l(" \u57FA\u4E8E Xposed API \u91CD\u65B0\u6784\u5EFA\u7684\u9AD8\u6548 Hook API\uFF0C\u540C\u65F6\u4E3A Xposed \u6A21\u5757\u7684\u5F00\u53D1\u6253\u9020\u4E86\u4E30\u5BCC\u7684\u529F\u80FD\u6269\u5C55\u3002")],-1),C=l("\u540D\u79F0\u53D6\u81EA "),h={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},B=l("\u300A\u3082\u3082\u304F\u308A\u300B\u5973\u4E3B \u6817\u539F \u96EA(Yuki)"),_=l("\u3002"),b=l("\u524D\u8EAB\u4E3A "),v={href:"https://github.com/fankes/TMore",target:"_blank",rel:"noopener noreferrer"},F=l("\u5F00\u53D1\u5B66\u4E60\u9879\u76EE"),k=l(" \u4E2D\u4F7F\u7528\u7684 Innocent Xposed API\uFF0C\u73B0\u5728\u91CD\u65B0\u547D\u540D\u5E76\u5F00\u6E90\u3002"),f=r('

    \u7528\u9014

    YukiHookAPI \u5B8C\u5168\u91C7\u7528 Kotlin lambda \u8BED\u6CD5\u6784\u5EFA\u3002

    \u629B\u5F03\u539F\u59CB\u4E0D\u592A\u53CB\u597D\u7684 XposedHelpers\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5B83\u6765\u8F7B\u677E\u521B\u5EFA Xposed \u6A21\u5757\u4EE5\u53CA\u8F7B\u677E\u5B9E\u73B0\u81EA\u5B9A\u4E49 Hook API\u3002

    \u8BED\u8A00\u8981\u6C42

    \u8BF7\u4F7F\u7528 Kotlin\uFF0C\u6846\u67B6\u90E8\u5206\u4EE3\u7801\u6784\u6210\u540C\u6837\u517C\u5BB9 Java \u4F46\u57FA\u7840 Hook \u573A\u666F\u7684\u5B9E\u73B0\u53EF\u80FD\u5B8C\u5168\u65E0\u6CD5\u4F7F\u7528\u3002

    \u6587\u6863\u5168\u90E8\u7684 Demo \u793A\u4F8B\u4EE3\u7801\u90FD\u5C06\u4F7F\u7528 Kotlin \u8FDB\u884C\u63CF\u8FF0\uFF0C\u5982\u679C\u4F60\u5B8C\u5168\u4E0D\u4F1A\u4F7F\u7528 Kotlin \u90A3\u4F60\u5C06\u6709\u53EF\u80FD\u65E0\u6CD5\u4F7F\u7528 YukiHookAPI\u3002

    ',6),g=l("\u90E8\u5206 Java Demo \u4EE3\u7801\u53EF\u5728 "),H={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/java",target:"_blank",rel:"noopener noreferrer"},P=l("\u8FD9\u91CC"),I=l(" \u627E\u5230\uFF0C\u4F46\u4E0D\u63A8\u8350\u4F7F\u7528\u3002"),X=r('

    \u7075\u611F\u6765\u6E90

    \u4EE5\u524D\uFF0C\u6211\u4EEC\u5728\u6784\u5EFA Xposed \u6A21\u5757\u7684\u65F6\u5019\uFF0C\u9996\u5148\u9700\u8981\u5728 assets \u4E0B\u521B\u5EFA xposed_init \u6587\u4EF6\u3002

    \u7136\u540E\uFF0C\u5C06\u81EA\u5DF1\u7684\u5165\u53E3\u7C7B\u540D\u624B\u52A8\u586B\u5165\u6587\u4EF6\u4E2D\uFF0C\u4F7F\u7528 XposedHelpers \u53BB\u5B9E\u73B0\u6211\u4EEC\u7684 Hook \u903B\u8F91\u3002

    \u81EA Kotlin \u4F5C\u4E3A Android \u4E3B\u8981\u5F00\u53D1\u8BED\u8A00\u4EE5\u6765\uFF0C\u8FD9\u5957 API \u7528\u8D77\u6765\u786E\u5B9E\u5DF2\u7ECF\u4E0D\u662F\u5F88\u4F18\u96C5\u4E86\u3002

    \u6709\u6CA1\u6709\u4EC0\u4E48 \u597D\u7528\u3001\u8F7B\u91CF\u3001\u4F18\u96C5 \u7684\u89E3\u51B3\u529E\u6CD5\u5462\uFF1F

    \u672C\u7740\u8FD9\u6837\u7684\u60F3\u6CD5\uFF0CYukiHookAPI \u8BDE\u751F\u4E86\u3002

    \u73B0\u5728\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u7F16\u5199\u5C11\u91CF\u7684\u4EE3\u7801\uFF0C\u4E00\u5207\u65F6\u95F4\u5F00\u9500\u548C\u82B1\u8D39\u4EA4\u7ED9\u81EA\u52A8\u5316\u5904\u7406\u3002

    \u501F\u52A9 Kotlin \u4F18\u96C5\u7684 lambda \u5199\u6CD5\u4EE5\u53CA YukiHookAPI\uFF0C\u53EF\u4EE5\u8BA9\u4F60\u7684 Hook \u903B\u8F91\u66F4\u52A0\u7F8E\u89C2\u6E05\u6670\u3002

    \u793A\u4F8B\u5982\u4E0B

    ',9),Y=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"@InjectYukiHookWithXposed")]),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"object"),s("span",{style:{color:"#ADBAC7"}}," HookEntry "),s("span",{style:{color:"#F47067"}},":"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#6CB6FF"}},"IYukiHookXposedInit"),s("span",{style:{color:"#ADBAC7"}}," {")]),l(` `),s("span",{class:"line"}),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),l(` diff --git a/docs/assets/home.html.b39a289b.js b/docs/assets/home.html.bcbc85a8.js similarity index 97% rename from docs/assets/home.html.b39a289b.js rename to docs/assets/home.html.bcbc85a8.js index 89167670a..a7f17f39a 100644 --- a/docs/assets/home.html.b39a289b.js +++ b/docs/assets/home.html.bcbc85a8.js @@ -1 +1 @@ -import{_ as e,o,c as t,a as i}from"./app.a3fd8dd4.js";const n={},d=i('

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiHookAPI as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt \xA0Kotlin Static File

    • annotation \xA0Annotation Class

    • interface \xA0Interface Class

    • object \xA0Class (Singleton)

    • class \xA0Class

    • field \xA0Field or get / set method or read-only get method

    • method \xA0Method

    • enum \xA0Enum constant

    • ext-field \xA0Extension field (global)

    • ext-method \xA0Extension method (global)

    • i-ext-field \xA0Extension field (internal)

    • i-ext-method \xA0Extension method (internal)

    ',14),a=[d];function c(r,l){return o(),t("div",null,a)}const p=e(n,[["render",c],["__file","home.html.vue"]]);export{p as default}; +import{_ as e,o,c as t,a as i}from"./app.2bc5d8f3.js";const n={},d=i('

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiHookAPI as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt \xA0Kotlin Static File

    • annotation \xA0Annotation Class

    • interface \xA0Interface Class

    • object \xA0Class (Singleton)

    • class \xA0Class

    • field \xA0Field or get / set method or read-only get method

    • method \xA0Method

    • enum \xA0Enum constant

    • ext-field \xA0Extension field (global)

    • ext-method \xA0Extension method (global)

    • i-ext-field \xA0Extension field (internal)

    • i-ext-method \xA0Extension method (internal)

    ',14),a=[d];function c(r,l){return o(),t("div",null,a)}const p=e(n,[["render",c],["__file","home.html.vue"]]);export{p as default}; diff --git a/docs/assets/home.html.7711e001.js b/docs/assets/home.html.d99be1b1.js similarity index 98% rename from docs/assets/home.html.7711e001.js rename to docs/assets/home.html.d99be1b1.js index cb9d15290..26da6bb20 100644 --- a/docs/assets/home.html.7711e001.js +++ b/docs/assets/home.html.d99be1b1.js @@ -1 +1 @@ -import{_ as e,o,c as i,a as d}from"./app.a3fd8dd4.js";const c={},t=d('

    \u6587\u6863\u4ECB\u7ECD

    \u8FD9\u91CC\u7684\u6587\u6863\u5C06\u540C\u6B65\u6700\u65B0 API \u7248\u672C\u7684\u76F8\u5173\u7528\u6CD5\uFF0C\u8BF7\u4FDD\u6301 YukiHookAPI \u4E3A\u6700\u65B0\u7248\u672C\u4EE5\u4F7F\u7528\u6700\u65B0\u7248\u672C\u7684\u529F\u80FD\u3002

    \u529F\u80FD\u63CF\u8FF0\u8BF4\u660E

    \u529F\u80FD\u63CF\u8FF0\u4E3B\u8981\u4ECB\u7ECD\u5F53\u524D API \u7684\u76F8\u5173\u7528\u6CD5\u548C\u7528\u9014\u3002

    \u529F\u80FD\u793A\u4F8B\u8BF4\u660E

    \u529F\u80FD\u793A\u4F8B\u4E3B\u8981\u5C55\u793A\u4E86\u5F53\u524D API \u7684\u57FA\u672C\u7528\u6CD5\u793A\u4F8B\uFF0C\u53EF\u4F9B\u53C2\u8003\u3002

    \u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E

    \u9996\u4E2A\u7248\u672C\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u6DFB\u52A0\uFF1B

    \u540E\u671F\u65B0\u589E\u52A0\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u65B0\u589E\uFF1B

    \u540E\u671F\u4FEE\u6539\u7684\u529F\u80FD\u5C06\u88AB\u8FFD\u52A0\u4E3A v<version> \u4FEE\u6539\uFF1B

    \u540E\u671F\u88AB\u4F5C\u5E9F\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u4F5C\u5E9F \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\uFF1B

    \u540E\u671F\u88AB\u5220\u9664\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u79FB\u9664 \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\u3002

    \u76F8\u5173\u7B26\u53F7\u8BF4\u660E

    • kt \xA0Kotlin Static File

    • annotation \xA0\u6CE8\u89E3

    • interface \xA0\u63A5\u53E3

    • object \xA0\u7C7B (\u5355\u4F8B)

    • class \xA0\u7C7B

    • field \xA0\u53D8\u91CF\u6216 get\u3001set \u65B9\u6CD5\u6216\u53EA\u8BFB\u7684 get \u65B9\u6CD5

    • method \xA0\u65B9\u6CD5

    • enum \xA0Enum \u5E38\u91CF

    • ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u5168\u5C40)

    • ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u5168\u5C40)

    • i-ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u8C03\u7528\u57DF\u9650\u5236)

    • i-ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u8C03\u7528\u57DF\u9650\u5236)

    ',14),a=[t];function l(p,r){return o(),i("div",null,a)}const n=e(c,[["render",l],["__file","home.html.vue"]]);export{n as default}; +import{_ as e,o,c as i,a as d}from"./app.2bc5d8f3.js";const c={},t=d('

    \u6587\u6863\u4ECB\u7ECD

    \u8FD9\u91CC\u7684\u6587\u6863\u5C06\u540C\u6B65\u6700\u65B0 API \u7248\u672C\u7684\u76F8\u5173\u7528\u6CD5\uFF0C\u8BF7\u4FDD\u6301 YukiHookAPI \u4E3A\u6700\u65B0\u7248\u672C\u4EE5\u4F7F\u7528\u6700\u65B0\u7248\u672C\u7684\u529F\u80FD\u3002

    \u529F\u80FD\u63CF\u8FF0\u8BF4\u660E

    \u529F\u80FD\u63CF\u8FF0\u4E3B\u8981\u4ECB\u7ECD\u5F53\u524D API \u7684\u76F8\u5173\u7528\u6CD5\u548C\u7528\u9014\u3002

    \u529F\u80FD\u793A\u4F8B\u8BF4\u660E

    \u529F\u80FD\u793A\u4F8B\u4E3B\u8981\u5C55\u793A\u4E86\u5F53\u524D API \u7684\u57FA\u672C\u7528\u6CD5\u793A\u4F8B\uFF0C\u53EF\u4F9B\u53C2\u8003\u3002

    \u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E

    \u9996\u4E2A\u7248\u672C\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u6DFB\u52A0\uFF1B

    \u540E\u671F\u65B0\u589E\u52A0\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u65B0\u589E\uFF1B

    \u540E\u671F\u4FEE\u6539\u7684\u529F\u80FD\u5C06\u88AB\u8FFD\u52A0\u4E3A v<version> \u4FEE\u6539\uFF1B

    \u540E\u671F\u88AB\u4F5C\u5E9F\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u4F5C\u5E9F \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\uFF1B

    \u540E\u671F\u88AB\u5220\u9664\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u79FB\u9664 \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\u3002

    \u76F8\u5173\u7B26\u53F7\u8BF4\u660E

    • kt \xA0Kotlin Static File

    • annotation \xA0\u6CE8\u89E3

    • interface \xA0\u63A5\u53E3

    • object \xA0\u7C7B (\u5355\u4F8B)

    • class \xA0\u7C7B

    • field \xA0\u53D8\u91CF\u6216 get\u3001set \u65B9\u6CD5\u6216\u53EA\u8BFB\u7684 get \u65B9\u6CD5

    • method \xA0\u65B9\u6CD5

    • enum \xA0Enum \u5E38\u91CF

    • ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u5168\u5C40)

    • ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u5168\u5C40)

    • i-ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u8C03\u7528\u57DF\u9650\u5236)

    • i-ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u8C03\u7528\u57DF\u9650\u5236)

    ',14),a=[t];function l(p,r){return o(),i("div",null,a)}const n=e(c,[["render",l],["__file","home.html.vue"]]);export{n as default}; diff --git a/docs/assets/host-inject.html.7ded4afb.js b/docs/assets/host-inject.html.9a179ae5.js similarity index 99% rename from docs/assets/host-inject.html.7ded4afb.js rename to docs/assets/host-inject.html.9a179ae5.js index 370fa96a6..d07043b1a 100644 --- a/docs/assets/host-inject.html.7ded4afb.js +++ b/docs/assets/host-inject.html.9a179ae5.js @@ -1,4 +1,4 @@ -import{_ as e,r as o,o as p,c,b as s,d as i,a,e as n}from"./app.a3fd8dd4.js";const t={},r=a(`

    \u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55

    \u8FD9\u662F\u4E00\u4E2A\u5C06\u6A21\u5757\u8D44\u6E90\u3001Activity \u7EC4\u4EF6\u4EE5\u53CA Context \u4E3B\u9898\u6CE8\u5165\u5230\u5BBF\u4E3B\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5728\u4F7F\u7528\u4EE5\u4E0B\u529F\u80FD\u4E4B\u524D\uFF0C\u4E3A\u9632\u6B62\u8D44\u6E90 ID \u4E92\u76F8\u51B2\u7A81\uFF0C\u4F60\u9700\u8981\u5728\u5F53\u524D Xposed \u6A21\u5757\u9879\u76EE\u7684 build.gradle \u4E2D\u4FEE\u6539\u8D44\u6E90 ID\u3002

    • Kotlin Gradle DSL
    android {
    +import{_ as e,r as o,o as p,c,b as s,d as i,a,e as n}from"./app.2bc5d8f3.js";const t={},r=a(`

    \u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55

    \u8FD9\u662F\u4E00\u4E2A\u5C06\u6A21\u5757\u8D44\u6E90\u3001Activity \u7EC4\u4EF6\u4EE5\u53CA Context \u4E3B\u9898\u6CE8\u5165\u5230\u5BBF\u4E3B\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5728\u4F7F\u7528\u4EE5\u4E0B\u529F\u80FD\u4E4B\u524D\uFF0C\u4E3A\u9632\u6B62\u8D44\u6E90 ID \u4E92\u76F8\u51B2\u7A81\uFF0C\u4F60\u9700\u8981\u5728\u5F53\u524D Xposed \u6A21\u5757\u9879\u76EE\u7684 build.gradle \u4E2D\u4FEE\u6539\u8D44\u6E90 ID\u3002

    • Kotlin Gradle DSL
    android {
         androidResources.additionalParameters("--allow-reserved-package-id", "--package-id", "0x64")
     }
     
    • Groovy
    android {
    diff --git a/docs/assets/host-inject.html.006ffd64.js b/docs/assets/host-inject.html.f40cf853.js
    similarity index 99%
    rename from docs/assets/host-inject.html.006ffd64.js
    rename to docs/assets/host-inject.html.f40cf853.js
    index 9829fd608..87af15d8a 100644
    --- a/docs/assets/host-inject.html.006ffd64.js
    +++ b/docs/assets/host-inject.html.f40cf853.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as o,o as p,c as t,b as s,d as i,a as n,e}from"./app.a3fd8dd4.js";const c={},r=n(`

    Host Resource Injection Extension

    This is an extension that injects Module App's Resources, Activity components, and Context topics into the Host App.

    Before using the following functions, in order to prevent Resource Id from conflicting with each other, you need to modify the Resource Id in the build.gradle of the current Xposed Module project.

    • Kotlin Gradle DSL
    android {
    +import{_ as l,r as o,o as p,c as t,b as s,d as i,a as n,e}from"./app.2bc5d8f3.js";const c={},r=n(`

    Host Resource Injection Extension

    This is an extension that injects Module App's Resources, Activity components, and Context topics into the Host App.

    Before using the following functions, in order to prevent Resource Id from conflicting with each other, you need to modify the Resource Id in the build.gradle of the current Xposed Module project.

    • Kotlin Gradle DSL
    android {
         androidResources.additionalParameters("--allow-reserved-package-id", "--package-id", "0x64")
     }
     
    • Groovy
    android {
    diff --git a/docs/assets/host-lifecycle.html.a7f19a5a.js b/docs/assets/host-lifecycle.html.1f3fa27f.js
    similarity index 99%
    rename from docs/assets/host-lifecycle.html.a7f19a5a.js
    rename to docs/assets/host-lifecycle.html.1f3fa27f.js
    index cb34d8abb..378e55fbb 100644
    --- a/docs/assets/host-lifecycle.html.a7f19a5a.js
    +++ b/docs/assets/host-lifecycle.html.1f3fa27f.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},p=l(`

    \u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8 Hook \u5BBF\u4E3B APP \u751F\u547D\u5468\u671F\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u76D1\u542C\u751F\u547D\u5468\u671F

    \u901A\u8FC7\u81EA\u52A8\u5316 Hook \u5BBF\u4E3B APP \u7684\u751F\u547D\u5468\u671F\u65B9\u6CD5\uFF0C\u6765\u5B9E\u73B0\u76D1\u542C\u529F\u80FD\u3002

    \u6211\u4EEC\u9700\u8981\u76D1\u542C\u5BBF\u4E3B Application \u7684\u542F\u52A8\u548C\u751F\u547D\u5468\u671F\u65B9\u6CD5\uFF0C\u53EA\u9700\u8981\u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadApp(name = "com.example.demo") {
    +import{_ as s,o as n,c as a,a as l}from"./app.2bc5d8f3.js";const e={},p=l(`

    \u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8 Hook \u5BBF\u4E3B APP \u751F\u547D\u5468\u671F\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u76D1\u542C\u751F\u547D\u5468\u671F

    \u901A\u8FC7\u81EA\u52A8\u5316 Hook \u5BBF\u4E3B APP \u7684\u751F\u547D\u5468\u671F\u65B9\u6CD5\uFF0C\u6765\u5B9E\u73B0\u76D1\u542C\u529F\u80FD\u3002

    \u6211\u4EEC\u9700\u8981\u76D1\u542C\u5BBF\u4E3B Application \u7684\u542F\u52A8\u548C\u751F\u547D\u5468\u671F\u65B9\u6CD5\uFF0C\u53EA\u9700\u8981\u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadApp(name = "com.example.demo") {
         // \u6CE8\u518C\u751F\u547D\u5468\u671F\u76D1\u542C
         // \u53EF\u9009\u53C2\u6570\uFF1A\u4F60\u53EF\u4EE5\u8BBE\u7F6E isOnFailureThrowToApp = false \u4F7F\u5F97\u5176\u4E2D\u7684\u5F02\u5E38\u4E0D\u4F1A\u629B\u51FA\u7ED9\u5BBF\u4E3B\u9632\u6B62\u5BBF\u4E3B\u5D29\u6E83\uFF0C\u9ED8\u8BA4\u4E3A true
         onAppLifecycle(isOnFailureThrowToApp = true) {
    diff --git a/docs/assets/host-lifecycle.html.cf7c23b2.js b/docs/assets/host-lifecycle.html.4f5dc1ba.js
    similarity index 99%
    rename from docs/assets/host-lifecycle.html.cf7c23b2.js
    rename to docs/assets/host-lifecycle.html.4f5dc1ba.js
    index f93eb98f7..f0e34d220 100644
    --- a/docs/assets/host-lifecycle.html.cf7c23b2.js
    +++ b/docs/assets/host-lifecycle.html.4f5dc1ba.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.a3fd8dd4.js";const l={},p=a(`

    Host Lifecycle Extension

    This is an extension of the lifecycle of an automatic hooking Host App.

    Listener Lifecycle

    Implement the listening function by automating the lifecycle method of the Host App.

    We need to listen to the startup and lifecycle methods of the Host App's Application, just use the following methods.

    The following example

    loadApp(name = "com.example.demo") {
    +import{_ as s,o as n,c as e,a}from"./app.2bc5d8f3.js";const l={},p=a(`

    Host Lifecycle Extension

    This is an extension of the lifecycle of an automatic hooking Host App.

    Listener Lifecycle

    Implement the listening function by automating the lifecycle method of the Host App.

    We need to listen to the startup and lifecycle methods of the Host App's Application, just use the following methods.

    The following example

    loadApp(name = "com.example.demo") {
         // Register lifecycle listeners
         // Optional parameter:
         // You can set isOnFailureThrowToApp = false
    diff --git a/docs/assets/index.html.7156b7de.js b/docs/assets/index.html.69699e6b.js
    similarity index 63%
    rename from docs/assets/index.html.7156b7de.js
    rename to docs/assets/index.html.69699e6b.js
    index 0f616affe..6c68d5a47 100644
    --- a/docs/assets/index.html.7156b7de.js
    +++ b/docs/assets/index.html.69699e6b.js
    @@ -1 +1 @@
    -import{_ as e,o as c,c as t}from"./app.a3fd8dd4.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default};
    +import{_ as e,o as c,c as t}from"./app.2bc5d8f3.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default};
    diff --git a/docs/assets/index.html.bf6afa04.js b/docs/assets/index.html.812a0472.js
    similarity index 98%
    rename from docs/assets/index.html.bf6afa04.js
    rename to docs/assets/index.html.812a0472.js
    index c5c4a70df..f392f5aa8 100644
    --- a/docs/assets/index.html.bf6afa04.js
    +++ b/docs/assets/index.html.812a0472.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},p=l(`

    All Hook process in one step, everything is simplified

    loadApp(name = "com.android.browser") {
    +import{_ as s,o as n,c as a,a as l}from"./app.2bc5d8f3.js";const e={},p=l(`

    All Hook process in one step, everything is simplified

    loadApp(name = "com.android.browser") {
         ActivityClass.hook {
             injectMember {
                 method {
    diff --git a/docs/assets/index.html.1a209ee5.js b/docs/assets/index.html.a8b2ff74.js
    similarity index 98%
    rename from docs/assets/index.html.1a209ee5.js
    rename to docs/assets/index.html.a8b2ff74.js
    index 2ca4a8d3a..43e3174d5 100644
    --- a/docs/assets/index.html.1a209ee5.js
    +++ b/docs/assets/index.html.a8b2ff74.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},p=l(`

    \u6240\u6709 Hook \u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D\uFF0C\u62D2\u7EDD\u7E41\u7410

    loadApp(name = "com.android.browser") {
    +import{_ as s,o as n,c as a,a as l}from"./app.2bc5d8f3.js";const e={},p=l(`

    \u6240\u6709 Hook \u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D\uFF0C\u62D2\u7EDD\u7E41\u7410

    loadApp(name = "com.android.browser") {
         ActivityClass.hook {
             injectMember {
                 method {
    diff --git a/docs/assets/knowledge.html.86105dad.js b/docs/assets/knowledge.html.327dbcd4.js
    similarity index 99%
    rename from docs/assets/knowledge.html.86105dad.js
    rename to docs/assets/knowledge.html.327dbcd4.js
    index 5c6023ce6..21bfcab53 100644
    --- a/docs/assets/knowledge.html.86105dad.js
    +++ b/docs/assets/knowledge.html.327dbcd4.js
    @@ -1,4 +1,4 @@
    -import{_ as a,r,o as i,c as d,b as e,d as s,a as n,e as o}from"./app.a3fd8dd4.js";const l={},p=n(`

    Basic Knowledge

    Here is a collection of Xposed-related introductions and the key points of knowledge that need to be grasped before start.

    Anyone who already knows can skip it.

    The basic knowledge content not necessarily completely accurate, please read it according to your own opinion.

    If you find any errors in this page, please correct it and help us improve.

    Here's an introduction to Xposed and how Hooks work.

    What is Xposed

    Xposed Framework is a set of open source framework services that run in Android high-privilege mode. It can affect program operation (modify the system) without modifying the APK file. Based on it, many Powerful modules that operate simultaneously without conflicting functions.

    The above content is copied from Baidu Encyclopedia.

    What can Xposed do

    The structure below describes the basic workings and principles of Xposed.

    Xposed Framework
    +import{_ as a,r,o as i,c as d,b as e,d as s,a as n,e as o}from"./app.2bc5d8f3.js";const l={},p=n(`

    Basic Knowledge

    Here is a collection of Xposed-related introductions and the key points of knowledge that need to be grasped before start.

    Anyone who already knows can skip it.

    The basic knowledge content not necessarily completely accurate, please read it according to your own opinion.

    If you find any errors in this page, please correct it and help us improve.

    Here's an introduction to Xposed and how Hooks work.

    What is Xposed

    Xposed Framework is a set of open source framework services that run in Android high-privilege mode. It can affect program operation (modify the system) without modifying the APK file. Based on it, many Powerful modules that operate simultaneously without conflicting functions.

    The above content is copied from Baidu Encyclopedia.

    What can Xposed do

    The structure below describes the basic workings and principles of Xposed.

    Xposed Framework
     \u2514\u2500\u2500 App's Environment
         \u2514\u2500\u2500 Hooker (Hooked)
             ...
    diff --git a/docs/assets/knowledge.html.26fd732a.js b/docs/assets/knowledge.html.6d3aedf3.js
    similarity index 98%
    rename from docs/assets/knowledge.html.26fd732a.js
    rename to docs/assets/knowledge.html.6d3aedf3.js
    index ec3940417..f22a20268 100644
    --- a/docs/assets/knowledge.html.26fd732a.js
    +++ b/docs/assets/knowledge.html.6d3aedf3.js
    @@ -1,4 +1,4 @@
    -import{_ as t,r,o as p,c as d,b as o,d as n,a,e}from"./app.a3fd8dd4.js";const l={},c=a(`

    \u57FA\u7840\u77E5\u8BC6

    \u8FD9\u91CC\u6536\u96C6\u4E86 Xposed \u76F8\u5173\u7684\u4ECB\u7ECD\u4EE5\u53CA\u5F00\u542F\u524D\u9700\u8981\u638C\u63E1\u7684\u77E5\u8BC6\u8981\u70B9\uFF0C\u5DF2\u7ECF\u4E86\u89E3\u7684\u540C\u5B66\u53EF\u4EE5\u7565\u8FC7\u3002

    \u57FA\u7840\u77E5\u8BC6\u5185\u5BB9\u5E76\u4E0D\u4E00\u5B9A\u5B8C\u5168\u51C6\u786E\uFF0C\u8BF7\u6839\u636E\u81EA\u5DF1\u7684\u89C1\u89E3\u914C\u60C5\u9605\u8BFB\uFF0C\u82E5\u53D1\u73B0\u5185\u5BB9\u6709\u9519\u8BEF\u6B22\u8FCE\u6307\u6B63\u5E76\u5E2E\u52A9\u6211\u4EEC\u5B8C\u5584\u548C\u6539\u8FDB\u3002

    \u76F8\u5173\u4ECB\u7ECD

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 Xposed \u4EE5\u53CA Hook \u7684\u5DE5\u4F5C\u539F\u7406\u3002

    Xposed \u662F\u4EC0\u4E48

    Xposed \u6846\u67B6 (Xposed Framework) \u662F\u4E00\u5957\u5F00\u6E90\u7684\u3001\u5728 Android \u9AD8\u6743\u9650\u6A21\u5F0F\u4E0B\u8FD0\u884C\u7684\u6846\u67B6\u670D\u52A1\uFF0C\u53EF\u4EE5\u5728\u4E0D\u4FEE\u6539 APK \u6587\u4EF6\u7684\u60C5\u51B5\u4E0B\u5F71\u54CD\u7A0B\u5E8F\u8FD0\u884C\uFF08\u4FEE\u6539\u7CFB\u7EDF\uFF09\u7684\u6846\u67B6\u670D\u52A1\uFF0C\u57FA\u4E8E\u5B83\u53EF\u4EE5\u5236\u4F5C\u51FA\u8BB8\u591A\u529F\u80FD\u5F3A\u5927\u7684\u6A21\u5757\uFF0C\u4E14\u5728\u529F\u80FD\u4E0D\u51B2\u7A81\u7684\u60C5\u51B5\u4E0B\u540C\u65F6\u8FD0\u4F5C\u3002

    \u4E0A\u8FF0\u5185\u5BB9\u590D\u5236\u81EA\u767E\u5EA6\u767E\u79D1\u3002

    Xposed \u80FD\u505A\u4EC0\u4E48

    \u4E0B\u65B9\u7684\u7ED3\u6784\u63CF\u8FF0\u4E86 Xposed \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u548C\u539F\u7406\u3002

    Xposed Framework
    +import{_ as t,r,o as p,c as d,b as o,d as n,a,e}from"./app.2bc5d8f3.js";const l={},c=a(`

    \u57FA\u7840\u77E5\u8BC6

    \u8FD9\u91CC\u6536\u96C6\u4E86 Xposed \u76F8\u5173\u7684\u4ECB\u7ECD\u4EE5\u53CA\u5F00\u542F\u524D\u9700\u8981\u638C\u63E1\u7684\u77E5\u8BC6\u8981\u70B9\uFF0C\u5DF2\u7ECF\u4E86\u89E3\u7684\u540C\u5B66\u53EF\u4EE5\u7565\u8FC7\u3002

    \u57FA\u7840\u77E5\u8BC6\u5185\u5BB9\u5E76\u4E0D\u4E00\u5B9A\u5B8C\u5168\u51C6\u786E\uFF0C\u8BF7\u6839\u636E\u81EA\u5DF1\u7684\u89C1\u89E3\u914C\u60C5\u9605\u8BFB\uFF0C\u82E5\u53D1\u73B0\u5185\u5BB9\u6709\u9519\u8BEF\u6B22\u8FCE\u6307\u6B63\u5E76\u5E2E\u52A9\u6211\u4EEC\u5B8C\u5584\u548C\u6539\u8FDB\u3002

    \u76F8\u5173\u4ECB\u7ECD

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 Xposed \u4EE5\u53CA Hook \u7684\u5DE5\u4F5C\u539F\u7406\u3002

    Xposed \u662F\u4EC0\u4E48

    Xposed \u6846\u67B6 (Xposed Framework) \u662F\u4E00\u5957\u5F00\u6E90\u7684\u3001\u5728 Android \u9AD8\u6743\u9650\u6A21\u5F0F\u4E0B\u8FD0\u884C\u7684\u6846\u67B6\u670D\u52A1\uFF0C\u53EF\u4EE5\u5728\u4E0D\u4FEE\u6539 APK \u6587\u4EF6\u7684\u60C5\u51B5\u4E0B\u5F71\u54CD\u7A0B\u5E8F\u8FD0\u884C\uFF08\u4FEE\u6539\u7CFB\u7EDF\uFF09\u7684\u6846\u67B6\u670D\u52A1\uFF0C\u57FA\u4E8E\u5B83\u53EF\u4EE5\u5236\u4F5C\u51FA\u8BB8\u591A\u529F\u80FD\u5F3A\u5927\u7684\u6A21\u5757\uFF0C\u4E14\u5728\u529F\u80FD\u4E0D\u51B2\u7A81\u7684\u60C5\u51B5\u4E0B\u540C\u65F6\u8FD0\u4F5C\u3002

    \u4E0A\u8FF0\u5185\u5BB9\u590D\u5236\u81EA\u767E\u5EA6\u767E\u79D1\u3002

    Xposed \u80FD\u505A\u4EC0\u4E48

    \u4E0B\u65B9\u7684\u7ED3\u6784\u63CF\u8FF0\u4E86 Xposed \u7684\u57FA\u672C\u5DE5\u4F5C\u65B9\u5F0F\u548C\u539F\u7406\u3002

    Xposed Framework
     \u2514\u2500\u2500 App's Environment
         \u2514\u2500\u2500 Hooker (Hooked)
             ...
    diff --git a/docs/assets/logger.html.e816121a.js b/docs/assets/logger.html.5e9b0359.js
    similarity index 99%
    rename from docs/assets/logger.html.e816121a.js
    rename to docs/assets/logger.html.5e9b0359.js
    index a4d0426de..3083165a4 100644
    --- a/docs/assets/logger.html.e816121a.js
    +++ b/docs/assets/logger.html.5e9b0359.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

    Debug Logs

    Log is the most important part of the debugging process, YukiHookAPI encapsulates a set of stable and efficient debugging log functions for developers.

    Normal Logs

    You can call loggerD, loggerI, loggerW to print normal logs to the console.

    The usage method is as follows.

    The following example

    loggerD(msg = "This is a log")
    +import{_ as s,o as e,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

    Debug Logs

    Log is the most important part of the debugging process, YukiHookAPI encapsulates a set of stable and efficient debugging log functions for developers.

    Normal Logs

    You can call loggerD, loggerI, loggerW to print normal logs to the console.

    The usage method is as follows.

    The following example

    loggerD(msg = "This is a log")
     

    At this ponit, YukiHookAPI will call android.util.Log and log function in (Xposed) Host environment to print this log at the same time.

    The default TAG of the log is the value you set in YukiHookLogger.Configs.tag.

    You can also customize this value dynamically, but it is not recommended to modify TAG easily to prevent logs from being filtered.

    The following example

    loggerD(tag = "YukiHookAPI", msg = "This is a log")
     

    The printed result is as shown below.

    The following example

    [YukiHookAPI][D][host package name]--> This is a log
     

    You can also use LoggerType to customize the type of log printing.

    You can choose to use android.util.Log or the log function in the (Xposed) Host environment to print logs.

    The default type is LoggerType.BOTH, which means that both methods are used to print logs.

    For example we only use android.util.Log to print logs.

    The following example

    loggerD(tag = "YukiHookAPI", msg = "This is a log", type = LoggerType.LOGD)
    diff --git a/docs/assets/logger.html.bbc7faa3.js b/docs/assets/logger.html.ee8a0684.js
    similarity index 99%
    rename from docs/assets/logger.html.bbc7faa3.js
    rename to docs/assets/logger.html.ee8a0684.js
    index cbc4d965c..587604a3b 100644
    --- a/docs/assets/logger.html.bbc7faa3.js
    +++ b/docs/assets/logger.html.ee8a0684.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.a3fd8dd4.js";const e={},l=n(`

    \u8C03\u8BD5\u65E5\u5FD7

    \u65E5\u5FD7\u662F\u8C03\u8BD5\u8FC7\u7A0B\u6700\u91CD\u8981\u7684\u4E00\u73AF\uFF0CYukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u7A33\u5B9A\u9AD8\u6548\u7684\u8C03\u8BD5\u65E5\u5FD7\u529F\u80FD\u3002

    \u666E\u901A\u65E5\u5FD7

    \u4F60\u53EF\u4EE5\u8C03\u7528 loggerD\u3001loggerI\u3001loggerW \u6765\u5411\u63A7\u5236\u53F0\u6253\u5370\u666E\u901A\u65E5\u5FD7\u3002

    \u4F7F\u7528\u65B9\u6CD5\u5982\u4E0B\u6240\u793A\u3002

    \u793A\u4F8B\u5982\u4E0B

    loggerD(msg = "This is a log")
    +import{_ as s,o as a,c as o,a as n}from"./app.2bc5d8f3.js";const e={},l=n(`

    \u8C03\u8BD5\u65E5\u5FD7

    \u65E5\u5FD7\u662F\u8C03\u8BD5\u8FC7\u7A0B\u6700\u91CD\u8981\u7684\u4E00\u73AF\uFF0CYukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u7A33\u5B9A\u9AD8\u6548\u7684\u8C03\u8BD5\u65E5\u5FD7\u529F\u80FD\u3002

    \u666E\u901A\u65E5\u5FD7

    \u4F60\u53EF\u4EE5\u8C03\u7528 loggerD\u3001loggerI\u3001loggerW \u6765\u5411\u63A7\u5236\u53F0\u6253\u5370\u666E\u901A\u65E5\u5FD7\u3002

    \u4F7F\u7528\u65B9\u6CD5\u5982\u4E0B\u6240\u793A\u3002

    \u793A\u4F8B\u5982\u4E0B

    loggerD(msg = "This is a log")
     

    \u6B64\u65F6\uFF0CYukiHookAPI \u4F1A\u8C03\u7528 android.util.Log \u4E0E (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u7684\u65E5\u5FD7\u529F\u80FD\u540C\u65F6\u6253\u5370\u8FD9\u6761\u65E5\u5FD7\u3002

    \u65E5\u5FD7\u9ED8\u8BA4\u7684 TAG \u4E3A\u4F60\u5728 YukiHookLogger.Configs.tag \u4E2D\u8BBE\u7F6E\u7684\u503C\u3002

    \u4F60\u4E5F\u53EF\u4EE5\u52A8\u6001\u81EA\u5B9A\u4E49\u8FD9\u4E2A\u503C\uFF0C\u4F46\u662F\u4E0D\u5EFA\u8BAE\u8F7B\u6613\u4FEE\u6539 TAG \u9632\u6B62\u8FC7\u6EE4\u4E0D\u5230\u65E5\u5FD7\u3002

    \u793A\u4F8B\u5982\u4E0B

    loggerD(tag = "YukiHookAPI", msg = "This is a log")
     

    \u6253\u5370\u7684\u7ED3\u679C\u4E3A\u5982\u4E0B\u6240\u793A\u3002

    \u793A\u4F8B\u5982\u4E0B

    [YukiHookAPI][D][\u5BBF\u4E3B\u5305\u540D]--> This is a log
     

    \u4F60\u8FD8\u53EF\u4EE5\u4F7F\u7528 LoggerType \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370\u7684\u7C7B\u578B\uFF0C\u53EF\u9009\u62E9\u4F7F\u7528 android.util.Log \u8FD8\u662F (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u7684\u65E5\u5FD7\u529F\u80FD\u6765\u6253\u5370\u65E5\u5FD7\u3002

    \u9ED8\u8BA4\u7C7B\u578B\u4E3A LoggerType.BOTH\uFF0C\u542B\u4E49\u4E3A\u540C\u65F6\u4F7F\u7528\u8FD9\u4E24\u4E2A\u65B9\u6CD5\u6765\u6253\u5370\u65E5\u5FD7\u3002

    \u6BD4\u5982\u6211\u4EEC\u4EC5\u4F7F\u7528 android.util.Log \u6765\u6253\u5370\u65E5\u5FD7\u3002

    \u793A\u4F8B\u5982\u4E0B

    loggerD(tag = "YukiHookAPI", msg = "This is a log", type = LoggerType.LOGD)
    diff --git a/docs/assets/move-to-new-api.html.e7f15667.js b/docs/assets/move-to-new-api.html.15a70e95.js
    similarity index 99%
    rename from docs/assets/move-to-new-api.html.e7f15667.js
    rename to docs/assets/move-to-new-api.html.15a70e95.js
    index d9c1877bd..c8f87276e 100644
    --- a/docs/assets/move-to-new-api.html.e7f15667.js
    +++ b/docs/assets/move-to-new-api.html.15a70e95.js
    @@ -1,4 +1,4 @@
    -import{_ as t,r as c,o as i,c as p,d as l,w as n,a as r,b as s,e}from"./app.a3fd8dd4.js";const A={},y=r('

    Migrate from Xposed API

    If you are familiar with Xposed API, you can refer to the same point below to quickly migrate your API to YukiHookAPI.

    Migrate Hook Entry Point

    Migrated from XC_LoadPackage.LoadPackageParam to PackageParam.

    YukiHookAPI implements the lambda method body this usage for PackageParam, and the PackageParam object can be obtained globally in the encase method body.

    The API function differences are compared as follows

    ',6),d=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),e(` +import{_ as t,r as c,o as i,c as p,d as l,w as n,a as r,b as s,e}from"./app.2bc5d8f3.js";const A={},y=r('

    Migrate from Xposed API

    If you are familiar with Xposed API, you can refer to the same point below to quickly migrate your API to YukiHookAPI.

    Migrate Hook Entry Point

    Migrated from XC_LoadPackage.LoadPackageParam to PackageParam.

    YukiHookAPI implements the lambda method body this usage for PackageParam, and the PackageParam object can be obtained globally in the encase method body.

    The API function differences are compared as follows

    ',6),d=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the package name of the current Hook")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," packageName")]),e(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// Get the ApplicationInfo of the current Hook")]),e(` diff --git a/docs/assets/move-to-new-api.html.4df12128.js b/docs/assets/move-to-new-api.html.32688ce4.js similarity index 99% rename from docs/assets/move-to-new-api.html.4df12128.js rename to docs/assets/move-to-new-api.html.32688ce4.js index d8c95a91f..e370e5b8c 100644 --- a/docs/assets/move-to-new-api.html.4df12128.js +++ b/docs/assets/move-to-new-api.html.32688ce4.js @@ -1,4 +1,4 @@ -import{_ as p,r as c,o as i,c as t,d as n,w as e,a as r,b as s,e as l}from"./app.a3fd8dd4.js";const A={},y=r('

    \u4ECE Xposed API \u8FC1\u79FB

    \u82E5\u4F60\u719F\u6089 Xposed API\uFF0C\u4F60\u53EF\u4EE5\u53C2\u8003\u4E0B\u65B9\u7684\u76F8\u540C\u70B9\u5C06\u81EA\u5DF1\u7684 API \u5FEB\u901F\u8FC1\u79FB\u5230 YukiHookAPI\u3002

    \u8FC1\u79FB Hook \u5165\u53E3\u70B9

    \u4ECE XC_LoadPackage.LoadPackageParam \u8FC1\u79FB\u81F3 PackageParam\u3002

    YukiHookAPI \u5BF9 PackageParam \u5B9E\u73B0\u4E86 lambda \u65B9\u6CD5\u4F53 this \u7528\u6CD5\uFF0C\u5728 encase \u65B9\u6CD5\u4F53\u5185\u5373\u53EF\u5168\u5C40\u5F97\u5230 PackageParam \u5BF9\u8C61\u3002

    API \u529F\u80FD\u5DEE\u5F02\u5BF9\u6BD4\u5982\u4E0B

    ',6),d=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),l(` +import{_ as p,r as c,o as i,c as t,d as n,w as e,a as r,b as s,e as l}from"./app.2bc5d8f3.js";const A={},y=r('

    \u4ECE Xposed API \u8FC1\u79FB

    \u82E5\u4F60\u719F\u6089 Xposed API\uFF0C\u4F60\u53EF\u4EE5\u53C2\u8003\u4E0B\u65B9\u7684\u76F8\u540C\u70B9\u5C06\u81EA\u5DF1\u7684 API \u5FEB\u901F\u8FC1\u79FB\u5230 YukiHookAPI\u3002

    \u8FC1\u79FB Hook \u5165\u53E3\u70B9

    \u4ECE XC_LoadPackage.LoadPackageParam \u8FC1\u79FB\u81F3 PackageParam\u3002

    YukiHookAPI \u5BF9 PackageParam \u5B9E\u73B0\u4E86 lambda \u65B9\u6CD5\u4F53 this \u7528\u6CD5\uFF0C\u5728 encase \u65B9\u6CD5\u4F53\u5185\u5373\u53EF\u5168\u5C40\u5F97\u5230 PackageParam \u5BF9\u8C61\u3002

    API \u529F\u80FD\u5DEE\u5F02\u5BF9\u6BD4\u5982\u4E0B

    ',6),d=s("div",{class:"language-kotlin ext-kt line-numbers-mode"},[s("pre",{class:"shiki",style:{"background-color":"#22272e"}},[s("code",null,[s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"override"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F47067"}},"fun"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#DCBDFB"}},"onHook"),s("span",{style:{color:"#ADBAC7"}},"() "),s("span",{style:{color:"#F47067"}},"="),s("span",{style:{color:"#ADBAC7"}}," encase {")]),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// \u5F97\u5230\u5F53\u524D Hook \u7684\u5305\u540D")]),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," packageName")]),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#768390"}},"// \u5F97\u5230\u5F53\u524D Hook \u7684 ApplicationInfo")]),l(` diff --git a/docs/assets/quick-start.html.5ee08b81.js b/docs/assets/quick-start.html.4ecaa1d2.js similarity index 99% rename from docs/assets/quick-start.html.5ee08b81.js rename to docs/assets/quick-start.html.4ecaa1d2.js index 0ab66b67a..94a4e2131 100644 --- a/docs/assets/quick-start.html.5ee08b81.js +++ b/docs/assets/quick-start.html.4ecaa1d2.js @@ -1,4 +1,4 @@ -import{_ as o,r as l,o as i,c as p,b as n,d as t,a as e,e as s}from"./app.a3fd8dd4.js";const r={},c=e(`

    Quick Start

    Integrate YukiHookAPI into your project.

    Environment Requirements

    • Windows 7 and above / macOS 10.14 and above / Linux distributions (Arch/Debian)

    • Android Studio 2021.1 and above

    • IntelliJ IDEA 2021.1 and above

    • Kotlin 1.7.0 and above

    • Android Gradle Plugin 7.0 and above

    • Gradle 7.0 and above

    • JVM 11 and above (Since API 1.0.80)

    Automatically Build Project

    YukiHookAPI provides an automated build tool that can help you quickly build an Android standard project template with Xposed Module dependencies, and use the built template to start the next step directly.

    You can click here to check it out.

    Manually Configure Project

    If you don't want to use automated build tools, you can still manually configure project dependencies as follows.

    Create Project

    Use Android Studio or IntelliJ IDEA to create a new Android project and select Kotlin in the Language column to automatically add basic dependencies.

    Integration Dependencies

    Add dependencies to your project build.gradle.

    The following example

    repositories {
    +import{_ as o,r as l,o as i,c as p,b as n,d as t,a as e,e as s}from"./app.2bc5d8f3.js";const r={},c=e(`

    Quick Start

    Integrate YukiHookAPI into your project.

    Environment Requirements

    • Windows 7 and above / macOS 10.14 and above / Linux distributions (Arch/Debian)

    • Android Studio 2021.1 and above

    • IntelliJ IDEA 2021.1 and above

    • Kotlin 1.7.0 and above

    • Android Gradle Plugin 7.0 and above

    • Gradle 7.0 and above

    • JVM 11 and above (Since API 1.0.80)

    Automatically Build Project

    YukiHookAPI provides an automated build tool that can help you quickly build an Android standard project template with Xposed Module dependencies, and use the built template to start the next step directly.

    You can click here to check it out.

    Manually Configure Project

    If you don't want to use automated build tools, you can still manually configure project dependencies as follows.

    Create Project

    Use Android Studio or IntelliJ IDEA to create a new Android project and select Kotlin in the Language column to automatically add basic dependencies.

    Integration Dependencies

    Add dependencies to your project build.gradle.

    The following example

    repositories {
         google()
         mavenCentral()
         // \u2757If your Plugin version is too low, be sure to add it as an Xposed Module, other cases are optional
    diff --git a/docs/assets/quick-start.html.0468985b.js b/docs/assets/quick-start.html.d97731c3.js
    similarity index 99%
    rename from docs/assets/quick-start.html.0468985b.js
    rename to docs/assets/quick-start.html.d97731c3.js
    index e88825c45..5b6ff4a59 100644
    --- a/docs/assets/quick-start.html.0468985b.js
    +++ b/docs/assets/quick-start.html.d97731c3.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as o,o as p,c as i,b as n,d as c,a,e as s}from"./app.a3fd8dd4.js";const r={},t=a(`

    \u5FEB\u901F\u5F00\u59CB

    \u96C6\u6210 YukiHookAPI \u5230\u4F60\u7684\u9879\u76EE\u4E2D\u3002

    \u73AF\u5883\u8981\u6C42

    • Windows 7 \u53CA\u4EE5\u4E0A/macOS 10.14 \u53CA\u4EE5\u4E0A/Linux \u53D1\u884C\u7248(Arch/Debian)

    • Android Studio 2021.1 \u53CA\u4EE5\u4E0A

    • IntelliJ IDEA 2021.1 \u53CA\u4EE5\u4E0A

    • Kotlin 1.7.0 \u53CA\u4EE5\u4E0A

    • Android Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A

    • Gradle 7.0 \u53CA\u4EE5\u4E0A

    • Jvm 11 \u53CA\u4EE5\u4E0A (Since API 1.0.80)

    \u81EA\u52A8\u6784\u5EFA\u9879\u76EE

    YukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5316\u6784\u5EFA\u5DE5\u5177\uFF0C\u5B83\u53EF\u4EE5\u5E2E\u52A9\u4F60\u5FEB\u901F\u6784\u5EFA\u4E00\u4E2A\u62E5\u6709 Xposed \u6A21\u5757\u4F9D\u8D56\u7684 Android \u6807\u51C6\u9879\u76EE\u6A21\u677F\uFF0C\u4F7F\u7528\u6784\u5EFA\u597D\u7684\u6A21\u677F\u5373\u53EF\u76F4\u63A5\u5F00\u59CB\u4E0B\u4E00\u6B65\u5DE5\u4F5C\u3002

    \u4F60\u53EF\u4EE5 \u70B9\u51FB\u8FD9\u91CC \u8FDB\u884C\u67E5\u770B\u3002

    \u624B\u52A8\u914D\u7F6E\u9879\u76EE

    \u82E5\u4F60\u4E0D\u60F3\u4F7F\u7528\u81EA\u52A8\u5316\u6784\u5EFA\u5DE5\u5177\uFF0C\u4F60\u4F9D\u7136\u53EF\u4EE5\u6309\u7167\u4EE5\u4E0B\u65B9\u5F0F\u624B\u52A8\u914D\u7F6E\u9879\u76EE\u4F9D\u8D56\u3002

    \u521B\u5EFA\u9879\u76EE

    \u4F7F\u7528 Android Studio \u6216 IntelliJ IDEA \u521B\u5EFA\u65B0\u7684 Android \u9879\u76EE\uFF0C\u5E76\u5728 Language \u4E00\u680F\u9009\u62E9 Kotlin \u4EE5\u81EA\u52A8\u6DFB\u52A0\u57FA\u7840\u4F9D\u8D56\u3002

    \u96C6\u6210\u4F9D\u8D56

    \u5728\u4F60\u7684\u9879\u76EE build.gradle \u4E2D\u6DFB\u52A0\u4F9D\u8D56\u3002

    \u793A\u4F8B\u5982\u4E0B

    repositories {
    +import{_ as l,r as o,o as p,c as i,b as n,d as c,a,e as s}from"./app.2bc5d8f3.js";const r={},t=a(`

    \u5FEB\u901F\u5F00\u59CB

    \u96C6\u6210 YukiHookAPI \u5230\u4F60\u7684\u9879\u76EE\u4E2D\u3002

    \u73AF\u5883\u8981\u6C42

    • Windows 7 \u53CA\u4EE5\u4E0A/macOS 10.14 \u53CA\u4EE5\u4E0A/Linux \u53D1\u884C\u7248(Arch/Debian)

    • Android Studio 2021.1 \u53CA\u4EE5\u4E0A

    • IntelliJ IDEA 2021.1 \u53CA\u4EE5\u4E0A

    • Kotlin 1.7.0 \u53CA\u4EE5\u4E0A

    • Android Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A

    • Gradle 7.0 \u53CA\u4EE5\u4E0A

    • Jvm 11 \u53CA\u4EE5\u4E0A (Since API 1.0.80)

    \u81EA\u52A8\u6784\u5EFA\u9879\u76EE

    YukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5316\u6784\u5EFA\u5DE5\u5177\uFF0C\u5B83\u53EF\u4EE5\u5E2E\u52A9\u4F60\u5FEB\u901F\u6784\u5EFA\u4E00\u4E2A\u62E5\u6709 Xposed \u6A21\u5757\u4F9D\u8D56\u7684 Android \u6807\u51C6\u9879\u76EE\u6A21\u677F\uFF0C\u4F7F\u7528\u6784\u5EFA\u597D\u7684\u6A21\u677F\u5373\u53EF\u76F4\u63A5\u5F00\u59CB\u4E0B\u4E00\u6B65\u5DE5\u4F5C\u3002

    \u4F60\u53EF\u4EE5 \u70B9\u51FB\u8FD9\u91CC \u8FDB\u884C\u67E5\u770B\u3002

    \u624B\u52A8\u914D\u7F6E\u9879\u76EE

    \u82E5\u4F60\u4E0D\u60F3\u4F7F\u7528\u81EA\u52A8\u5316\u6784\u5EFA\u5DE5\u5177\uFF0C\u4F60\u4F9D\u7136\u53EF\u4EE5\u6309\u7167\u4EE5\u4E0B\u65B9\u5F0F\u624B\u52A8\u914D\u7F6E\u9879\u76EE\u4F9D\u8D56\u3002

    \u521B\u5EFA\u9879\u76EE

    \u4F7F\u7528 Android Studio \u6216 IntelliJ IDEA \u521B\u5EFA\u65B0\u7684 Android \u9879\u76EE\uFF0C\u5E76\u5728 Language \u4E00\u680F\u9009\u62E9 Kotlin \u4EE5\u81EA\u52A8\u6DFB\u52A0\u57FA\u7840\u4F9D\u8D56\u3002

    \u96C6\u6210\u4F9D\u8D56

    \u5728\u4F60\u7684\u9879\u76EE build.gradle \u4E2D\u6DFB\u52A0\u4F9D\u8D56\u3002

    \u793A\u4F8B\u5982\u4E0B

    repositories {
         google()
         mavenCentral()
         // \u2757\u82E5\u4F60\u7684 Plugin \u7248\u672C\u8FC7\u4F4E\uFF0C\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u52A1\u5FC5\u6DFB\u52A0\uFF0C\u5176\u5B83\u60C5\u51B5\u53EF\u9009
    diff --git a/docs/assets/r8-proguard.html.7efa3325.js b/docs/assets/r8-proguard.html.9a31c8a8.js
    similarity index 96%
    rename from docs/assets/r8-proguard.html.7efa3325.js
    rename to docs/assets/r8-proguard.html.9a31c8a8.js
    index 8c10e210c..a4b8dc043 100644
    --- a/docs/assets/r8-proguard.html.7efa3325.js
    +++ b/docs/assets/r8-proguard.html.9a31c8a8.js
    @@ -1,2 +1,2 @@
    -import{_ as e,o,c as a,a as r}from"./app.a3fd8dd4.js";const n={},s=r(`

    R8 & Proguard Obfuscate

    In most scenarios, the Xposed Module can be compressed by native obfuscation.

    Here is the configuration method of obfuscation.

    R8

    If you are using R8 then you don't need any special configuration for YukiHookAPI.

    Proguard

    If you are still using Proguard, you need to do some rule configuration.

    Pay Attention

    Proguard rules have been deprecated, please don't use them anymore.

    Since Android Gradle Plugin 4.2, the obfuscator with the latest version of the Android Jetpack default is R8, and you no longer need to consider obfuscation.

    To enable R8 in any version, please add the following rules to the gradle.properties file, no configuration is required for Android Gradle Plugin 7.0 and above.

    android.enableR8=true
    +import{_ as e,o,c as a,a as r}from"./app.2bc5d8f3.js";const n={},s=r(`

    R8 & Proguard Obfuscate

    In most scenarios, the Xposed Module can be compressed by native obfuscation.

    Here is the configuration method of obfuscation.

    R8

    If you are using R8 then you don't need any special configuration for YukiHookAPI.

    Proguard

    If you are still using Proguard, you need to do some rule configuration.

    Pay Attention

    Proguard rules have been deprecated, please don't use them anymore.

    Since Android Gradle Plugin 4.2, the obfuscator with the latest version of the Android Jetpack default is R8, and you no longer need to consider obfuscation.

    To enable R8 in any version, please add the following rules to the gradle.properties file, no configuration is required for Android Gradle Plugin 7.0 and above.

    android.enableR8=true
     
    `,9),t=[s];function d(c,i){return o(),a("div",null,t)}const u=e(n,[["render",d],["__file","r8-proguard.html.vue"]]);export{u as default}; diff --git a/docs/assets/r8-proguard.html.2cf07bb5.js b/docs/assets/r8-proguard.html.a71a449a.js similarity index 97% rename from docs/assets/r8-proguard.html.2cf07bb5.js rename to docs/assets/r8-proguard.html.a71a449a.js index b129d0f02..26661d03d 100644 --- a/docs/assets/r8-proguard.html.2cf07bb5.js +++ b/docs/assets/r8-proguard.html.a71a449a.js @@ -1,2 +1,2 @@ -import{_ as e,o,c as r,a}from"./app.a3fd8dd4.js";const d={},s=a(`

    R8 \u4E0E Proguard \u6DF7\u6DC6

    \u5927\u90E8\u5206\u573A\u666F\u4E0B Xposed \u6A21\u5757\u53EF\u901A\u8FC7\u539F\u751F\u6DF7\u6DC6\u538B\u7F29\u4F53\u79EF\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86\u6DF7\u6DC6\u7684\u914D\u7F6E\u65B9\u6CD5\u3002

    R8

    \u5982\u679C\u4F60\u4F7F\u7528\u7684\u662F R8\uFF0C\u90A3\u4E48\u4F60\u65E0\u9700\u5BF9 YukiHookAPI \u8FDB\u884C\u4EFB\u4F55\u7279\u6B8A\u914D\u7F6E\u3002

    Proguard

    \u5982\u679C\u4F60\u4ECD\u7136\u5728\u4F7F\u7528 Proguard\uFF0C\u4F60\u9700\u8981\u505A\u4E00\u4E9B\u89C4\u5219\u914D\u7F6E\u3002

    \u7279\u522B\u6CE8\u610F

    Proguard \u89C4\u5219\u5DF2\u88AB\u5F03\u7528\uFF0C\u8BF7\u4E0D\u8981\u518D\u4F7F\u7528\uFF0C\u81EA\u4ECE Android Gradle Plugin 4.2 \u540E\uFF0C\u62E5\u6709 Android Jetpack \u5957\u4EF6\u6700\u65B0\u7248\u672C\u7684\u6DF7\u6DC6\u5904\u7406\u7A0B\u5E8F\u9ED8\u8BA4\u5747\u4E3A R8\uFF0C\u4E0D\u518D\u9700\u8981\u8003\u8651\u6DF7\u6DC6\u7684\u95EE\u9898\u3002

    \u82E5\u8981\u5728\u4EFB\u4F55\u7248\u672C\u4E0B\u542F\u7528 R8\uFF0C\u8BF7\u5728 gradle.properties \u6587\u4EF6\u4E2D\u52A0\u5165\u5982\u4E0B\u89C4\u5219\uFF0CAndroid Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A\u7248\u672C\u65E0\u9700\u4EFB\u4F55\u914D\u7F6E\u3002

    android.enableR8=true
    +import{_ as e,o,c as r,a}from"./app.2bc5d8f3.js";const d={},s=a(`

    R8 \u4E0E Proguard \u6DF7\u6DC6

    \u5927\u90E8\u5206\u573A\u666F\u4E0B Xposed \u6A21\u5757\u53EF\u901A\u8FC7\u539F\u751F\u6DF7\u6DC6\u538B\u7F29\u4F53\u79EF\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86\u6DF7\u6DC6\u7684\u914D\u7F6E\u65B9\u6CD5\u3002

    R8

    \u5982\u679C\u4F60\u4F7F\u7528\u7684\u662F R8\uFF0C\u90A3\u4E48\u4F60\u65E0\u9700\u5BF9 YukiHookAPI \u8FDB\u884C\u4EFB\u4F55\u7279\u6B8A\u914D\u7F6E\u3002

    Proguard

    \u5982\u679C\u4F60\u4ECD\u7136\u5728\u4F7F\u7528 Proguard\uFF0C\u4F60\u9700\u8981\u505A\u4E00\u4E9B\u89C4\u5219\u914D\u7F6E\u3002

    \u7279\u522B\u6CE8\u610F

    Proguard \u89C4\u5219\u5DF2\u88AB\u5F03\u7528\uFF0C\u8BF7\u4E0D\u8981\u518D\u4F7F\u7528\uFF0C\u81EA\u4ECE Android Gradle Plugin 4.2 \u540E\uFF0C\u62E5\u6709 Android Jetpack \u5957\u4EF6\u6700\u65B0\u7248\u672C\u7684\u6DF7\u6DC6\u5904\u7406\u7A0B\u5E8F\u9ED8\u8BA4\u5747\u4E3A R8\uFF0C\u4E0D\u518D\u9700\u8981\u8003\u8651\u6DF7\u6DC6\u7684\u95EE\u9898\u3002

    \u82E5\u8981\u5728\u4EFB\u4F55\u7248\u672C\u4E0B\u542F\u7528 R8\uFF0C\u8BF7\u5728 gradle.properties \u6587\u4EF6\u4E2D\u52A0\u5165\u5982\u4E0B\u89C4\u5219\uFF0CAndroid Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A\u7248\u672C\u65E0\u9700\u4EFB\u4F55\u914D\u7F6E\u3002

    android.enableR8=true
     
    `,9),n=[s];function c(l,t){return o(),r("div",null,n)}const p=e(d,[["render",c],["__file","r8-proguard.html.vue"]]);export{p as default}; diff --git a/docs/assets/reflection.html.76679915.js b/docs/assets/reflection.html.64cc7992.js similarity index 99% rename from docs/assets/reflection.html.76679915.js rename to docs/assets/reflection.html.64cc7992.js index 6f82dbdb2..72152db5e 100644 --- a/docs/assets/reflection.html.76679915.js +++ b/docs/assets/reflection.html.64cc7992.js @@ -1,4 +1,4 @@ -import{_ as e,r as l,o,c as p,b as s,d as t,a as n,e as c}from"./app.a3fd8dd4.js";const i={},r=n(`

    Reflection Extensions

    YukiHookAPI encapsulates a set of reflection API with near-zero reflection writing for developers, which can almost completely replace the usage of reflection API in Java.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
    +import{_ as e,r as l,o,c as p,b as s,d as t,a as n,e as c}from"./app.2bc5d8f3.js";const i={},r=n(`

    Reflection Extensions

    YukiHookAPI encapsulates a set of reflection API with near-zero reflection writing for developers, which can almost completely replace the usage of reflection API in Java.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
     var instance = Class.forName("com.demo.Test")
     // Specify the Class in the ClassLoader environment
     val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    diff --git a/docs/assets/reflection.html.91ffec62.js b/docs/assets/reflection.html.a102dd89.js
    similarity index 99%
    rename from docs/assets/reflection.html.91ffec62.js
    rename to docs/assets/reflection.html.a102dd89.js
    index b6028efaf..95381fb6c 100644
    --- a/docs/assets/reflection.html.91ffec62.js
    +++ b/docs/assets/reflection.html.a102dd89.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as e,o as p,c as o,b as s,d as c,a as n,e as r}from"./app.a3fd8dd4.js";const i={},t=n(`

    \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55

    YukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u63A5\u8FD1\u96F6\u53CD\u5C04\u5199\u6CD5\u7684\u53CD\u5C04 API\uFF0C\u5B83\u51E0\u4E4E\u53EF\u4EE5\u5B8C\u5168\u53D6\u4EE3\u539F\u751F Java \u7684\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u3002

    Class \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5BF9\u8C61\u81EA\u8EAB\u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5BF9\u8C61\u8F6C\u6362

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230\u4E00\u4E2A\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u7684 Class\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    +import{_ as l,r as e,o as p,c as o,b as s,d as c,a as n,e as r}from"./app.2bc5d8f3.js";const i={},t=n(`

    \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55

    YukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u63A5\u8FD1\u96F6\u53CD\u5C04\u5199\u6CD5\u7684\u53CD\u5C04 API\uFF0C\u5B83\u51E0\u4E4E\u53EF\u4EE5\u5B8C\u5168\u53D6\u4EE3\u539F\u751F Java \u7684\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u3002

    Class \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5BF9\u8C61\u81EA\u8EAB\u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5BF9\u8C61\u8F6C\u6362

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230\u4E00\u4E2A\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u7684 Class\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
     var instance = Class.forName("com.demo.Test")
     // \u6307\u5B9A ClassLoader \u73AF\u5883\u4E0B\u7684 Class
     val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    diff --git a/docs/assets/xposed-channel.html.ed572b4b.js b/docs/assets/xposed-channel.html.9dbfac90.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.ed572b4b.js
    rename to docs/assets/xposed-channel.html.9dbfac90.js
    index 0b5b37d09..321f549f6 100644
    --- a/docs/assets/xposed-channel.html.ed572b4b.js
    +++ b/docs/assets/xposed-channel.html.9dbfac90.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.a3fd8dd4.js";const e={},o=l(`

    Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865

    \u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u53D1\u9001\u548C\u63A5\u6536\u6570\u636E\u7684\u89E3\u51B3\u65B9\u6848\u3002

    \u9700\u8981\u6EE1\u8DB3\u7684\u6761\u4EF6

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002

    \u57FA\u672C\u7528\u6CD5

    \u8FD9\u91CC\u63CF\u8FF0\u4E86 wait \u4E0E put \u65B9\u6CD5\u7684\u57FA\u672C\u4F7F\u7528\u65B9\u6CD5\u3002

    \u901A\u8FC7\u4F7F\u7528 dataChannel \u6765\u5B9E\u73B0\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u7684\u901A\u8BAF\u6865\uFF0C\u539F\u7406\u4E3A\u53D1\u9001\u63A5\u6536\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u3002

    \u6A21\u5757\u793A\u4F8B\u5982\u4E0B

    // \u4ECE\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u83B7\u53D6
    +import{_ as s,o as n,c as a,a as l}from"./app.2bc5d8f3.js";const e={},o=l(`

    Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865

    \u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u5728\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u53D1\u9001\u548C\u63A5\u6536\u6570\u636E\u7684\u89E3\u51B3\u65B9\u6848\u3002

    \u9700\u8981\u6EE1\u8DB3\u7684\u6761\u4EF6

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002

    \u57FA\u672C\u7528\u6CD5

    \u8FD9\u91CC\u63CF\u8FF0\u4E86 wait \u4E0E put \u65B9\u6CD5\u7684\u57FA\u672C\u4F7F\u7528\u65B9\u6CD5\u3002

    \u901A\u8FC7\u4F7F\u7528 dataChannel \u6765\u5B9E\u73B0\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u7684\u901A\u8BAF\u6865\uFF0C\u539F\u7406\u4E3A\u53D1\u9001\u63A5\u6536\u7CFB\u7EDF\u65E0\u5E8F\u5E7F\u64AD\u3002

    \u6A21\u5757\u793A\u4F8B\u5982\u4E0B

    // \u4ECE\u6307\u5B9A\u5305\u540D\u7684\u5BBF\u4E3B\u83B7\u53D6
     dataChannel(packageName = "com.example.demo").wait<String>(key = "key_from_host") { value ->
         // Your code here.
     }
    diff --git a/docs/assets/xposed-channel.html.bda508bf.js b/docs/assets/xposed-channel.html.c2eab647.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.bda508bf.js
    rename to docs/assets/xposed-channel.html.c2eab647.js
    index 3d83566e2..a31114ced 100644
    --- a/docs/assets/xposed-channel.html.bda508bf.js
    +++ b/docs/assets/xposed-channel.html.c2eab647.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as e}from"./app.a3fd8dd4.js";const l={},o=e(`

    Xposed Module and Host Channel

    This is a solution that uses system out-of-order broadcasting to send and receive data between the Module App and the Host App.

    Condition that needs to be met

    The Module App and the Host App need to remain alive, otherwise communication cannot be established.

    Basic Usage

    The basic usage of the wait and put methods is described here.

    By using dataChannel to realize the communication bridge between the Module App and the Host App, the principle is to send and receive system out-of-order broadcasts.

    The Module App example is as follows

    // Get from the Host App of the specified package name
    +import{_ as s,o as n,c as a,a as e}from"./app.2bc5d8f3.js";const l={},o=e(`

    Xposed Module and Host Channel

    This is a solution that uses system out-of-order broadcasting to send and receive data between the Module App and the Host App.

    Condition that needs to be met

    The Module App and the Host App need to remain alive, otherwise communication cannot be established.

    Basic Usage

    The basic usage of the wait and put methods is described here.

    By using dataChannel to realize the communication bridge between the Module App and the Host App, the principle is to send and receive system out-of-order broadcasts.

    The Module App example is as follows

    // Get from the Host App of the specified package name
     dataChannel(packageName = "com.example.demo").wait<String>(key = "key_from_host") { value ->
         // Your code here.
     }
    diff --git a/docs/assets/xposed-storage.html.eac2b26d.js b/docs/assets/xposed-storage.html.baf94cb8.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.eac2b26d.js
    rename to docs/assets/xposed-storage.html.baf94cb8.js
    index 1b471651f..1bb48537d 100644
    --- a/docs/assets/xposed-storage.html.eac2b26d.js
    +++ b/docs/assets/xposed-storage.html.baf94cb8.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as o,a}from"./app.a3fd8dd4.js";const n={},l=a(`

    Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences \u7684\u9AD8\u6548\u6A21\u5757\u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\u3002

    \u6211\u4EEC\u9700\u8981\u5B58\u50A8\u6A21\u5757\u7684\u6570\u636E\uFF0C\u4EE5\u4F9B\u5BBF\u4E3B\u8C03\u7528\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F1A\u9047\u5230\u539F\u751F Sp \u5B58\u50A8\u7684\u6570\u636E\u4E92\u901A\u963B\u788D\u3002

    \u539F\u751F\u7684 Xposed \u7ED9\u6211\u4EEC\u63D0\u4F9B\u4E86\u4E00\u4E2A XSharedPreferences \u7528\u4E8E\u8BFB\u53D6\u6A21\u5757\u7684 Sp \u6570\u636E\u3002

    \u5728 Activity \u4E2D\u4F7F\u7528

    \u8FD9\u91CC\u63CF\u8FF0\u4E86\u5728 Activity \u4E2D\u88C5\u8F7D YukiHookModulePrefs \u7684\u573A\u666F\u3002

    \u901A\u5E38\u60C5\u51B5\u4E0B\u6211\u4EEC\u53EF\u4EE5\u8FD9\u6837\u5728 Hook APP (\u5BBF\u4E3B) \u5185\u5BF9\u5176\u8FDB\u884C\u521D\u59CB\u5316\u3002

    \u793A\u4F8B\u5982\u4E0B

    XSharedPreferences(BuildConfig.APPLICATION_ID)
    +import{_ as e,o as s,c as o,a}from"./app.2bc5d8f3.js";const n={},l=a(`

    Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences \u7684\u9AD8\u6548\u6A21\u5757\u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\u3002

    \u6211\u4EEC\u9700\u8981\u5B58\u50A8\u6A21\u5757\u7684\u6570\u636E\uFF0C\u4EE5\u4F9B\u5BBF\u4E3B\u8C03\u7528\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F1A\u9047\u5230\u539F\u751F Sp \u5B58\u50A8\u7684\u6570\u636E\u4E92\u901A\u963B\u788D\u3002

    \u539F\u751F\u7684 Xposed \u7ED9\u6211\u4EEC\u63D0\u4F9B\u4E86\u4E00\u4E2A XSharedPreferences \u7528\u4E8E\u8BFB\u53D6\u6A21\u5757\u7684 Sp \u6570\u636E\u3002

    \u5728 Activity \u4E2D\u4F7F\u7528

    \u8FD9\u91CC\u63CF\u8FF0\u4E86\u5728 Activity \u4E2D\u88C5\u8F7D YukiHookModulePrefs \u7684\u573A\u666F\u3002

    \u901A\u5E38\u60C5\u51B5\u4E0B\u6211\u4EEC\u53EF\u4EE5\u8FD9\u6837\u5728 Hook APP (\u5BBF\u4E3B) \u5185\u5BF9\u5176\u8FDB\u884C\u521D\u59CB\u5316\u3002

    \u793A\u4F8B\u5982\u4E0B

    XSharedPreferences(BuildConfig.APPLICATION_ID)
     

    \u6709\u6CA1\u6709\u65B9\u4FBF\u5FEB\u6377\u7684\u89E3\u51B3\u65B9\u6848\u5462\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u4F7F\u7528 YukiHookAPI \u7684\u6269\u5C55\u80FD\u529B\u5FEB\u901F\u5B9E\u73B0\u8FD9\u4E2A\u529F\u80FD\u3002

    \u5F53\u4F60\u5728\u6A21\u5757\u4E2D\u5B58\u50A8\u6570\u636E\u7684\u65F6\u5019\uFF0C\u82E5\u5F53\u524D\u5904\u4E8E Activity \u5185\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    modulePrefs.putString("test_name", "saved_value")
     

    \u5F53\u4F60\u5728 Hook APP (\u5BBF\u4E3B) \u4E2D\u8BFB\u53D6\u6570\u636E\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    val testName = prefs.getString("test_name", "default_value")
     

    \u4F60\u4E0D\u9700\u8981\u8003\u8651\u4F20\u5165\u6A21\u5757\u7684\u5305\u540D\u4EE5\u53CA\u4E00\u7CFB\u5217\u590D\u6742\u7684\u6743\u9650\u914D\u7F6E\uFF0C\u4E00\u5207\u90FD\u4EA4\u7ED9 YukiHookModulePrefs \u6765\u5904\u7406\u3002

    \u82E5\u8981\u5B9E\u73B0\u5B58\u50A8\u7684\u533A\u57DF\u5212\u5206\uFF0C\u4F60\u53EF\u4EE5\u6307\u5B9A\u6BCF\u4E2A prefs \u6587\u4EF6\u7684\u540D\u79F0\u3002

    \u5728\u6A21\u5757\u7684 Activity \u4E2D\u8FD9\u6837\u4F7F\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u63A8\u8350\u7528\u6CD5
    diff --git a/docs/assets/xposed-storage.html.5f915189.js b/docs/assets/xposed-storage.html.c41def64.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.5f915189.js
    rename to docs/assets/xposed-storage.html.c41def64.js
    index a4e111d59..c72d1cf80 100644
    --- a/docs/assets/xposed-storage.html.5f915189.js
    +++ b/docs/assets/xposed-storage.html.c41def64.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as o,a}from"./app.a3fd8dd4.js";const n={},t=a(`

    Xposed Module Data Storage

    This is an efficient Module App data storage solution that automatically connects SharedPreferences and XSharedPreferences.

    We need to store the data of the Module App for the Host App to call.

    At this time, we will encounter the data exchange obstacle of the native Sp storage.

    The native Xposed provides us with a XSharedPreferences for reading the Sp data of the Module App.

    Use in Activity

    Loading YukiHookModulePrefs in Activity is described here.

    Usually we can initialize it in Host App like this.

    The following example

    XSharedPreferences(BuildConfig.APPLICATION_ID)
    +import{_ as e,o as s,c as o,a}from"./app.2bc5d8f3.js";const n={},t=a(`

    Xposed Module Data Storage

    This is an efficient Module App data storage solution that automatically connects SharedPreferences and XSharedPreferences.

    We need to store the data of the Module App for the Host App to call.

    At this time, we will encounter the data exchange obstacle of the native Sp storage.

    The native Xposed provides us with a XSharedPreferences for reading the Sp data of the Module App.

    Use in Activity

    Loading YukiHookModulePrefs in Activity is described here.

    Usually we can initialize it in Host App like this.

    The following example

    XSharedPreferences(BuildConfig.APPLICATION_ID)
     

    Is there a convenient and quick solution?

    At this point, you can use the extension capability of YukiHookAPI to quickly implement this function.

    When you store data in a Module App, you can use the following methods if you are currently in an Activity.

    The following example

    modulePrefs.putString("test_name", "saved_value")
     

    When you read data in a Host App, you can use the following methods.

    The following example

    val testName = prefs.getString("test_name", "default_value")
     

    You don't need to consider the module package name and a series of complicated permission configurations, everything is handled by YukiHookModulePrefs.

    To achieve localization of storage, you can specify the name of each prefs file.

    This is used in the Activity of the Module App.

    The following example

    // Recommended usage
    diff --git a/docs/assets/xposed-using.html.a2ec3756.js b/docs/assets/xposed-using.html.db24f894.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.a2ec3756.js
    rename to docs/assets/xposed-using.html.db24f894.js
    index 361f6f5ec..f982a1325 100644
    --- a/docs/assets/xposed-using.html.a2ec3756.js
    +++ b/docs/assets/xposed-using.html.db24f894.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as a,a as n}from"./app.a3fd8dd4.js";const o={},l=n(`

    Use as Xposed Module Configs

    Here are the related configuration methods used by YukiHookAPI as an Xposed Module.

    Dependency Configs

    As an Xposed Module, YukiHookAPI provides an automatic builder.

    You need to integrate the latest version of the com.highcapable.yukihookapi:ksp-xposed dependency in your build.gradle.

    Custom Automatic Builder

    You can configure how YukiHookAPI will generate the xposed_init entry point.

    InjectYukiHookWithXposed Annotation

    annotation class InjectYukiHookWithXposed(
    +import{_ as s,o as e,c as a,a as n}from"./app.2bc5d8f3.js";const o={},l=n(`

    Use as Xposed Module Configs

    Here are the related configuration methods used by YukiHookAPI as an Xposed Module.

    Dependency Configs

    As an Xposed Module, YukiHookAPI provides an automatic builder.

    You need to integrate the latest version of the com.highcapable.yukihookapi:ksp-xposed dependency in your build.gradle.

    Custom Automatic Builder

    You can configure how YukiHookAPI will generate the xposed_init entry point.

    InjectYukiHookWithXposed Annotation

    annotation class InjectYukiHookWithXposed(
         val sourcePath: String,
         val modulePackageName: String,
         val entryClassName: String,
    diff --git a/docs/assets/xposed-using.html.edbc66c9.js b/docs/assets/xposed-using.html.fd3d165f.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.edbc66c9.js
    rename to docs/assets/xposed-using.html.fd3d165f.js
    index 2ccc5e506..f6c139a6c 100644
    --- a/docs/assets/xposed-using.html.edbc66c9.js
    +++ b/docs/assets/xposed-using.html.fd3d165f.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as o}from"./app.a3fd8dd4.js";const e={},l=o(`

    \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u65B9\u6CD5\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F5C\u4E3A Xposed \u6A21\u5757\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u3002

    \u4F60\u9700\u8981\u5728\u4F60\u7684 build.gradle \u4E2D\u96C6\u6210 com.highcapable.yukihookapi:ksp-xposed \u4F9D\u8D56\u7684\u6700\u65B0\u7248\u672C\u3002

    \u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F

    \u4F60\u53EF\u4EE5\u5BF9 YukiHookAPI \u5C06\u5982\u4F55\u751F\u6210 xposed_init \u5165\u53E3\u8FDB\u884C\u76F8\u5173\u914D\u7F6E\u3002

    InjectYukiHookWithXposed \u6CE8\u89E3

    annotation class InjectYukiHookWithXposed(
    +import{_ as s,o as n,c as a,a as o}from"./app.2bc5d8f3.js";const e={},l=o(`

    \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u65B9\u6CD5\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F5C\u4E3A Xposed \u6A21\u5757\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u3002

    \u4F60\u9700\u8981\u5728\u4F60\u7684 build.gradle \u4E2D\u96C6\u6210 com.highcapable.yukihookapi:ksp-xposed \u4F9D\u8D56\u7684\u6700\u65B0\u7248\u672C\u3002

    \u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F

    \u4F60\u53EF\u4EE5\u5BF9 YukiHookAPI \u5C06\u5982\u4F55\u751F\u6210 xposed_init \u5165\u53E3\u8FDB\u884C\u76F8\u5173\u914D\u7F6E\u3002

    InjectYukiHookWithXposed \u6CE8\u89E3

    annotation class InjectYukiHookWithXposed(
         val sourcePath: String,
         val modulePackageName: String,
         val entryClassName: String,
    diff --git a/docs/assets/yukihookapi-projectbuilder.html.35a8316f.js b/docs/assets/yukihookapi-projectbuilder.html.7bf2b952.js
    similarity index 98%
    rename from docs/assets/yukihookapi-projectbuilder.html.35a8316f.js
    rename to docs/assets/yukihookapi-projectbuilder.html.7bf2b952.js
    index 54e8b37a3..c9a4a95e0 100644
    --- a/docs/assets/yukihookapi-projectbuilder.html.35a8316f.js
    +++ b/docs/assets/yukihookapi-projectbuilder.html.7bf2b952.js
    @@ -1 +1 @@
    -import{_ as n,r as i,o as c,c as s,b as t,d as a,a as r,e}from"./app.a3fd8dd4.js";const l="/YukiHookAPI/images/yukihookapi-projectbuilder-en.png",d={},u=r('

    YukiHookAPI Project Builder

    This is an automatic building tool for Xposed Modules using YukiHookAPI as the core.

    Implementing automated search relies on quickly building an Android project template that includes a Xposed Module environment.

    Get Project

    This project is open source and free, and will be maintained continuously according to your usage.

    The original version may have imperfections or bugs. We welcome to your feedback.

    ',6),h=e("Project Address "),p={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder",target:"_blank",rel:"noopener noreferrer"},g=e("YukiHookAPI-ProjectBuilder"),f=e("\u3002"),m=e("If you want to download directly, you can "),k={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases",target:"_blank",rel:"noopener noreferrer"},_=e("click here"),b=e(" to go to the Release address."),y=r('

    Usage

    Here contains the basic usage and function explanation.

    Basic Usage

    • The software use process requires your device connected to the Internet.

    • After starting the software, simply configure the project you want to create, click the button in the lower right corner or select Project > Run Build from the menu bar to start the task.

    • After waiting for the automatic dependency search to complete, you can configure the project dependencies. It is recommended to use the latest dependencies to ensure the stability of the project, and the build tools only support the latest dependencies.

    • Select the folder where you need to create the project. After starting, the project will be created in the location you selected, and wait for the whole process to complete and the project will be created.

    Config Template

    Config template is an extension function, you can select menu bar Project > Config Template > New Template.

    And then, you can create a template with the current config, and you can re-create it from Saved Template next time Load the template to restore the current config.

    Multilingual Support

    The software language follows the current system, and you can manually select the software interface language in the Language column of the menu bar.

    ',9);function j(w,x){const o=i("ExternalLinkIcon");return c(),s("div",null,[u,t("p",null,[h,t("a",p,[g,a(o)]),f]),t("p",null,[m,t("a",k,[_,a(o)]),b]),y])}const A=n(d,[["render",j],["__file","yukihookapi-projectbuilder.html.vue"]]);export{A as default}; +import{_ as n,r as i,o as c,c as s,b as t,d as a,a as r,e}from"./app.2bc5d8f3.js";const l="/YukiHookAPI/images/yukihookapi-projectbuilder-en.png",d={},u=r('

    YukiHookAPI Project Builder

    This is an automatic building tool for Xposed Modules using YukiHookAPI as the core.

    Implementing automated search relies on quickly building an Android project template that includes a Xposed Module environment.

    Get Project

    This project is open source and free, and will be maintained continuously according to your usage.

    The original version may have imperfections or bugs. We welcome to your feedback.

    ',6),h=e("Project Address "),p={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder",target:"_blank",rel:"noopener noreferrer"},g=e("YukiHookAPI-ProjectBuilder"),f=e("\u3002"),m=e("If you want to download directly, you can "),k={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases",target:"_blank",rel:"noopener noreferrer"},_=e("click here"),b=e(" to go to the Release address."),y=r('

    Usage

    Here contains the basic usage and function explanation.

    Basic Usage

    • The software use process requires your device connected to the Internet.

    • After starting the software, simply configure the project you want to create, click the button in the lower right corner or select Project > Run Build from the menu bar to start the task.

    • After waiting for the automatic dependency search to complete, you can configure the project dependencies. It is recommended to use the latest dependencies to ensure the stability of the project, and the build tools only support the latest dependencies.

    • Select the folder where you need to create the project. After starting, the project will be created in the location you selected, and wait for the whole process to complete and the project will be created.

    Config Template

    Config template is an extension function, you can select menu bar Project > Config Template > New Template.

    And then, you can create a template with the current config, and you can re-create it from Saved Template next time Load the template to restore the current config.

    Multilingual Support

    The software language follows the current system, and you can manually select the software interface language in the Language column of the menu bar.

    ',9);function j(w,x){const o=i("ExternalLinkIcon");return c(),s("div",null,[u,t("p",null,[h,t("a",p,[g,a(o)]),f]),t("p",null,[m,t("a",k,[_,a(o)]),b]),y])}const A=n(d,[["render",j],["__file","yukihookapi-projectbuilder.html.vue"]]);export{A as default}; diff --git a/docs/assets/yukihookapi-projectbuilder.html.40b85b3e.js b/docs/assets/yukihookapi-projectbuilder.html.870af468.js similarity index 98% rename from docs/assets/yukihookapi-projectbuilder.html.40b85b3e.js rename to docs/assets/yukihookapi-projectbuilder.html.870af468.js index aaa454112..a87499821 100644 --- a/docs/assets/yukihookapi-projectbuilder.html.40b85b3e.js +++ b/docs/assets/yukihookapi-projectbuilder.html.870af468.js @@ -1 +1 @@ -import{_ as i,r as n,o as s,c as d,b as o,d as r,a,e}from"./app.a3fd8dd4.js";const h="/YukiHookAPI/images/yukihookapi-projectbuilder-zh-cn.png",c={},l=a('

    YukiHookAPI \u6784\u5EFA\u5DE5\u5177

    \u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 YukiHookAPI \u4F5C\u4E3A\u6838\u5FC3\u7684 Xposed \u6A21\u5757\u81EA\u52A8\u6784\u5EFA\u5DE5\u5177\u3002

    \u5B9E\u73B0\u81EA\u52A8\u5316\u641C\u7D22\u4F9D\u8D56\u5FEB\u901F\u642D\u5EFA\u4E00\u4E2A\u5305\u542B Xposed \u6A21\u5757\u73AF\u5883\u7684 Android \u9879\u76EE\u6A21\u677F\u3002

    \u83B7\u53D6\u9879\u76EE

    \u672C\u9879\u76EE\u5B8C\u5168\u5F00\u6E90\u514D\u8D39\uFF0C\u4E14\u4F1A\u6839\u636E\u5927\u5BB6\u7684\u4F7F\u7528\u60C5\u51B5\u6301\u7EED\u7EF4\u62A4\uFF0C\u521D\u4EE3\u7248\u672C\u53EF\u80FD\u5B58\u5728\u4E0D\u5B8C\u5584\u6216 BUG\uFF0C\u6B22\u8FCE\u53CD\u9988\u3002

    ',5),p=e("\u9879\u76EE\u5730\u5740 "),u={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder",target:"_blank",rel:"noopener noreferrer"},_=e("YukiHookAPI-ProjectBuilder"),k=e("\u3002"),g=e("\u82E5\u4F60\u60F3\u76F4\u63A5\u4E0B\u8F7D\u53EF\u4EE5 "),f={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases",target:"_blank",rel:"noopener noreferrer"},b=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u524D\u5F80 Release \u53D1\u5E03\u5730\u5740\u3002"),x=a('

    \u4F7F\u7528\u65B9\u6CD5

    \u8FD9\u91CC\u5305\u542B\u4E86\u57FA\u672C\u7684\u4F7F\u7528\u65B9\u6CD5\u548C\u529F\u80FD\u8BB2\u89E3\u3002

    \u57FA\u672C\u7528\u6CD5

    • \u8F6F\u4EF6\u4F7F\u7528\u8FC7\u7A0B\u9700\u8981\u5F53\u524D\u8BBE\u5907\u5DF2\u8FDE\u63A5\u4E92\u8054\u7F51\uFF0C\u82E5\u9879\u76EE\u4F9D\u8D56\u65E0\u6CD5\u641C\u7D22\u8BF7\u5C1D\u8BD5 \u79D1\u5B66\u4E0A\u7F51 \u3002

    • \u542F\u52A8\u8F6F\u4EF6\u540E\uFF0C\u5BF9\u4F60\u671F\u671B\u521B\u5EFA\u7684\u9879\u76EE\u8FDB\u884C\u7B80\u5355\u914D\u7F6E\uFF0C\u70B9\u51FB\u53F3\u4E0B\u89D2\u7684 \u6309\u94AE \u6216\u83DC\u5355\u680F\u9009\u62E9 \u9879\u76EE > \u5F00\u59CB\u521B\u5EFA \u5373\u53EF\u5F00\u59CB\u4EFB\u52A1\u3002

    • \u7B49\u5F85\u4F9D\u8D56\u81EA\u52A8\u641C\u7D22\u5B8C\u6210\u540E\uFF0C\u4F60\u53EF\u4EE5\u5BF9\u9879\u76EE\u4F9D\u8D56\u8FDB\u884C\u914D\u7F6E\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6700\u65B0\u4F9D\u8D56\u4FDD\u8BC1\u9879\u76EE\u7684\u7A33\u5B9A\u6027\uFF0C\u6784\u5EFA\u5DE5\u5177\u4E5F\u4EC5\u5BF9\u6700\u65B0\u4F9D\u8D56\u8FDB\u884C\u652F\u6301\u3002

    • \u9009\u62E9\u4F60\u9700\u8981\u521B\u5EFA\u9879\u76EE\u7684\u76EE\u5F55\uFF0C\u5F00\u59CB\u540E\u9879\u76EE\u4F1A\u5728\u4F60\u9009\u62E9\u7684\u4F4D\u7F6E\u4E2D\u521B\u5EFA\uFF0C\u5E76\u7B49\u5F85\u6574\u4E2A\u8FC7\u7A0B\u5B8C\u6210\uFF0C\u9879\u76EE\u5C31\u521B\u5EFA\u597D\u4E86\u3002

    \u914D\u7F6E\u6A21\u677F

    \u914D\u7F6E\u6A21\u677F\u662F\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u9009\u62E9\u83DC\u5355\u680F \u9879\u76EE > \u914D\u7F6E\u6A21\u677F > \u65B0\u5EFA\u6A21\u677F\uFF0C\u5373\u53EF\u4F7F\u7528\u5F53\u524D\u586B\u5199\u7684\u914D\u7F6E\u521B\u5EFA\u4E00\u4EFD\u6A21\u677F\uFF0C\u4E0B\u6B21\u53EF\u4EE5\u4ECE \u5DF2\u4FDD\u5B58\u7684\u6A21\u677F \u4E2D\u91CD\u65B0\u8F7D\u5165\u6A21\u677F\uFF0C\u5373\u53EF\u8FD8\u539F\u5F53\u524D\u914D\u7F6E\u3002

    \u591A\u8BED\u8A00\u652F\u6301

    \u8F6F\u4EF6\u8BED\u8A00\u8DDF\u968F\u5F53\u524D\u7CFB\u7EDF\uFF0C\u4F60\u53EF\u4EE5\u5728\u83DC\u5355\u680F \u8BED\u8A00 (Language) \u4E00\u680F\u624B\u52A8\u9009\u62E9\u8F6F\u4EF6\u7684\u754C\u9762\u8BED\u8A00\u3002

    ',8);function P(I,A){const t=n("ExternalLinkIcon");return s(),d("div",null,[l,o("p",null,[p,o("a",u,[_,r(t)]),k]),o("p",null,[g,o("a",f,[b,r(t)]),m]),x])}const j=i(c,[["render",P],["__file","yukihookapi-projectbuilder.html.vue"]]);export{j as default}; +import{_ as i,r as n,o as s,c as d,b as o,d as r,a,e}from"./app.2bc5d8f3.js";const h="/YukiHookAPI/images/yukihookapi-projectbuilder-zh-cn.png",c={},l=a('

    YukiHookAPI \u6784\u5EFA\u5DE5\u5177

    \u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 YukiHookAPI \u4F5C\u4E3A\u6838\u5FC3\u7684 Xposed \u6A21\u5757\u81EA\u52A8\u6784\u5EFA\u5DE5\u5177\u3002

    \u5B9E\u73B0\u81EA\u52A8\u5316\u641C\u7D22\u4F9D\u8D56\u5FEB\u901F\u642D\u5EFA\u4E00\u4E2A\u5305\u542B Xposed \u6A21\u5757\u73AF\u5883\u7684 Android \u9879\u76EE\u6A21\u677F\u3002

    \u83B7\u53D6\u9879\u76EE

    \u672C\u9879\u76EE\u5B8C\u5168\u5F00\u6E90\u514D\u8D39\uFF0C\u4E14\u4F1A\u6839\u636E\u5927\u5BB6\u7684\u4F7F\u7528\u60C5\u51B5\u6301\u7EED\u7EF4\u62A4\uFF0C\u521D\u4EE3\u7248\u672C\u53EF\u80FD\u5B58\u5728\u4E0D\u5B8C\u5584\u6216 BUG\uFF0C\u6B22\u8FCE\u53CD\u9988\u3002

    ',5),p=e("\u9879\u76EE\u5730\u5740 "),u={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder",target:"_blank",rel:"noopener noreferrer"},_=e("YukiHookAPI-ProjectBuilder"),k=e("\u3002"),g=e("\u82E5\u4F60\u60F3\u76F4\u63A5\u4E0B\u8F7D\u53EF\u4EE5 "),f={href:"https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases",target:"_blank",rel:"noopener noreferrer"},b=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u524D\u5F80 Release \u53D1\u5E03\u5730\u5740\u3002"),x=a('

    \u4F7F\u7528\u65B9\u6CD5

    \u8FD9\u91CC\u5305\u542B\u4E86\u57FA\u672C\u7684\u4F7F\u7528\u65B9\u6CD5\u548C\u529F\u80FD\u8BB2\u89E3\u3002

    \u57FA\u672C\u7528\u6CD5

    • \u8F6F\u4EF6\u4F7F\u7528\u8FC7\u7A0B\u9700\u8981\u5F53\u524D\u8BBE\u5907\u5DF2\u8FDE\u63A5\u4E92\u8054\u7F51\uFF0C\u82E5\u9879\u76EE\u4F9D\u8D56\u65E0\u6CD5\u641C\u7D22\u8BF7\u5C1D\u8BD5 \u79D1\u5B66\u4E0A\u7F51 \u3002

    • \u542F\u52A8\u8F6F\u4EF6\u540E\uFF0C\u5BF9\u4F60\u671F\u671B\u521B\u5EFA\u7684\u9879\u76EE\u8FDB\u884C\u7B80\u5355\u914D\u7F6E\uFF0C\u70B9\u51FB\u53F3\u4E0B\u89D2\u7684 \u6309\u94AE \u6216\u83DC\u5355\u680F\u9009\u62E9 \u9879\u76EE > \u5F00\u59CB\u521B\u5EFA \u5373\u53EF\u5F00\u59CB\u4EFB\u52A1\u3002

    • \u7B49\u5F85\u4F9D\u8D56\u81EA\u52A8\u641C\u7D22\u5B8C\u6210\u540E\uFF0C\u4F60\u53EF\u4EE5\u5BF9\u9879\u76EE\u4F9D\u8D56\u8FDB\u884C\u914D\u7F6E\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6700\u65B0\u4F9D\u8D56\u4FDD\u8BC1\u9879\u76EE\u7684\u7A33\u5B9A\u6027\uFF0C\u6784\u5EFA\u5DE5\u5177\u4E5F\u4EC5\u5BF9\u6700\u65B0\u4F9D\u8D56\u8FDB\u884C\u652F\u6301\u3002

    • \u9009\u62E9\u4F60\u9700\u8981\u521B\u5EFA\u9879\u76EE\u7684\u76EE\u5F55\uFF0C\u5F00\u59CB\u540E\u9879\u76EE\u4F1A\u5728\u4F60\u9009\u62E9\u7684\u4F4D\u7F6E\u4E2D\u521B\u5EFA\uFF0C\u5E76\u7B49\u5F85\u6574\u4E2A\u8FC7\u7A0B\u5B8C\u6210\uFF0C\u9879\u76EE\u5C31\u521B\u5EFA\u597D\u4E86\u3002

    \u914D\u7F6E\u6A21\u677F

    \u914D\u7F6E\u6A21\u677F\u662F\u4E00\u4E2A\u6269\u5C55\u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u9009\u62E9\u83DC\u5355\u680F \u9879\u76EE > \u914D\u7F6E\u6A21\u677F > \u65B0\u5EFA\u6A21\u677F\uFF0C\u5373\u53EF\u4F7F\u7528\u5F53\u524D\u586B\u5199\u7684\u914D\u7F6E\u521B\u5EFA\u4E00\u4EFD\u6A21\u677F\uFF0C\u4E0B\u6B21\u53EF\u4EE5\u4ECE \u5DF2\u4FDD\u5B58\u7684\u6A21\u677F \u4E2D\u91CD\u65B0\u8F7D\u5165\u6A21\u677F\uFF0C\u5373\u53EF\u8FD8\u539F\u5F53\u524D\u914D\u7F6E\u3002

    \u591A\u8BED\u8A00\u652F\u6301

    \u8F6F\u4EF6\u8BED\u8A00\u8DDF\u968F\u5F53\u524D\u7CFB\u7EDF\uFF0C\u4F60\u53EF\u4EE5\u5728\u83DC\u5355\u680F \u8BED\u8A00 (Language) \u4E00\u680F\u624B\u52A8\u9009\u62E9\u8F6F\u4EF6\u7684\u754C\u9762\u8BED\u8A00\u3002

    ',8);function P(I,A){const t=n("ExternalLinkIcon");return s(),d("div",null,[l,o("p",null,[p,o("a",u,[_,r(t)]),k]),o("p",null,[g,o("a",f,[b,r(t)]),m]),x])}const j=i(c,[["render",P],["__file","yukihookapi-projectbuilder.html.vue"]]);export{j as default}; diff --git a/docs/en/about/about.html b/docs/en/about/about.html index 41794df3e..c1316d5c4 100644 --- a/docs/en/about/about.html +++ b/docs/en/about/about.html @@ -23,7 +23,7 @@ } About this Document | Yuki Hook API - + @@ -49,6 +49,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    Copyright © 2019-2023 HighCapable

    - + diff --git a/docs/en/about/changelog.html b/docs/en/about/changelog.html index f25f66334..cd7dee0fc 100644 --- a/docs/en/about/changelog.html +++ b/docs/en/about/changelog.html @@ -23,11 +23,11 @@ } Changelog | Yuki Hook API - + -

    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

    1.1.5 | 2023.01.13  latest

    • 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 protection
    • YukiHookDataChannel 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 data
    • YukiHookDataChannel has added the function of automatically segmenting when the sent data is too large, only supports List, Map, Set, String types
    • YukiHookLogger 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.1.4 | 2022.10.04  stale

    • 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.1.3 | 2022.09.30  stale

    • Fixed a fatal bug where the Hook entry class name could not be customized
    • Added some code notes in LoggerFactory and updated special features documentation

    1.1.2 | 2022.09.30  outdate

    • 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.1.1 | 2022.09.28  outdate

    • Fixed the problem of wrong document friend links in Basic Knowledge page
    • Fixed document favicon not showing up
    • Fixed bug in DexClassFinder search conditions

    1.1.0 | 2022.09.28  outdate

    • This is a major version update, please refer to API Document and Special Features for the changes and usage mentioned in the changelog
    • Change the help documentation framework to VuePressopen in new window
    • 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 only
    • Convert Class and Method of Hook App Demo to Java to provide better demo effect
    • Fixed code comment naming in Hook Module Demo
    • Refactored a lot of low-level Hook logic and the docking method of Xposed API
    • Removed 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 array
    • Optimized automatic handler to merge referenced jar into stub project
    • 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 5ec1cffopen in new window for the feedback and solutions provided
    • Internal closure processing for the methods of API private tool classes to avoid polluting the top-level namespace
    • Fixed Creater naming to Creator for all reflection and Hook classes
    • Added YukiHookAPI.Status.compiledTimestamp function, which can get the compilation completion timestamp when used as an Xposed module
    • Added YukiHookAPI.Status.isXposedEnvironment function, which can determine whether the current (Xposed) host environment or module environment is
    • The 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 configuration
    • Added 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 calling
    • CurrentClass adds name and simpleName functions
    • Completely rewrite the core method of ReflectionTool, sorting and classifying different search conditions
    • Fixed the problem that Member obtained by directly calling declared in ReflectionTool throws an exception
    • Fixed UndefinedType in ReflectionTool is not correctly judged in Method and Constructor conditions
    • Added a friendly prompt method when the reflection search result is abnormal, which can specifically locate the problem that Member cannot be found under specified conditions
    • Added 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 in
    • Added paramCount { ... } condition in Method and Constructor of reflection search, now you can directly get it in it to customize your judgment condition
    • The current method is added to the FieldFinder result, which can directly create a call space for the result instance
    • Modified 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
    • as* function in ModifierRules renamed to is*, thanks to Kitsuneopen in new window suggestion
    • 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
    • Added multiple search function in reflection search, you can use relative search conditions to obtain multiple search results at the same time, thanks to AA and Kitsuneopen in new window for suggestions
    • Fixed the problem that the object obtained by appClassLoader is incorrect in system applications in some systems, thanks to Luckyzyxopen in new window for the feedback
    • Modified the calling method of XposedBridge.invokeOriginalMethod and added original function in MethodFinder.Result.Instance
    • Fixed the problem of wrong value of getStringSet method in YukiHookModulePrefs and optimize the code style, thanks to Teddy_Zhuopen in new window PRopen in new window
    • Modify YukiHookModulePrefs to intercept exceptions that may not exist in XSharePreference
    • Fixed the problem that YukiHookDataChannel could not be successfully registered in some third-party ROM system frameworks
    • Secured YukiHookDataChannel, now it can only communicate between modules from the specified package name and the host
    • Added automatic hook SharedPreferences to fix the problem that file permissions are not 0664 in some systems, thanks to 5ec1cffopen in new window for the feedback and implementation code provided
    • Added YukiHookAPI.Configs.isEnableHookSharedPreferences function, which is disabled by default and can be enabled if the permission of SharedPreferences is incorrect
    • Fixed 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 feedback
    • Detach 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 declared
    • Added module resource injection and Activity proxy functions, you can call injectModuleAppResources and registerModuleAppActivities to use
    • Added 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 called
    • obsolete classOf and clazz extension methods, add toClass and toClassOrNull usage, please move to the new method now
    • VariousClass 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 host
    • The onFailureThrowToApp function is added to the Hook callback, which can be directly thrown to the host when an exception occurs
    • Modified the printing logic of the debug log, the time-consuming records in the reflection search function will only be printed during the Hook process
    • Added the function of removing Hook in the Hook process, you can use the remove and removeSelf methods to remove the hook
    • Fixed 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 function
    • Added 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
    • Added array type to Resources Hook, thanks to PRopen in new window of GSWXXNopen in new window
    • Moved me.weishu.reflection to thirdparty to prevent conflicting dependencies of the same name introduced at the same time
    • Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log
    • Modify the exception handling logic of AppLifecycle and throw it directly to the host when an exception occurs
    • Updated Demo API version to 33

    1.0.92 | 2022.05.31  outdate

    • 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.0.91 | 2022.05.29  outdate

    • Fixed the ClassLoader error when the customized system of some devices is booted in the LSPosed environment, thanks to Luckyzyxopen in new window for the feedback
    • Fixed YukiHookDataChannel not being able to call back the current Activity broadcast on ZUI and systems below Android 12
    • Integrate 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

    1.0.90 | 2022.05.27  outdate

    • 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.0.89 | 2022.05.26  outdate

    • 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.0.88 | 2022.05.25  outdate

    • 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.0.87 | 2022.05.10  outdate

    • Added refreshModuleAppResources function to adapt Resources refresh when the language region, font size, resolution changes, etc.
    • Added isEnableModuleAppResourcesCache function, you can set whether to automatically cache the resources of the current module

    1.0.86 | 2022.05.06  outdate

    • Fixed the problem of continuous error reporting during initZygote when Resources Hook is not supported, reproduced in ZUI/LSPosed CI(1.8.3-6550)
    • Optimize and handle exceptions for Resources Hook, only print errors and warnings if they are used and not supported

    1.0.85 | 2022.05.04  outdate

    • Fixed a serious problem of not being able to hook the system framework, since 1.0.80
    • Added in the debug log to distinguish the package name loaded by initZygote as android-zygote, packageName keeps android unchanged

    1.0.83 | 2022.05.04  outdate

    • Fixed YukiHookModuleStatus reporting a lot of errors after loadSystem
    • Added android type in type
    • Updated example descriptions in help documentation

    1.0.82 | 2022.05.04  outdate

    • Fixed a concept confusion error, distinguishing the relationship between initZygote and the system framework, there are problems with the previous comments and documentation, I am very sorry
    • PackageParam adds loadSystem method, no need to write loadApp(name = "android") to hook the system framework

    1.0.81 | 2022.05.04  outdate

    • 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 by method
    • 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.0.80 | 2022.05.01  outdate

    • The InjectYukiHookWithXposed annotation adds the entryClassName function, which can customize the generated xposed_init entry class name
    • YukiHookXposedInitProxy renamed to IYukiHookXposedInit, the original interface name has been invalidated and will be deleted directly in subsequent versions
    • Added initZygote and Resources Hook functions to support Hook Layout
    • Added onXposedEvent method to listen to all events of native Xposed API
    • Perform inline processing on the lambda of the Hook function to avoid generating excessively broken anonymous classes and improve the running performance after compilation
    • Fixed PrefsData compiled method body copy is too large
    • Added XSharePreference readability test, which will automatically print a warning log if it fails
    • PackageParam adds appResources, moduleAppResources, moduleAppFilePath functions
    • loadApp of PackageParam adds the function of not writing name, and all APPs are filtered by default
    • PackageParam adds the loadZygote method, which can directly hook the system framework
    • PackageParam added resources().hook function
    • Optimization method, construction method, variable search function, the error log that cannot be found will display the set query conditions first
    • Added hasExtends extension method to determine whether the current Class has an inheritance relationship
    • Added isSupportResourcesHook function to determine whether resource hooks are currently supported (Resources Hook)
    • current function adds superClass method to call superclass
    • New superClass query conditions for search methods, construction methods and variables, you can continue to search in the parent class
    • YukiHookAPI lots of methods are decoupled from Xposed API
    • Added native Hook priority function of Xposed API
    • Fixed the problem that isFirstApplication may be inaccurate
    • Block the problem that MiuiCatcherPatch repeatedly calls the Hook entry method on the MIUI system
    • Optimize Hook entry calling method to avoid multiple calls due to Hook Framework issues
    • Fixed the problem that Hook ClassLoader causes Hook to freeze, thanks to WankkoReeopen in new window for the feedback
    • Improve the performance after the XC_Callback interface is connected
    • Java type added ClassLoader type
    • Optimize the API help documentation, fix the problem that the page may be continuously cached

    1.0.78 | 2022.04.18  outdate

    • YukiHookModulePrefs adds isRunInNewXShareMode method, which can be used to determine whether the module is currently in New XSharePreference mode
    • Fixed YukiHookModulePrefs working in New XSharePreference mode
    • Added ModulePreferenceFragment, now you can completely replace PreferenceFragmentCompat and start using the new functionality
    • Adapt the Sp data storage solution of PreferenceFragmentCompat, thanks to mahoshojoHCGopen in new window for feedback
    • Update autohandlers and Kotlin dependencies to the latest version
    • Fixed some bugs in documentation and code comments

    1.0.77 | 2022.04.15  outdate

    • YukiHookModulePrefs added clear method, thanks to WankkoReeopen in new window for the suggestion
    • YukiHookModulePrefs added getStringSet, putStringSet, all methods
    • Added any method to args of HookParam
    • Added ModuleApplication, which can be inherited in modules to achieve more functions
    • Connect all findClass functions to the Xposed API, and continue to use native ClassLoader in non-hosted environments
    • Fixed some possible bugs

    1.0.75 | 2022.04.13  outdate

    • Corrected the logic recognition part of the automatic handler, thanks to ApeaSuperzopen in new window contribution
    • Fixed an issue where the reference to a doc comment was not changed
    • firstArgs and lastArgs methods have been removed from HookParam, now you can use args().first() and args().last() instead of it
    • Removed default parameter index = 0 in args() in HookParam, now you can use args().first() or args(index = 0) to replace it
    • The result function in HookParam adds generic matching, now you can use result<T> to match the known return value type of your target method
    • The 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 improved
    • Added android type in type

    1.0.73 | 2022.04.10  outdate

    • Fixed some Chinese translation errors in documents, thanks to WankkoReeopen in new window for their contributions
    • Fixed the problem that XC_LoadPackage.LoadPackageParam throws an exception when the content is empty in some cases, thanks to Luckyzyxopen in new window for the feedback
    • Fixed some known bugs and improve Hook stability

    1.0.72 | 2022.04.09  outdate

    • Update API documentation to new address
    • Add appContext function to PackageParam
    • Fixed some known bugs and improve Hook stability

    1.0.71 | 2022.04.04  outdate

    • Fixed a serious issue that would stop the Hook from throwing an exception when VariousClass could not be matched

    1.0.70 | 2022.04.04  outdate

    • Fixed instanceClass reporting an error after being called in a static instance
    • Add isUseAppClassLoader function in Hook process, thanks to WankkoReeopen in new window for feedback
    • Added the withProcess function, which can be hooked according to the currently specified process of the APP
    • Fixed critical logic errors in lookup methods, constructor classes and variables
    • Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist
    • Fixed the problem that the Hook could not take effect due to the fast loading of the APP startup method in some cases
    • Fixed allMethods not throwing an exception when it is not hooked to a method, thanks to WankkoReeopen in new window for the feedback
    • Added Hook status monitoring function, thanks to WankkoReeopen in new window for the suggestion
    • Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API
    • Added obfuscated method and variable lookup function, you can use different types of filter index to locate the specified method and variable, thanks to WankkoReeopen in new window for the ideas provided
    • When looking for methods and variables, multiple types are allowed, such as the class name declared by String and VariousClass
    • Add a new current function, which can build a reflection method operation space for any class, and easily call and modify the methods and variables in it
    • Fixed a lot of bugs in the hook process, thanks to WankkoReeopen in new window for contributing to this project

    1.0.69 | 2022.03.30  outdate

    • Added and improved annotations for some method functions
    • Added more example Hook content in Demo
    • Fixed the issue that only the last one takes effect when allMethods is used multiple times in a Hook instance, thanks to WankkoReeopen in new window for the feedback

    1.0.68 | 2022.03.29  outdate

    • 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.0.67 | 2022.03.27  outdate

    • 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.0.66 | 2022.03.25  outdate

    • Fixed a serious bug in MethodFinder
    • Added args call method in hookParam
    • Fixed other possible problems and fix some class annotation problems

    1.0.65 | 2022.03.25  outdate

    • 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.0.6 | 2022.03.20  outdate

    • 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.0.55 | 2022.03.18  outdate

    • Fixed an annotation error
    • Temporarily fix a bug
    • Added a large number of android types in type and a small number of java types
    • Fixed compatibility issues between new and old Kotlin APIs

    1.0.5 | 2022.03.18  outdate

    • 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.0.4 | 2022.03.06  outdate

    • 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.0.3 | 2022.03.02  outdate

    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook

    1.0.2 | 2022.02.18  outdate

    • Fixed the problem that the project path cannot be found under Windows
    • Remove part of reflection API, merge into BaseFinder for integration
    • Add a method to create Hook directly using string

    1.0.1 | 2022.02.15  outdate

    • RemedyPlan adds onFind function
    • Integrate and modify some reflection API code
    • Added java type in type
    • Fixed the issue that ignored errors still output in the console

    1.0 | 2022.02.14  outdate

    • The first version is submitted to Maven
    - +

    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

    1.1.6 | 2023.01.21  latest

    • 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.1.5 | 2023.01.13  stale

    • 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 protection
    • YukiHookDataChannel 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 data
    • YukiHookDataChannel has added the function of automatically segmenting when the sent data is too large, only supports List, Map, Set, String types
    • YukiHookLogger 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.1.4 | 2022.10.04  stale

    • 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.1.3 | 2022.09.30  stale

    • Fixed a fatal bug where the Hook entry class name could not be customized
    • Added some code notes in LoggerFactory and updated special features documentation

    1.1.2 | 2022.09.30  outdate

    • 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.1.1 | 2022.09.28  outdate

    • Fixed the problem of wrong document friend links in Basic Knowledge page
    • Fixed document favicon not showing up
    • Fixed bug in DexClassFinder search conditions

    1.1.0 | 2022.09.28  outdate

    • This is a major version update, please refer to API Document and Special Features for the changes and usage mentioned in the changelog
    • Change the help documentation framework to VuePressopen in new window
    • 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 only
    • Convert Class and Method of Hook App Demo to Java to provide better demo effect
    • Fixed code comment naming in Hook Module Demo
    • Refactored a lot of low-level Hook logic and the docking method of Xposed API
    • Removed 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 array
    • Optimized automatic handler to merge referenced jar into stub project
    • 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 5ec1cffopen in new window for the feedback and solutions provided
    • Internal closure processing for the methods of API private tool classes to avoid polluting the top-level namespace
    • Fixed Creater naming to Creator for all reflection and Hook classes
    • Added YukiHookAPI.Status.compiledTimestamp function, which can get the compilation completion timestamp when used as an Xposed module
    • Added YukiHookAPI.Status.isXposedEnvironment function, which can determine whether the current (Xposed) host environment or module environment is
    • The 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 configuration
    • Added 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 calling
    • CurrentClass adds name and simpleName functions
    • Completely rewrite the core method of ReflectionTool, sorting and classifying different search conditions
    • Fixed the problem that Member obtained by directly calling declared in ReflectionTool throws an exception
    • Fixed UndefinedType in ReflectionTool is not correctly judged in Method and Constructor conditions
    • Added a friendly prompt method when the reflection search result is abnormal, which can specifically locate the problem that Member cannot be found under specified conditions
    • Added 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 in
    • Added paramCount { ... } condition in Method and Constructor of reflection search, now you can directly get it in it to customize your judgment condition
    • The current method is added to the FieldFinder result, which can directly create a call space for the result instance
    • Modified 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
    • as* function in ModifierRules renamed to is*, thanks to Kitsuneopen in new window suggestion
    • 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
    • Added multiple search function in reflection search, you can use relative search conditions to obtain multiple search results at the same time, thanks to AA and Kitsuneopen in new window for suggestions
    • Fixed the problem that the object obtained by appClassLoader is incorrect in system applications in some systems, thanks to Luckyzyxopen in new window for the feedback
    • Modified the calling method of XposedBridge.invokeOriginalMethod and added original function in MethodFinder.Result.Instance
    • Fixed the problem of wrong value of getStringSet method in YukiHookModulePrefs and optimize the code style, thanks to Teddy_Zhuopen in new window PRopen in new window
    • Modify YukiHookModulePrefs to intercept exceptions that may not exist in XSharePreference
    • Fixed the problem that YukiHookDataChannel could not be successfully registered in some third-party ROM system frameworks
    • Secured YukiHookDataChannel, now it can only communicate between modules from the specified package name and the host
    • Added automatic hook SharedPreferences to fix the problem that file permissions are not 0664 in some systems, thanks to 5ec1cffopen in new window for the feedback and implementation code provided
    • Added YukiHookAPI.Configs.isEnableHookSharedPreferences function, which is disabled by default and can be enabled if the permission of SharedPreferences is incorrect
    • Fixed 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 feedback
    • Detach 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 declared
    • Added module resource injection and Activity proxy functions, you can call injectModuleAppResources and registerModuleAppActivities to use
    • Added 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 called
    • obsolete classOf and clazz extension methods, add toClass and toClassOrNull usage, please move to the new method now
    • VariousClass 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 host
    • The onFailureThrowToApp function is added to the Hook callback, which can be directly thrown to the host when an exception occurs
    • Modified the printing logic of the debug log, the time-consuming records in the reflection search function will only be printed during the Hook process
    • Added the function of removing Hook in the Hook process, you can use the remove and removeSelf methods to remove the hook
    • Fixed 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 function
    • Added 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
    • Added array type to Resources Hook, thanks to PRopen in new window of GSWXXNopen in new window
    • Moved me.weishu.reflection to thirdparty to prevent conflicting dependencies of the same name introduced at the same time
    • Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log
    • Modify the exception handling logic of AppLifecycle and throw it directly to the host when an exception occurs
    • Updated Demo API version to 33

    1.0.92 | 2022.05.31  outdate

    • 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.0.91 | 2022.05.29  outdate

    • Fixed the ClassLoader error when the customized system of some devices is booted in the LSPosed environment, thanks to Luckyzyxopen in new window for the feedback
    • Fixed YukiHookDataChannel not being able to call back the current Activity broadcast on ZUI and systems below Android 12
    • Integrate 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

    1.0.90 | 2022.05.27  outdate

    • 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.0.89 | 2022.05.26  outdate

    • 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.0.88 | 2022.05.25  outdate

    • 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.0.87 | 2022.05.10  outdate

    • Added refreshModuleAppResources function to adapt Resources refresh when the language region, font size, resolution changes, etc.
    • Added isEnableModuleAppResourcesCache function, you can set whether to automatically cache the resources of the current module

    1.0.86 | 2022.05.06  outdate

    • Fixed the problem of continuous error reporting during initZygote when Resources Hook is not supported, reproduced in ZUI/LSPosed CI(1.8.3-6550)
    • Optimize and handle exceptions for Resources Hook, only print errors and warnings if they are used and not supported

    1.0.85 | 2022.05.04  outdate

    • Fixed a serious problem of not being able to hook the system framework, since 1.0.80
    • Added in the debug log to distinguish the package name loaded by initZygote as android-zygote, packageName keeps android unchanged

    1.0.83 | 2022.05.04  outdate

    • Fixed YukiHookModuleStatus reporting a lot of errors after loadSystem
    • Added android type in type
    • Updated example descriptions in help documentation

    1.0.82 | 2022.05.04  outdate

    • Fixed a concept confusion error, distinguishing the relationship between initZygote and the system framework, there are problems with the previous comments and documentation, I am very sorry
    • PackageParam adds loadSystem method, no need to write loadApp(name = "android") to hook the system framework

    1.0.81 | 2022.05.04  outdate

    • 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 by method
    • 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.0.80 | 2022.05.01  outdate

    • The InjectYukiHookWithXposed annotation adds the entryClassName function, which can customize the generated xposed_init entry class name
    • YukiHookXposedInitProxy renamed to IYukiHookXposedInit, the original interface name has been invalidated and will be deleted directly in subsequent versions
    • Added initZygote and Resources Hook functions to support Hook Layout
    • Added onXposedEvent method to listen to all events of native Xposed API
    • Perform inline processing on the lambda of the Hook function to avoid generating excessively broken anonymous classes and improve the running performance after compilation
    • Fixed PrefsData compiled method body copy is too large
    • Added XSharePreference readability test, which will automatically print a warning log if it fails
    • PackageParam adds appResources, moduleAppResources, moduleAppFilePath functions
    • loadApp of PackageParam adds the function of not writing name, and all APPs are filtered by default
    • PackageParam adds the loadZygote method, which can directly hook the system framework
    • PackageParam added resources().hook function
    • Optimization method, construction method, variable search function, the error log that cannot be found will display the set query conditions first
    • Added hasExtends extension method to determine whether the current Class has an inheritance relationship
    • Added isSupportResourcesHook function to determine whether resource hooks are currently supported (Resources Hook)
    • current function adds superClass method to call superclass
    • New superClass query conditions for search methods, construction methods and variables, you can continue to search in the parent class
    • YukiHookAPI lots of methods are decoupled from Xposed API
    • Added native Hook priority function of Xposed API
    • Fixed the problem that isFirstApplication may be inaccurate
    • Block the problem that MiuiCatcherPatch repeatedly calls the Hook entry method on the MIUI system
    • Optimize Hook entry calling method to avoid multiple calls due to Hook Framework issues
    • Fixed the problem that Hook ClassLoader causes Hook to freeze, thanks to WankkoReeopen in new window for the feedback
    • Improve the performance after the XC_Callback interface is connected
    • Java type added ClassLoader type
    • Optimize the API help documentation, fix the problem that the page may be continuously cached

    1.0.78 | 2022.04.18  outdate

    • YukiHookModulePrefs adds isRunInNewXShareMode method, which can be used to determine whether the module is currently in New XSharePreference mode
    • Fixed YukiHookModulePrefs working in New XSharePreference mode
    • Added ModulePreferenceFragment, now you can completely replace PreferenceFragmentCompat and start using the new functionality
    • Adapt the Sp data storage solution of PreferenceFragmentCompat, thanks to mahoshojoHCGopen in new window for feedback
    • Update autohandlers and Kotlin dependencies to the latest version
    • Fixed some bugs in documentation and code comments

    1.0.77 | 2022.04.15  outdate

    • YukiHookModulePrefs added clear method, thanks to WankkoReeopen in new window for the suggestion
    • YukiHookModulePrefs added getStringSet, putStringSet, all methods
    • Added any method to args of HookParam
    • Added ModuleApplication, which can be inherited in modules to achieve more functions
    • Connect all findClass functions to the Xposed API, and continue to use native ClassLoader in non-hosted environments
    • Fixed some possible bugs

    1.0.75 | 2022.04.13  outdate

    • Corrected the logic recognition part of the automatic handler, thanks to ApeaSuperzopen in new window contribution
    • Fixed an issue where the reference to a doc comment was not changed
    • firstArgs and lastArgs methods have been removed from HookParam, now you can use args().first() and args().last() instead of it
    • Removed default parameter index = 0 in args() in HookParam, now you can use args().first() or args(index = 0) to replace it
    • The result function in HookParam adds generic matching, now you can use result<T> to match the known return value type of your target method
    • The 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 improved
    • Added android type in type

    1.0.73 | 2022.04.10  outdate

    • Fixed some Chinese translation errors in documents, thanks to WankkoReeopen in new window for their contributions
    • Fixed the problem that XC_LoadPackage.LoadPackageParam throws an exception when the content is empty in some cases, thanks to Luckyzyxopen in new window for the feedback
    • Fixed some known bugs and improve Hook stability

    1.0.72 | 2022.04.09  outdate

    • Update API documentation to new address
    • Add appContext function to PackageParam
    • Fixed some known bugs and improve Hook stability

    1.0.71 | 2022.04.04  outdate

    • Fixed a serious issue that would stop the Hook from throwing an exception when VariousClass could not be matched

    1.0.70 | 2022.04.04  outdate

    • Fixed instanceClass reporting an error after being called in a static instance
    • Add isUseAppClassLoader function in Hook process, thanks to WankkoReeopen in new window for feedback
    • Added the withProcess function, which can be hooked according to the currently specified process of the APP
    • Fixed critical logic errors in lookup methods, constructor classes and variables
    • Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist
    • Fixed the problem that the Hook could not take effect due to the fast loading of the APP startup method in some cases
    • Fixed allMethods not throwing an exception when it is not hooked to a method, thanks to WankkoReeopen in new window for the feedback
    • Added Hook status monitoring function, thanks to WankkoReeopen in new window for the suggestion
    • Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API
    • Added obfuscated method and variable lookup function, you can use different types of filter index to locate the specified method and variable, thanks to WankkoReeopen in new window for the ideas provided
    • When looking for methods and variables, multiple types are allowed, such as the class name declared by String and VariousClass
    • Add a new current function, which can build a reflection method operation space for any class, and easily call and modify the methods and variables in it
    • Fixed a lot of bugs in the hook process, thanks to WankkoReeopen in new window for contributing to this project

    1.0.69 | 2022.03.30  outdate

    • Added and improved annotations for some method functions
    • Added more example Hook content in Demo
    • Fixed the issue that only the last one takes effect when allMethods is used multiple times in a Hook instance, thanks to WankkoReeopen in new window for the feedback

    1.0.68 | 2022.03.29  outdate

    • 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.0.67 | 2022.03.27  outdate

    • 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.0.66 | 2022.03.25  outdate

    • Fixed a serious bug in MethodFinder
    • Added args call method in hookParam
    • Fixed other possible problems and fix some class annotation problems

    1.0.65 | 2022.03.25  outdate

    • 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.0.6 | 2022.03.20  outdate

    • 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.0.55 | 2022.03.18  outdate

    • Fixed an annotation error
    • Temporarily fix a bug
    • Added a large number of android types in type and a small number of java types
    • Fixed compatibility issues between new and old Kotlin APIs

    1.0.5 | 2022.03.18  outdate

    • 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.0.4 | 2022.03.06  outdate

    • 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.0.3 | 2022.03.02  outdate

    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook

    1.0.2 | 2022.02.18  outdate

    • Fixed the problem that the project path cannot be found under Windows
    • Remove part of reflection API, merge into BaseFinder for integration
    • Add a method to create Hook directly using string

    1.0.1 | 2022.02.15  outdate

    • RemedyPlan adds onFind function
    • Integrate and modify some reflection API code
    • Added java type in type
    • Fixed the issue that ignored errors still output in the console

    1.0 | 2022.02.14  outdate

    • The first version is submitted to Maven
    + diff --git a/docs/en/about/contacts.html b/docs/en/about/contacts.html index 8f55f2d03..083c981ab 100644 --- a/docs/en/about/contacts.html +++ b/docs/en/about/contacts.html @@ -23,11 +23,11 @@ } Contact Us | Yuki Hook API - +

    Contact Us

    If you have any questions in use, or have any constructive suggestions, you can contact us.

    Join us Click to join Telegram groupopen in new window

    Find me on Twitter @fankesyooniopen in new window

    Help with Maintenance

    Thank you for choosing and using YukiHookAPI.

    If you have code-related suggestions and requests, you can submit a Pull Request on Github.

    - + diff --git a/docs/en/about/future.html b/docs/en/about/future.html index e27f0801b..6f002fb2b 100644 --- a/docs/en/about/future.html +++ b/docs/en/about/future.html @@ -23,11 +23,11 @@ } Looking for Future | Yuki Hook API - +

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic handler.

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    - + diff --git a/docs/en/api/home.html b/docs/en/api/home.html index 02f141153..6f13a28aa 100644 --- a/docs/en/api/home.html +++ b/docs/en/api/home.html @@ -23,11 +23,11 @@ } Document Introduce | Yuki Hook API - +

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiHookAPI as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt  Kotlin Static File

    • annotation  Annotation Class

    • interface  Interface Class

    • object  Class (Singleton)

    • class  Class

    • field  Field or get / set method or read-only get method

    • method  Method

    • enum  Enum constant

    • ext-field  Extension field (global)

    • ext-method  Extension method (global)

    • i-ext-field  Extension field (internal)

    • i-ext-method  Extension method (internal)

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html b/docs/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html index 6dc2b13fa..8fe3daf61 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html @@ -23,7 +23,7 @@ } YukiHookAPI - object | Yuki Hook API - + @@ -51,8 +51,8 @@

    Change Records

    v1.0.88 added

    Function Illustrate

    是否启用 Hook Xposed 模块激活等状态功能.

    为原生支持 Xposed 模块激活状态检测,此功能默认启用。

    Notice

    关闭后你将不能再在模块环境中使用 YukiHookAPI.Status 中的激活状态判断功能。

    isEnableHookSharedPreferences - field

    var isEnableHookSharedPreferences: Boolean
     

    Change Records

    v1.1.0 added

    Function Illustrate

    是否启用 Hook SharedPreferences

    启用后将在模块启动时强制将 SharedPreferences 文件权限调整为 Context.MODE_WORLD_READABLE (0664)。

    Notice

    这是一个可选的实验性功能,此功能默认不启用。

    仅用于修复某些系统可能会出现在启用了 New XSharedPreferences 后依然出现文件权限错误问题,若你能正常使用 YukiHookModulePrefs 就不建议启用此功能。

    isEnableDataChannel - field

    var isEnableDataChannel: Boolean
     

    Change Records

    v1.0.88 added

    Function Illustrate

    是否启用当前 Xposed 模块与宿主交互的 YukiHookDataChannel 功能。

    请确保 Xposed 模块的 Application 继承于 ModuleApplication 才能有效。

    此功能默认启用,关闭后将不会在功能初始化的时候装载 YukiHookDataChannel

    isEnableMemberCache - field

    var isEnableMemberCache: Boolean
    -

    Change Records

    v1.0.68 added

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    是否启用 Member 缓存功能。

    为防止 Member 复用过高造成的系统 GC 问题,此功能默认启用。

    启用后会缓存已经找到的 MethodConstructorField

    缓存的 Member 都将处于 MemberCacheStore 的全局静态实例中。

    推荐使用 MethodFinderConstructorFinderFieldFinder 来获取 Member

    除非缓存的 Member 发生了混淆的问题,例如使用 R8 混淆后的 APP 的目标 Member,否则建议启用。

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    Change Records

    v1.0 first

    Function Illustrate

    Configs 类实现了一个 lambda 方法体。

    你可以轻松的调用它进行配置。

    Function Example

    你可以在 Hook 入口类的 onInit 方法中调用 configs 方法和 debugLog 方法完成对 API 的功能配置,实时生效。

    The following example

    object HookEntry : IYukiHookXposedInit {
    +

    Change Records

    v1.0.68 added

    Function Illustrate

    是否启用 Member 缓存功能。

    为防止 Member 复用过高造成的系统 GC 问题,此功能默认启用。

    启用后会缓存已经找到的 MethodConstructorField

    缓存的 Member 都将处于 MemberCacheStore 的全局静态实例中。

    推荐使用 MethodFinderConstructorFinderFieldFinder 来获取 Member

    除非缓存的 Member 发生了混淆的问题,例如使用 R8 混淆后的 APP 的目标 Member,否则建议启用。

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    +

    Change Records

    v1.0 first

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    Configs 类实现了一个 lambda 方法体。

    你可以轻松的调用它进行配置。

    Function Example

    你可以在 Hook 入口类的 onInit 方法中调用 configs 方法和 debugLog 方法完成对 API 的功能配置,实时生效。

    The following example

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             YukiHookAPI.configs {
    @@ -128,6 +128,6 @@
     
    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     
    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
     

    Change Records

    v1.0 first

    Function Illustrate

    装载 Hook 入口的核心方法。

    Function Example

    详情请参考

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html b/docs/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html index d69cff6b6..82ea79557 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html @@ -23,7 +23,7 @@ } InjectYukiHookWithXposed - annotation | Yuki Hook API - + @@ -34,6 +34,6 @@ val isUsingResourcesHook: Boolean )

    Change Records

    v1.0 first

    v1.0.80 modified

    新增 entryClassName 参数

    v1.0.92 modified

    新增 isUsingResourcesHook 参数

    Function Illustrate

    标识 YukiHookAPI 注入 Xposed 入口的类注解。

    Function Example

    详情请参考 InjectYukiHookWithXposed Annotation

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html index be02150d6..35c72721e 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html @@ -23,7 +23,7 @@ } CurrentClass - class | Yuki Hook API - + @@ -43,6 +43,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
     

    Change Records

    v1.0.80 added

    Function Illustrate

    调用父类实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
     

    Change Records

    v1.0.80 added

    Function Illustrate

    调用父类实例中的方法。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html index 1aaec204b..8933fe534 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html @@ -23,7 +23,7 @@ } GenericClass - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
     
    inline fun <reified T> argument(index: Int): Class<T>
     

    Change Records

    v1.1.0 added

    v1.1.5 modified

    新增泛型返回值 Class<T> 方法

    Function Illustrate

    获得泛型参数数组下标的 Class 实例。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html index 8c86ec939..4134eb3ff 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html @@ -23,12 +23,12 @@ } HookClass - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    HookClass - class

    class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
     

    Change Records

    v1.0 first

    v1.1.0 modified

    HookClass 相关功能不再对外开放

    Function Illustrate

    创建一个当前 Hook 的 Class 接管类。

    instance 为实例,name 为实例完整包名,throwable 为找不到实例的时候抛出的异常。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html index b305b9c89..6201aa018 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html @@ -23,12 +23,12 @@ } HookResources - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    HookResources - class

    class HookResources internal constructor(var instance: YukiResources?)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    创建一个当前 Hook 的 YukiResources 接管类。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html index f0fd5c662..f937a9ee2 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html @@ -23,7 +23,7 @@ } VariousClass - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    Change Records

    v1.0 first

    v1.1.5 modified

    私有化 name 参数并设置为不可修改

    Function Illustrate

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
     

    Change Records

    v1.0.70 added

    v1.1.5 modified

    新增 initialize 参数

    Function Illustrate

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
     

    Change Records

    v1.1.0 added

    v1.1.5 modified

    新增 initialize 参数

    Function Illustrate

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    匹配不到 Class 会返回 null,不会抛出异常。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html index 3233e2e38..f41f2643f 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html @@ -23,7 +23,7 @@ } YukiMemberHookCreator - class | Yuki Hook API - + @@ -148,6 +148,6 @@

    Change Records

    v1.0.70 added

    Function Illustrate

    监听 hookClass 存在时准备开始 Hook 的操作。

    onHookClassNotFoundFailure - method

    fun onHookClassNotFoundFailure(result: (Throwable) -> Unit): Result
     

    Change Records

    v1.0.3 added

    Function Illustrate

    监听 hookClass 找不到时发生错误的回调方法。

    ignoredHookClassNotFoundFailure - method

    fun ignoredHookClassNotFoundFailure(): Result
     

    Change Records

    v1.0.3 added

    Function Illustrate

    忽略 hookClass 找不到时出现的错误。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html index ad4893a33..b85a23702 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html @@ -23,7 +23,7 @@ } YukiResourcesHookCreator - class | Yuki Hook API - + @@ -122,6 +122,6 @@

    Change Records

    v1.0.80 added

    Function Illustrate

    添加执行 Hook 需要满足的条件,不满足条件将直接停止 Hook。

    onHookingFailure - method

    fun onHookingFailure(result: (Throwable) -> Unit): Result
     

    Change Records

    v1.0.80 added

    Function Illustrate

    监听 Hook 过程发生错误的回调方法。

    ignoredHookingFailure - method

    fun ignoredHookingFailure(): Result
     

    Change Records

    v1.0.80 added

    Function Illustrate

    忽略 Hook 过程出现的错误。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html index e344d475a..01499d90b 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html @@ -23,7 +23,7 @@ } BaseFinder - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    Change Records

    v1.0.70 added

    Function Illustrate

    设置满足条件的第一个。

    last - method

    fun last()
     

    Change Records

    v1.0.70 added

    Function Illustrate

    设置满足条件的最后一个。

    reverse - method

    fun reverse(num: Int)
     

    Change Records

    v1.0.70 added

    Function Illustrate

    设置倒序下标。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html index b6651ad78..d21aeb6ec 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html @@ -23,7 +23,7 @@ } CountRules - class | Yuki Hook API - + @@ -33,6 +33,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    大于 count

    Int.lessThan - i-ext-method

    fun Int.lessThan(count: Int): Boolean
     

    Change Records

    v1.1.0 added

    Function Illustrate

    小于 count

    Int.inInterval - i-ext-method

    fun Int.inInterval(countRange: IntRange): Boolean
     

    Change Records

    v1.1.0 added

    Function Illustrate

    countRange 区间 A ≤ this ≤ B。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html index 33d287e2e..59a35abb6 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html @@ -23,7 +23,7 @@ } ModifierRules - class | Yuki Hook API - + @@ -41,6 +41,6 @@

    Change Records

    v1.0.67 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    Class 类型是否包含 interface

    isAbstract - i-ext-field

    val isAbstract: Boolean
     

    Change Records

    v1.0.67 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    ClassMember 类型是否包含 abstract

    对于任意的抽象 ClassMember 可添加此描述进行确定。

    isStrict - i-ext-field

    val isStrict: Boolean
     

    Change Records

    v1.0.67 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    ClassMember 类型是否包含 strictfp

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html index 13c125446..9cc0d5f10 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html @@ -23,7 +23,7 @@ } NameRules - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    Change Records

    v1.0.88 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    是否只有字母或数字。

    String.isOnlyLowercase - i-ext-method

    fun String.isOnlyLowercase(): Boolean
     

    Change Records

    v1.0.88 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    是否只有小写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    String.isOnlyUppercase - i-ext-method

    fun String.isOnlyUppercase(): Boolean
     

    Change Records

    v1.0.88 added

    v1.1.0 modified

    统一合并到扩展方法并改名

    Function Illustrate

    是否只有大写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html index 9ab399b2c..e8f63f1f7 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html @@ -23,12 +23,12 @@ } ObjectRules - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
     

    Change Records

    v1.1.5 added

    Function Illustrate

    这是一个任意对象条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html index 487592995..60e02c19a 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html @@ -23,7 +23,7 @@ } DexClassFinder - class | Yuki Hook API - + @@ -72,6 +72,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    得到 Class 本身数组 (异步)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将回调空的 HashSet

    你需要设置 async 后此方法才会被回调,否则请使用 all 方法。

    onNoClassDefFoundError - method

    fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    监听找不到 Class 时。

    ignored - method

    fun ignored(): Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    此时若要监听异常结果,你需要手动实现 onNoClassDefFoundError 方法。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html index 5f82cc13b..9ab16d6a5 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html @@ -23,7 +23,7 @@ } ConstructorRules - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    Change Records

    v1.1.5 added

    Function Illustrate

    设置 Constructor 参数条件。

    Pay Attention

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    paramCount - method

    fun paramCount(numRange: IntRange)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html index 8e5cbe893..b6d4ed74e 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html @@ -23,7 +23,7 @@ } FieldRules - class | Yuki Hook API - + @@ -34,6 +34,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Field 名称条件。

    type - method

    fun type(conditions: ObjectConditions)
     

    Change Records

    v1.1.5 added

    Function Illustrate

    设置 Field 类型条件。

    可不填写类型。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html index 194309277..fb9d99399 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html @@ -23,13 +23,13 @@ } MemberRules - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    MemberRules - class

    class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
     

    Change Records

    v1.1.0 added

    Function Illustrate

    Member 查找条件实现类。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Member 标识符筛选条件。

    可不设置筛选条件。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html index ad60230bc..b58f565a4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html @@ -23,7 +23,7 @@ } MethodRules - class | Yuki Hook API - + @@ -40,6 +40,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    returnType - method

    fun returnType(conditions: ObjectConditions)
     

    Change Records

    v1.1.5 added

    Function Illustrate

    设置 Method 返回值条件。

    可不填写返回值。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html index 0a1650939..fbe31a495 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html @@ -23,7 +23,7 @@ } MemberRulesResult - class | Yuki Hook API - + @@ -33,6 +33,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数。

    count - method

    fun count(numRange: IntRange): MemberRulesResult
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数范围。

    count - method

    fun count(conditions: CountConditions): MemberRulesResult
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数条件。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html index 1d01d789f..3cfac676f 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html @@ -23,7 +23,7 @@ } ConstructorFinder - class | Yuki Hook API - + @@ -112,9 +112,9 @@

    onNoSuchConstructor - method

    inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
     

    Change Records

    v1.0 first

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    监听找不到 Constructor 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    isNotIgnoredHookingFailurefalse 则自动忽略。

    Notice

    此时若要监听异常结果,你需要手动实现 onNoSuchConstructor 方法。

    ignoredError - method

    Change Records

    v1.0.3 added

    v1.1.0 deprecated

    请转移到新方法 ignored()

    Instance - class

    inner class Instance internal constructor(private val constructor: Constructor<*>?)
    -

    Change Records

    v1.0.2 added

    v1.1.0 modified

    新增 constructor 参数

    Function Illustrate

    Constructor 实例处理类。

    call - method

    fun call(vararg param: Any?): Any?
    -

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg param: Any?): T?
    -

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - +

    Change Records

    v1.0.2 added

    v1.1.0 modified

    新增 constructor 参数

    Function Illustrate

    Constructor 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    +

    Change Records

    v1.0.2 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg args: Any?): T?
    +

    Change Records

    v1.0.2 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html index b92ade091..26d6165dd 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html @@ -23,7 +23,7 @@ } FieldFinder - class | Yuki Hook API - + @@ -111,6 +111,6 @@

    Change Records

    v1.0 first

    Function Illustrate

    设置当前 Field 实例为 true

    Pay Attention

    请确保实例对象类型为 Boolean

    setFalse - method

    fun setFalse()
     

    Change Records

    v1.0 first

    Function Illustrate

    设置当前 Field 实例为 false

    Pay Attention

    请确保实例对象类型为 Boolean

    setNull - method

    fun setNull()
     

    Change Records

    v1.0 first

    Function Illustrate

    设置当前 Field 实例为 null

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html index 64ccb7cd8..99e45c614 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html @@ -23,7 +23,7 @@ } MethodFinder - class | Yuki Hook API - + @@ -117,20 +117,20 @@

    Change Records

    v1.0 first

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    监听找不到 Method 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    isNotIgnoredHookingFailurefalse 则自动忽略。

    Notice

    此时若要监听异常结果,你需要手动实现 onNoSuchMethod 方法。

    ignoredError - method

    Change Records

    v1.0.3 added

    v1.1.0 deprecated

    请转移到新方法 ignored()

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
     

    Change Records

    v1.0.2 added

    v1.1.0 modified

    新增 method 参数

    Function Illustrate

    Method 实例处理类。

    original - method

    fun original(): Instance
    -

    Change Records

    v1.1.0 added

    Function Illustrate

    标识需要调用当前 Method 未经 Hook 的原始方法。

    若当前 Method 并未 Hook 则会使用原始的 Method.invoke 方法调用。

    Pay Attention

    你只能在 (Xposed) 宿主环境中使用此功能。

    call - method

    fun call(vararg param: Any?): Any?
    -

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg param: Any?): T?
    -

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg param: Any?): Byte?
    -

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg param: Any?): Int
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callIntint

    Function Illustrate

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg param: Any?): Long
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callLonglong

    Function Illustrate

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg param: Any?): Short
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callShortshort

    Function Illustrate

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg param: Any?): Double
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callDoubledouble

    Function Illustrate

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg param: Any?): Float
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callFloatfloat

    Function Illustrate

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg param: Any?): String
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callStringstring

    Function Illustrate

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg param: Any?): Char
    -

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg param: Any?): Boolean
    -

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callBooleanboolean

    Function Illustrate

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg param: Any?): Array<T>
    -

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg param: Any?): List<T>
    -

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 List 返回值类型。

    - +

    Change Records

    v1.1.0 added

    Function Illustrate

    标识需要调用当前 Method 未经 Hook 的原始方法。

    若当前 Method 并未 Hook 则会使用原始的 Method.invoke 方法调用。

    Pay Attention

    你只能在 (Xposed) 宿主环境中使用此功能。

    call - method

    fun call(vararg args: Any?): Any?
    +

    Change Records

    v1.0.2 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg args: Any?): T?
    +

    Change Records

    v1.0.2 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg args: Any?): Byte?
    +

    Change Records

    v1.0.68 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg args: Any?): Int
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callIntint

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg args: Any?): Long
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callLonglong

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg args: Any?): Short
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callShortshort

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg args: Any?): Double
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callDoubledouble

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg args: Any?): Float
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callFloatfloat

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg args: Any?): String
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callStringstring

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg args: Any?): Char
    +

    Change Records

    v1.0.68 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg args: Any?): Boolean
    +

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callBooleanboolean

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg args: Any?): Array<T>
    +

    Change Records

    v1.0.68 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg args: Any?): List<T>
    +

    Change Records

    v1.0.68 added

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    执行 Method,指定 List 返回值类型。

    + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html index cc0a6ed32..025c31521 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html @@ -23,13 +23,13 @@ } YukiBaseHooker - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    Change Records

    v1.0 first

    Function Illustrate

    YukiHookAPI 的子类 Hooker 实现。

    onHook - method

    fun onHook()
     

    Change Records

    v1.0 first

    Function Illustrate

    子类 Hook 开始。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html index 31f936764..90aa6cc32 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html @@ -23,7 +23,7 @@ } ReflectionFactory - kt | Yuki Hook API - + @@ -130,12 +130,12 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
     

    Change Records

    v1.1.0 added

    Function Illustrate

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
     
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    Change Records

    v1.0.70 added

    v1.1.0 added

    新增 ignored 参数,可以忽略在 CurrentClass 中出现的异常

    新增不使用 current { ... } 调用域直接使用 current() 得到实例的类操作对象

    Function Illustrate

    获得当前实例的类操作对象。

    Class.buildOfAny - ext-method

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.0 deprecated

    请转移到 buildOf 方法

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): T?
    -

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.0 modified

    加入无泛型方法 buildOf

    Function Illustrate

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    +

    Change Records

    v1.0.70 added

    v1.1.0 added

    新增 ignored 参数,可以忽略在 CurrentClass 中出现的异常

    新增不使用 current { ... } 调用域直接使用 current() 得到实例的类操作对象

    Function Illustrate

    获得当前实例的类操作对象。

    Class.buildOfAny - ext-method

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.0 deprecated

    请转移到 buildOf 方法

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    +
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    +

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.0 modified

    加入无泛型方法 buildOf

    v1.1.6 modified

    修改参数命名 paramargs

    Function Illustrate

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.5 modified

    新增 isAccessible 参数

    Function Illustrate

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.5 modified

    新增 isAccessible 参数

    Function Illustrate

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    v1.1.5 modified

    新增 isAccessible 参数

    Function Illustrate

    遍历当前类中的所有变量。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html index 48f06236b..374f67134 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html @@ -23,7 +23,7 @@ } YukiHookFactory - kt | Yuki Hook API - + @@ -39,6 +39,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    向 Hook APP (宿主) ContextResources 注入当前 Xposed 模块的资源。

    注入成功后,你就可以直接使用例如 ImageView.setImageResourceResources.getString 装载当前 Xposed 模块的资源 ID。

    注入的资源作用域仅限当前 ContextResources,你需要在每个用到宿主 ContextResources 的地方重复调用此方法进行注入才能使用。

    Pay Attention

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    Context.registerModuleAppActivities - ext-method

    fun Context.registerModuleAppActivities(proxy: Any?)
     

    Change Records

    v1.1.0 added

    v1.1.5 modified

    加入最低 API 版本限制

    Function Illustrate

    向 Hook APP (宿主) 注册当前 Xposed 模块的 Activity

    注册成功后,你就可以直接使用 Context.startActivity 来启动未在宿主中注册的 Activity

    使用此方法会在未注册的 Activity 在 Hook APP (宿主) 中启动时自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    你要将需要在宿主启动的 Activity 继承于 ModuleAppActivityModuleAppCompatActivity

    Pay Attention

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    最低支持 Android 7.0 (API 24)。

    Context.applyModuleTheme - ext-method

    fun Context.applyModuleTheme(theme: Int, configuration: Configuration?): ModuleContextThemeWrapper
     

    Change Records

    v1.1.0 added

    Function Illustrate

    生成一个 ContextThemeWrapper 代理以应用当前 Xposed 模块的主题资源。

    在 Hook APP (宿主) 中使用此方法会自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    如果在 Hook APP (宿主) 中使用此方法发生 ClassCastException,请手动设置 configuration

    isSupportResourcesHook - field

    Change Records

    v1.0.80 added

    v1.0.91 removed

    请转移到 YukiHookAPI.Status.isSupportResourcesHook

    isModuleActive - field

    Change Records

    v1.0.6 added

    v1.0.91 removed

    请转移到 YukiHookAPI.Status.isModuleActive

    isXposedModuleActive - field

    Change Records

    v1.0.6 added

    v1.0.91 removed

    请转移到 YukiHookAPI.Status.isXposedModuleActive

    isTaiChiModuleActive - field

    Change Records

    v1.0 first

    v1.0.91 removed

    请转移到 YukiHookAPI.Status.isTaiChiModuleActive

    YukiHookModuleStatus - class

    Change Records

    v1.0 first

    v1.0.91 deprecated

    请转移到 YukiHookAPI.Status

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html index adf8a556a..409b1ab50 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html @@ -23,7 +23,7 @@ } LoggerFactory - kt | Yuki Hook API - + @@ -66,6 +66,6 @@

    Change Records

    v1.0 first

    v1.1.0 modified

    新增 type 参数

    Function Illustrate

    Logcat 和 (Xposed) 宿主环境打印日志,级别 I

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerW - method

    fun loggerW(tag: String, msg: String, type: LoggerType)
     

    Change Records

    v1.0 first

    v1.1.0 modified

    新增 type 参数

    Function Illustrate

    Logcat 和 (Xposed) 宿主环境打印日志,级别 W

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerE - method

    fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
     

    Change Records

    v1.0 first

    v1.1.0 modified

    新增 type 参数

    Function Illustrate

    Logcat 和 (Xposed) 宿主环境打印日志,级别 E,可携带 e 异常信息,将打印异常堆栈。

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html index 10f138bbe..28f530134 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html @@ -23,7 +23,7 @@ } HookParam - class | Yuki Hook API - + @@ -118,6 +118,6 @@

    Change Records

    v1.0 first

    Function Illustrate

    设置方法参数的实例对象为 null

    setTrue - method

    fun setTrue()
     

    Change Records

    v1.0 first

    Function Illustrate

    设置方法参数的实例对象为 true

    Pay Attention

    请确保目标对象的类型是 Boolean

    setFalse - method

    fun setFalse()
     

    Change Records

    v1.0 first

    Function Illustrate

    设置方法参数的实例对象为 false

    Pay Attention

    请确保目标对象的类型是 Boolean

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html index a6f494995..2da88813e 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html @@ -23,7 +23,7 @@ } PackageParam - class | Yuki Hook API - + @@ -168,6 +168,6 @@

    Change Records

    v1.0.88 added

    Function Illustrate

    监听当前 Hook APP 装载 Application.onTrimMemory

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    监听当前 Hook APP 装载 Application.onConfigurationChanged

    registerReceiver - method

    fun registerReceiver(vararg action: String, result: (context: Context, intent: Intent) -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    注册系统广播监听。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html index 189c432cc..5ad6e8ccb 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html @@ -23,11 +23,11 @@ } ComponentTypeFactory - kt | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ComponentTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html index ead462204..3ac674c10 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html @@ -23,11 +23,11 @@ } GraphicsTypeFactory - kt | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    GraphicsTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html index e94f0b76e..b2049b931 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html @@ -23,11 +23,11 @@ } ViewTypeFactory - kt | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html index 3db6c6284..e6df0a100 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html @@ -23,12 +23,12 @@ } DefinedTypeFactory - kt | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    DefinedTypeFactory - kt

    Change Records

    v1.1.0 added

    Function Illustrate

    这是一个内部类型的定义常量类,主要用于反射 API 相关用法的延伸。

    VagueType - field

    val VagueType: Class<*>
     

    Change Records

    v1.1.0 added

    Function Illustrate

    得到模糊类型。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html index 305381638..fb25ca038 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html @@ -23,11 +23,11 @@ } VariableTypeFactory - kt | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html index 6d209b40b..f3b9e9819 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html @@ -23,7 +23,7 @@ } ModuleApplication - class | Yuki Hook API - + @@ -44,6 +44,6 @@ ...>

    appContext - field

    val appContext: ModuleApplication
     

    Change Records

    v1.0.77 added

    Function Illustrate

    获取全局静态 Application 实例。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html index 50afeb5ed..55ba1459e 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html @@ -23,7 +23,7 @@ } YukiXposedEvent - object | Yuki Hook API - + @@ -33,6 +33,6 @@

    Change Records

    v1.0.80 added

    Function Illustrate

    设置 initZygote 事件监听。

    onHandleLoadPackage - method

    fun onHandleLoadPackage(result: (LoadPackageParam) -> Unit)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    设置 handleLoadPackage 事件监听。

    onHandleInitPackageResources - method

    fun onHandleInitPackageResources(result: (InitPackageResourcesParam) -> Unit)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    设置 handleInitPackageResources 事件监听。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html index 4ebab796e..69031f112 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html @@ -23,13 +23,13 @@ } YukiModuleResources - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    对接 XModuleResources 的中间层实例。

    fwd - method

    fun fwd(resId: Int): YukiResForwarder
     

    Change Records

    v1.0.80 added

    Function Illustrate

    对接 XModuleResources.fwd 方法。

    创建 YukiResForwarderXResForwarder 实例。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html index 1006258e2..ee8ed3368 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html @@ -23,7 +23,7 @@ } YukiResForwarder - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    Change Records

    v1.0.80 added

    Function Illustrate

    对接 XResForwarder 的中间层实例。

    instance - field

    Change Records

    v1.0.80 added

    v1.1.0 deprecated

    不再对外公开 instance 参数

    id - field

    val id: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    获得当前 APP 的 Resources Id。

    resources - field

    val resources: Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    获得当前 APP 的 Resources。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html index 21161abaa..f2520d8c9 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html @@ -23,7 +23,7 @@ } YukiResources - class | Yuki Hook API - + @@ -34,6 +34,6 @@

    Change Records

    v1.0.80 added

    Function Illustrate

    获取当前被 Hook 的布局实例。

    findViewByIdentifier - method

    inline fun <reified T : View> View.findViewByIdentifier(name: String): T?
     
    inline fun <reified T : View> findViewByIdentifier(name: String): T?
     

    Change Records

    v1.0.80 added

    Function Illustrate

    使用 Identifier 查找 Hook APP 指定 Id 的 View

    扩展方法可以使用 Identifier 查找 Hook APP 当前装载布局中指定 Id 的 View

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html index 3cdfa6d60..31ffa4508 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html @@ -23,7 +23,7 @@ } YukiHookDataChannel - class | Yuki Hook API - + @@ -41,6 +41,6 @@

    Change Records

    v1.0.88 added

    v1.1.5 modified

    新增 priority 参数

    Function Illustrate

    仅获取监听结果,不获取键值数据。

    Pay Attention

    仅限使用 VALUE_WAIT_FOR_LISTENER 发送的监听才能被接收。

    checkingVersionEquals - method

    fun checkingVersionEquals(priority: ChannelPriority?, result: (Boolean) -> Unit)
     

    Change Records

    v1.0.88 added

    v1.1.5 modified

    新增 priority 参数

    Function Illustrate

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(priority: ChannelPriority?, result: (ArrayList<YukiLoggerData>) -> Unit)
     

    Change Records

    v1.1.4 added

    v1.1.5 modified

    新增 priority 参数

    Function Illustrate

    获取模块与宿主之间的 ArrayList<YukiLoggerData> 数据。

    由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。

    Pay Attention

    模块与宿主必须启用 YukiHookLogger.Configs.isRecord 才能获取到调试日志数据。

    由于 Android 限制了数据传输大小的最大值,如果调试日志过多将会自动进行分段发送,数据越大速度越慢。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html index bdd014f41..eadea06f4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html @@ -23,7 +23,7 @@ } ChannelData - class | Yuki Hook API - + @@ -50,6 +50,6 @@ // Your code here. }
    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html index cadcdf840..94104b1b4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html @@ -23,12 +23,12 @@ } ChannelPriority - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ChannelPriority - class

    class ChannelPriority(private val conditions: () -> Boolean)
     

    Change Records

    v1.1.5 added

    Function Illustrate

    数据通讯桥响应优先级构造类。

    这个类是对 YukiHookDataChannel 的一个扩展用法。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html index 63845dfc8..4c21325c4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html @@ -23,12 +23,12 @@ } ModuleAppActivity - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
     

    Change Records

    v1.1.0 added

    Function Illustrate

    代理 Activity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html index e1ea8eea4..9244d6d24 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html @@ -23,13 +23,13 @@ } ModuleAppCompatActivity - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleAppCompatActivity - class

    open class ModuleAppCompatActivity : AppCompatActivity()
     

    Change Records

    v1.1.0 added

    Function Illustrate

    代理 AppCompatActivity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    在 (Xposed) 宿主环境需要重写 moduleTheme 设置 AppCompat 主题,否则会无法启动。

    moduleTheme - field

    open val moduleTheme: Int
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前代理的 Activity 主题。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html index 73cf75a86..3834e4e57 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html @@ -23,13 +23,13 @@ } ModuleContextThemeWrapper - class | Yuki Hook API - +

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
     

    Change Records

    v1.1.0 added

    Function Illustrate

    代理 ContextThemeWrapper

    通过包装,你可以轻松在 (Xposed) 宿主环境使用来自模块的主题资源。

    applyConfiguration - method

    fun applyConfiguration(initiate: Configuration.() -> Unit): ModuleContextThemeWrapper
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前 ModuleContextThemeWrapperConfiguration

    设置后会自动调用 Resources.updateConfiguration

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html index 46c23aa8d..7ab95f86a 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html @@ -23,7 +23,7 @@ } ModuleClassLoader - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    Change Records

    v1.1.2 added

    Function Illustrate

    自动处理 (Xposed) 宿主环境与模块环境的 ClassLoader

    companion object - object

    Change Records

    v1.1.2 added

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    添加到 Hook APP (宿主) Class 排除列表。

    排除列表中的 Class 将会使用宿主的 ClassLoader 进行装载。

    Pay Attention

    排除列表仅会在 (Xposed) 宿主环境生效。

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    添加到模块 Class 排除列表。

    排除列表中的 Class 将会使用模块 (当前宿主环境的模块注入进程) 的 ClassLoader 进行装载。

    Pay Attention

    排除列表仅会在 (Xposed) 宿主环境生效。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html index d988139da..17112c416 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html @@ -23,7 +23,7 @@ } YukiHookModulePrefs - class | Yuki Hook API - + @@ -56,6 +56,6 @@

    Change Records

    v1.0.67 added

    Function Illustrate

    智能获取指定类型的键值。

    put - method

    inline fun <reified T> put(prefs: PrefsData<T>, value: T)
     

    Change Records

    v1.0.67 added

    Function Illustrate

    智能存储指定类型的键值。

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
     

    Change Records

    v1.0.5 added

    Function Illustrate

    清除 XSharedPreferences 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnableModulePrefsCache

    调用此方法将清除当前存储的全部键值缓存。

    下次将从 XSharedPreferences 重新读取。

    在 (Xposed) 宿主环境中使用。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html index 087886274..1d81f7146 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html @@ -23,7 +23,7 @@ } PrefsData - class | Yuki Hook API - + @@ -45,6 +45,6 @@

    你依然可以不使用模板定义的默认值,随时修改你的默认值。

    The following example

    // 读取 - 此时 data 取到的默认值将会是 2 - 并不是模板提供的 0
     val data = prefs.get(DataConst.TEST_KV_DATA_3, 2)
     
    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html index 44f307527..2dce5ec94 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html @@ -23,7 +23,7 @@ } ModulePreferenceFragment - class | Yuki Hook API - + @@ -49,6 +49,6 @@ } }
    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html index ed1e866b8..890fe39b9 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html @@ -23,7 +23,7 @@ } IYukiHookXposedInit - interface | Yuki Hook API - + @@ -32,6 +32,6 @@

    Change Records

    v1.0.5 added

    Function Illustrate

    配置 YukiHookAPI.Configs 的初始化方法。

    Pay Attention

    在这里只能进行初始化配置,不能进行 Hook 操作。

    此方法可选,你也可以选择不对 YukiHookAPI.Configs 进行配置。

    onHook - method

    fun onHook()
     

    Change Records

    v1.0 first

    Function Illustrate

    Xposed API 的模块装载调用入口方法。

    onXposedEvent - method

    fun onXposedEvent()
     

    Change Records

    v1.0.80 added

    Function Illustrate

    监听 Xposed 原生装载事件。

    若你的 Hook 事件中存在需要兼容的原生 Xposed 功能,可在这里实现。

    请在这里使用 YukiXposedEvent 创建回调事件监听。

    可监听的事件如下:

    YukiXposedEvent.onInitZygote

    YukiXposedEvent.onHandleLoadPackage

    YukiXposedEvent.onHandleInitPackageResources

    Pay Attention

    此接口仅供监听和实现原生 Xposed API 的功能,请不要在这里操作 YukiHookAPI

    YukiHookXposedInitProxy - interface

    Change Records

    v1.0 first

    v1.0.80 deprecated

    请转移到 IYukiHookXposedInit

    - + diff --git a/docs/en/api/special-features/host-inject.html b/docs/en/api/special-features/host-inject.html index 05bfba0cb..989c21fa0 100644 --- a/docs/en/api/special-features/host-inject.html +++ b/docs/en/api/special-features/host-inject.html @@ -23,7 +23,7 @@ } Host Resource Injection Extension | Yuki Hook API - + @@ -165,6 +165,6 @@ "com.demo.controller.ModuleController" )

    You need to set it before the method of injecting Module App's resources into the Host App is executed to take effect.

    This function is only to solve the situation that Class with the same name may exist in the Host App and Module App, such as shared SDK and dependencies.

    In most cases, you will not use this function.

    Tips

    For more functions, please refer to ModuleClassLoader.

    - + diff --git a/docs/en/api/special-features/host-lifecycle.html b/docs/en/api/special-features/host-lifecycle.html index b4bc18354..efd84ac6d 100644 --- a/docs/en/api/special-features/host-lifecycle.html +++ b/docs/en/api/special-features/host-lifecycle.html @@ -23,7 +23,7 @@ } Host Lifecycle Extension | Yuki Hook API - + @@ -78,6 +78,6 @@ } }

    Tips

    For more functions, please refer to AppLifecycle.

    - + diff --git a/docs/en/api/special-features/logger.html b/docs/en/api/special-features/logger.html index e8f3fe9d0..ef3bb6fc8 100644 --- a/docs/en/api/special-features/logger.html +++ b/docs/en/api/special-features/logger.html @@ -23,7 +23,7 @@ } Debug Logs | Yuki Hook API - + @@ -78,6 +78,6 @@ // ... }

    Tips

    For more functions, please refer to YukiHookLogger.inMemoryData, YukiHookLogger.contents, YukiHookLogger.contents, YukiHookLogger.saveToFile methods and YukiHookLogger.Configs.

    - + diff --git a/docs/en/api/special-features/reflection.html b/docs/en/api/special-features/reflection.html index 2bc19bb46..4b831e92a 100644 --- a/docs/en/api/special-features/reflection.html +++ b/docs/en/api/special-features/reflection.html @@ -23,7 +23,7 @@ } Reflection Extensions | Yuki Hook API - + @@ -874,6 +874,6 @@ param(BundleClass) }

    The following are wrapper names for some special case types in Java represented in YukiHookAPI.

    Notice

    Encapsulating types with Type(Class Name) + Type will and only be represented as Java primitive type keywords.

    Since the concept of primitive types does not exist in Kotlin, they will all be defined as KClass.

    There are 9 primitive type keywords in Java, of which 8 are primitive type, namely boolean, char, byte, short , int, float, long, double, of which the void type is a special case.

    At the same time, they all have their own corresponding package types in Java, such as java.lang.Boolean, java.lang.Integer, these types are unequal, Please note the distinction.

    Similarly, arrays also have corresponding wrapper types, which also need to be distinguished from Java primitive type keywords.

    For example, the encapsulation type of byte[] is ByteArrayType or ArrayClass(ByteType), and the encapsulation type of Byte[] is ByteArrayClass or ArrayClass(ByteClass ), these types are also unequal.

    Tips

    For more types, see ComponentTypeFactory, GraphicsTypeFactory, ViewTypeFactory, VariableTypeFactory.

    At the same time, you are welcome to contribute more commonly used types.

    - + diff --git a/docs/en/api/special-features/xposed-channel.html b/docs/en/api/special-features/xposed-channel.html index cb830637d..ee792c257 100644 --- a/docs/en/api/special-features/xposed-channel.html +++ b/docs/en/api/special-features/xposed-channel.html @@ -23,7 +23,7 @@ } Xposed Module and Host Channel | Yuki Hook API - + @@ -147,6 +147,6 @@ } }

    Security Instructions

    In the Module environment, you can only receive the communication data sent by the Host App of the specified package name and can only send to the Host App of the specified package name, except for System Framework.

    Pay Attention

    In order to further prevent broadcast abuse, the API in the communication data will automatically specify the package name of the Host App and Module App to prevent other apps from monitoring and using broadcast to make overrun behaviors.

    - + diff --git a/docs/en/api/special-features/xposed-storage.html b/docs/en/api/special-features/xposed-storage.html index 91b12c08b..facbe651a 100644 --- a/docs/en/api/special-features/xposed-storage.html +++ b/docs/en/api/special-features/xposed-storage.html @@ -23,7 +23,7 @@ } Xposed Module Data Storage | Yuki Hook API - + @@ -39,6 +39,6 @@ // Can also be used like this val testName = prefs.name("specify_file_name").getString("test_name", "default_value")

    If your project has a lot of fixed data that needs to be stored and read, it is recommended to use PrefsData to create templates.

    Tips

    For more functions, please refer to YukiHookModulePrefs, PrefsData.

    Use in PreferenceFragment

    Loading YukiHookModulePrefs in PreferenceFragment is described here.

    If your Module App uses PreferenceFragmentCompat, you can now start migrating its extends ModulePreferenceFragment.

    Pay Attention

    You must extends ModulePreferenceFragment to implement the module storage function of YukiHookModulePrefs.

    Tips

    For more functions, please refer to ModulePreferenceFragment.

    - + diff --git a/docs/en/config/api-example.html b/docs/en/config/api-example.html index 8b3d8935b..8974dfc52 100644 --- a/docs/en/config/api-example.html +++ b/docs/en/config/api-example.html @@ -23,7 +23,7 @@ } API Basic Configs | Yuki Hook API - + @@ -50,7 +50,7 @@ // Your code here. } } -

    Child Hooker recommended singleton object creation, you can also use class but not recommended.

    Notice

    You don't need to re-call encase in the onHook method extends YukiBaseHooker, this is wrong and will not take effect, you should start writing your Hook code directly .

    The following example

    object CustomHooker : YukiBaseHooker() {
    +

    Child Hooker recommended to use singleton object to create, you can also use class but it is generally not recommended.

    Notice

    You don't need to re-call encase in the onHook method extends YukiBaseHooker, this is wrong and will not take effect, you should start writing your Hook code directly .

    The following example

    object CustomHooker : YukiBaseHooker() {
     
         override fun onHook() {
             loadApp(name = "com.example.demo1") {
    @@ -99,6 +99,13 @@
     
         override fun onHook() = encase(FirstHooker, SecondHooker, ThirdHooker ...)
     }
    +

    Special Case

    As we mentioned above, it is generally not recommended to use class to create child Hookers, but there is a special case where it may still be necessary to keep your Hooker supporting multiple instantiations.

    There is a rare possibility that there are multiple package names in a process.

    In this case, when YukiHookAPI finds that the child Hooker is a singleton, it will ignore it and print a warning message.

    This Hooker "HOOKER" is singleton or reused, but the current process has multiple package name "NAME", the original is "NAME"
    +Make sure your Hooker supports multiple instances for this situation
    +The process with package name "NAME" will be ignored
    +

    In this case, we only need to modify object to class or determine the package name during loading and then load the child Hooker.

    For example, in the above cases, the following forms can be used to load.

    The following example

    encase {
    +    // Assume this is the app package name and child Hooker you need to load
    +    loadApp("com.example.demo", YourCustomHooker)
    +}
     

    Expansion Features

    If your current Hook Framework supports and enables the Resources Hook feature, you can now create Resources Hooks directly in encase.

    You don't need to separate the initZygote, handleLoadPackage, handleInitPackageResources methods to perform different functions as before using the Xposed API.

    In YukiHookAPI, these functions are seamless.

    The following example

    encase {
         loadApp(name = "com.example.demo") {
             findClass(name = "$packageName.DemoClass").hook {
    @@ -209,6 +216,6 @@
     

    Precautions when using as Hook API

    If you are using it as a Hook API, then you only need to differentiate the encase method at the entry point.

    Notice

    The encase method provides two identical methods for use as a Hook API, but with only one more parameter baseContext than the previous two.

    Method 1

    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     

    Method 2

    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
     

    The baseContext here only needs to fill in the Context you got at attachBaseContext, and other usages are exactly the same as the above.

    Pay Attention

    Never use the encase method in an Xposed way without omitting the baseContext parameter, this will lead to your Hook not work at all.

    The Resources Hook feature is not supported as Hook API.

    - + diff --git a/docs/en/config/api-exception.html b/docs/en/config/api-exception.html index e35fc8c41..a0fa68838 100644 --- a/docs/en/config/api-exception.html +++ b/docs/en/config/api-exception.html @@ -23,7 +23,7 @@ } API Exception Handling | Yuki Hook API - + @@ -63,7 +63,7 @@ } } } -
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    Abnormal

    YukiHookAPI exception occurred while loading Xposed entry method.

    Solution

    This is an exception summary.

    If any exception occurs in your current Hook Process (Hook Process crashes), it will be printed to the console using this method.

    Please trace the stack where the exception occurred to locate your code problem.

    exception

    loggerE

    An exception occurred when hooking internal function

    Abnormal

    YukiHookAPI throws an exception during its own initialization hook.

    Solution

    Usually, this kind of error does not happen easily. If this error occurs, you can directly submit the log for feedback.

    exception

    loggerE

    YukiHookAPI try to load HookEntryClass failed

    Abnormal

    YukiHookAPI encountered an unhandled exception or the entry class could not be found when trying to load the hook entry class onInit or onHook method.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    Abnormal

    YukiHookAPI encountered an unhandled exception when trying to load a Xposed Module using the Xposed native interface.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    Abnormal

    YukiHookAPI An error occurred while trying to do a Resources Hook.

    Solution

    Please double check the error log for details.

    If a Resources$NotFoundException occurs, you may be looking for an incorrect Resources Id.

    If ClassNotFound or NoClassDefFoundError occurs, it may be that Hook Framework does not support Resources Hook.

    exception

    loggerE

    HookClass [NAME] not found

    Abnormal

    The Class currently being hooked was not found.

    Solution

    Please check if the target Class exists, to ignore this error use the ignoredHookClassNotFoundFailure method.

    exception

    loggerE

    Hook Member [NAME] failed

    Abnormal

    An error occurred while hooking the target method, constructor.

    Solution

    This problem is usually caused by Hook Framework.

    Please check the corresponding log content.

    If the problem persists, please bring detailed logs for feedback.

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class have been set.

    Solution

    Please check the previous error log before this error occurs, maybe there is an error that the method and constructor cannot be found when searching for methods and constructors.

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class are not set.

    The following example

    injectMember {
    +
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    Abnormal

    YukiHookAPI exception occurred while loading Xposed entry method.

    Solution

    This is an exception summary.

    If any exception occurs in your current Hook Process (Hook Process crashes), it will be printed to the console using this method.

    Please trace the stack where the exception occurred to locate your code problem.

    exception

    loggerE

    An exception occurred when hooking internal function

    Abnormal

    YukiHookAPI throws an exception during its own initialization hook.

    Solution

    Usually, this kind of error does not happen easily. If this error occurs, you can directly submit the log for feedback.

    exception

    loggerE

    YukiHookAPI try to load hook entry class failed

    Abnormal

    YukiHookAPI encountered an unhandled exception or the entry class could not be found when trying to load the hook entry class onInit or onHook method.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    Abnormal

    YukiHookAPI encountered an unhandled exception when trying to load a Xposed Module using the Xposed native interface.

    Solution

    Usually, this kind of error does not occur easily.

    If this error occurs, please check the log printed on the console to locate the problem.

    After confirming that the problem is not caused by your own code, you can submit the log for feedback.

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    Abnormal

    YukiHookAPI An error occurred while trying to do a Resources Hook.

    Solution

    Please double check the error log for details.

    If a Resources$NotFoundException occurs, you may be looking for an incorrect Resources Id.

    If ClassNotFound or NoClassDefFoundError occurs, it may be that Hook Framework does not support Resources Hook.

    exception

    loggerE

    HookClass [NAME] not found

    Abnormal

    The Class currently being hooked was not found.

    Solution

    Please check if the target Class exists, to ignore this error use the ignoredHookClassNotFoundFailure method.

    exception

    loggerE

    Hook Member [NAME] failed

    Abnormal

    An error occurred while hooking the target method, constructor.

    Solution

    This problem is usually caused by Hook Framework.

    Please check the corresponding log content.

    If the problem persists, please bring detailed logs for feedback.

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class have been set.

    Solution

    Please check the previous error log before this error occurs, maybe there is an error that the method and constructor cannot be found when searching for methods and constructors.

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    Abnormal

    After the Hook is executed, the member of the Hook is null and the target Hook method and constructed class are not set.

    The following example

    injectMember {
         // There are no search conditions for methods and constructors that require hooks
         afterHook {
             // ...
    @@ -396,6 +396,6 @@
     // <Solution 2> Do not fill in the generic declaration
     val clazz2 = "android.app.Activity".toClass()
     

    Please ensure that the generic type declared after executing the method is the specified target Class type, and you do not need to fill in the generic declaration if the target type is not sure.

    - + diff --git a/docs/en/config/api-using.html b/docs/en/config/api-using.html index c3b8df7cb..911af844e 100644 --- a/docs/en/config/api-using.html +++ b/docs/en/config/api-using.html @@ -23,7 +23,7 @@ } Use as Hook API Configs | Yuki Hook API - + @@ -77,6 +77,6 @@ super.attachBaseContext(base) } - + diff --git a/docs/en/config/r8-proguard.html b/docs/en/config/r8-proguard.html index c58fd57b4..bce7cab6a 100644 --- a/docs/en/config/r8-proguard.html +++ b/docs/en/config/r8-proguard.html @@ -23,12 +23,12 @@ } R8 & Proguard Obfuscate | Yuki Hook API - +

    R8 & Proguard Obfuscate

    In most scenarios, the Xposed Module can be compressed by native obfuscation.

    Here is the configuration method of obfuscation.

    R8

    If you are using R8 then you don't need any special configuration for YukiHookAPI.

    Proguard

    If you are still using Proguard, you need to do some rule configuration.

    Pay Attention

    Proguard rules have been deprecated, please don't use them anymore.

    Since Android Gradle Plugin 4.2, the obfuscator with the latest version of the Android Jetpack default is R8, and you no longer need to consider obfuscation.

    To enable R8 in any version, please add the following rules to the gradle.properties file, no configuration is required for Android Gradle Plugin 7.0 and above.

    android.enableR8=true
     
    - + diff --git a/docs/en/config/xposed-using.html b/docs/en/config/xposed-using.html index 543c48782..2a0a1fafd 100644 --- a/docs/en/config/xposed-using.html +++ b/docs/en/config/xposed-using.html @@ -23,7 +23,7 @@ } Use as Xposed Module Configs | Yuki Hook API - + @@ -104,6 +104,6 @@ } }

    onXposedEvent and onHook methods exist completely independently and do not affect each other. You can continue to use YukiHookAPI in the onHook method.

    Tips

    For more functions, please refer to the IYukiHookXposedInit.onXposedEvent method.

    - + diff --git a/docs/en/guide/example.html b/docs/en/guide/example.html index 7fe140436..79aac9bd6 100644 --- a/docs/en/guide/example.html +++ b/docs/en/guide/example.html @@ -23,7 +23,7 @@ } Usage Example | Yuki Hook API - + @@ -319,6 +319,6 @@ </queries>

    There is another solution, you can directly declare the android.permission.QUERY_ALL_PACKAGES permission, but it is not recommended and will be warned by code inspection.

    The following example

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     

    If the activation state of TaiChi and Wuji is included in the Module App activation judgment, the Application of the Module App must be extends ModuleApplication or ModuleApplication must be used directly;

    The API after 1.0.91 has modified the activation logic judgment method, now you can use this API in the Module App and Host App at the same time;

    Need to make sure YukiHookAPI.Configs.isEnableHookModuleStatus is enabled;

    Except for Hook Frameworks that provide standard APIs, Module Apps may not be able to determine whether they are activated in other cases.

    - + diff --git a/docs/en/guide/home.html b/docs/en/guide/home.html index 3c117ce26..079d23f2a 100644 --- a/docs/en/guide/home.html +++ b/docs/en/guide/home.html @@ -23,7 +23,7 @@ } Introduce | Yuki Hook API - + @@ -134,6 +134,6 @@ } }

    Yes, you read that right, just needing these codes can completely replace the Xposed API to achieve the same function.

    Now, with the help of the efficient and powerful YukiHookAPI, you can implement a very simple Xposed Module.

    Suppored Hook Framework

    The following are the Hook Framework and Xposed framework supported by YukiHookAPI.

    Hook FrameworkSTDescription
    LSPosedopen in new windowStable use in multiple scenarios
    LSPatchopen in new windowWIP after this project is improved
    EdXposedopen in new windowMaintenance has stopped, no longer recommended
    Pineopen in new windowOnly available
    SandHookopen in new windowOnly available
    Whaleopen in new windowNeed xposed-hook-based-on-whaleopen in new window
    YAHFAopen in new windowNeed to implement the Xposed API yourself
    FastHookopen in new windowNeed to implement the Xposed API yourself
    Epicopen in new windowNeed Dexposedopen in new window by yourself
    TaiChiopen in new windowOnly available for Xposed Module
    Xposedopen in new windowRecommended minimum system version is Android 7.0
    - + diff --git a/docs/en/guide/knowledge.html b/docs/en/guide/knowledge.html index e5abf8a48..371c0d5d1 100644 --- a/docs/en/guide/knowledge.html +++ b/docs/en/guide/knowledge.html @@ -23,7 +23,7 @@ } Basic Knowledge | Yuki Hook API - + @@ -40,6 +40,6 @@ └── Hooker (Hooked) ...

    Through the operation principle of Xposed, many frameworks of the same type have been derived. As mobile devices in today's era are more and more difficult to obtain Root permissions or even flash, and when they are not just needed, some Root-free frameworks are also produced, such as LSPatchTaiChi.

    These Hook Frameworks at the ART level can also complete the Hook process with the same principle as Xposed without using the Xposed API. The operating principle of Root-free is to modify the APK and inject the Hook process into the Host, and control it through external modules.

    Another product is to use the existing functions of the Android operating environment to virtualize an environment that is completely the same as the current device system, and run App in it. This is the virtual App technology VirtualApp, which was later derived as VirtualXposed .

    The Root-free frameworks mentioned above are LSPatchopen in new windowTaiChiopen in new windowVirtualAppopen in new windowSandVXposedopen in new window.

    What YukiHookAPI does

    Since Xposed appeared until now, apart from XposedHelpers, which is well known to developers, there is still no set of syntactic sugar for Kotlin and API with complete usage encapsulation.

    The birth of this API framework is to hope that in the current era of Xposed, more capable Xposed Module developers can avoid detours and complete the entire development process more easily and simply.

    In the future, YukiHookAPI will adapt to more third-party Hook Frameworks based on the goal of using the Xposed API, so as to improve the entire ecosystem and help more developers make Xposed Module development simpler and easier to understand.

    Let's Started

    Before starting, you need to have the following basics to better use YukiHookAPI.

    - + diff --git a/docs/en/guide/move-to-new-api.html b/docs/en/guide/move-to-new-api.html index 012d1a178..bcc447c9c 100644 --- a/docs/en/guide/move-to-new-api.html +++ b/docs/en/guide/move-to-new-api.html @@ -23,7 +23,7 @@ } Migrate from Xposed API | Yuki Hook API - + @@ -215,6 +215,6 @@ // Intercept return value override fun replaceHookedMethod(param: MethodHookParam) = null

    Migrate Other Features

    YukiHookAPI is a complete rewrite of the Xposed API, you can refer to API Document and Special Features to determine some functional Migration and use.

    - + diff --git a/docs/en/guide/quick-start.html b/docs/en/guide/quick-start.html index e9f52e8d0..30e85d8dd 100644 --- a/docs/en/guide/quick-start.html +++ b/docs/en/guide/quick-start.html @@ -23,7 +23,7 @@ } Quick Start | Yuki Hook API - + @@ -100,6 +100,6 @@ super.attachBaseContext(base) }

    Then, you can start writing Hook code in much the same way you would use it as an Xposed Module.

    For configuration details related to use as a Hook API, you can click here to continue reading.

    Notice

    YukiHookModulePrefs, YukiHookDataChannel and Resources Hook functionality will not work when using a custom Hook Framework instead of the full Xposed Module.

    - + diff --git a/docs/en/index.html b/docs/en/index.html index 5124648c9..2c04eee46 100644 --- a/docs/en/index.html +++ b/docs/en/index.html @@ -23,7 +23,7 @@ } Home | Yuki Hook API - + @@ -53,6 +53,6 @@ } } - + diff --git a/docs/en/tools/yukihookapi-projectbuilder.html b/docs/en/tools/yukihookapi-projectbuilder.html index 48b311494..ad4043d77 100644 --- a/docs/en/tools/yukihookapi-projectbuilder.html +++ b/docs/en/tools/yukihookapi-projectbuilder.html @@ -23,11 +23,11 @@ } YukiHookAPI Project Builder | Yuki Hook API - +

    YukiHookAPI Project Builder

    This is an automatic building tool for Xposed Modules using YukiHookAPI as the core.

    Implementing automated search relies on quickly building an Android project template that includes a Xposed Module environment.

    Get Project

    This project is open source and free, and will be maintained continuously according to your usage.

    The original version may have imperfections or bugs. We welcome to your feedback.

    Project Address YukiHookAPI-ProjectBuilderopen in new window

    If you want to download directly, you can click hereopen in new window to go to the Release address.

    Usage

    Here contains the basic usage and function explanation.

    Basic Usage

    • The software use process requires your device connected to the Internet.

    • After starting the software, simply configure the project you want to create, click the button in the lower right corner or select Project > Run Build from the menu bar to start the task.

    • After waiting for the automatic dependency search to complete, you can configure the project dependencies. It is recommended to use the latest dependencies to ensure the stability of the project, and the build tools only support the latest dependencies.

    • Select the folder where you need to create the project. After starting, the project will be created in the location you selected, and wait for the whole process to complete and the project will be created.

    Config Template

    Config template is an extension function, you can select menu bar Project > Config Template > New Template.

    And then, you can create a template with the current config, and you can re-create it from Saved Template next time Load the template to restore the current config.

    Multilingual Support

    The software language follows the current system, and you can manually select the software interface language in the Language column of the menu bar.

    - + diff --git a/docs/index.html b/docs/index.html index 463728dec..9c8c4cd86 100644 --- a/docs/index.html +++ b/docs/index.html @@ -23,11 +23,11 @@ } Yuki Hook API - +

    Select a language

    English 简体中文

    - + diff --git a/docs/zh-cn/about/about.html b/docs/zh-cn/about/about.html index 0f66c2247..85b26d8aa 100644 --- a/docs/zh-cn/about/about.html +++ b/docs/zh-cn/about/about.html @@ -23,7 +23,7 @@ } 关于此文档 | Yuki Hook API - + @@ -49,6 +49,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    版权所有 © 2019-2023 HighCapable

    - + diff --git a/docs/zh-cn/about/changelog.html b/docs/zh-cn/about/changelog.html index bf03b017b..2aca0b87a 100644 --- a/docs/zh-cn/about/changelog.html +++ b/docs/zh-cn/about/changelog.html @@ -23,11 +23,11 @@ } 更新日志 | Yuki Hook API - + -

    更新日志

    这里记录了 YukiHookAPI 的版本更新历史。

    特别注意

    我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。

    1.1.5 | 2023.01.13  最新

    • 规范并优化整体代码风格
    • 对部分内部调用的 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.callOriginalHookParam.invokeOriginal 出现对象为空问题
    • 优化对太极激活方法相关判断功能以及同步更新文档相关说明
    • 作废了 YukiHookAPI.Status.executorNameYukiHookAPI.Status.executorVersion,请转移到 YukiHookAPI.Status.Executor
    • 适配了一些第三方 Hook Framework 的 YukiHookAPI.Status.Executor.name 名称显示功能
    • 新增 Class.extendsClass.implements 等方法,可更加方便地判断当前 Class 的继承与接口关系
    • 新增 Class.toClassClass.toClassOrNull 等相关方法的同名泛型方法,可使用泛型来约束已知 Class 的实例对象类型
    • 修改 classOf<T> 方法的返回值为泛型 T,以约束已知 Class 的实例对象类型
    • 新增 Class 相关扩展方法的 initialize 参数,可控制在得到 Class 对象时是否同时初始化其静态方法块
    • 变量、方法、构造方法查找功能中新增 param { ... }type { ... } 等用法,可对查找的对象增加更加具体的条件判断
    • PackageParamloadApp 方法新增 isExcludeSelf 参数,可用于排除 Hook 相关功能注入模块自身实例进程
    • PackageParamonAppLifecycle 方法新增 isOnFailureThrowToApp 参数,可将生命周期方法体内发生的异常直接抛给宿主
    • 修改 PackageParam 中的 appClassLoader 为可修改变量,可在 Hook 过程中动态设置宿主使用的 ClassLoader
    • HookParam 中新增 dataExtra 功能,可用于临时存储 Hook 方法体中的数据
    • 作废 YukiHookModulePrefs 中的 isRunInNewXShareModeisXSharePrefsReadable,统一合并到 isPreferencesAvailable
    • Class.allFieldsClass.allMethods 等相关方法新增 isAccessible 参数,可控制成员对象何时可被设置为可访问类型
    • 修复 YukiHookDataChannel 存在多个宿主时在一个 Activity 中接收相同键值数据时仅会回调最后一个方法体的问题
    • YukiHookDataChannelwait 等相关方法中新增 priority 参数,可传入 ChannelPriority 来自定义回调数据结果的条件
    • YukiHookDataChannel 新增发送数据时自动使用 ChannelDataWrapper 类型包装功能,提升使用体验并增强数据保护
    • YukiHookDataChannel 新增限制一次性发送数据的最大字节大小功能,防止数据过大造成 APP 崩溃
    • YukiHookDataChannel 新增发送数据过大时自动分段发送功能,仅支持 ListMapSetString 类型
    • YukiHookLogger 新增 contents 方法与 saveToFiledata 参数,可传入自定义的调试日志数据进行格式化或保存到文件
    • 修复 YukiHookLogger 处理后的调试日志数据包名可能在 (Xposed) 宿主环境不正确的问题
    • 修复 Xposed 模块装载资源钩子 (Resources Hook) 事件时在部分系统上 (部分系统 APP 中) 包名可能不正确的问题

    1.1.4 | 2022.10.04  过旧

    • 修复 YukiHookDataChannel 可能不能响应系统框架中响应广播事件的问题,在 Android 13 中复现
    • 修复 YukiHookDataChannel 长达多个版本在 (Xposed) 宿主环境无法与模块通讯的问题
    • YukiHookDataChannel 中新增 obtainLoggerInMemoryData 方法,可在模块与宿主之间共享调试日志数据
    • 修改 YukiHookLogger.inMemoryData 的类型为 ArrayList 并修改 YukiLoggerDatadata class
    • 修复 YukiLoggerData 在模块中包名为空打印空白的问题
    • PackageParam 中新增 loadApploadZygoteloadSystemwithProcess 的同名多参数方法
    • 修复了一些可能存在的 BUG

    1.1.3 | 2022.09.30  过旧

    • 修复一个无法自定义 Hook 入口类名的致命错误
    • 添加 LoggerFactory 中的部分代码注释文案并更新特色功能文档

    1.1.2 | 2022.09.30  过期

    • 文档 基础知识 页面新增 English 版本友情链接
    • 修复 YukiBaseHooker 注释中的 English 文档链接错误问题
    • 修复 ModuleClassLoader 中的 ClassCastException 问题
    • 修正并规范部分代码注释
    • 新增 ModuleClassLoader 排除列表功能,可使用 excludeHostClassesexcludeModuleClasses 方法来自定义排除列表
    • 新增 YukiLoggerData 实时日志数据类,可实时通过 YukiHookLogger.inMemoryData 获取日志数组
    • 新增 ClassLoader.listOfClasses 方法,可直接获取当前 Dex 中的全部 Class

    1.1.1 | 2022.09.28  过期

    • 修复了文档 基础知识 页面友情链接错误的问题
    • 修复了文档 favicon 不显示的问题
    • 修复 DexClassFinder 查找条件中的 BUG

    1.1.0 | 2022.09.28  过期

    • 这是一次大版本更新,有关更新日志中提到的变化及用法请参考 API 文档 以及 特色功能
    • 更换帮助文档框架到 VuePress在新窗口中打开
    • 统一并规范文档中的术语名词,例如“查询”一律更改为了“查找”,XposedHelper 拼写错误修改为了 XposedHelpers
    • 文档 基础知识 页面加入友情链接,仅限简体中文
    • 将 Hook App Demo 的 ClassMethod 转为 Java 以提供更好的演示效果
    • 修正了 Hook Module Demo 中的代码注释命名
    • 重构了大量底层 Hook 逻辑及 Xposed API 的对接方式
    • 移除了 HookParamWrapper,现已将其直接与 YukiBridgeFactory 对接
    • 移动部分 YukiHookBridge 中的方法到 AppParasitics
    • 移除了 HookParam.args 与底层的直接对接方法 setArgs,直接获取并设置当前数组的对象
    • 优化自动处理程序,将引用的 jar 合并到 stub 项目
    • 修复多项目打包时模块包名无法正确匹配的问题以及修改自动处理程序的模块包名匹配逻辑,感谢 5ec1cff在新窗口中打开 的反馈及提供的解决方案
    • 对 API 私有工具类的方法进行了 internal 闭包处理,避免污染顶级命名空间
    • 修正了所有反射和 Hook 类的 Creater 命名到 Creator
    • 新增 YukiHookAPI.Status.compiledTimestamp 功能,可以在作为 Xposed 模块使用时获取编译完成的时间戳
    • 新增 YukiHookAPI.Status.isXposedEnvironment 功能,可以判断当前为 (Xposed) 宿主环境还是模块环境
    • 调试日志功能进行了大改版,现已将 YukiHookAPI.Configs.debugTag 等功能合并到 YukiHookLogger.Configs
    • 调试日志新增可指定打印使用的方法为 XposedBridge.logLogd
    • 调试日志中默认加入当前宿主的包名以及当前用户 ID,以供调试,你可以在 debugLog 配置中自行更改
    • 新增 generic 功能,可对泛型进行反射和调用,你可以在 ClassCurrentClass 中使用它
    • 作废 buildOfAny 方法,现在请直接使用 buildOf 方法 (不带泛型) 来使用构造方法创建新对象并得到结果 Any
    • 修复 hasExtends 使用过程发生空指针异常的问题
    • CurrentClass 新增非 lambda 方式的调用方法
    • CurrentClass 新增 namesimpleName 功能
    • 完全重写 ReflectionTool 的核心方法,将不同的查找条件进行了整理分类
    • 修复 ReflectionTool 中可能的直接调用 declared 获取的 Member 抛出异常的问题
    • 修复 ReflectionToolUndefinedType 未在 MethodConstructor 条件中正确判断的问题
    • 新增反射查找结果发生异常时的友好提示方式,可具体定位到指定条件找不到 Member 的问题
    • 反射查找 MethodConstructor 中新增 VagueType 条件,可使用在 param 条件中用于忽略你不想填写的参数
    • 反射查找 MethodConstructor 中新增 paramCount { ... } 条件,现在你可以直接拿到其中的 it 来自定义你的判断条件
    • FieldFinder 结果中新增 current 方法,可直接对结果实例创建调用空间
    • 修改了反射查找功能中的 modifiers 条件以及 name 条件,现在你需要对此方法体结尾返回一个 Boolean 以使条件成立
    • ModifierRules 中的 as* 功能改名为 is*,感谢 Kitsune在新窗口中打开 的建议
    • FieldFinder 中新增 RemedyPlan 功能
    • 新增 Dex 中的 Class 模糊查找功能 (Beta),你现在可以直接使用 searchClass 功能来使用指定条件模糊查找 Class
    • 新增反射查找中的多重查找功能,可使用相对查找条件同时获取多个查找结果,感谢 AA 以及 Kitsune在新窗口中打开 的建议
    • 修复 appClassLoader 获取到的对象在某些系统中的系统应用中不正确的问题,感谢 Luckyzyx在新窗口中打开 的反馈
    • 修改了 XposedBridge.invokeOriginalMethod 的调用方式并在 MethodFinder.Result.Instance 中增加 original 功能
    • 修复 YukiHookModulePrefsgetStringSet 方法取值错误的问题并优化代码风格,感谢 Teddy_Zhu在新窗口中打开PR在新窗口中打开
    • 修改 YukiHookModulePrefs,拦截 XSharePreference 可能不存在的异常
    • 修复 YukiHookDataChannel 在某些第三方 ROM 系统框架中无法注册成功的问题
    • 安全化 YukiHookDataChannel,现在它只能在来自指定包名的模块与宿主之间通信
    • 新增自动 Hook SharedPreferences 以修复部分系统中文件权限不是 0664 的问题,感谢 5ec1cff在新窗口中打开 的反馈及提供的实现代码
    • 新增 YukiHookAPI.Configs.isEnableHookSharedPreferences 功能,默认关闭,若 SharedPreferences 的权限错误可进行启用
    • 修复查找 Constructor 时无参构造方法在不填写查找条件时无法找到的 BUG,感谢 B5 KAKA 的反馈
    • 分离位于 injectMembermethodconstructorResult 实例到 Process
    • 在 Hook 过程中新增 useDangerousOperation 方法,未进行声明时在 Hook 危险列表中的功能后会自动停止 Hook 并打印错误
    • 新增模块资源注入与 Activity 代理功能,你可以调用 injectModuleAppResourcesregisterModuleAppActivities 来使用
    • 新增 ModuleContextThemeWrapper 功能,你可以调用 applyModuleTheme 在任意 Activity 中创建模块的 Context
    • 新增 ClassLoader.onLoadClass 功能,可用于监听 ClassLoaderloadClass 方法被调用的事件
    • 作废了 classOfclazz 扩展方法,新增 toClass 以及 toClassOrNull 用法,请现在转移到新的方法
    • VariousClass 新增 getOrNull 方法,可在匹配不到 Class 的时候不抛出异常而是返回 null
    • PackageParam.hook 中移除了 isUseAppClassLoader 参数,修改为 isForceUseAbsolute 并自动匹配目标 Class
    • PackageParam 新增 systemContext 功能,你可以在任意时间调用此功能获取一个持久化的 Context
    • 不再对外开放 HookClass 中的任何方法
    • HookParam 中新增 throwToApp 功能,可将异常直接抛给宿主
    • Hook 回调中新增 onFailureThrowToApp 功能,可在发生异常时直接抛给宿主
    • 修改了调试日志的打印逻辑,反射查找功能中的耗时记录仅会在 Hook 过程中进行打印
    • Hook 过程中新增解除 Hook 功能,可使用 removeremoveSelf 方法解除 Hook
    • 修复在 ReplaceHook 失败的时候导致宿主抛出异常的问题,现修改为调用原始方法保证宿主功能正常运行
    • 新增 Hook 过程中对方法返回值的检查功能,在返回值不匹配的情况下会根据情景自动抛出异常或打印错误
    • Resources Hook 中新增 array 类型,感谢 GSWXXN在新窗口中打开PR在新窗口中打开
    • 移动 me.weishu.reflectionthirdparty 防止同时引入的同名依赖冲突
    • 移除 Hook 方法体为空时抛出的异常,修改为打印警告日志
    • 修改 AppLifecycle 的异常处理逻辑,当其发生异常时直接抛给宿主
    • 更新 Demo 的 API 版本到 33

    1.0.92 | 2022.05.31  过期

    • 修正了大量方法中 callback 的命名方法
    • 更换方案再次修复 YukiHookDataChannel 在低于 Android 12 的设备上不能回调当前 Activity 广播的问题
    • InjectYukiHookWithXposed 注解新增 isUsingResourcesHook 功能,现在你可以选择性关闭自动生成 IXposedHookInitPackageResources 的依赖接口了

    1.0.91 | 2022.05.29  过期

    • 修复部分设备的定制系统在 LSPosed 环境下开机启动获取的 ClassLoader 错误的问题,感谢 Luckyzyx在新窗口中打开 的反馈
    • 修复 YukiHookDataChannelZUI 以及低于 Android 12 的系统上不能回调当前 Activity 广播的问题
    • 整合 YukiHookModuleStatus 功能到 YukiHookAPI.Status,重写了大量方法,现在你可以在模块与宿主中双向判断模块激活等状态信息

    1.0.90 | 2022.05.27  过期

    • 修复 YukiHookDataChannel 在模块设置监听回调时闪退的问题
    • 修复 YukiHookDataChannel 在非当前 Activity 情况下依然会回调的问题
    • 移除 YukiHookDataChannel 回调事件的默认值,没有即不回调
    • 移除 YukiHookModulePrefs 在 XShare 不可读的情况下打印的警告
    • 新增 YukiHookModulePrefs 中的 isXSharePrefsReadable 方法,可判断当前的 XShare 是否可用

    1.0.89 | 2022.05.26  过期

    • 修复 YukiHookDataChannel 不能重复设置监听的问题,并加入在模块不同 Activity 中重复响应和自动跟随 Activity 销毁监听功能
    • 新增 YukiHookDataChannel 重复监听用例说明文档
    • 加入 onAlreadyHooked 方法,可判断当前方法是否被重复 Hook
    • 修改部分重复添加 HashMap 的逻辑,移除 putIfAbsent 方法,允许覆盖添加
    • 修复了几处可能的 BUG

    1.0.88 | 2022.05.25  过期

    • 对 Xposed API 完全解耦合
    • 增加了 type 中的 android 类型
    • YukiHookModuleStatus 从自动生成代码中分离,并加入 isEnableHookModuleStatus 的开关,由你决定是否启用
    • 对 API 大量类的构造方法进行了 internal 闭包处理
    • YukiHookModulePrefs 设置为单例运行,防止重复创建浪费系统资源
    • 修复自 1.0.80 版本后无法嵌套 Hook 的 BUG,并优化嵌套 Hook 相关功能
    • 修改 Hooker 存储方案由 HashSet 到 HashMap,防止重复添加 Hooker 的问题
    • 修改 Hook 核心实现方法,加入查重,避免重复 Hook 多次回调 HookParam 方法
    • MethodFinderFieldFinder 加入查找模糊方法、变量名称功能,可调用 name { ... } 来设置查找条件,支持正则
    • 优化并修改 appContext 的获取方式,降低会取到空的问题的可能性
    • 修改自动生成的代码中 logger 的打印 TAG 默认为你自定义的名称,方便进行调试
    • 优化 YukiHookBridgeHooker 实现方式,提升 Hook 性能
    • PackageParam 增加 onAppLifecycle 方法,可原生监听宿主的生命周期以及实现注册系统广播功能
    • 新增 YukiHookDataChannel 功能,可在模块与宿主保持存活的情况下使用系统无序广播进行通讯
    • YukiHookDataChannel 增加 checkingVersionEquals 方法,可通过监听来验证模块更新后宿主并未更新版本不匹配问题
    • demo-module 的示例代码中新增 Java 版本的示例,仅供参考

    1.0.87 | 2022.05.10  过期

    • 新增 refreshModuleAppResources 功能,以适配语言区域、字体大小、分辨率改变等情况下的 Resources 刷新
    • 新增 isEnableModuleAppResourcesCache 功能,可自行设置是否自动缓存当前模块的 Resources

    1.0.86 | 2022.05.06  过期

    • 修复不支持 Resources Hook(资源钩子) 的情况下在 initZygote 时持续报错的问题,复现在 ZUI/LSPosed CI(1.8.3-6550)
    • 优化并对 Resources Hook 进行异常处理,只有被使用后不支持才会打印错误和警告

    1.0.85 | 2022.05.04  过期

    • 修复无法 Hook 系统框架的严重问题,从 1.0.80 开始出现
    • 调试日志中新增区分 initZygote 装载的包名为 android-zygotepackageName 保持 android 不变

    1.0.83 | 2022.05.04  过期

    • 修复 YukiHookModuleStatusloadSystem 后大量报错的问题
    • 新增 type 中的 android 类型
    • 更新帮助文档的示例说明

    1.0.82 | 2022.05.04  过期

    • 修复了一处概念混淆错误,区分 initZygote 与系统框架的关系,之前的注释和文档有问题,非常抱歉
    • PackageParam 新增 loadSystem 方法,不需要再写 loadApp(name = "android") 即可 Hook 系统框架

    1.0.81 | 2022.05.04  过期

    • 修复使用 by 方法设置条件后 Hook 方法体内查找不到的方法、构造方法依然输出错误日志的问题
    • 在执行 Hook 过程中加入全局日志显示当前 Hook APP 的包名,并修复一处错误日志打印样式的问题

    1.0.80 | 2022.05.01  过期

    • InjectYukiHookWithXposed 注解新增 entryClassName 功能,可自定义生成的 xposed_init 入口类名
    • YukiHookXposedInitProxy 更名为 IYukiHookXposedInit,原接口名称已作废,将在后续版本中直接被删除
    • 新增 initZygote 与 Resources Hook 功能,支持 Hook Layout
    • 新增 onXposedEvent 方法,可监听原生 Xposed API 的全部事件
    • 对 Hook 功能的 lambda 进行 inline 处理,避免生成过碎的匿名类,提升编译后的运行性能
    • 修复 PrefsData 编译后的方法体复制过大的问题
    • 增加 XSharePreference 可读性测试,失败后会自动打印警告日志
    • PackageParam 新增 appResourcesmoduleAppResourcesmoduleAppFilePath 功能
    • PackageParamloadApp 新增不写 name 功能,默认筛选全部 APP
    • PackageParam 新增 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 问题导致多次调用
    • 修复 Hook ClassLoader 导致 Hook 卡死的问题,感谢 WankkoRee在新窗口中打开 的反馈
    • 提升 XC_Callback 接口对接后的性能
    • Java type 新增 ClassLoader 类型
    • 优化 API 帮助文档,修复可能持续缓存页面的问题

    1.0.78 | 2022.04.18  过期

    • YukiHookModulePrefs 新增 isRunInNewXShareMode 方法,可用于判断模块当前是否处于 New XSharePreference 模式
    • 修复 YukiHookModulePrefsNew XSharePreference 模式下工作的部分问题
    • 新增 ModulePreferenceFragment,现在,你可以完全替换掉 PreferenceFragmentCompat 并开始使用新的功能
    • 适配 PreferenceFragmentCompat 的 Sp 数据存储解决方案,感谢 mahoshojoHCG在新窗口中打开 的反馈
    • 更新自动处理程序以及 Kotlin 依赖到最新版本
    • 修正部分文档和代码注释中的错误

    1.0.77 | 2022.04.15  过期

    • YukiHookModulePrefs 新增 clear 方法,感谢 WankkoRee在新窗口中打开 的建议
    • YukiHookModulePrefs 新增 getStringSetputStringSetall 方法
    • HookParamargs 增加 any 方法
    • 新增 ModuleApplication,可在模块中继承此类实现更多功能
    • 对接全部的 findClass 功能到 Xposed API,在非宿主环境继续使用原生 ClassLoader
    • 修复了一些可能存在的 BUG

    1.0.75 | 2022.04.13  过期

    • 更正了自动处理程序的逻辑识别部分,感谢 ApeaSuperz在新窗口中打开 的贡献
    • 修正一处文档注释的引用未更改的问题
    • HookParam 中删除了 firstArgslastArgs 方法,现在你可以使用 args().first()args().last() 来取代它
    • HookParam 中删除了 args() 中的默认参数 index = 0,现在你可以使用 args().first()args(index = 0) 来取代它
    • HookParamresult 功能增加了泛型匹配,现在你可以使用 result<T> 来匹配你的目标方法已知返回值类型了
    • 方法、构造方法查找功能新增 emptyParam 条件,并完善了文档相关需要注意的查找条件误区
    • 增加了 type 中的 android 类型

    1.0.73 | 2022.04.10

    1.0.72 | 2022.04.09  过期

    • 更新 API 文档到新的地址
    • PackageParam 中加入 appContext 功能
    • 修复一些已知的 BUG,提升 Hook 稳定性

    1.0.71 | 2022.04.04  过期

    • 修复 VariousClass 无法匹配时会停止 Hook 抛出异常的严重问题

    1.0.70 | 2022.04.04  过期

    • 修复 instanceClass 在静态实例中调用后报错问题
    • 在 Hook 过程中加入 isUseAppClassLoader 功能,感谢 WankkoRee在新窗口中打开 的反馈
    • 加入 withProcess 功能,可根据 APP 当前指定进程进行 Hook
    • 修复查找方法、构造类和变量的严重逻辑错误问题
    • 修复 Hook 目标类不存在的时候无法忽略异常输出的问题
    • 修复部分情况下 APP 启动方法装载过快导致 Hook 不能生效的问题
    • 修复 allMethods 未 Hook 到方法时不会抛出异常的问题,感谢 WankkoRee在新窗口中打开 的反馈
    • 加入 Hook 状态监听功能,感谢 WankkoRee在新窗口中打开 的建议
    • 修改 Xposed 入口注入类的方式,重新声明 API 的定义域
    • 加入混淆的方法以及变量的查找功能,可使用不同类型筛选 index 定位指定的方法和变量,感谢 WankkoRee在新窗口中打开 提供的思路
    • 查找方法、变量时允许传入多种类型,例如 String 声明的类名和 VariousClass
    • 加入全新的 current 功能,可对任意的类构建一个反射方法操作空间,方便地调用和修改其中的方法和变量
    • 修复了 Hook 过程中的大量 BUG,感谢 WankkoRee在新窗口中打开 对此项目所做出的贡献

    1.0.69 | 2022.03.30  过期

    • 添加并改进一些方法功能的注释
    • 增加 Demo 中的更多示例 Hook 内容
    • 修复在一个 Hook 实例中,allMethods 多次使用时只有最后一个生效的问题,感谢 WankkoRee在新窗口中打开 的反馈

    1.0.68 | 2022.03.29  过期

    • 增加 Demo 中的新用例和 LSPosed 作用域
    • 增加 Member 查找缓存和查找缓存配置开关
    • 移除和修改 MethodFinderFieldFinder 以及 HookParam 相关方法的调用
    • 增加更多 Finder 中的 cast 类型并支持 cast 为数组
    • 整体的性能和稳定性提升
    • 修复上一个版本可能存在的 BUG

    1.0.67 | 2022.03.27  过期

    • 增加三个 Finder 中的 modifiers 功能,可筛选 staticnativepublicabstract 等诸多描述类型
    • 增加方法和构造方法查找时可模糊方法参数类型为指定个数进行查找
    • 增加 MemberhasModifiers 扩展功能
    • 增加 MethodFinderConstructorFinder 中的 give 方法,可获得原始类型
    • 增加 YukiHookModulePrefs 中的 PrefsData 模板功能
    • 彻底对方法、构造方法及变量的查找方案进行重构
    • 优化代码注释,修复了可能产生的 BUG

    1.0.66 | 2022.03.25  过期

    • 修复 MethodFinder 中的一个严重问题
    • 增加 hookParam 中的 args 调用方法
    • 修复其它可能存在的问题以及修复部分类的注释问题

    1.0.65 | 2022.03.25  过期

    • 重新发布版本修复 Maven 仓库因为缓存问题新版本不正确的情况
    • 增加 MethodFinderFieldFinder 新的返回值调用方法
    • 修复可能存在的问题,并修复太极使用过程中可能存在的问题
    • 修复自动生成 Xposed 入口类可能发生的问题
    • 增加了 type 中的 android 类型以及 java 类型

    1.0.6 | 2022.03.20  过期

    • 修复 YukiHookModulePrefs 在使用一次 direct 忽略缓存后每次都忽略的 BUG
    • 增加新的 API,作废了 isActive 判断模块激活的传统用法
    • 修复非 Xposed 环境使用 API 时打印调试日志的问题
    • 修复查找 Field 时的日志输出问题和未拦截的异常问题
    • 解耦合 ReflectionUtils 中的 Xposed API
    • 增加 YukiHookModuleStatus 方法名称的混淆,以精简模块生成的体积
    • 装载模块自身 Hook 时将不再打印欢迎信息
    • 修复上一个版本仍然存在的某些 BUG

    1.0.55 | 2022.03.18  过期

    • 修正一处注释错误
    • 临时修复一个 BUG
    • 增加了 type 中的大量 android 类型以及少量 java 类型
    • 修复新版与旧版 Kotlin APIs 的兼容性问题

    1.0.5 | 2022.03.18  过期

    • 修复旧版本 LSPosed 框架情况下欢迎信息多次打印的问题
    • 添加 onInit 方法来配置 YukiHookAPI
    • 新增 executorNameexecutorVersion 来获取当前 Hook Framework 的名称和版本号
    • 新增 by 方法来设置 Hook 的时机和条件
    • YukiHookModulePrefs 新增可控制的键值缓存,可在宿主运行时模块动态更新数据
    • 修复了一些可能存在的 BUG

    1.0.4 | 2022.03.06  过期

    • 修复 LSPosed 在最新版本中启用“只有模块classloader可以使用Xposed API”选项后找不到 XposedBridge 的问题
    • 添加 YukiHookAPI 的常量版本名称和版本号
    • 新增 hasField 方法以及 isAllowPrintingLogs 配置参数
    • 新增 isDebug 开启的情况下 API 将自动打印欢迎信息测试模块是否生效

    1.0.3 | 2022.03.02  过期

    • 修复一个潜在性的异常未拦截 BUG
    • 增加 ignoredError 功能
    • 增加了 type 中的 android 类型
    • 增加监听 hook 后的 ClassNotFound 功能

    1.0.2 | 2022.02.18  过期

    • 修复 Windows 下无法找到项目路径的问题
    • 移除部分反射 API,合并至 BaseFinder 进行整合
    • 增加直接使用字符串创建 Hook 的方法

    1.0.1 | 2022.02.15  过期

    • RemedyPlan 增加 onFind 功能
    • 整合并修改了部分反射 API 代码
    • 增加了 type 中的 java 类型
    • 修复忽略错误在控制台仍然输出的问题

    1.0 | 2022.02.14  过期

    • 首个版本提交至 Maven
    - +

    更新日志

    这里记录了 YukiHookAPI 的版本更新历史。

    特别注意

    我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。

    1.1.6 | 2023.01.21  最新

    • 修复 Xposed 模块装载时可能存在同一个进程多个包名的情况导致 PackageParam 保持单例后 ClassLoader 不符的严重问题
    • 新增同一个进程多个包名的情况下未区分包名时,停止装载单例化的子 Hooker 并打印警告信息
    • 修复 HookParam.callOriginalHookParam.invokeOriginal 等方法调用原始方法时参数个数不正确的问题
    • 修改 MethodFinderConstructorFinderReflectionFactory 中反射调用的方法参数名 paramargs
    • 新增 Xposed 模块自动处理程序中判断入口类构造方法参数功能,入口类需要保证其不存在任何构造方法参数

    1.1.5 | 2023.01.13  过旧

    • 规范并优化整体代码风格
    • 对部分内部调用的 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.callOriginalHookParam.invokeOriginal 出现对象为空问题
    • 优化对太极激活方法相关判断功能以及同步更新文档相关说明
    • 作废了 YukiHookAPI.Status.executorNameYukiHookAPI.Status.executorVersion,请转移到 YukiHookAPI.Status.Executor
    • 适配了一些第三方 Hook Framework 的 YukiHookAPI.Status.Executor.name 名称显示功能
    • 新增 Class.extendsClass.implements 等方法,可更加方便地判断当前 Class 的继承与接口关系
    • 新增 Class.toClassClass.toClassOrNull 等相关方法的同名泛型方法,可使用泛型来约束已知 Class 的实例对象类型
    • 修改 classOf<T> 方法的返回值为泛型 T,以约束已知 Class 的实例对象类型
    • 新增 Class 相关扩展方法的 initialize 参数,可控制在得到 Class 对象时是否同时初始化其静态方法块
    • 变量、方法、构造方法查找功能中新增 param { ... }type { ... } 等用法,可对查找的对象增加更加具体的条件判断
    • PackageParamloadApp 方法新增 isExcludeSelf 参数,可用于排除 Hook 相关功能注入模块自身实例进程
    • PackageParamonAppLifecycle 方法新增 isOnFailureThrowToApp 参数,可将生命周期方法体内发生的异常直接抛给宿主
    • 修改 PackageParam 中的 appClassLoader 为可修改变量,可在 Hook 过程中动态设置宿主使用的 ClassLoader
    • HookParam 中新增 dataExtra 功能,可用于临时存储 Hook 方法体中的数据
    • 作废 YukiHookModulePrefs 中的 isRunInNewXShareModeisXSharePrefsReadable,统一合并到 isPreferencesAvailable
    • Class.allFieldsClass.allMethods 等相关方法新增 isAccessible 参数,可控制成员对象何时可被设置为可访问类型
    • 修复 YukiHookDataChannel 存在多个宿主时在一个 Activity 中接收相同键值数据时仅会回调最后一个方法体的问题
    • YukiHookDataChannelwait 等相关方法中新增 priority 参数,可传入 ChannelPriority 来自定义回调数据结果的条件
    • YukiHookDataChannel 新增发送数据时自动使用 ChannelDataWrapper 类型包装功能,提升使用体验并增强数据保护
    • YukiHookDataChannel 新增限制一次性发送数据的最大字节大小功能,防止数据过大造成 APP 崩溃
    • YukiHookDataChannel 新增发送数据过大时自动分段发送功能,仅支持 ListMapSetString 类型
    • YukiHookLogger 新增 contents 方法与 saveToFiledata 参数,可传入自定义的调试日志数据进行格式化或保存到文件
    • 修复 YukiHookLogger 处理后的调试日志数据包名可能在 (Xposed) 宿主环境不正确的问题
    • 修复 Xposed 模块装载资源钩子 (Resources Hook) 事件时在部分系统上 (部分系统 APP 中) 包名可能不正确的问题

    1.1.4 | 2022.10.04  过旧

    • 修复 YukiHookDataChannel 可能不能响应系统框架中响应广播事件的问题,在 Android 13 中复现
    • 修复 YukiHookDataChannel 长达多个版本在 (Xposed) 宿主环境无法与模块通讯的问题
    • YukiHookDataChannel 中新增 obtainLoggerInMemoryData 方法,可在模块与宿主之间共享调试日志数据
    • 修改 YukiHookLogger.inMemoryData 的类型为 ArrayList 并修改 YukiLoggerDatadata class
    • 修复 YukiLoggerData 在模块中包名为空打印空白的问题
    • PackageParam 中新增 loadApploadZygoteloadSystemwithProcess 的同名多参数方法
    • 修复了一些可能存在的 BUG

    1.1.3 | 2022.09.30  过旧

    • 修复一个无法自定义 Hook 入口类名的致命错误
    • 添加 LoggerFactory 中的部分代码注释文案并更新特色功能文档

    1.1.2 | 2022.09.30  过期

    • 文档 基础知识 页面新增 English 版本友情链接
    • 修复 YukiBaseHooker 注释中的 English 文档链接错误问题
    • 修复 ModuleClassLoader 中的 ClassCastException 问题
    • 修正并规范部分代码注释
    • 新增 ModuleClassLoader 排除列表功能,可使用 excludeHostClassesexcludeModuleClasses 方法来自定义排除列表
    • 新增 YukiLoggerData 实时日志数据类,可实时通过 YukiHookLogger.inMemoryData 获取日志数组
    • 新增 ClassLoader.listOfClasses 方法,可直接获取当前 Dex 中的全部 Class

    1.1.1 | 2022.09.28  过期

    • 修复了文档 基础知识 页面友情链接错误的问题
    • 修复了文档 favicon 不显示的问题
    • 修复 DexClassFinder 查找条件中的 BUG

    1.1.0 | 2022.09.28  过期

    • 这是一次大版本更新,有关更新日志中提到的变化及用法请参考 API 文档 以及 特色功能
    • 更换帮助文档框架到 VuePress在新窗口中打开
    • 统一并规范文档中的术语名词,例如“查询”一律更改为了“查找”,XposedHelper 拼写错误修改为了 XposedHelpers
    • 文档 基础知识 页面加入友情链接,仅限简体中文
    • 将 Hook App Demo 的 ClassMethod 转为 Java 以提供更好的演示效果
    • 修正了 Hook Module Demo 中的代码注释命名
    • 重构了大量底层 Hook 逻辑及 Xposed API 的对接方式
    • 移除了 HookParamWrapper,现已将其直接与 YukiBridgeFactory 对接
    • 移动部分 YukiHookBridge 中的方法到 AppParasitics
    • 移除了 HookParam.args 与底层的直接对接方法 setArgs,直接获取并设置当前数组的对象
    • 优化自动处理程序,将引用的 jar 合并到 stub 项目
    • 修复多项目打包时模块包名无法正确匹配的问题以及修改自动处理程序的模块包名匹配逻辑,感谢 5ec1cff在新窗口中打开 的反馈及提供的解决方案
    • 对 API 私有工具类的方法进行了 internal 闭包处理,避免污染顶级命名空间
    • 修正了所有反射和 Hook 类的 Creater 命名到 Creator
    • 新增 YukiHookAPI.Status.compiledTimestamp 功能,可以在作为 Xposed 模块使用时获取编译完成的时间戳
    • 新增 YukiHookAPI.Status.isXposedEnvironment 功能,可以判断当前为 (Xposed) 宿主环境还是模块环境
    • 调试日志功能进行了大改版,现已将 YukiHookAPI.Configs.debugTag 等功能合并到 YukiHookLogger.Configs
    • 调试日志新增可指定打印使用的方法为 XposedBridge.logLogd
    • 调试日志中默认加入当前宿主的包名以及当前用户 ID,以供调试,你可以在 debugLog 配置中自行更改
    • 新增 generic 功能,可对泛型进行反射和调用,你可以在 ClassCurrentClass 中使用它
    • 作废 buildOfAny 方法,现在请直接使用 buildOf 方法 (不带泛型) 来使用构造方法创建新对象并得到结果 Any
    • 修复 hasExtends 使用过程发生空指针异常的问题
    • CurrentClass 新增非 lambda 方式的调用方法
    • CurrentClass 新增 namesimpleName 功能
    • 完全重写 ReflectionTool 的核心方法,将不同的查找条件进行了整理分类
    • 修复 ReflectionTool 中可能的直接调用 declared 获取的 Member 抛出异常的问题
    • 修复 ReflectionToolUndefinedType 未在 MethodConstructor 条件中正确判断的问题
    • 新增反射查找结果发生异常时的友好提示方式,可具体定位到指定条件找不到 Member 的问题
    • 反射查找 MethodConstructor 中新增 VagueType 条件,可使用在 param 条件中用于忽略你不想填写的参数
    • 反射查找 MethodConstructor 中新增 paramCount { ... } 条件,现在你可以直接拿到其中的 it 来自定义你的判断条件
    • FieldFinder 结果中新增 current 方法,可直接对结果实例创建调用空间
    • 修改了反射查找功能中的 modifiers 条件以及 name 条件,现在你需要对此方法体结尾返回一个 Boolean 以使条件成立
    • ModifierRules 中的 as* 功能改名为 is*,感谢 Kitsune在新窗口中打开 的建议
    • FieldFinder 中新增 RemedyPlan 功能
    • 新增 Dex 中的 Class 模糊查找功能 (Beta),你现在可以直接使用 searchClass 功能来使用指定条件模糊查找 Class
    • 新增反射查找中的多重查找功能,可使用相对查找条件同时获取多个查找结果,感谢 AA 以及 Kitsune在新窗口中打开 的建议
    • 修复 appClassLoader 获取到的对象在某些系统中的系统应用中不正确的问题,感谢 Luckyzyx在新窗口中打开 的反馈
    • 修改了 XposedBridge.invokeOriginalMethod 的调用方式并在 MethodFinder.Result.Instance 中增加 original 功能
    • 修复 YukiHookModulePrefsgetStringSet 方法取值错误的问题并优化代码风格,感谢 Teddy_Zhu在新窗口中打开PR在新窗口中打开
    • 修改 YukiHookModulePrefs,拦截 XSharePreference 可能不存在的异常
    • 修复 YukiHookDataChannel 在某些第三方 ROM 系统框架中无法注册成功的问题
    • 安全化 YukiHookDataChannel,现在它只能在来自指定包名的模块与宿主之间通信
    • 新增自动 Hook SharedPreferences 以修复部分系统中文件权限不是 0664 的问题,感谢 5ec1cff在新窗口中打开 的反馈及提供的实现代码
    • 新增 YukiHookAPI.Configs.isEnableHookSharedPreferences 功能,默认关闭,若 SharedPreferences 的权限错误可进行启用
    • 修复查找 Constructor 时无参构造方法在不填写查找条件时无法找到的 BUG,感谢 B5 KAKA 的反馈
    • 分离位于 injectMembermethodconstructorResult 实例到 Process
    • 在 Hook 过程中新增 useDangerousOperation 方法,未进行声明时在 Hook 危险列表中的功能后会自动停止 Hook 并打印错误
    • 新增模块资源注入与 Activity 代理功能,你可以调用 injectModuleAppResourcesregisterModuleAppActivities 来使用
    • 新增 ModuleContextThemeWrapper 功能,你可以调用 applyModuleTheme 在任意 Activity 中创建模块的 Context
    • 新增 ClassLoader.onLoadClass 功能,可用于监听 ClassLoaderloadClass 方法被调用的事件
    • 作废了 classOfclazz 扩展方法,新增 toClass 以及 toClassOrNull 用法,请现在转移到新的方法
    • VariousClass 新增 getOrNull 方法,可在匹配不到 Class 的时候不抛出异常而是返回 null
    • PackageParam.hook 中移除了 isUseAppClassLoader 参数,修改为 isForceUseAbsolute 并自动匹配目标 Class
    • PackageParam 新增 systemContext 功能,你可以在任意时间调用此功能获取一个持久化的 Context
    • 不再对外开放 HookClass 中的任何方法
    • HookParam 中新增 throwToApp 功能,可将异常直接抛给宿主
    • Hook 回调中新增 onFailureThrowToApp 功能,可在发生异常时直接抛给宿主
    • 修改了调试日志的打印逻辑,反射查找功能中的耗时记录仅会在 Hook 过程中进行打印
    • Hook 过程中新增解除 Hook 功能,可使用 removeremoveSelf 方法解除 Hook
    • 修复在 ReplaceHook 失败的时候导致宿主抛出异常的问题,现修改为调用原始方法保证宿主功能正常运行
    • 新增 Hook 过程中对方法返回值的检查功能,在返回值不匹配的情况下会根据情景自动抛出异常或打印错误
    • Resources Hook 中新增 array 类型,感谢 GSWXXN在新窗口中打开PR在新窗口中打开
    • 移动 me.weishu.reflectionthirdparty 防止同时引入的同名依赖冲突
    • 移除 Hook 方法体为空时抛出的异常,修改为打印警告日志
    • 修改 AppLifecycle 的异常处理逻辑,当其发生异常时直接抛给宿主
    • 更新 Demo 的 API 版本到 33

    1.0.92 | 2022.05.31  过期

    • 修正了大量方法中 callback 的命名方法
    • 更换方案再次修复 YukiHookDataChannel 在低于 Android 12 的设备上不能回调当前 Activity 广播的问题
    • InjectYukiHookWithXposed 注解新增 isUsingResourcesHook 功能,现在你可以选择性关闭自动生成 IXposedHookInitPackageResources 的依赖接口了

    1.0.91 | 2022.05.29  过期

    • 修复部分设备的定制系统在 LSPosed 环境下开机启动获取的 ClassLoader 错误的问题,感谢 Luckyzyx在新窗口中打开 的反馈
    • 修复 YukiHookDataChannelZUI 以及低于 Android 12 的系统上不能回调当前 Activity 广播的问题
    • 整合 YukiHookModuleStatus 功能到 YukiHookAPI.Status,重写了大量方法,现在你可以在模块与宿主中双向判断模块激活等状态信息

    1.0.90 | 2022.05.27  过期

    • 修复 YukiHookDataChannel 在模块设置监听回调时闪退的问题
    • 修复 YukiHookDataChannel 在非当前 Activity 情况下依然会回调的问题
    • 移除 YukiHookDataChannel 回调事件的默认值,没有即不回调
    • 移除 YukiHookModulePrefs 在 XShare 不可读的情况下打印的警告
    • 新增 YukiHookModulePrefs 中的 isXSharePrefsReadable 方法,可判断当前的 XShare 是否可用

    1.0.89 | 2022.05.26  过期

    • 修复 YukiHookDataChannel 不能重复设置监听的问题,并加入在模块不同 Activity 中重复响应和自动跟随 Activity 销毁监听功能
    • 新增 YukiHookDataChannel 重复监听用例说明文档
    • 加入 onAlreadyHooked 方法,可判断当前方法是否被重复 Hook
    • 修改部分重复添加 HashMap 的逻辑,移除 putIfAbsent 方法,允许覆盖添加
    • 修复了几处可能的 BUG

    1.0.88 | 2022.05.25  过期

    • 对 Xposed API 完全解耦合
    • 增加了 type 中的 android 类型
    • YukiHookModuleStatus 从自动生成代码中分离,并加入 isEnableHookModuleStatus 的开关,由你决定是否启用
    • 对 API 大量类的构造方法进行了 internal 闭包处理
    • YukiHookModulePrefs 设置为单例运行,防止重复创建浪费系统资源
    • 修复自 1.0.80 版本后无法嵌套 Hook 的 BUG,并优化嵌套 Hook 相关功能
    • 修改 Hooker 存储方案由 HashSet 到 HashMap,防止重复添加 Hooker 的问题
    • 修改 Hook 核心实现方法,加入查重,避免重复 Hook 多次回调 HookParam 方法
    • MethodFinderFieldFinder 加入查找模糊方法、变量名称功能,可调用 name { ... } 来设置查找条件,支持正则
    • 优化并修改 appContext 的获取方式,降低会取到空的问题的可能性
    • 修改自动生成的代码中 logger 的打印 TAG 默认为你自定义的名称,方便进行调试
    • 优化 YukiHookBridgeHooker 实现方式,提升 Hook 性能
    • PackageParam 增加 onAppLifecycle 方法,可原生监听宿主的生命周期以及实现注册系统广播功能
    • 新增 YukiHookDataChannel 功能,可在模块与宿主保持存活的情况下使用系统无序广播进行通讯
    • YukiHookDataChannel 增加 checkingVersionEquals 方法,可通过监听来验证模块更新后宿主并未更新版本不匹配问题
    • demo-module 的示例代码中新增 Java 版本的示例,仅供参考

    1.0.87 | 2022.05.10  过期

    • 新增 refreshModuleAppResources 功能,以适配语言区域、字体大小、分辨率改变等情况下的 Resources 刷新
    • 新增 isEnableModuleAppResourcesCache 功能,可自行设置是否自动缓存当前模块的 Resources

    1.0.86 | 2022.05.06  过期

    • 修复不支持 Resources Hook(资源钩子) 的情况下在 initZygote 时持续报错的问题,复现在 ZUI/LSPosed CI(1.8.3-6550)
    • 优化并对 Resources Hook 进行异常处理,只有被使用后不支持才会打印错误和警告

    1.0.85 | 2022.05.04  过期

    • 修复无法 Hook 系统框架的严重问题,从 1.0.80 开始出现
    • 调试日志中新增区分 initZygote 装载的包名为 android-zygotepackageName 保持 android 不变

    1.0.83 | 2022.05.04  过期

    • 修复 YukiHookModuleStatusloadSystem 后大量报错的问题
    • 新增 type 中的 android 类型
    • 更新帮助文档的示例说明

    1.0.82 | 2022.05.04  过期

    • 修复了一处概念混淆错误,区分 initZygote 与系统框架的关系,之前的注释和文档有问题,非常抱歉
    • PackageParam 新增 loadSystem 方法,不需要再写 loadApp(name = "android") 即可 Hook 系统框架

    1.0.81 | 2022.05.04  过期

    • 修复使用 by 方法设置条件后 Hook 方法体内查找不到的方法、构造方法依然输出错误日志的问题
    • 在执行 Hook 过程中加入全局日志显示当前 Hook APP 的包名,并修复一处错误日志打印样式的问题

    1.0.80 | 2022.05.01  过期

    • InjectYukiHookWithXposed 注解新增 entryClassName 功能,可自定义生成的 xposed_init 入口类名
    • YukiHookXposedInitProxy 更名为 IYukiHookXposedInit,原接口名称已作废,将在后续版本中直接被删除
    • 新增 initZygote 与 Resources Hook 功能,支持 Hook Layout
    • 新增 onXposedEvent 方法,可监听原生 Xposed API 的全部事件
    • 对 Hook 功能的 lambda 进行 inline 处理,避免生成过碎的匿名类,提升编译后的运行性能
    • 修复 PrefsData 编译后的方法体复制过大的问题
    • 增加 XSharePreference 可读性测试,失败后会自动打印警告日志
    • PackageParam 新增 appResourcesmoduleAppResourcesmoduleAppFilePath 功能
    • PackageParamloadApp 新增不写 name 功能,默认筛选全部 APP
    • PackageParam 新增 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 问题导致多次调用
    • 修复 Hook ClassLoader 导致 Hook 卡死的问题,感谢 WankkoRee在新窗口中打开 的反馈
    • 提升 XC_Callback 接口对接后的性能
    • Java type 新增 ClassLoader 类型
    • 优化 API 帮助文档,修复可能持续缓存页面的问题

    1.0.78 | 2022.04.18  过期

    • YukiHookModulePrefs 新增 isRunInNewXShareMode 方法,可用于判断模块当前是否处于 New XSharePreference 模式
    • 修复 YukiHookModulePrefsNew XSharePreference 模式下工作的部分问题
    • 新增 ModulePreferenceFragment,现在,你可以完全替换掉 PreferenceFragmentCompat 并开始使用新的功能
    • 适配 PreferenceFragmentCompat 的 Sp 数据存储解决方案,感谢 mahoshojoHCG在新窗口中打开 的反馈
    • 更新自动处理程序以及 Kotlin 依赖到最新版本
    • 修正部分文档和代码注释中的错误

    1.0.77 | 2022.04.15  过期

    • YukiHookModulePrefs 新增 clear 方法,感谢 WankkoRee在新窗口中打开 的建议
    • YukiHookModulePrefs 新增 getStringSetputStringSetall 方法
    • HookParamargs 增加 any 方法
    • 新增 ModuleApplication,可在模块中继承此类实现更多功能
    • 对接全部的 findClass 功能到 Xposed API,在非宿主环境继续使用原生 ClassLoader
    • 修复了一些可能存在的 BUG

    1.0.75 | 2022.04.13  过期

    • 更正了自动处理程序的逻辑识别部分,感谢 ApeaSuperz在新窗口中打开 的贡献
    • 修正一处文档注释的引用未更改的问题
    • HookParam 中删除了 firstArgslastArgs 方法,现在你可以使用 args().first()args().last() 来取代它
    • HookParam 中删除了 args() 中的默认参数 index = 0,现在你可以使用 args().first()args(index = 0) 来取代它
    • HookParamresult 功能增加了泛型匹配,现在你可以使用 result<T> 来匹配你的目标方法已知返回值类型了
    • 方法、构造方法查找功能新增 emptyParam 条件,并完善了文档相关需要注意的查找条件误区
    • 增加了 type 中的 android 类型

    1.0.73 | 2022.04.10

    1.0.72 | 2022.04.09  过期

    • 更新 API 文档到新的地址
    • PackageParam 中加入 appContext 功能
    • 修复一些已知的 BUG,提升 Hook 稳定性

    1.0.71 | 2022.04.04  过期

    • 修复 VariousClass 无法匹配时会停止 Hook 抛出异常的严重问题

    1.0.70 | 2022.04.04  过期

    • 修复 instanceClass 在静态实例中调用后报错问题
    • 在 Hook 过程中加入 isUseAppClassLoader 功能,感谢 WankkoRee在新窗口中打开 的反馈
    • 加入 withProcess 功能,可根据 APP 当前指定进程进行 Hook
    • 修复查找方法、构造类和变量的严重逻辑错误问题
    • 修复 Hook 目标类不存在的时候无法忽略异常输出的问题
    • 修复部分情况下 APP 启动方法装载过快导致 Hook 不能生效的问题
    • 修复 allMethods 未 Hook 到方法时不会抛出异常的问题,感谢 WankkoRee在新窗口中打开 的反馈
    • 加入 Hook 状态监听功能,感谢 WankkoRee在新窗口中打开 的建议
    • 修改 Xposed 入口注入类的方式,重新声明 API 的定义域
    • 加入混淆的方法以及变量的查找功能,可使用不同类型筛选 index 定位指定的方法和变量,感谢 WankkoRee在新窗口中打开 提供的思路
    • 查找方法、变量时允许传入多种类型,例如 String 声明的类名和 VariousClass
    • 加入全新的 current 功能,可对任意的类构建一个反射方法操作空间,方便地调用和修改其中的方法和变量
    • 修复了 Hook 过程中的大量 BUG,感谢 WankkoRee在新窗口中打开 对此项目所做出的贡献

    1.0.69 | 2022.03.30  过期

    • 添加并改进一些方法功能的注释
    • 增加 Demo 中的更多示例 Hook 内容
    • 修复在一个 Hook 实例中,allMethods 多次使用时只有最后一个生效的问题,感谢 WankkoRee在新窗口中打开 的反馈

    1.0.68 | 2022.03.29  过期

    • 增加 Demo 中的新用例和 LSPosed 作用域
    • 增加 Member 查找缓存和查找缓存配置开关
    • 移除和修改 MethodFinderFieldFinder 以及 HookParam 相关方法的调用
    • 增加更多 Finder 中的 cast 类型并支持 cast 为数组
    • 整体的性能和稳定性提升
    • 修复上一个版本可能存在的 BUG

    1.0.67 | 2022.03.27  过期

    • 增加三个 Finder 中的 modifiers 功能,可筛选 staticnativepublicabstract 等诸多描述类型
    • 增加方法和构造方法查找时可模糊方法参数类型为指定个数进行查找
    • 增加 MemberhasModifiers 扩展功能
    • 增加 MethodFinderConstructorFinder 中的 give 方法,可获得原始类型
    • 增加 YukiHookModulePrefs 中的 PrefsData 模板功能
    • 彻底对方法、构造方法及变量的查找方案进行重构
    • 优化代码注释,修复了可能产生的 BUG

    1.0.66 | 2022.03.25  过期

    • 修复 MethodFinder 中的一个严重问题
    • 增加 hookParam 中的 args 调用方法
    • 修复其它可能存在的问题以及修复部分类的注释问题

    1.0.65 | 2022.03.25  过期

    • 重新发布版本修复 Maven 仓库因为缓存问题新版本不正确的情况
    • 增加 MethodFinderFieldFinder 新的返回值调用方法
    • 修复可能存在的问题,并修复太极使用过程中可能存在的问题
    • 修复自动生成 Xposed 入口类可能发生的问题
    • 增加了 type 中的 android 类型以及 java 类型

    1.0.6 | 2022.03.20  过期

    • 修复 YukiHookModulePrefs 在使用一次 direct 忽略缓存后每次都忽略的 BUG
    • 增加新的 API,作废了 isActive 判断模块激活的传统用法
    • 修复非 Xposed 环境使用 API 时打印调试日志的问题
    • 修复查找 Field 时的日志输出问题和未拦截的异常问题
    • 解耦合 ReflectionUtils 中的 Xposed API
    • 增加 YukiHookModuleStatus 方法名称的混淆,以精简模块生成的体积
    • 装载模块自身 Hook 时将不再打印欢迎信息
    • 修复上一个版本仍然存在的某些 BUG

    1.0.55 | 2022.03.18  过期

    • 修正一处注释错误
    • 临时修复一个 BUG
    • 增加了 type 中的大量 android 类型以及少量 java 类型
    • 修复新版与旧版 Kotlin APIs 的兼容性问题

    1.0.5 | 2022.03.18  过期

    • 修复旧版本 LSPosed 框架情况下欢迎信息多次打印的问题
    • 添加 onInit 方法来配置 YukiHookAPI
    • 新增 executorNameexecutorVersion 来获取当前 Hook Framework 的名称和版本号
    • 新增 by 方法来设置 Hook 的时机和条件
    • YukiHookModulePrefs 新增可控制的键值缓存,可在宿主运行时模块动态更新数据
    • 修复了一些可能存在的 BUG

    1.0.4 | 2022.03.06  过期

    • 修复 LSPosed 在最新版本中启用“只有模块classloader可以使用Xposed API”选项后找不到 XposedBridge 的问题
    • 添加 YukiHookAPI 的常量版本名称和版本号
    • 新增 hasField 方法以及 isAllowPrintingLogs 配置参数
    • 新增 isDebug 开启的情况下 API 将自动打印欢迎信息测试模块是否生效

    1.0.3 | 2022.03.02  过期

    • 修复一个潜在性的异常未拦截 BUG
    • 增加 ignoredError 功能
    • 增加了 type 中的 android 类型
    • 增加监听 hook 后的 ClassNotFound 功能

    1.0.2 | 2022.02.18  过期

    • 修复 Windows 下无法找到项目路径的问题
    • 移除部分反射 API,合并至 BaseFinder 进行整合
    • 增加直接使用字符串创建 Hook 的方法

    1.0.1 | 2022.02.15  过期

    • RemedyPlan 增加 onFind 功能
    • 整合并修改了部分反射 API 代码
    • 增加了 type 中的 java 类型
    • 修复忽略错误在控制台仍然输出的问题

    1.0 | 2022.02.14  过期

    • 首个版本提交至 Maven
    + diff --git a/docs/zh-cn/about/contacts.html b/docs/zh-cn/about/contacts.html index 4178afd8c..8ac28fdfc 100644 --- a/docs/zh-cn/about/contacts.html +++ b/docs/zh-cn/about/contacts.html @@ -23,11 +23,11 @@ } 联系我们 | Yuki Hook API - +

    联系我们

    如在使用中有任何问题,或有任何建设性的建议,都可以联系我们。

    加入我们 点击加入 Telegram 群组在新窗口中打开

    酷安 找到我 @星夜不荟在新窗口中打开

    助力维护

    感谢您选择并使用 YukiHookAPI,如有代码相关的建议和请求,可在 Github 提交 Pull Request。

    - + diff --git a/docs/zh-cn/about/future.html b/docs/zh-cn/about/future.html index 8479cf5b7..1c8120fcd 100644 --- a/docs/zh-cn/about/future.html +++ b/docs/zh-cn/about/future.html @@ -23,11 +23,11 @@ } 展望未来 | Yuki Hook API - +

    展望未来

    未来是美好的,也是不确定的,让我们共同期待 YukiHookAPI 在未来的发展空间。

    未解决的问题

    这里收录了 YukiHookAPI 尚未解决的问题。

    YukiHookModulePrefs

    目前仅限完美支持 LSPosed,其它 Xposed 框架需要降级模块 API。

    可能完全不支持太极,太极在高版本系统上需要更低的 API 才能适配。

    部分 Xposed 模块开发者目前选择 Hook 目标 APP 内置 Sp 存储方案解决模块设置共享问题。

    后期 Android 系统的权限将越来越严格,selinux 就是目前面临的一个大问题,有待讨论和研究。

    未来的计划

    这里收录了 YukiHookAPI 可能会在后期添加的功能。

    支持独立使用的 Lite 版本

    待讨论

    目前 API 只支持通过自动处理程序绑定到 xposed_init,若您不喜欢自动处理程序,一定要自己实现模块装载入口,未来会按照需求人数推出仅有 API 功能的 Lite 版本,你可向我们提出 issues

    API 已经提供了 Xposed 原生 API 监听接口,你可以 在这里 找到或查看 Demo 的实现方法。

    支持更多 Hook Framework

    作为 API 来讲,目前仅仅对接 XposedBridge 作为兼容层,还是有一定的局限性。

    大部分 inline hook 没有 Java 兼容层,后期可能会考虑 native hookJava 兼容层适配。

    - + diff --git a/docs/zh-cn/api/home.html b/docs/zh-cn/api/home.html index 84427ef9a..78c8faf37 100644 --- a/docs/zh-cn/api/home.html +++ b/docs/zh-cn/api/home.html @@ -23,11 +23,11 @@ } 文档介绍 | Yuki Hook API - +

    文档介绍

    这里的文档将同步最新 API 版本的相关用法,请保持 YukiHookAPI 为最新版本以使用最新版本的功能。

    功能描述说明

    功能描述主要介绍当前 API 的相关用法和用途。

    功能示例说明

    功能示例主要展示了当前 API 的基本用法示例,可供参考。

    变更记录说明

    首个版本的功能将标记为 v<version> 添加

    后期新增加的功能将标记为 v<version> 新增

    后期修改的功能将被追加为 v<version> 修改

    后期被作废的功能将标记为 v<version> 作废 并会标注删除线;

    后期被删除的功能将标记为 v<version> 移除 并会标注删除线。

    相关符号说明

    • kt  Kotlin Static File

    • annotation  注解

    • interface  接口

    • object  类 (单例)

    • class  类

    • field  变量或 getset 方法或只读的 get 方法

    • method  方法

    • enum  Enum 常量

    • ext-field  扩展的变量 (全局)

    • ext-method  扩展的方法 (全局)

    • i-ext-field  扩展的变量 (调用域限制)

    • i-ext-method  扩展的方法 (调用域限制)

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html index c520553ae..f7611e563 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html @@ -23,7 +23,7 @@ } YukiHookAPI - object | Yuki Hook API - + @@ -51,8 +51,8 @@

    变更记录

    v1.0.88 新增

    功能描述

    是否启用 Hook Xposed 模块激活等状态功能.

    为原生支持 Xposed 模块激活状态检测,此功能默认启用。

    注意

    关闭后你将不能再在模块环境中使用 YukiHookAPI.Status 中的激活状态判断功能。

    isEnableHookSharedPreferences - field

    var isEnableHookSharedPreferences: Boolean
     

    变更记录

    v1.1.0 新增

    功能描述

    是否启用 Hook SharedPreferences

    启用后将在模块启动时强制将 SharedPreferences 文件权限调整为 Context.MODE_WORLD_READABLE (0664)。

    注意

    这是一个可选的实验性功能,此功能默认不启用。

    仅用于修复某些系统可能会出现在启用了 New XSharedPreferences 后依然出现文件权限错误问题,若你能正常使用 YukiHookModulePrefs 就不建议启用此功能。

    isEnableDataChannel - field

    var isEnableDataChannel: Boolean
     

    变更记录

    v1.0.88 新增

    功能描述

    是否启用当前 Xposed 模块与宿主交互的 YukiHookDataChannel 功能。

    请确保 Xposed 模块的 Application 继承于 ModuleApplication 才能有效。

    此功能默认启用,关闭后将不会在功能初始化的时候装载 YukiHookDataChannel

    isEnableMemberCache - field

    var isEnableMemberCache: Boolean
    -

    变更记录

    v1.0.68 新增

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    是否启用 Member 缓存功能。

    为防止 Member 复用过高造成的系统 GC 问题,此功能默认启用。

    启用后会缓存已经找到的 MethodConstructorField

    缓存的 Member 都将处于 MemberCacheStore 的全局静态实例中。

    推荐使用 MethodFinderConstructorFinderFieldFinder 来获取 Member

    除非缓存的 Member 发生了混淆的问题,例如使用 R8 混淆后的 APP 的目标 Member,否则建议启用。

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    变更记录

    v1.0 添加

    功能描述

    Configs 类实现了一个 lambda 方法体。

    你可以轻松的调用它进行配置。

    功能示例

    你可以在 Hook 入口类的 onInit 方法中调用 configs 方法和 debugLog 方法完成对 API 的功能配置,实时生效。

    示例如下

    object HookEntry : IYukiHookXposedInit {
    +

    变更记录

    v1.0.68 新增

    功能描述

    是否启用 Member 缓存功能。

    为防止 Member 复用过高造成的系统 GC 问题,此功能默认启用。

    启用后会缓存已经找到的 MethodConstructorField

    缓存的 Member 都将处于 MemberCacheStore 的全局静态实例中。

    推荐使用 MethodFinderConstructorFinderFieldFinder 来获取 Member

    除非缓存的 Member 发生了混淆的问题,例如使用 R8 混淆后的 APP 的目标 Member,否则建议启用。

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    +

    变更记录

    v1.0 添加

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    Configs 类实现了一个 lambda 方法体。

    你可以轻松的调用它进行配置。

    功能示例

    你可以在 Hook 入口类的 onInit 方法中调用 configs 方法和 debugLog 方法完成对 API 的功能配置,实时生效。

    示例如下

    object HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             YukiHookAPI.configs {
    @@ -128,6 +128,6 @@
     
    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     
    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
     

    变更记录

    v1.0 添加

    功能描述

    装载 Hook 入口的核心方法。

    功能示例

    详情请参考

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html index 37855351c..8dae02205 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html @@ -23,7 +23,7 @@ } InjectYukiHookWithXposed - annotation | Yuki Hook API - + @@ -34,6 +34,6 @@ val isUsingResourcesHook: Boolean )

    变更记录

    v1.0 添加

    v1.0.80 修改

    新增 entryClassName 参数

    v1.0.92 修改

    新增 isUsingResourcesHook 参数

    功能描述

    标识 YukiHookAPI 注入 Xposed 入口的类注解。

    功能示例

    详情请参考 InjectYukiHookWithXposed 注解

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html index daf9a9b25..2e1ec8f0e 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html @@ -23,7 +23,7 @@ } CurrentClass - class | Yuki Hook API - + @@ -43,6 +43,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
     

    变更记录

    v1.0.80 新增

    功能描述

    调用父类实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
     

    变更记录

    v1.0.80 新增

    功能描述

    调用父类实例中的方法。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html index c92843bad..0bc39a7ff 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html @@ -23,7 +23,7 @@ } GenericClass - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
     
    inline fun <reified T> argument(index: Int): Class<T>
     

    变更记录

    v1.1.0 新增

    v1.1.5 修改

    新增泛型返回值 Class<T> 方法

    功能描述

    获得泛型参数数组下标的 Class 实例。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html index 25232da41..814d16edd 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html @@ -23,12 +23,12 @@ } HookClass - class | Yuki Hook API - +

    HookClass - class

    class HookClass internal constructor(internal var instance: Class<*>?, internal var name: String, internal var throwable: Throwable?)
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    HookClass 相关功能不再对外开放

    功能描述

    创建一个当前 Hook 的 Class 接管类。

    instance 为实例,name 为实例完整包名,throwable 为找不到实例的时候抛出的异常。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html index 2c8945272..9f429ed20 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html @@ -23,12 +23,12 @@ } HookResources - class | Yuki Hook API - +

    HookResources - class

    class HookResources internal constructor(var instance: YukiResources?)
     

    变更记录

    v1.0.80 新增

    功能描述

    创建一个当前 Hook 的 YukiResources 接管类。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html index 752fb09b4..9a2f3d015 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html @@ -23,7 +23,7 @@ } VariousClass - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    变更记录

    v1.0 添加

    v1.1.5 修改

    私有化 name 参数并设置为不可修改

    功能描述

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
     

    变更记录

    v1.0.70 新增

    v1.1.5 修改

    新增 initialize 参数

    功能描述

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
     

    变更记录

    v1.1.0 新增

    v1.1.5 修改

    新增 initialize 参数

    功能描述

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    匹配不到 Class 会返回 null,不会抛出异常。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html index 33a29d9da..77ba810f5 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html @@ -23,7 +23,7 @@ } YukiMemberHookCreator - class | Yuki Hook API - + @@ -148,6 +148,6 @@

    变更记录

    v1.0.70 新增

    功能描述

    监听 hookClass 存在时准备开始 Hook 的操作。

    onHookClassNotFoundFailure - method

    fun onHookClassNotFoundFailure(result: (Throwable) -> Unit): Result
     

    变更记录

    v1.0.3 新增

    功能描述

    监听 hookClass 找不到时发生错误的回调方法。

    ignoredHookClassNotFoundFailure - method

    fun ignoredHookClassNotFoundFailure(): Result
     

    变更记录

    v1.0.3 新增

    功能描述

    忽略 hookClass 找不到时出现的错误。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html index 0a5982ca9..5192ea392 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html @@ -23,7 +23,7 @@ } YukiResourcesHookCreator - class | Yuki Hook API - + @@ -122,6 +122,6 @@

    变更记录

    v1.0.80 新增

    功能描述

    添加执行 Hook 需要满足的条件,不满足条件将直接停止 Hook。

    onHookingFailure - method

    fun onHookingFailure(result: (Throwable) -> Unit): Result
     

    变更记录

    v1.0.80 新增

    功能描述

    监听 Hook 过程发生错误的回调方法。

    ignoredHookingFailure - method

    fun ignoredHookingFailure(): Result
     

    变更记录

    v1.0.80 新增

    功能描述

    忽略 Hook 过程出现的错误。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html index 9b77fdcb0..304ad88b9 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html @@ -23,7 +23,7 @@ } BaseFinder - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    变更记录

    v1.0.70 新增

    功能描述

    设置满足条件的第一个。

    last - method

    fun last()
     

    变更记录

    v1.0.70 新增

    功能描述

    设置满足条件的最后一个。

    reverse - method

    fun reverse(num: Int)
     

    变更记录

    v1.0.70 新增

    功能描述

    设置倒序下标。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html index 3838157c8..aa4365fe9 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html @@ -23,7 +23,7 @@ } CountRules - class | Yuki Hook API - + @@ -33,6 +33,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    大于 count

    Int.lessThan - i-ext-method

    fun Int.lessThan(count: Int): Boolean
     

    变更记录

    v1.1.0 新增

    功能描述

    小于 count

    Int.inInterval - i-ext-method

    fun Int.inInterval(countRange: IntRange): Boolean
     

    变更记录

    v1.1.0 新增

    功能描述

    countRange 区间 A ≤ this ≤ B。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html index 2648209f2..468999f33 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html @@ -23,7 +23,7 @@ } ModifierRules - class | Yuki Hook API - + @@ -41,6 +41,6 @@

    变更记录

    v1.0.67 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    Class 类型是否包含 interface

    isAbstract - i-ext-field

    val isAbstract: Boolean
     

    变更记录

    v1.0.67 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    ClassMember 类型是否包含 abstract

    对于任意的抽象 ClassMember 可添加此描述进行确定。

    isStrict - i-ext-field

    val isStrict: Boolean
     

    变更记录

    v1.0.67 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    ClassMember 类型是否包含 strictfp

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html index d1308a277..371fc2af4 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html @@ -23,7 +23,7 @@ } NameRules - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    变更记录

    v1.0.88 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    是否只有字母或数字。

    String.isOnlyLowercase - i-ext-method

    fun String.isOnlyLowercase(): Boolean
     

    变更记录

    v1.0.88 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    是否只有小写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    String.isOnlyUppercase - i-ext-method

    fun String.isOnlyUppercase(): Boolean
     

    变更记录

    v1.0.88 新增

    v1.1.0 修改

    统一合并到扩展方法并改名

    功能描述

    是否只有大写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html index 9876ac501..a4a546d22 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ObjectRules.html @@ -23,12 +23,12 @@ } ObjectRules - class | Yuki Hook API - +

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
     

    变更记录

    v1.1.5 新增

    功能描述

    这是一个任意对象条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html index 6725be5e8..9cf234dcf 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html @@ -23,7 +23,7 @@ } DexClassFinder - class | Yuki Hook API - + @@ -72,6 +72,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    得到 Class 本身数组 (异步)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将回调空的 HashSet

    你需要设置 async 后此方法才会被回调,否则请使用 all 方法。

    onNoClassDefFoundError - method

    fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
     

    变更记录

    v1.1.0 新增

    功能描述

    监听找不到 Class 时。

    ignored - method

    fun ignored(): Result
     

    变更记录

    v1.1.0 新增

    功能描述

    忽略异常并停止打印任何错误日志。

    此时若要监听异常结果,你需要手动实现 onNoClassDefFoundError 方法。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html index dd992b6f9..c681c5c83 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html @@ -23,7 +23,7 @@ } ConstructorRules - class | Yuki Hook API - + @@ -36,6 +36,6 @@

    变更记录

    v1.1.5 新增

    功能描述

    设置 Constructor 参数条件。

    特别注意

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    paramCount - method

    fun paramCount(numRange: IntRange)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html index 46272b0f2..1f4ca4916 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html @@ -23,7 +23,7 @@ } FieldRules - class | Yuki Hook API - + @@ -34,6 +34,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Field 名称条件。

    type - method

    fun type(conditions: ObjectConditions)
     

    变更记录

    v1.1.5 新增

    功能描述

    设置 Field 类型条件。

    可不填写类型。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html index de7639827..924386696 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html @@ -23,13 +23,13 @@ } MemberRules - class | Yuki Hook API - +

    MemberRules - class

    class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
     

    变更记录

    v1.1.0 新增

    功能描述

    Member 查找条件实现类。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Member 标识符筛选条件。

    可不设置筛选条件。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html index cea87ecbe..931697b43 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html @@ -23,7 +23,7 @@ } MethodRules - class | Yuki Hook API - + @@ -40,6 +40,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    returnType - method

    fun returnType(conditions: ObjectConditions)
     

    变更记录

    v1.1.5 新增

    功能描述

    设置 Method 返回值条件。

    可不填写返回值。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html index 0ef6557ca..7f79195ec 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html @@ -23,7 +23,7 @@ } MemberRulesResult - class | Yuki Hook API - + @@ -33,6 +33,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数。

    count - method

    fun count(numRange: IntRange): MemberRulesResult
     

    变更记录

    v1.1.0 新增

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数范围。

    count - method

    fun count(conditions: CountConditions): MemberRulesResult
     

    变更记录

    v1.1.0 新增

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数条件。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html index fa5bc127e..3fc64d6a6 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html @@ -23,7 +23,7 @@ } ConstructorFinder - class | Yuki Hook API - + @@ -112,9 +112,9 @@

    onNoSuchConstructor - method

    inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
     

    变更记录

    v1.0 添加

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    监听找不到 Constructor 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
     

    变更记录

    v1.1.0 新增

    功能描述

    忽略异常并停止打印任何错误日志。

    isNotIgnoredHookingFailurefalse 则自动忽略。

    注意

    此时若要监听异常结果,你需要手动实现 onNoSuchConstructor 方法。

    ignoredError - method

    变更记录

    v1.0.3 新增

    v1.1.0 作废

    请转移到新方法 ignored()

    Instance - class

    inner class Instance internal constructor(private val constructor: Constructor<*>?)
    -

    变更记录

    v1.0.2 新增

    v1.1.0 修改

    新增 constructor 参数

    功能描述

    Constructor 实例处理类。

    call - method

    fun call(vararg param: Any?): Any?
    -

    变更记录

    v1.0.2 新增

    功能描述

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg param: Any?): T?
    -

    变更记录

    v1.0.2 新增

    功能描述

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - +

    变更记录

    v1.0.2 新增

    v1.1.0 修改

    新增 constructor 参数

    功能描述

    Constructor 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    +

    变更记录

    v1.0.2 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg args: Any?): T?
    +

    变更记录

    v1.0.2 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html index 990b5758d..c498776db 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html @@ -23,7 +23,7 @@ } FieldFinder - class | Yuki Hook API - + @@ -111,6 +111,6 @@

    变更记录

    v1.0 添加

    功能描述

    设置当前 Field 实例为 true

    特别注意

    请确保实例对象类型为 Boolean

    setFalse - method

    fun setFalse()
     

    变更记录

    v1.0 添加

    功能描述

    设置当前 Field 实例为 false

    特别注意

    请确保实例对象类型为 Boolean

    setNull - method

    fun setNull()
     

    变更记录

    v1.0 添加

    功能描述

    设置当前 Field 实例为 null

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html index 1f9e6a6c9..16ffcefc5 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html @@ -23,7 +23,7 @@ } MethodFinder - class | Yuki Hook API - + @@ -117,20 +117,20 @@

    变更记录

    v1.0 添加

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    监听找不到 Method 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
     

    变更记录

    v1.1.0 新增

    功能描述

    忽略异常并停止打印任何错误日志。

    isNotIgnoredHookingFailurefalse 则自动忽略。

    注意

    此时若要监听异常结果,你需要手动实现 onNoSuchMethod 方法。

    ignoredError - method

    变更记录

    v1.0.3 新增

    v1.1.0 作废

    请转移到新方法 ignored()

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
     

    变更记录

    v1.0.2 新增

    v1.1.0 修改

    新增 method 参数

    功能描述

    Method 实例处理类。

    original - method

    fun original(): Instance
    -

    变更记录

    v1.1.0 新增

    功能描述

    标识需要调用当前 Method 未经 Hook 的原始方法。

    若当前 Method 并未 Hook 则会使用原始的 Method.invoke 方法调用。

    特别注意

    你只能在 (Xposed) 宿主环境中使用此功能。

    call - method

    fun call(vararg param: Any?): Any?
    -

    变更记录

    v1.0.2 新增

    功能描述

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg param: Any?): T?
    -

    变更记录

    v1.0.2 新增

    功能描述

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg param: Any?): Byte?
    -

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg param: Any?): Int
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callIntint

    功能描述

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg param: Any?): Long
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callLonglong

    功能描述

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg param: Any?): Short
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callShortshort

    功能描述

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg param: Any?): Double
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callDoubledouble

    功能描述

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg param: Any?): Float
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callFloatfloat

    功能描述

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg param: Any?): String
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callStringstring

    功能描述

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg param: Any?): Char
    -

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg param: Any?): Boolean
    -

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callBooleanboolean

    功能描述

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg param: Any?): Array<T>
    -

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg param: Any?): List<T>
    -

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 List 返回值类型。

    - +

    变更记录

    v1.1.0 新增

    功能描述

    标识需要调用当前 Method 未经 Hook 的原始方法。

    若当前 Method 并未 Hook 则会使用原始的 Method.invoke 方法调用。

    特别注意

    你只能在 (Xposed) 宿主环境中使用此功能。

    call - method

    fun call(vararg args: Any?): Any?
    +

    变更记录

    v1.0.2 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg args: Any?): T?
    +

    变更记录

    v1.0.2 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg args: Any?): Byte?
    +

    变更记录

    v1.0.68 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg args: Any?): Int
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callIntint

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg args: Any?): Long
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callLonglong

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg args: Any?): Short
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callShortshort

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg args: Any?): Double
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callDoubledouble

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg args: Any?): Float
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callFloatfloat

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg args: Any?): String
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callStringstring

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg args: Any?): Char
    +

    变更记录

    v1.0.68 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg args: Any?): Boolean
    +

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callBooleanboolean

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg args: Any?): Array<T>
    +

    变更记录

    v1.0.68 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg args: Any?): List<T>
    +

    变更记录

    v1.0.68 新增

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    执行 Method,指定 List 返回值类型。

    + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html index d127219e0..f464a49b9 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html @@ -23,13 +23,13 @@ } YukiBaseHooker - class | Yuki Hook API - +

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    变更记录

    v1.0 添加

    功能描述

    YukiHookAPI 的子类 Hooker 实现。

    onHook - method

    fun onHook()
     

    变更记录

    v1.0 添加

    功能描述

    子类 Hook 开始。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html index 44a09de05..c552c4b59 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html @@ -23,7 +23,7 @@ } ReflectionFactory - kt | Yuki Hook API - + @@ -130,12 +130,12 @@

    变更记录

    v1.1.0 新增

    功能描述

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
     

    变更记录

    v1.1.0 新增

    功能描述

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
     
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    变更记录

    v1.0.70 新增

    v1.1.0 新增

    新增 ignored 参数,可以忽略在 CurrentClass 中出现的异常

    新增不使用 current { ... } 调用域直接使用 current() 得到实例的类操作对象

    功能描述

    获得当前实例的类操作对象。

    Class.buildOfAny - ext-method

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.0 作废

    请转移到 buildOf 方法

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg param: Any?, initiate: ConstructorConditions): T?
    -

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.0 修改

    加入无泛型方法 buildOf

    功能描述

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    +

    变更记录

    v1.0.70 新增

    v1.1.0 新增

    新增 ignored 参数,可以忽略在 CurrentClass 中出现的异常

    新增不使用 current { ... } 调用域直接使用 current() 得到实例的类操作对象

    功能描述

    获得当前实例的类操作对象。

    Class.buildOfAny - ext-method

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.0 作废

    请转移到 buildOf 方法

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    +
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    +

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.0 修改

    加入无泛型方法 buildOf

    v1.1.6 修改

    修改参数命名 paramargs

    功能描述

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
     

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.5 修改

    新增 isAccessible 参数

    功能描述

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.5 修改

    新增 isAccessible 参数

    功能描述

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
     

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    v1.1.5 修改

    新增 isAccessible 参数

    功能描述

    遍历当前类中的所有变量。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html index 6520cd5a7..e275bc9bf 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html @@ -23,7 +23,7 @@ } YukiHookFactory - kt | Yuki Hook API - + @@ -39,6 +39,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    向 Hook APP (宿主) ContextResources 注入当前 Xposed 模块的资源。

    注入成功后,你就可以直接使用例如 ImageView.setImageResourceResources.getString 装载当前 Xposed 模块的资源 ID。

    注入的资源作用域仅限当前 ContextResources,你需要在每个用到宿主 ContextResources 的地方重复调用此方法进行注入才能使用。

    特别注意

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    Context.registerModuleAppActivities - ext-method

    fun Context.registerModuleAppActivities(proxy: Any?)
     

    变更记录

    v1.1.0 新增

    v1.1.5 修改

    加入最低 API 版本限制

    功能描述

    向 Hook APP (宿主) 注册当前 Xposed 模块的 Activity

    注册成功后,你就可以直接使用 Context.startActivity 来启动未在宿主中注册的 Activity

    使用此方法会在未注册的 Activity 在 Hook APP (宿主) 中启动时自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    你要将需要在宿主启动的 Activity 继承于 ModuleAppActivityModuleAppCompatActivity

    特别注意

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    最低支持 Android 7.0 (API 24)。

    Context.applyModuleTheme - ext-method

    fun Context.applyModuleTheme(theme: Int, configuration: Configuration?): ModuleContextThemeWrapper
     

    变更记录

    v1.1.0 新增

    功能描述

    生成一个 ContextThemeWrapper 代理以应用当前 Xposed 模块的主题资源。

    在 Hook APP (宿主) 中使用此方法会自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    如果在 Hook APP (宿主) 中使用此方法发生 ClassCastException,请手动设置 configuration

    isSupportResourcesHook - field

    变更记录

    v1.0.80 新增

    v1.0.91 移除

    请转移到 YukiHookAPI.Status.isSupportResourcesHook

    isModuleActive - field

    变更记录

    v1.0.6 新增

    v1.0.91 移除

    请转移到 YukiHookAPI.Status.isModuleActive

    isXposedModuleActive - field

    变更记录

    v1.0.6 新增

    v1.0.91 移除

    请转移到 YukiHookAPI.Status.isXposedModuleActive

    isTaiChiModuleActive - field

    变更记录

    v1.0 添加

    v1.0.91 移除

    请转移到 YukiHookAPI.Status.isTaiChiModuleActive

    YukiHookModuleStatus - class

    变更记录

    v1.0 添加

    v1.0.91 作废

    请转移到 YukiHookAPI.Status

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html index 9e0b3a921..f9223ddec 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html @@ -23,7 +23,7 @@ } LoggerFactory - kt | Yuki Hook API - + @@ -66,6 +66,6 @@

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    Logcat 和 (Xposed) 宿主环境打印日志,级别 I

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerW - method

    fun loggerW(tag: String, msg: String, type: LoggerType)
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    Logcat 和 (Xposed) 宿主环境打印日志,级别 W

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerE - method

    fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    Logcat 和 (Xposed) 宿主环境打印日志,级别 E,可携带 e 异常信息,将打印异常堆栈。

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html index 19ee7fd49..b100c92eb 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html @@ -23,7 +23,7 @@ } HookParam - class | Yuki Hook API - + @@ -118,6 +118,6 @@

    变更记录

    v1.0 添加

    功能描述

    设置方法参数的实例对象为 null

    setTrue - method

    fun setTrue()
     

    变更记录

    v1.0 添加

    功能描述

    设置方法参数的实例对象为 true

    特别注意

    请确保目标对象的类型是 Boolean

    setFalse - method

    fun setFalse()
     

    变更记录

    v1.0 添加

    功能描述

    设置方法参数的实例对象为 false

    特别注意

    请确保目标对象的类型是 Boolean

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html index d78c70c97..f381feca3 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html @@ -23,7 +23,7 @@ } PackageParam - class | Yuki Hook API - + @@ -168,6 +168,6 @@

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 装载 Application.onTrimMemory

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 装载 Application.onConfigurationChanged

    registerReceiver - method

    fun registerReceiver(vararg action: String, result: (context: Context, intent: Intent) -> Unit)
     

    变更记录

    v1.0.88 新增

    功能描述

    注册系统广播监听。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html index 1b1be728a..65c03f35c 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html @@ -23,11 +23,11 @@ } ComponentTypeFactory - kt | Yuki Hook API - +

    ComponentTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html index e23714b36..8e3263fd2 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html @@ -23,11 +23,11 @@ } GraphicsTypeFactory - kt | Yuki Hook API - +

    GraphicsTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html index f030afa51..d1b6a955f 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html @@ -23,11 +23,11 @@ } ViewTypeFactory - kt | Yuki Hook API - +

    ViewTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html index e74219736..e8e949150 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html @@ -23,12 +23,12 @@ } DefinedTypeFactory - kt | Yuki Hook API - +

    DefinedTypeFactory - kt

    变更记录

    v1.1.0 新增

    功能描述

    这是一个内部类型的定义常量类,主要用于反射 API 相关用法的延伸。

    VagueType - field

    val VagueType: Class<*>
     

    变更记录

    v1.1.0 新增

    功能描述

    得到模糊类型。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html index 52f0cb3cf..e34219466 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html @@ -23,11 +23,11 @@ } VariableTypeFactory - kt | Yuki Hook API - +

    VariableTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html index e5f8be1bc..f05119c97 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html @@ -23,7 +23,7 @@ } ModuleApplication - class | Yuki Hook API - + @@ -44,6 +44,6 @@ ...>

    appContext - field

    val appContext: ModuleApplication
     

    变更记录

    v1.0.77 新增

    功能描述

    获取全局静态 Application 实例。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html index b765bb60d..3203505af 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html @@ -23,7 +23,7 @@ } YukiXposedEvent - object | Yuki Hook API - + @@ -33,6 +33,6 @@

    变更记录

    v1.0.80 新增

    功能描述

    设置 initZygote 事件监听。

    onHandleLoadPackage - method

    fun onHandleLoadPackage(result: (LoadPackageParam) -> Unit)
     

    变更记录

    v1.0.80 新增

    功能描述

    设置 handleLoadPackage 事件监听。

    onHandleInitPackageResources - method

    fun onHandleInitPackageResources(result: (InitPackageResourcesParam) -> Unit)
     

    变更记录

    v1.0.80 新增

    功能描述

    设置 handleInitPackageResources 事件监听。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html index f3f944dc6..9ab60b144 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiModuleResources.html @@ -23,13 +23,13 @@ } YukiModuleResources - class | Yuki Hook API - +

    YukiModuleResources - class

    class YukiModuleResources private constructor(private val baseInstance: XModuleResources) : Resources
     

    变更记录

    v1.0.80 新增

    功能描述

    对接 XModuleResources 的中间层实例。

    fwd - method

    fun fwd(resId: Int): YukiResForwarder
     

    变更记录

    v1.0.80 新增

    功能描述

    对接 XModuleResources.fwd 方法。

    创建 YukiResForwarderXResForwarder 实例。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html index a69b66d0b..28fb21555 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResForwarder.html @@ -23,7 +23,7 @@ } YukiResForwarder - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    变更记录

    v1.0.80 新增

    功能描述

    对接 XResForwarder 的中间层实例。

    instance - field

    变更记录

    v1.0.80 新增

    v1.1.0 作废

    不再对外公开 instance 参数

    id - field

    val id: Int
     

    变更记录

    v1.0.80 新增

    功能描述

    获得当前 APP 的 Resources Id。

    resources - field

    val resources: Resources
     

    变更记录

    v1.0.80 新增

    功能描述

    获得当前 APP 的 Resources。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html index 22141a5de..0d7c4597e 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/resources/YukiResources.html @@ -23,7 +23,7 @@ } YukiResources - class | Yuki Hook API - + @@ -34,6 +34,6 @@

    变更记录

    v1.0.80 新增

    功能描述

    获取当前被 Hook 的布局实例。

    findViewByIdentifier - method

    inline fun <reified T : View> View.findViewByIdentifier(name: String): T?
     
    inline fun <reified T : View> findViewByIdentifier(name: String): T?
     

    变更记录

    v1.0.80 新增

    功能描述

    使用 Identifier 查找 Hook APP 指定 Id 的 View

    扩展方法可以使用 Identifier 查找 Hook APP 当前装载布局中指定 Id 的 View

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html index e1ac52d32..dbcf08aad 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html @@ -23,7 +23,7 @@ } YukiHookDataChannel - class | Yuki Hook API - + @@ -41,6 +41,6 @@

    变更记录

    v1.0.88 新增

    v1.1.5 修改

    新增 priority 参数

    功能描述

    仅获取监听结果,不获取键值数据。

    特别注意

    仅限使用 VALUE_WAIT_FOR_LISTENER 发送的监听才能被接收。

    checkingVersionEquals - method

    fun checkingVersionEquals(priority: ChannelPriority?, result: (Boolean) -> Unit)
     

    变更记录

    v1.0.88 新增

    v1.1.5 修改

    新增 priority 参数

    功能描述

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(priority: ChannelPriority?, result: (ArrayList<YukiLoggerData>) -> Unit)
     

    变更记录

    v1.1.4 新增

    v1.1.5 修改

    新增 priority 参数

    功能描述

    获取模块与宿主之间的 ArrayList<YukiLoggerData> 数据。

    由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。

    特别注意

    模块与宿主必须启用 YukiHookLogger.Configs.isRecord 才能获取到调试日志数据。

    由于 Android 限制了数据传输大小的最大值,如果调试日志过多将会自动进行分段发送,数据越大速度越慢。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html index 8224513d3..74037b1f4 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.html @@ -23,7 +23,7 @@ } ChannelData - class | Yuki Hook API - + @@ -50,6 +50,6 @@ // Your code here. } - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html index ed9d72513..a7682469f 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/priority/ChannelPriority.html @@ -23,12 +23,12 @@ } ChannelPriority - class | Yuki Hook API - +

    ChannelPriority - class

    class ChannelPriority(private val conditions: () -> Boolean)
     

    变更记录

    v1.1.5 新增

    功能描述

    数据通讯桥响应优先级构造类。

    这个类是对 YukiHookDataChannel 的一个扩展用法。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html index 821e75c16..427991cd9 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html @@ -23,12 +23,12 @@ } ModuleAppActivity - class | Yuki Hook API - +

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
     

    变更记录

    v1.1.0 新增

    功能描述

    代理 Activity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html index 78fde47e4..e664f204e 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html @@ -23,13 +23,13 @@ } ModuleAppCompatActivity - class | Yuki Hook API - +

    ModuleAppCompatActivity - class

    open class ModuleAppCompatActivity : AppCompatActivity()
     

    变更记录

    v1.1.0 新增

    功能描述

    代理 AppCompatActivity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    在 (Xposed) 宿主环境需要重写 moduleTheme 设置 AppCompat 主题,否则会无法启动。

    moduleTheme - field

    open val moduleTheme: Int
     

    变更记录

    v1.1.0 新增

    功能描述

    设置当前代理的 Activity 主题。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html index 32c276fd3..8f48f5ebd 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html @@ -23,13 +23,13 @@ } ModuleContextThemeWrapper - class | Yuki Hook API - +

    ModuleContextThemeWrapper - class

    class ModuleContextThemeWrapper private constructor(baseContext: Context, theme: Int, configuration: Configuration?) : ContextThemeWrapper
     

    变更记录

    v1.1.0 新增

    功能描述

    代理 ContextThemeWrapper

    通过包装,你可以轻松在 (Xposed) 宿主环境使用来自模块的主题资源。

    applyConfiguration - method

    fun applyConfiguration(initiate: Configuration.() -> Unit): ModuleContextThemeWrapper
     

    变更记录

    v1.1.0 新增

    功能描述

    设置当前 ModuleContextThemeWrapperConfiguration

    设置后会自动调用 Resources.updateConfiguration

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html index 480dc0836..e355c8678 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html @@ -23,7 +23,7 @@ } ModuleClassLoader - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    变更记录

    v1.1.2 新增

    功能描述

    自动处理 (Xposed) 宿主环境与模块环境的 ClassLoader

    companion object - object

    变更记录

    v1.1.2 新增

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    变更记录

    v1.1.2 新增

    功能描述

    添加到 Hook APP (宿主) Class 排除列表。

    排除列表中的 Class 将会使用宿主的 ClassLoader 进行装载。

    特别注意

    排除列表仅会在 (Xposed) 宿主环境生效。

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    变更记录

    v1.1.2 新增

    功能描述

    添加到模块 Class 排除列表。

    排除列表中的 Class 将会使用模块 (当前宿主环境的模块注入进程) 的 ClassLoader 进行装载。

    特别注意

    排除列表仅会在 (Xposed) 宿主环境生效。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html index d80eba4fa..e1e7c6847 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html @@ -23,7 +23,7 @@ } YukiHookModulePrefs - class | Yuki Hook API - + @@ -56,6 +56,6 @@

    变更记录

    v1.0.67 新增

    功能描述

    智能获取指定类型的键值。

    put - method

    inline fun <reified T> put(prefs: PrefsData<T>, value: T)
     

    变更记录

    v1.0.67 新增

    功能描述

    智能存储指定类型的键值。

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
     

    变更记录

    v1.0.5 新增

    功能描述

    清除 XSharedPreferences 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnableModulePrefsCache

    调用此方法将清除当前存储的全部键值缓存。

    下次将从 XSharedPreferences 重新读取。

    在 (Xposed) 宿主环境中使用。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html index e2e7e1910..38311f341 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html @@ -23,7 +23,7 @@ } PrefsData - class | Yuki Hook API - + @@ -45,6 +45,6 @@

    你依然可以不使用模板定义的默认值,随时修改你的默认值。

    示例如下

    // 读取 - 此时 data 取到的默认值将会是 2 - 并不是模板提供的 0
     val data = prefs.get(DataConst.TEST_KV_DATA_3, 2)
     
    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html index 199a43d64..754861d4e 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment.html @@ -23,7 +23,7 @@ } ModulePreferenceFragment - class | Yuki Hook API - + @@ -49,6 +49,6 @@ } } - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html index 275bfddef..d9ad1f7a9 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html @@ -23,7 +23,7 @@ } IYukiHookXposedInit - interface | Yuki Hook API - + @@ -32,6 +32,6 @@

    变更记录

    v1.0.5 新增

    功能描述

    配置 YukiHookAPI.Configs 的初始化方法。

    特别注意

    在这里只能进行初始化配置,不能进行 Hook 操作。

    此方法可选,你也可以选择不对 YukiHookAPI.Configs 进行配置。

    onHook - method

    fun onHook()
     

    变更记录

    v1.0 添加

    功能描述

    Xposed API 的模块装载调用入口方法。

    onXposedEvent - method

    fun onXposedEvent()
     

    变更记录

    v1.0.80 新增

    功能描述

    监听 Xposed 原生装载事件。

    若你的 Hook 事件中存在需要兼容的原生 Xposed 功能,可在这里实现。

    请在这里使用 YukiXposedEvent 创建回调事件监听。

    可监听的事件如下:

    YukiXposedEvent.onInitZygote

    YukiXposedEvent.onHandleLoadPackage

    YukiXposedEvent.onHandleInitPackageResources

    特别注意

    此接口仅供监听和实现原生 Xposed API 的功能,请不要在这里操作 YukiHookAPI

    YukiHookXposedInitProxy - interface

    变更记录

    v1.0 添加

    v1.0.80 作废

    请转移到 IYukiHookXposedInit

    - + diff --git a/docs/zh-cn/api/special-features/host-inject.html b/docs/zh-cn/api/special-features/host-inject.html index 4739d9328..9da8ae31e 100644 --- a/docs/zh-cn/api/special-features/host-inject.html +++ b/docs/zh-cn/api/special-features/host-inject.html @@ -23,7 +23,7 @@ } 宿主资源注入扩展 | Yuki Hook API - + @@ -159,6 +159,6 @@ "com.demo.controller.ModuleController" )

    你需要在向宿主注入模块资源的方法执行之前进行设置才能生效。

    此功能仅为解决宿主与模块中可能存在同名的 Class 情况,例如共用的 SDK 以及依赖,在大部分情况下你不会用到此功能。

    小提示

    更多功能请参考 ModuleClassLoader

    - + diff --git a/docs/zh-cn/api/special-features/host-lifecycle.html b/docs/zh-cn/api/special-features/host-lifecycle.html index b035c63c4..682b8383a 100644 --- a/docs/zh-cn/api/special-features/host-lifecycle.html +++ b/docs/zh-cn/api/special-features/host-lifecycle.html @@ -23,7 +23,7 @@ } 宿主生命周期扩展 | Yuki Hook API - + @@ -74,6 +74,6 @@ } }

    小提示

    更多功能请参考 AppLifecycle

    - + diff --git a/docs/zh-cn/api/special-features/logger.html b/docs/zh-cn/api/special-features/logger.html index 9aa9a4043..4e94118d8 100644 --- a/docs/zh-cn/api/special-features/logger.html +++ b/docs/zh-cn/api/special-features/logger.html @@ -23,7 +23,7 @@ } 调试日志 | Yuki Hook API - + @@ -74,6 +74,6 @@ // ... }

    小提示

    更多功能请参考 YukiHookLogger.inMemoryDataYukiHookLogger.contentsYukiHookLogger.contentsYukiHookLogger.saveToFile 方法以及 YukiHookLogger.Configs

    - + diff --git a/docs/zh-cn/api/special-features/reflection.html b/docs/zh-cn/api/special-features/reflection.html index 9bb2f192e..7298d6d11 100644 --- a/docs/zh-cn/api/special-features/reflection.html +++ b/docs/zh-cn/api/special-features/reflection.html @@ -23,7 +23,7 @@ } 字节码与反射扩展 | Yuki Hook API - + @@ -847,6 +847,6 @@ param(BundleClass) }

    以下是 Java 中一些特例类型在 YukiHookAPI 中的封装名称。

    注意

    类型 + Type 封装类型会且仅会表示为 Java 原始类型关键字,由于 Kotlin 中不存在原始类型这个概念,所以它们都会被定义为 KClass

    Java 中共有 9 个原始类型关键字,其中 8 个为原始类型,分别为 booleancharbyteshortintfloatlongdouble,其中 void 类型是一个特例。

    同时它们都有 Java 自身对应的封装类型,例如 java.lang.Booleanjava.lang.Integer,这些类型是不相等的,请注意区分。

    同样地,数组也有对应的封装类型,它们也需要与 Java 原始类型关键字 进行区分。

    例如 byte[] 的封装类型为 ByteArrayTypeArrayClass(ByteType),而 Byte[] 的封装类型为 ByteArrayClassArrayClass(ByteClass),这些类型也是不相等的

    小提示

    更多类型可查看 ComponentTypeFactoryGraphicsTypeFactoryViewTypeFactoryVariableTypeFactory

    同时,欢迎你能贡献更多的常用类型。

    - + diff --git a/docs/zh-cn/api/special-features/xposed-channel.html b/docs/zh-cn/api/special-features/xposed-channel.html index ff1cd9e2d..fe6124a48 100644 --- a/docs/zh-cn/api/special-features/xposed-channel.html +++ b/docs/zh-cn/api/special-features/xposed-channel.html @@ -23,7 +23,7 @@ } Xposed 模块与宿主通讯桥 | Yuki Hook API - + @@ -145,6 +145,6 @@ } }

    安全性说明

    在模块环境中,你只能接收指定包名的宿主发送的通讯数据且只能发送给指定包名的宿主,系统框架除外。

    特别注意

    为了进一步防止广播滥用,通讯数据中 API 会自动指定宿主和模块的包名,防止其它 APP 监听并利用广播做出超限行为。

    - + diff --git a/docs/zh-cn/api/special-features/xposed-storage.html b/docs/zh-cn/api/special-features/xposed-storage.html index e56fdca94..d430f4fe2 100644 --- a/docs/zh-cn/api/special-features/xposed-storage.html +++ b/docs/zh-cn/api/special-features/xposed-storage.html @@ -23,7 +23,7 @@ } Xposed 模块数据存储 | Yuki Hook API - + @@ -39,6 +39,6 @@ // 也可以这样用 val testName = prefs.name("specify_file_name").getString("test_name", "default_value")

    若你的项目中有大量的固定数据需要存储和读取,推荐使用 PrefsData 来创建模板。

    小提示

    更多功能请参考 YukiHookModulePrefsPrefsData

    在 PreferenceFragment 中使用

    这里描述了在 PreferenceFragment 中装载 YukiHookModulePrefs 的场景。

    若你的模块使用了 PreferenceFragmentCompat,你现在可以将其继承类开始迁移到 ModulePreferenceFragment

    特别注意

    你必须继承 ModulePreferenceFragment 才能实现 YukiHookModulePrefs 的模块存储功能。

    小提示

    更多功能请参考 ModulePreferenceFragment

    - + diff --git a/docs/zh-cn/config/api-example.html b/docs/zh-cn/config/api-example.html index cc33167e6..7df958b8e 100644 --- a/docs/zh-cn/config/api-example.html +++ b/docs/zh-cn/config/api-example.html @@ -23,7 +23,7 @@ } API 基本配置 | Yuki Hook API - + @@ -50,7 +50,7 @@ // Your code here. } } -

    子 Hooker 建议使用单例 object 创建,你也可以使用 class 但不推荐。

    注意

    你无需再在继承于 YukiBaseHookeronHook 方法中重新调用 encase,这是错误的,且不会生效,你应该直接开始编写你的 Hook 代码。

    示例如下

    object CustomHooker : YukiBaseHooker() {
    +

    子 Hooker 建议使用单例 object 创建,你也可以使用 class 但一般情况下不推荐。

    注意

    你无需再在继承于 YukiBaseHookeronHook 方法中重新调用 encase,这是错误的,且不会生效,你应该直接开始编写你的 Hook 代码。

    示例如下

    object CustomHooker : YukiBaseHooker() {
     
         override fun onHook() {
             loadApp(name = "com.example.demo1") {
    @@ -99,6 +99,13 @@
     
         override fun onHook() = encase(FirstHooker, SecondHooker, ThirdHooker ...)
     }
    +

    特殊情况

    上面我们说到,在一般情况下不推荐使用 class 创建子 Hooker,但是有一种特殊情况,它可能依然需要保持你的 Hooker 支持多例。

    有极少的可能性会出现在一个进程中存在多个包名的情况,这种情况下,YukiHookAPI 发现子 Hooker 为单例时,将会忽略并打印一条警告信息。

    This Hooker "HOOKER" is singleton or reused, but the current process has multiple package name "NAME", the original is "NAME"
    +Make sure your Hooker supports multiple instances for this situation
    +The process with package name "NAME" will be ignored
    +

    遇到这种情况时,我们只需要修改 objectclass 或者在装载时判断包名后再装载子 Hooker。

    例如以上情况中可使用以下形式来装载。

    示例如下

    encase {
    +    // 假设这个就是你需要装载的 APP 包名和子 Hooker
    +    loadApp("com.example.demo", YourCustomHooker)
    +}
     

    扩展特性

    如果你当前使用的 Hook Framework 支持并启用了资源钩子(Resources Hook)功能,你现在可以直接在 encase 中创建 Resources Hook。

    你完全不需要与之前在使用 Xposed API 那样区分 initZygotehandleLoadPackagehandleInitPackageResources 方法来执行不同的功能。

    YukiHookAPI 中,这些功能是无缝的

    示例如下

    encase {
         loadApp(name = "com.example.demo") {
             findClass(name = "$packageName.DemoClass").hook { 
    @@ -207,6 +214,6 @@
     

    作为 Hook API 使用需要注意的地方

    若你作为 Hook API 使用,那么你只需要在入口处对 encase 方法进行区分。

    注意

    encase 方法对作为 Hook API 使用提供了两个完全一样的方法,但是比前两者仅多出一个参数 baseContext

    方法 1

    fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
     

    方法 2

    fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
     

    此处的 baseContext 只需填入你在 attachBaseContext 处得到的 Context 即可,其它用法与上述内容完全一致。

    特别注意

    切勿以 Xposed 方式使用 encase 方法而漏掉 baseContext 参数,否则你的 Hook 将完全不工作。

    Resources Hook 功能不支持作为 Hook API 使用。

    - + diff --git a/docs/zh-cn/config/api-exception.html b/docs/zh-cn/config/api-exception.html index fb35e6fc4..c3d7c7a1b 100644 --- a/docs/zh-cn/config/api-exception.html +++ b/docs/zh-cn/config/api-exception.html @@ -23,7 +23,7 @@ } API 异常处理 | Yuki Hook API - + @@ -63,7 +63,7 @@ } } } -
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    异常原因

    YukiHookAPI 在装载 Xposed 入口方法时发生异常。

    解决方案

    这是一个异常汇总,如果你当前的 Hook 进程中发生了任何异常 (Hook 进程崩溃),都会使用此方式打印到控制台,请追溯异常发生的堆栈以定位你的代码问题位置。

    exception

    loggerE

    An exception occurred when hooking internal function

    异常原因

    YukiHookAPI 在进行自身初始化 Hook 过程中发生异常。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,可直接提交日志进行反馈。

    exception

    loggerE

    YukiHookAPI try to load HookEntryClass failed

    异常原因

    YukiHookAPI 在尝试装载 Hook 入口类 onInitonHook 方法时发生了不能处理的异常或找不到入口类。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    异常原因

    YukiHookAPI 在尝试使用 Xposed 原生接口装载 Xposed 模块时发生了不能处理的异常。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    异常原因

    YukiHookAPI 在尝试进行 Resources Hook 时发生错误。

    解决方案

    请仔细检查错误日志的详细信息。

    若发生 Resources$NotFoundException 则可能为你查找的 Resources Id 不正确。

    若发生 ClassNotFoundNoClassDefFoundError 可能是 Hook Framework 不支持 Resources Hook(资源钩子)。

    exception

    loggerE

    HookClass [NAME] not found

    异常原因

    当前被 Hook 的 Class 没有被找到。

    解决方案

    请检查目标 Class 是否存在,若想忽略此错误请使用 ignoredHookClassNotFoundFailure 方法。

    exception

    loggerE

    Hook Member [NAME] failed

    异常原因

    Hook 目标方法、构造方法时发生错误。

    解决方案

    此问题通常由 Hook Framework 产生,请检查对应的日志内容,若问题持续出现请携带详细日志进行反馈。

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    异常原因

    在 Hook 执行后被 Hook 的 membernull 且已经设置目标 Hook 方法、构造类。

    解决方案

    请检查此错误发生前的上一个错误日志,或许在查找方法、构造方法的时候发生了找不到方法、构造方法的错误。

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    异常原因

    在 Hook 执行后被 Hook 的 membernull 且没有设置目标 Hook 方法、构造类。

    示例如下

    injectMember {
    +
    exception

    loggerE

    An exception occurred in the Hooking Process of YukiHookAPI

    异常原因

    YukiHookAPI 在装载 Xposed 入口方法时发生异常。

    解决方案

    这是一个异常汇总,如果你当前的 Hook 进程中发生了任何异常 (Hook 进程崩溃),都会使用此方式打印到控制台,请追溯异常发生的堆栈以定位你的代码问题位置。

    exception

    loggerE

    An exception occurred when hooking internal function

    异常原因

    YukiHookAPI 在进行自身初始化 Hook 过程中发生异常。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,可直接提交日志进行反馈。

    exception

    loggerE

    YukiHookAPI try to load hook entry class failed

    异常原因

    YukiHookAPI 在尝试装载 Hook 入口类 onInitonHook 方法时发生了不能处理的异常或找不到入口类。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    loggerE

    An exception occurred when YukiHookAPI loading Xposed Module

    异常原因

    YukiHookAPI 在尝试使用 Xposed 原生接口装载 Xposed 模块时发生了不能处理的异常。

    解决方案

    通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    loggerE

    Failed to execute method "NAME", maybe your Hook Framework not support Resources Hook

    异常原因

    YukiHookAPI 在尝试进行 Resources Hook 时发生错误。

    解决方案

    请仔细检查错误日志的详细信息。

    若发生 Resources$NotFoundException 则可能为你查找的 Resources Id 不正确。

    若发生 ClassNotFoundNoClassDefFoundError 可能是 Hook Framework 不支持 Resources Hook(资源钩子)。

    exception

    loggerE

    HookClass [NAME] not found

    异常原因

    当前被 Hook 的 Class 没有被找到。

    解决方案

    请检查目标 Class 是否存在,若想忽略此错误请使用 ignoredHookClassNotFoundFailure 方法。

    exception

    loggerE

    Hook Member [NAME] failed

    异常原因

    Hook 目标方法、构造方法时发生错误。

    解决方案

    此问题通常由 Hook Framework 产生,请检查对应的日志内容,若问题持续出现请携带详细日志进行反馈。

    exception

    loggerE

    Hooked Member with a finding error by CLASS

    异常原因

    在 Hook 执行后被 Hook 的 membernull 且已经设置目标 Hook 方法、构造类。

    解决方案

    请检查此错误发生前的上一个错误日志,或许在查找方法、构造方法的时候发生了找不到方法、构造方法的错误。

    exception

    loggerE

    Hooked Member cannot be non-null by CLASS

    异常原因

    在 Hook 执行后被 Hook 的 membernull 且没有设置目标 Hook 方法、构造类。

    示例如下

    injectMember {
         // 这里并没有设置需要 Hook 的方法、构造方法的查找条件
         afterHook {
             // ...
    @@ -391,6 +391,6 @@
     // <解决方案 2> 不填写泛型声明
     val clazz2 = "android.app.Activity".toClass()
     

    请确保执行方法后声明的泛型是指定的目标 Class 类型,在不确定目标类型的情况下你可以不需要填写泛型声明。

    - + diff --git a/docs/zh-cn/config/api-using.html b/docs/zh-cn/config/api-using.html index 35414da9b..31f025ca3 100644 --- a/docs/zh-cn/config/api-using.html +++ b/docs/zh-cn/config/api-using.html @@ -23,7 +23,7 @@ } 作为 Hook API 使用的相关配置 | Yuki Hook API - + @@ -77,6 +77,6 @@ super.attachBaseContext(base) } - + diff --git a/docs/zh-cn/config/r8-proguard.html b/docs/zh-cn/config/r8-proguard.html index 5a7554de5..941843fef 100644 --- a/docs/zh-cn/config/r8-proguard.html +++ b/docs/zh-cn/config/r8-proguard.html @@ -23,12 +23,12 @@ } R8 与 Proguard 混淆 | Yuki Hook API - +

    R8 与 Proguard 混淆

    大部分场景下 Xposed 模块可通过原生混淆压缩体积,这里介绍了混淆的配置方法。

    R8

    如果你使用的是 R8,那么你无需对 YukiHookAPI 进行任何特殊配置。

    Proguard

    如果你仍然在使用 Proguard,你需要做一些规则配置。

    特别注意

    Proguard 规则已被弃用,请不要再使用,自从 Android Gradle Plugin 4.2 后,拥有 Android Jetpack 套件最新版本的混淆处理程序默认均为 R8,不再需要考虑混淆的问题。

    若要在任何版本下启用 R8,请在 gradle.properties 文件中加入如下规则,Android Gradle Plugin 7.0 及以上版本无需任何配置。

    android.enableR8=true
     
    - + diff --git a/docs/zh-cn/config/xposed-using.html b/docs/zh-cn/config/xposed-using.html index 378390f09..03c8e0f94 100644 --- a/docs/zh-cn/config/xposed-using.html +++ b/docs/zh-cn/config/xposed-using.html @@ -23,7 +23,7 @@ } 作为 Xposed 模块使用的相关配置 | Yuki Hook API - + @@ -104,6 +104,6 @@ } }

    onXposedEventonHook 方法完全独立存在,互不影响,你可以继续在 onHook 方法中使用 YukiHookAPI

    小提示

    更多功能请参考 IYukiHookXposedInit.onXposedEvent 方法。

    - + diff --git a/docs/zh-cn/guide/example.html b/docs/zh-cn/guide/example.html index 8e517e79a..ef62b85b3 100644 --- a/docs/zh-cn/guide/example.html +++ b/docs/zh-cn/guide/example.html @@ -23,7 +23,7 @@ } 用法示例 | Yuki Hook API - + @@ -319,6 +319,6 @@ </queries>

    还有一种方案,你可以直接声明 android.permission.QUERY_ALL_PACKAGES 权限,但是不推荐且会被代码检查警告。

    示例如下

    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
     

    若模块激活判断中包含太极、无极中的激活状态,就必须将模块的 Application 继承于 ModuleApplication 或直接使用 ModuleApplication

    1.0.91 版本后的 API 修改了激活逻辑判断方式,现在你可以在模块与 Hook APP (宿主) 中同时使用此 API;

    需要确保 YukiHookAPI.Configs.isEnableHookModuleStatus 是启用状态;

    除了提供标准 API 的 Hook Framework 之外,其它情况下模块可能都将无法判断自己是否被激活。

    - + diff --git a/docs/zh-cn/guide/home.html b/docs/zh-cn/guide/home.html index a84ec1b89..91a2d428d 100644 --- a/docs/zh-cn/guide/home.html +++ b/docs/zh-cn/guide/home.html @@ -23,7 +23,7 @@ } 介绍 | Yuki Hook API - + @@ -134,6 +134,6 @@ } }

    是的,你没有看错,仅仅就需要这些代码,就能完全取代 Xposed API 实现同样的功能。

    现在,借助高效强大的 YukiHookAPI,你就可以实现一个非常简单的 Xposed 模块。

    支持的 Hook Framework

    以下是 YukiHookAPI 支持的 Hook Framework 以及 Xposed 框架。

    Hook FrameworkSTDescription
    LSPosed在新窗口中打开多场景下稳定使用
    LSPatch在新窗口中打开将在此项目完善后逐渐加入 API 支持
    EdXposed在新窗口中打开已停止维护,不再推荐使用
    Pine在新窗口中打开可以使用
    SandHook在新窗口中打开可以使用
    Whale在新窗口中打开需要 xposed-hook-based-on-whale在新窗口中打开
    YAHFA在新窗口中打开需要自行实现 Xposed API
    FastHook在新窗口中打开需要自行实现 Xposed API
    Epic在新窗口中打开需要自行对接 Dexposed在新窗口中打开
    TaiChi在新窗口中打开可以作为模块使用
    Xposed在新窗口中打开建议最低系统版本为 Android 7.0
    - + diff --git a/docs/zh-cn/guide/knowledge.html b/docs/zh-cn/guide/knowledge.html index 556d9a2c8..c1aac43a1 100644 --- a/docs/zh-cn/guide/knowledge.html +++ b/docs/zh-cn/guide/knowledge.html @@ -23,7 +23,7 @@ } 基础知识 | Yuki Hook API - + @@ -40,6 +40,6 @@ └── Hooker (Hooked) ...

    通过 Xposed 的运行原理,从而衍生了很多同类型框架,随着当今时代的移动设备获取 Root 权限甚至刷机越来越困难且不是刚需的时候,一些免 Root 框架也随之产生,例如 LSPatch太极

    这些在 ART 层面上的 Hook Framework 同样也可不借助 Xposed API 完成其和 Xposed 原理一样的 Hook 流程,免 Root 的运行原理为修改 APK 并将 Hook 进程注入宿主,通过外部模块对其进行控制。

    另外一种产品就是利用 Android 运行环境现有的功能虚拟出一个完全与当前设备系统一样的环境,并在其中运行 APP,这个就是虚拟 APP 技术 VirtualApp,后来衍生为 VirtualXposed

    上述提到的免 Root 框架分别为 LSPatch在新窗口中打开太极在新窗口中打开VirtualApp在新窗口中打开SandVXposed在新窗口中打开

    YukiHookAPI 做了什么

    自从 Xposed 出现到现在为止,除了开发者人人皆知的 XposedHelpers,依然没有一套针对 Kotlin 打造的语法糖以及用法封装十分完善的 API。

    本 API 框架的诞生就是希望在 Xposed 的如今时代,能让更多有动手能力的 Xposed 模块开发者少走弯路,更容易、更简单地完成整个开发流程。

    未来,YukiHookAPI 将在使用 Xposed API 的目标基础上适配更多第三方 Hook Framework,使得整个生态得到完善,并帮助更多开发者让 Xposed 模块开发变得更加简单和易懂。

    让我们开始吧

    在开始之前,你需要拥有以下基础才能更好地使用 YukiHookAPI

    - + diff --git a/docs/zh-cn/guide/move-to-new-api.html b/docs/zh-cn/guide/move-to-new-api.html index 13fccc6ae..5fff0d809 100644 --- a/docs/zh-cn/guide/move-to-new-api.html +++ b/docs/zh-cn/guide/move-to-new-api.html @@ -23,7 +23,7 @@ } 从 Xposed API 迁移 | Yuki Hook API - + @@ -215,6 +215,6 @@ // 拦截返回值 override fun replaceHookedMethod(param: MethodHookParam) = null

    迁移其它功能

    YukiHookAPI 对 Xposed API 进行了完全重写,你可以参考 API 文档 以及 特色功能 来决定一些功能性的迁移和使用。

    - + diff --git a/docs/zh-cn/guide/quick-start.html b/docs/zh-cn/guide/quick-start.html index aa530cf1f..09a7e8c3b 100644 --- a/docs/zh-cn/guide/quick-start.html +++ b/docs/zh-cn/guide/quick-start.html @@ -23,7 +23,7 @@ } 快速开始 | Yuki Hook API - + @@ -99,6 +99,6 @@ super.attachBaseContext(base) }

    然后,你就可以开始编写 Hook 代码了,方式与作为 Xposed 模块使用基本一致。

    有关作为 Hook API 使用的相关配置详细内容,你可以 点击这里 继续阅读。

    注意

    使用自定义的 Hook Framework 而并非完整的 Xposed 模块时,YukiHookModulePrefsYukiHookDataChannel 以及 Resources Hook 功能将失效。

    - + diff --git a/docs/zh-cn/index.html b/docs/zh-cn/index.html index 3bdcd2a00..e30ee624a 100644 --- a/docs/zh-cn/index.html +++ b/docs/zh-cn/index.html @@ -23,7 +23,7 @@ } 首页 | Yuki Hook API - + @@ -53,6 +53,6 @@ } } - + diff --git a/docs/zh-cn/tools/yukihookapi-projectbuilder.html b/docs/zh-cn/tools/yukihookapi-projectbuilder.html index 5de71df00..af1d2f9a6 100644 --- a/docs/zh-cn/tools/yukihookapi-projectbuilder.html +++ b/docs/zh-cn/tools/yukihookapi-projectbuilder.html @@ -23,11 +23,11 @@ } YukiHookAPI 构建工具 | Yuki Hook API - +

    YukiHookAPI 构建工具

    这是一个使用 YukiHookAPI 作为核心的 Xposed 模块自动构建工具。

    实现自动化搜索依赖快速搭建一个包含 Xposed 模块环境的 Android 项目模板。

    获取项目

    本项目完全开源免费,且会根据大家的使用情况持续维护,初代版本可能存在不完善或 BUG,欢迎反馈。

    项目地址 YukiHookAPI-ProjectBuilder在新窗口中打开

    若你想直接下载可以 点击这里在新窗口中打开 前往 Release 发布地址。

    使用方法

    这里包含了基本的使用方法和功能讲解。

    基本用法

    • 软件使用过程需要当前设备已连接互联网,若项目依赖无法搜索请尝试 科学上网

    • 启动软件后,对你期望创建的项目进行简单配置,点击右下角的 按钮 或菜单栏选择 项目 > 开始创建 即可开始任务。

    • 等待依赖自动搜索完成后,你可以对项目依赖进行配置,建议使用最新依赖保证项目的稳定性,构建工具也仅对最新依赖进行支持。

    • 选择你需要创建项目的目录,开始后项目会在你选择的位置中创建,并等待整个过程完成,项目就创建好了。

    配置模板

    配置模板是一个扩展功能,你可以选择菜单栏 项目 > 配置模板 > 新建模板,即可使用当前填写的配置创建一份模板,下次可以从 已保存的模板 中重新载入模板,即可还原当前配置。

    多语言支持

    软件语言跟随当前系统,你可以在菜单栏 语言 (Language) 一栏手动选择软件的界面语言。

    - +