diff --git a/docs/404.html b/docs/404.html index 3a300b7ec..613f7399d 100644 --- a/docs/404.html +++ b/docs/404.html @@ -23,11 +23,11 @@ } Yuki Hook API - + -

404

Looks like we've got some broken links.
Take me home
- +

404

That's a Four-Oh-Four.
Take me home
+ diff --git a/docs/assets/404.html.0d8ea628.js b/docs/assets/404.html.42b721d3.js similarity index 63% rename from docs/assets/404.html.0d8ea628.js rename to docs/assets/404.html.42b721d3.js index b345ade3e..d8e748910 100644 --- a/docs/assets/404.html.0d8ea628.js +++ b/docs/assets/404.html.42b721d3.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.c86510cc.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.f643a53b.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.f111b38d.js b/docs/assets/BaseFinder.html.2ff37655.js similarity index 99% rename from docs/assets/BaseFinder.html.f111b38d.js rename to docs/assets/BaseFinder.html.2ff37655.js index 7fb81f925..e2914e19d 100644 --- a/docs/assets/BaseFinder.html.f111b38d.js +++ b/docs/assets/BaseFinder.html.2ff37655.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a as n}from"./app.c86510cc.js";const a={},p=n(`

BaseFinder - class

abstract class BaseFinder
+import{_ as s,o as e,c as o,a as n}from"./app.f643a53b.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.a0f349bb.js b/docs/assets/BaseFinder.html.bdb1050e.js
similarity index 99%
rename from docs/assets/BaseFinder.html.a0f349bb.js
rename to docs/assets/BaseFinder.html.bdb1050e.js
index e226acc0c..278b355cd 100644
--- a/docs/assets/BaseFinder.html.a0f349bb.js
+++ b/docs/assets/BaseFinder.html.bdb1050e.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as n,a as o}from"./app.c86510cc.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.f643a53b.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.bc836738.js b/docs/assets/ChannelData.html.b4f5a2f6.js
similarity index 99%
rename from docs/assets/ChannelData.html.bc836738.js
rename to docs/assets/ChannelData.html.b4f5a2f6.js
index 9cccdc63f..90e6ceb40 100644
--- a/docs/assets/ChannelData.html.bc836738.js
+++ b/docs/assets/ChannelData.html.b4f5a2f6.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.c86510cc.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.f643a53b.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.fbd99d6d.js b/docs/assets/ChannelData.html.ba0e607a.js
similarity index 99%
rename from docs/assets/ChannelData.html.fbd99d6d.js
rename to docs/assets/ChannelData.html.ba0e607a.js
index 0728477ab..7606dbbf7 100644
--- a/docs/assets/ChannelData.html.fbd99d6d.js
+++ b/docs/assets/ChannelData.html.ba0e607a.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.c86510cc.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.f643a53b.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.cef31c7e.js b/docs/assets/ChannelPriority.html.322de5cb.js
similarity index 95%
rename from docs/assets/ChannelPriority.html.cef31c7e.js
rename to docs/assets/ChannelPriority.html.322de5cb.js
index 029de9b89..2b54e1ccf 100644
--- a/docs/assets/ChannelPriority.html.cef31c7e.js
+++ b/docs/assets/ChannelPriority.html.322de5cb.js
@@ -1,2 +1,2 @@
-import{_ as s,o as a,c as o,a as n}from"./app.c86510cc.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.f643a53b.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/ChannelPriority.html.eebb3fbb.js b/docs/assets/ChannelPriority.html.96dd056e.js similarity index 96% rename from docs/assets/ChannelPriority.html.eebb3fbb.js rename to docs/assets/ChannelPriority.html.96dd056e.js index ffad297df..6ba080f4c 100644 --- a/docs/assets/ChannelPriority.html.eebb3fbb.js +++ b/docs/assets/ChannelPriority.html.96dd056e.js @@ -1,2 +1,2 @@ -import{_ as s,o as n,c as o,a}from"./app.c86510cc.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.f643a53b.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/ComponentTypeFactory.html.6c94d679.js b/docs/assets/ComponentTypeFactory.html.ee7e089a.js similarity index 95% rename from docs/assets/ComponentTypeFactory.html.6c94d679.js rename to docs/assets/ComponentTypeFactory.html.ee7e089a.js index 36c2bb000..20026ae77 100644 --- a/docs/assets/ComponentTypeFactory.html.6c94d679.js +++ b/docs/assets/ComponentTypeFactory.html.ee7e089a.js @@ -1 +1 @@ -import{_ as n,r as a,o as c,c as s,b as o,d as r,a as i,e}from"./app.c86510cc.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\u53CD\u5C04\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=e("\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"},_=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u8FDB\u884C\u67E5\u770B\u3002");function u(k,f){const t=a("ExternalLinkIcon");return c(),s("div",null,[l,o("p",null,[d,o("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 o,d as r,a as i,e}from"./app.f643a53b.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\u53CD\u5C04\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=e("\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"},_=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u8FDB\u884C\u67E5\u770B\u3002");function u(k,f){const t=a("ExternalLinkIcon");return c(),s("div",null,[l,o("p",null,[d,o("a",h,[_,r(t)]),m])])}const g=n(p,[["render",u],["__file","ComponentTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/ComponentTypeFactory.html.3b12aea3.js b/docs/assets/ComponentTypeFactory.html.f5d1204f.js similarity index 94% rename from docs/assets/ComponentTypeFactory.html.3b12aea3.js rename to docs/assets/ComponentTypeFactory.html.f5d1204f.js index ba1565731..68142ef5b 100644 --- a/docs/assets/ComponentTypeFactory.html.3b12aea3.js +++ b/docs/assets/ComponentTypeFactory.html.f5d1204f.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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/ConstructorFinder.html.70ab5d55.js b/docs/assets/ConstructorFinder.html.2bb603e0.js similarity index 99% rename from docs/assets/ConstructorFinder.html.70ab5d55.js rename to docs/assets/ConstructorFinder.html.2bb603e0.js index ed3741750..5f0836972 100644 --- a/docs/assets/ConstructorFinder.html.70ab5d55.js +++ b/docs/assets/ConstructorFinder.html.2bb603e0.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a}from"./app.c86510cc.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 classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o as n,c as o,a}from"./app.f643a53b.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 classSet: Class<*>) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

v1.1.8 modified

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

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
diff --git a/docs/assets/ConstructorFinder.html.873081e1.js b/docs/assets/ConstructorFinder.html.f66e071b.js
similarity index 99%
rename from docs/assets/ConstructorFinder.html.873081e1.js
rename to docs/assets/ConstructorFinder.html.f66e071b.js
index 572ef4807..f8f8510b6 100644
--- a/docs/assets/ConstructorFinder.html.873081e1.js
+++ b/docs/assets/ConstructorFinder.html.f66e071b.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.c86510cc.js";const e={},l=a(`

ConstructorFinder - class

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

ConstructorFinder - class

class ConstructorFinder internal constructor(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

v1.1.8 \u4FEE\u6539

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

\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
diff --git a/docs/assets/ConstructorRules.html.d9088ff6.js b/docs/assets/ConstructorRules.html.333b8d42.js
similarity index 99%
rename from docs/assets/ConstructorRules.html.d9088ff6.js
rename to docs/assets/ConstructorRules.html.333b8d42.js
index 28d82adcf..9b883e229 100644
--- a/docs/assets/ConstructorRules.html.d9088ff6.js
+++ b/docs/assets/ConstructorRules.html.333b8d42.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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.4d286fe0.js b/docs/assets/ConstructorRules.html.ef34015b.js
similarity index 99%
rename from docs/assets/ConstructorRules.html.4d286fe0.js
rename to docs/assets/ConstructorRules.html.ef34015b.js
index 1314ae350..a98f932a0 100644
--- a/docs/assets/ConstructorRules.html.4d286fe0.js
+++ b/docs/assets/ConstructorRules.html.ef34015b.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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.95bad8b5.js b/docs/assets/CountRules.html.06f6ba1f.js
similarity index 98%
rename from docs/assets/CountRules.html.95bad8b5.js
rename to docs/assets/CountRules.html.06f6ba1f.js
index 947f0b95e..db12f7353 100644
--- a/docs/assets/CountRules.html.95bad8b5.js
+++ b/docs/assets/CountRules.html.06f6ba1f.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a as e}from"./app.c86510cc.js";const a={},l=e(`

CountRules - class

class CountRules private constructor()
+import{_ as s,o,c as n,a as e}from"./app.f643a53b.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/CountRules.html.3f71370d.js b/docs/assets/CountRules.html.3bc27b1d.js
similarity index 98%
rename from docs/assets/CountRules.html.3f71370d.js
rename to docs/assets/CountRules.html.3bc27b1d.js
index bd058822f..80fbf6e67 100644
--- a/docs/assets/CountRules.html.3f71370d.js
+++ b/docs/assets/CountRules.html.3bc27b1d.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as o,a as e}from"./app.c86510cc.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.f643a53b.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/CurrentClass.html.2c892c7e.js b/docs/assets/CurrentClass.html.106d39c5.js
similarity index 99%
rename from docs/assets/CurrentClass.html.2c892c7e.js
rename to docs/assets/CurrentClass.html.106d39c5.js
index b33f9267c..101f5b186 100644
--- a/docs/assets/CurrentClass.html.2c892c7e.js
+++ b/docs/assets/CurrentClass.html.106d39c5.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as o}from"./app.c86510cc.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.f643a53b.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/CurrentClass.html.5373bf87.js b/docs/assets/CurrentClass.html.7391f90b.js
similarity index 99%
rename from docs/assets/CurrentClass.html.5373bf87.js
rename to docs/assets/CurrentClass.html.7391f90b.js
index 4b07be489..996af4886 100644
--- a/docs/assets/CurrentClass.html.5373bf87.js
+++ b/docs/assets/CurrentClass.html.7391f90b.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as e,a as n}from"./app.c86510cc.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.f643a53b.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/DefinedTypeFactory.html.687da225.js b/docs/assets/DefinedTypeFactory.html.21331662.js
similarity index 96%
rename from docs/assets/DefinedTypeFactory.html.687da225.js
rename to docs/assets/DefinedTypeFactory.html.21331662.js
index 230a91a94..822d08bc0 100644
--- a/docs/assets/DefinedTypeFactory.html.687da225.js
+++ b/docs/assets/DefinedTypeFactory.html.21331662.js
@@ -1,2 +1,2 @@
-import{_ as e,o as s,c as o,a}from"./app.c86510cc.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.f643a53b.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.8e82c142.js b/docs/assets/DefinedTypeFactory.html.45f8b277.js similarity index 95% rename from docs/assets/DefinedTypeFactory.html.8e82c142.js rename to docs/assets/DefinedTypeFactory.html.45f8b277.js index 5bbe42397..c9f085342 100644 --- a/docs/assets/DefinedTypeFactory.html.8e82c142.js +++ b/docs/assets/DefinedTypeFactory.html.45f8b277.js @@ -1,2 +1,2 @@ -import{_ as e,o as s,c as a,a as o}from"./app.c86510cc.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.f643a53b.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.a8e54565.js b/docs/assets/DexClassFinder.html.5528dec5.js similarity index 99% rename from docs/assets/DexClassFinder.html.a8e54565.js rename to docs/assets/DexClassFinder.html.5528dec5.js index 5e09f55d8..4a2ee0a13 100644 --- a/docs/assets/DexClassFinder.html.a8e54565.js +++ b/docs/assets/DexClassFinder.html.5528dec5.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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/DexClassFinder.html.47c4671b.js b/docs/assets/DexClassFinder.html.c566bd51.js
similarity index 99%
rename from docs/assets/DexClassFinder.html.47c4671b.js
rename to docs/assets/DexClassFinder.html.c566bd51.js
index 9fdfa9ebb..db2ef2b41 100644
--- a/docs/assets/DexClassFinder.html.47c4671b.js
+++ b/docs/assets/DexClassFinder.html.c566bd51.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.c86510cc.js";const n={},l=e(`

DexClassFinder - class

class DexClassFinder internal constructor(
+import{_ as s,o,c as a,a as e}from"./app.f643a53b.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/ExecutorType.html.4cfd9774.js b/docs/assets/ExecutorType.html.1f77c183.js
similarity index 98%
rename from docs/assets/ExecutorType.html.4cfd9774.js
rename to docs/assets/ExecutorType.html.1f77c183.js
index 3a6a11211..5e272fef3 100644
--- a/docs/assets/ExecutorType.html.4cfd9774.js
+++ b/docs/assets/ExecutorType.html.1f77c183.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.c86510cc.js";const n={},c=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.

ExecutorType - class

enum class ExecutorType
+import{_ as e,o as s,c as o,a}from"./app.f643a53b.js";const n={},c=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.

ExecutorType - class

enum class ExecutorType
 

Change Records

v1.1.9 added

Function Illustrate

Hook Framework \u7C7B\u578B\u5B9A\u4E49\u3002

\u5B9A\u4E49\u4E86\u76EE\u524D\u5DF2\u77E5\u4F7F\u7528\u9891\u7387\u8F83\u9AD8\u7684 Hook Framework\u3002

\u540E\u671F\u6839\u636E Hook Framework \u7279\u5F81\u548C\u4F7F\u7528\u60C5\u51B5\u5C06\u4F1A\u7EE7\u7EED\u6DFB\u52A0\u65B0\u7684\u7C7B\u578B\u3002

\u65E0\u6CD5\u8BC6\u522B\u7684 Hook Framework \u5C06\u88AB\u5B9A\u4E49\u4E3A UNKNOWN\u3002

UNKNOWN - enum

UNKNOWN
 

Change Records

v1.1.9 added

Function Illustrate

\u672A\u77E5\u7C7B\u578B\u3002

XPOSED - enum

XPOSED
 

Change Records

v1.1.9 added

Function Illustrate

\u539F\u7248\u3001\u7B2C\u4E09\u65B9 Xposed\u3002

LSPOSED_LSPATCH - enum

LSPOSED_LSPATCH
diff --git a/docs/assets/ExecutorType.html.edd747ad.js b/docs/assets/ExecutorType.html.3291de5c.js
similarity index 98%
rename from docs/assets/ExecutorType.html.edd747ad.js
rename to docs/assets/ExecutorType.html.3291de5c.js
index 59f26bf24..ea0b59e41 100644
--- a/docs/assets/ExecutorType.html.edd747ad.js
+++ b/docs/assets/ExecutorType.html.3291de5c.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a}from"./app.c86510cc.js";const n={},p=a(`

ExecutorType - class

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

ExecutorType - class

enum class ExecutorType
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.9 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

Hook Framework \u7C7B\u578B\u5B9A\u4E49\u3002

\u5B9A\u4E49\u4E86\u76EE\u524D\u5DF2\u77E5\u4F7F\u7528\u9891\u7387\u8F83\u9AD8\u7684 Hook Framework\u3002

\u540E\u671F\u6839\u636E Hook Framework \u7279\u5F81\u548C\u4F7F\u7528\u60C5\u51B5\u5C06\u4F1A\u7EE7\u7EED\u6DFB\u52A0\u65B0\u7684\u7C7B\u578B\u3002

\u65E0\u6CD5\u8BC6\u522B\u7684 Hook Framework \u5C06\u88AB\u5B9A\u4E49\u4E3A UNKNOWN\u3002

UNKNOWN - enum

UNKNOWN
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.9 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u672A\u77E5\u7C7B\u578B\u3002

XPOSED - enum

XPOSED
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.9 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u539F\u7248\u3001\u7B2C\u4E09\u65B9 Xposed\u3002

LSPOSED_LSPATCH - enum

LSPOSED_LSPATCH
diff --git a/docs/assets/FieldFinder.html.a260fc99.js b/docs/assets/FieldFinder.html.7eb8fd1e.js
similarity index 99%
rename from docs/assets/FieldFinder.html.a260fc99.js
rename to docs/assets/FieldFinder.html.7eb8fd1e.js
index b9fdaaf95..e64bb1d62 100644
--- a/docs/assets/FieldFinder.html.a260fc99.js
+++ b/docs/assets/FieldFinder.html.7eb8fd1e.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a as n}from"./app.c86510cc.js";const a={},l=n(`

FieldFinder - class

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

FieldFinder - class

class FieldFinder internal constructor(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

v1.1.8 \u4FEE\u6539

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

\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/FieldFinder.html.16aa5d9f.js b/docs/assets/FieldFinder.html.d93e0b5a.js
similarity index 99%
rename from docs/assets/FieldFinder.html.16aa5d9f.js
rename to docs/assets/FieldFinder.html.d93e0b5a.js
index 0e76b1eda..0db703822 100644
--- a/docs/assets/FieldFinder.html.16aa5d9f.js
+++ b/docs/assets/FieldFinder.html.d93e0b5a.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a as n}from"./app.c86510cc.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 classSet: Class<*>?) : MemberBaseFinder
+import{_ as s,o as e,c as o,a as n}from"./app.f643a53b.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 classSet: Class<*>?) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

v1.1.8 modified

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

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/FieldRules.html.2658894a.js b/docs/assets/FieldRules.html.60c3abf3.js
similarity index 98%
rename from docs/assets/FieldRules.html.2658894a.js
rename to docs/assets/FieldRules.html.60c3abf3.js
index ccef8ba73..3c28e5c34 100644
--- a/docs/assets/FieldRules.html.2658894a.js
+++ b/docs/assets/FieldRules.html.60c3abf3.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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.f9538ab9.js b/docs/assets/FieldRules.html.81c8d4a9.js
similarity index 98%
rename from docs/assets/FieldRules.html.f9538ab9.js
rename to docs/assets/FieldRules.html.81c8d4a9.js
index 9a518d011..169cd8cd8 100644
--- a/docs/assets/FieldRules.html.f9538ab9.js
+++ b/docs/assets/FieldRules.html.81c8d4a9.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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.d868b91f.js b/docs/assets/GenericClass.html.4f669f27.js
similarity index 98%
rename from docs/assets/GenericClass.html.d868b91f.js
rename to docs/assets/GenericClass.html.4f669f27.js
index a9230cc6f..2b4279f85 100644
--- a/docs/assets/GenericClass.html.d868b91f.js
+++ b/docs/assets/GenericClass.html.4f669f27.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as o}from"./app.c86510cc.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.f643a53b.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/GenericClass.html.aa7de0a8.js b/docs/assets/GenericClass.html.c73df2de.js similarity index 98% rename from docs/assets/GenericClass.html.aa7de0a8.js rename to docs/assets/GenericClass.html.c73df2de.js index 6db439e7f..fd67a69a7 100644 --- a/docs/assets/GenericClass.html.aa7de0a8.js +++ b/docs/assets/GenericClass.html.c73df2de.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a as o}from"./app.c86510cc.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.f643a53b.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/GraphicsTypeFactory.html.fd636458.js b/docs/assets/GraphicsTypeFactory.html.04b3b02f.js similarity index 95% rename from docs/assets/GraphicsTypeFactory.html.fd636458.js rename to docs/assets/GraphicsTypeFactory.html.04b3b02f.js index 82653a830..583964e3d 100644 --- a/docs/assets/GraphicsTypeFactory.html.fd636458.js +++ b/docs/assets/GraphicsTypeFactory.html.04b3b02f.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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/GraphicsTypeFactory.html.eb6110b9.js b/docs/assets/GraphicsTypeFactory.html.31df8bc5.js similarity index 94% rename from docs/assets/GraphicsTypeFactory.html.eb6110b9.js rename to docs/assets/GraphicsTypeFactory.html.31df8bc5.js index b52de2346..64ca918bd 100644 --- a/docs/assets/GraphicsTypeFactory.html.eb6110b9.js +++ b/docs/assets/GraphicsTypeFactory.html.31df8bc5.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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/HookClass.html.d8bd18c6.js b/docs/assets/HookClass.html.a4e5a7f3.js similarity index 97% rename from docs/assets/HookClass.html.d8bd18c6.js rename to docs/assets/HookClass.html.a4e5a7f3.js index 775801b84..8467945d6 100644 --- a/docs/assets/HookClass.html.d8bd18c6.js +++ b/docs/assets/HookClass.html.a4e5a7f3.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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/HookClass.html.07d717aa.js b/docs/assets/HookClass.html.b124666e.js similarity index 97% rename from docs/assets/HookClass.html.07d717aa.js rename to docs/assets/HookClass.html.b124666e.js index 3531f62c3..771eda98f 100644 --- a/docs/assets/HookClass.html.07d717aa.js +++ b/docs/assets/HookClass.html.b124666e.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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/HookParam.html.f23ef9a6.js b/docs/assets/HookParam.html.0731d04a.js similarity index 99% rename from docs/assets/HookParam.html.f23ef9a6.js rename to docs/assets/HookParam.html.0731d04a.js index cfbf2de9a..2e3ddbe54 100644 --- a/docs/assets/HookParam.html.f23ef9a6.js +++ b/docs/assets/HookParam.html.0731d04a.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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.043453ab.js b/docs/assets/HookParam.html.8c4d80fd.js
similarity index 99%
rename from docs/assets/HookParam.html.043453ab.js
rename to docs/assets/HookParam.html.8c4d80fd.js
index aab84e0d8..1474578a6 100644
--- a/docs/assets/HookParam.html.043453ab.js
+++ b/docs/assets/HookParam.html.8c4d80fd.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.c86510cc.js";const e={},l=n(`

HookParam - class

class HookParam internal constructor(
+import{_ as s,o,c as a,a as n}from"./app.f643a53b.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.6c57657d.js b/docs/assets/HookResources.html.18641aea.js
similarity index 96%
rename from docs/assets/HookResources.html.6c57657d.js
rename to docs/assets/HookResources.html.18641aea.js
index 0812460c2..5474cff5d 100644
--- a/docs/assets/HookResources.html.6c57657d.js
+++ b/docs/assets/HookResources.html.18641aea.js
@@ -1,2 +1,2 @@
-import{_ as s,o,c as e,a as n}from"./app.c86510cc.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.f643a53b.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/HookResources.html.f2b2dd08.js b/docs/assets/HookResources.html.49dd8807.js similarity index 95% rename from docs/assets/HookResources.html.f2b2dd08.js rename to docs/assets/HookResources.html.49dd8807.js index 777c7e79e..a038ed19a 100644 --- a/docs/assets/HookResources.html.f2b2dd08.js +++ b/docs/assets/HookResources.html.49dd8807.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.js";const c={},n=a(`

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
+import{_ as s,o,c as e,a}from"./app.f643a53b.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/IYukiHookXposedInit.html.f8668f1c.js b/docs/assets/IYukiHookXposedInit.html.25ec7528.js similarity index 98% rename from docs/assets/IYukiHookXposedInit.html.f8668f1c.js rename to docs/assets/IYukiHookXposedInit.html.25ec7528.js index f4893abaa..e67b31655 100644 --- a/docs/assets/IYukiHookXposedInit.html.f8668f1c.js +++ b/docs/assets/IYukiHookXposedInit.html.25ec7528.js @@ -1,4 +1,4 @@ -import{_ as o,o as e,c as s,a as n}from"./app.c86510cc.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.f643a53b.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.0878c0a2.js b/docs/assets/IYukiHookXposedInit.html.af7ab766.js
similarity index 98%
rename from docs/assets/IYukiHookXposedInit.html.0878c0a2.js
rename to docs/assets/IYukiHookXposedInit.html.af7ab766.js
index bedd3c0da..0051650fb 100644
--- a/docs/assets/IYukiHookXposedInit.html.0878c0a2.js
+++ b/docs/assets/IYukiHookXposedInit.html.af7ab766.js
@@ -1,4 +1,4 @@
-import{_ as o,o as e,c as s,a as n}from"./app.c86510cc.js";const p={},a=n(`

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
+import{_ as o,o as e,c as s,a as n}from"./app.f643a53b.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.c3619713.js b/docs/assets/InjectYukiHookWithXposed.html.30edb248.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.c3619713.js
rename to docs/assets/InjectYukiHookWithXposed.html.30edb248.js
index 7eaaf9ef6..1461993ec 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.c3619713.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.30edb248.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.c86510cc.js";const e={},p=a(`

InjectYukiHookWithXposed - annotation

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

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
     val sourcePath: String,
     val modulePackageName: String,
     val entryClassName: String,
diff --git a/docs/assets/InjectYukiHookWithXposed.html.4df7325f.js b/docs/assets/InjectYukiHookWithXposed.html.c1ce163a.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.4df7325f.js
rename to docs/assets/InjectYukiHookWithXposed.html.c1ce163a.js
index 042681c54..d42fe7633 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.4df7325f.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.c1ce163a.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.c86510cc.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.f643a53b.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/LoggerFactory.html.1a790a09.js b/docs/assets/LoggerFactory.html.0b09f39d.js
similarity index 99%
rename from docs/assets/LoggerFactory.html.1a790a09.js
rename to docs/assets/LoggerFactory.html.0b09f39d.js
index 53a74e452..cec954c07 100644
--- a/docs/assets/LoggerFactory.html.1a790a09.js
+++ b/docs/assets/LoggerFactory.html.0b09f39d.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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/LoggerFactory.html.7f0616c8.js b/docs/assets/LoggerFactory.html.f340322f.js
similarity index 99%
rename from docs/assets/LoggerFactory.html.7f0616c8.js
rename to docs/assets/LoggerFactory.html.f340322f.js
index ecb1393bc..329bf0a96 100644
--- a/docs/assets/LoggerFactory.html.7f0616c8.js
+++ b/docs/assets/LoggerFactory.html.f340322f.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.c86510cc.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.f643a53b.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/MemberRules.html.6bc06d05.js b/docs/assets/MemberRules.html.0c170008.js
similarity index 97%
rename from docs/assets/MemberRules.html.6bc06d05.js
rename to docs/assets/MemberRules.html.0c170008.js
index 6af65be93..cb4b15742 100644
--- a/docs/assets/MemberRules.html.6bc06d05.js
+++ b/docs/assets/MemberRules.html.0c170008.js
@@ -1,3 +1,3 @@
-import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/MemberRules.html.92dc802e.js b/docs/assets/MemberRules.html.53021147.js similarity index 97% rename from docs/assets/MemberRules.html.92dc802e.js rename to docs/assets/MemberRules.html.53021147.js index 168b9e548..743302496 100644 --- a/docs/assets/MemberRules.html.92dc802e.js +++ b/docs/assets/MemberRules.html.53021147.js @@ -1,3 +1,3 @@ -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/MemberRulesResult.html.45e91e89.js b/docs/assets/MemberRulesResult.html.9965dc43.js similarity index 98% rename from docs/assets/MemberRulesResult.html.45e91e89.js rename to docs/assets/MemberRulesResult.html.9965dc43.js index 2b2d28f05..56cdf1440 100644 --- a/docs/assets/MemberRulesResult.html.45e91e89.js +++ b/docs/assets/MemberRulesResult.html.9965dc43.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a as n}from"./app.c86510cc.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.f643a53b.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.5a8f43ab.js b/docs/assets/MemberRulesResult.html.d4d52324.js
similarity index 98%
rename from docs/assets/MemberRulesResult.html.5a8f43ab.js
rename to docs/assets/MemberRulesResult.html.d4d52324.js
index f1a5480cf..16cefdf6f 100644
--- a/docs/assets/MemberRulesResult.html.5a8f43ab.js
+++ b/docs/assets/MemberRulesResult.html.d4d52324.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a as n}from"./app.c86510cc.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.f643a53b.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.dcc92045.js b/docs/assets/MethodFinder.html.7bdaba1d.js
similarity index 99%
rename from docs/assets/MethodFinder.html.dcc92045.js
rename to docs/assets/MethodFinder.html.7bdaba1d.js
index f172ecda4..b389d6b01 100644
--- a/docs/assets/MethodFinder.html.dcc92045.js
+++ b/docs/assets/MethodFinder.html.7bdaba1d.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a as e}from"./app.c86510cc.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 classSet: Class<*>) : MemberBaseFinder
+import{_ as s,o,c as n,a as e}from"./app.f643a53b.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 classSet: Class<*>) : MemberBaseFinder
 

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

v1.1.8 modified

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

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?
diff --git a/docs/assets/MethodFinder.html.719cfa77.js b/docs/assets/MethodFinder.html.f0a501a0.js
similarity index 99%
rename from docs/assets/MethodFinder.html.719cfa77.js
rename to docs/assets/MethodFinder.html.f0a501a0.js
index bcb081c33..dc8dcaae0 100644
--- a/docs/assets/MethodFinder.html.719cfa77.js
+++ b/docs/assets/MethodFinder.html.f0a501a0.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.c86510cc.js";const e={},p=a(`

MethodFinder - class

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

MethodFinder - class

class MethodFinder internal constructor(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

v1.1.8 \u4FEE\u6539

\u79FB\u52A8 hookInstance \u53C2\u6570\u5230 MemberBaseFinder.MemberHookerManager

\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?
diff --git a/docs/assets/MethodRules.html.d37a7900.js b/docs/assets/MethodRules.html.2b39d4c6.js
similarity index 99%
rename from docs/assets/MethodRules.html.d37a7900.js
rename to docs/assets/MethodRules.html.2b39d4c6.js
index 7c18fda89..4c67ec8e2 100644
--- a/docs/assets/MethodRules.html.d37a7900.js
+++ b/docs/assets/MethodRules.html.2b39d4c6.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.c86510cc.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.f643a53b.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/MethodRules.html.9d829b15.js b/docs/assets/MethodRules.html.b075ed0f.js
similarity index 99%
rename from docs/assets/MethodRules.html.9d829b15.js
rename to docs/assets/MethodRules.html.b075ed0f.js
index 4c50c9bb0..04ea5d304 100644
--- a/docs/assets/MethodRules.html.9d829b15.js
+++ b/docs/assets/MethodRules.html.b075ed0f.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.c86510cc.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.f643a53b.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/ModifierRules.html.02fa5a97.js b/docs/assets/ModifierRules.html.7357a201.js
similarity index 99%
rename from docs/assets/ModifierRules.html.02fa5a97.js
rename to docs/assets/ModifierRules.html.7357a201.js
index d0411adc8..64054b742 100644
--- a/docs/assets/ModifierRules.html.02fa5a97.js
+++ b/docs/assets/ModifierRules.html.7357a201.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.c86510cc.js";const c={},n=a(`

ModifierRules - class

class ModifierRules private constructor()
+import{_ as e,o as s,c as o,a}from"./app.f643a53b.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.97695c6f.js b/docs/assets/ModifierRules.html.c86821e7.js
similarity index 99%
rename from docs/assets/ModifierRules.html.97695c6f.js
rename to docs/assets/ModifierRules.html.c86821e7.js
index f25f4e52d..c68c140b3 100644
--- a/docs/assets/ModifierRules.html.97695c6f.js
+++ b/docs/assets/ModifierRules.html.c86821e7.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.c86510cc.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.f643a53b.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.09451ff7.js b/docs/assets/ModuleAppActivity.html.09451ff7.js
deleted file mode 100644
index d215c1814..000000000
--- a/docs/assets/ModuleAppActivity.html.09451ff7.js
+++ /dev/null
@@ -1 +0,0 @@
-const a=JSON.parse('{"key":"v-1446bdca","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html","title":"ModuleAppActivity - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1663397167000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"}');export{a as data};
diff --git a/docs/assets/ModuleAppActivity.html.1e76f8d8.js b/docs/assets/ModuleAppActivity.html.1e76f8d8.js
deleted file mode 100644
index a3e2c6b6a..000000000
--- a/docs/assets/ModuleAppActivity.html.1e76f8d8.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{_ as e,o as s,c as o,a as t}from"./app.c86510cc.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.90d3c4e6.js b/docs/assets/ModuleAppActivity.html.90d3c4e6.js deleted file mode 100644 index 8541e8d3b..000000000 --- a/docs/assets/ModuleAppActivity.html.90d3c4e6.js +++ /dev/null @@ -1 +0,0 @@ -const a=JSON.parse('{"key":"v-2d5d16db","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html","title":"ModuleAppActivity - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1664299331000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"}');export{a as data}; diff --git a/docs/assets/ModuleAppActivity.html.927fa3ec.js b/docs/assets/ModuleAppActivity.html.927fa3ec.js deleted file mode 100644 index 5e5585e65..000000000 --- a/docs/assets/ModuleAppActivity.html.927fa3ec.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as e,c as o,a as t}from"./app.c86510cc.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/ModuleAppActivity.html.98cb78a4.js b/docs/assets/ModuleAppActivity.html.98cb78a4.js new file mode 100644 index 000000000..c356e17b4 --- /dev/null +++ b/docs/assets/ModuleAppActivity.html.98cb78a4.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-2d5d16db","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html","title":"ModuleAppActivity - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"proxyClassName - field","slug":"proxyclassname-field","link":"#proxyclassname-field","children":[]}],"git":{"updatedTime":1682007215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"}');export{e as data}; diff --git a/docs/assets/ModuleAppActivity.html.acd49ae1.js b/docs/assets/ModuleAppActivity.html.acd49ae1.js new file mode 100644 index 000000000..d63d26406 --- /dev/null +++ b/docs/assets/ModuleAppActivity.html.acd49ae1.js @@ -0,0 +1,3 @@ +import{_ as s,o,c as e,a}from"./app.f643a53b.js";const c={},p=a(`

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

proxyClassName - field

open val proxyClassName: String
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.10 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u3002

\u7559\u7A7A\u5219\u4F7F\u7528 Context.registerModuleAppActivities \u65F6\u8BBE\u7F6E\u7684\u7C7B\u540D

\u7279\u522B\u6CE8\u610F

\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u5FC5\u987B\u5B58\u5728\u4E8E\u5BBF\u4E3B\u7684 AndroidMainifest \u6E05\u5355\u4E2D\u3002

`,16),t=[p];function n(l,i){return o(),e("div",null,t)}const d=s(c,[["render",n],["__file","ModuleAppActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppActivity.html.b7bc1cfd.js b/docs/assets/ModuleAppActivity.html.b7bc1cfd.js new file mode 100644 index 000000000..53963f18b --- /dev/null +++ b/docs/assets/ModuleAppActivity.html.b7bc1cfd.js @@ -0,0 +1,3 @@ +import{_ as s,o as e,c as o,a}from"./app.f643a53b.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.

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

proxyClassName - field

open val proxyClassName: String
+

Change Records

v1.1.10 added

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u3002

\u7559\u7A7A\u5219\u4F7F\u7528 Context.registerModuleAppActivities \u65F6\u8BBE\u7F6E\u7684\u7C7B\u540D

Pay Attention

\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u5FC5\u987B\u5B58\u5728\u4E8E\u5BBF\u4E3B\u7684 AndroidMainifest \u6E05\u5355\u4E2D\u3002

`,17),c=[n];function p(l,i){return e(),o("div",null,c)}const d=s(t,[["render",p],["__file","ModuleAppActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppActivity.html.c4a0eeb4.js b/docs/assets/ModuleAppActivity.html.c4a0eeb4.js new file mode 100644 index 000000000..0270e7763 --- /dev/null +++ b/docs/assets/ModuleAppActivity.html.c4a0eeb4.js @@ -0,0 +1 @@ +const a=JSON.parse('{"key":"v-1446bdca","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html","title":"ModuleAppActivity - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"proxyClassName - field","slug":"proxyclassname-field","link":"#proxyclassname-field","children":[]}],"git":{"updatedTime":1682007215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"}');export{a as data}; diff --git a/docs/assets/ModuleAppCompatActivity.html.28457636.js b/docs/assets/ModuleAppCompatActivity.html.28457636.js new file mode 100644 index 000000000..a8b4450f3 --- /dev/null +++ b/docs/assets/ModuleAppCompatActivity.html.28457636.js @@ -0,0 +1,4 @@ +import{_ as s,o as e,c as o,a}from"./app.f643a53b.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

proxyClassName - field

open val proxyClassName: String
+

Change Records

v1.1.10 added

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u3002

\u7559\u7A7A\u5219\u4F7F\u7528 Context.registerModuleAppActivities \u65F6\u8BBE\u7F6E\u7684\u7C7B\u540D

Pay Attention

\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u5FC5\u987B\u5B58\u5728\u4E8E\u5BBF\u4E3B\u7684 AndroidMainifest \u6E05\u5355\u4E2D\u3002

`,24),p=[n];function c(l,r){return e(),o("div",null,p)}const d=s(t,[["render",c],["__file","ModuleAppCompatActivity.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModuleAppCompatActivity.html.4c0f53a9.js b/docs/assets/ModuleAppCompatActivity.html.4c0f53a9.js new file mode 100644 index 000000000..6121d13ea --- /dev/null +++ b/docs/assets/ModuleAppCompatActivity.html.4c0f53a9.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-cadbe48e","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html","title":"ModuleAppCompatActivity - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"moduleTheme - field","slug":"moduletheme-field","link":"#moduletheme-field","children":[]},{"level":2,"title":"proxyClassName - field","slug":"proxyclassname-field","link":"#proxyclassname-field","children":[]}],"git":{"updatedTime":1682007215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"}');export{e as data}; diff --git a/docs/assets/ModuleAppCompatActivity.html.5d317031.js b/docs/assets/ModuleAppCompatActivity.html.5d317031.js deleted file mode 100644 index 83b785524..000000000 --- a/docs/assets/ModuleAppCompatActivity.html.5d317031.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as e,o,c as s,a}from"./app.c86510cc.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.a20d9206.js b/docs/assets/ModuleAppCompatActivity.html.a20d9206.js deleted file mode 100644 index d644bc38d..000000000 --- a/docs/assets/ModuleAppCompatActivity.html.a20d9206.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-cadbe48e","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html","title":"ModuleAppCompatActivity - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"moduleTheme - field","slug":"moduletheme-field","link":"#moduletheme-field","children":[]}],"git":{"updatedTime":1664299331000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"}');export{e as data}; diff --git a/docs/assets/ModuleAppCompatActivity.html.bb1146fa.js b/docs/assets/ModuleAppCompatActivity.html.bb1146fa.js new file mode 100644 index 000000000..d1c3fedd2 --- /dev/null +++ b/docs/assets/ModuleAppCompatActivity.html.bb1146fa.js @@ -0,0 +1,4 @@ +import{_ as s,o,c as e,a}from"./app.f643a53b.js";const p={},n=a(`

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

proxyClassName - field

open val proxyClassName: String
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.10 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u3002

\u7559\u7A7A\u5219\u4F7F\u7528 Context.registerModuleAppActivities \u65F6\u8BBE\u7F6E\u7684\u7C7B\u540D

\u7279\u522B\u6CE8\u610F

\u4EE3\u7406\u7684 Activity \u7C7B\u540D\u5FC5\u987B\u5B58\u5728\u4E8E\u5BBF\u4E3B\u7684 AndroidMainifest \u6E05\u5355\u4E2D\u3002

`,23),t=[n];function c(l,r){return o(),e("div",null,t)}const i=s(p,[["render",c],["__file","ModuleAppCompatActivity.html.vue"]]);export{i as default}; diff --git a/docs/assets/ModuleAppCompatActivity.html.dd9e40e9.js b/docs/assets/ModuleAppCompatActivity.html.dd9e40e9.js deleted file mode 100644 index c6e0a8ca0..000000000 --- a/docs/assets/ModuleAppCompatActivity.html.dd9e40e9.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c7cef530","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html","title":"ModuleAppCompatActivity - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"moduleTheme - field","slug":"moduletheme-field","link":"#moduletheme-field","children":[]}],"git":{"updatedTime":1663397167000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"}');export{e as data}; diff --git a/docs/assets/ModuleAppCompatActivity.html.e544662e.js b/docs/assets/ModuleAppCompatActivity.html.e544662e.js new file mode 100644 index 000000000..524c55bf7 --- /dev/null +++ b/docs/assets/ModuleAppCompatActivity.html.e544662e.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-c7cef530","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html","title":"ModuleAppCompatActivity - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"moduleTheme - field","slug":"moduletheme-field","link":"#moduletheme-field","children":[]},{"level":2,"title":"proxyClassName - field","slug":"proxyclassname-field","link":"#proxyclassname-field","children":[]}],"git":{"updatedTime":1682007215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"}');export{e as data}; diff --git a/docs/assets/ModuleAppCompatActivity.html.f3fb58d2.js b/docs/assets/ModuleAppCompatActivity.html.f3fb58d2.js deleted file mode 100644 index 86ea7452a..000000000 --- a/docs/assets/ModuleAppCompatActivity.html.f3fb58d2.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as s,o,c as e,a as p}from"./app.c86510cc.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.cdb957fa.js b/docs/assets/ModuleApplication.html.7a1d4263.js similarity index 99% rename from docs/assets/ModuleApplication.html.cdb957fa.js rename to docs/assets/ModuleApplication.html.7a1d4263.js index a858c859e..05dad6da2 100644 --- a/docs/assets/ModuleApplication.html.cdb957fa.js +++ b/docs/assets/ModuleApplication.html.7a1d4263.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.c86510cc.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.f643a53b.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/ModuleApplication.html.888894cd.js b/docs/assets/ModuleApplication.html.f079b7cd.js
    similarity index 99%
    rename from docs/assets/ModuleApplication.html.888894cd.js
    rename to docs/assets/ModuleApplication.html.f079b7cd.js
    index 86ed42455..4919dc645 100644
    --- a/docs/assets/ModuleApplication.html.888894cd.js
    +++ b/docs/assets/ModuleApplication.html.f079b7cd.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.c86510cc.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.f643a53b.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/ModuleClassLoader.html.f1a910a8.js b/docs/assets/ModuleClassLoader.html.46d7f41d.js
    similarity index 98%
    rename from docs/assets/ModuleClassLoader.html.f1a910a8.js
    rename to docs/assets/ModuleClassLoader.html.46d7f41d.js
    index 68fe46071..3253b3231 100644
    --- a/docs/assets/ModuleClassLoader.html.f1a910a8.js
    +++ b/docs/assets/ModuleClassLoader.html.46d7f41d.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/ModuleClassLoader.html.046cecae.js b/docs/assets/ModuleClassLoader.html.bd4ea569.js similarity index 98% rename from docs/assets/ModuleClassLoader.html.046cecae.js rename to docs/assets/ModuleClassLoader.html.bd4ea569.js index 58ec51a78..5ecfda83f 100644 --- a/docs/assets/ModuleClassLoader.html.046cecae.js +++ b/docs/assets/ModuleClassLoader.html.bd4ea569.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.js";const l={},n=a(`

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
    +import{_ as s,o,c as e,a}from"./app.f643a53b.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/ModuleContextThemeWrapper.html.2667b0dc.js b/docs/assets/ModuleContextThemeWrapper.html.9726886e.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.2667b0dc.js rename to docs/assets/ModuleContextThemeWrapper.html.9726886e.js index b18f34a39..e3395fa50 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.2667b0dc.js +++ b/docs/assets/ModuleContextThemeWrapper.html.9726886e.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a as n}from"./app.c86510cc.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.f643a53b.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.3fa9c08d.js b/docs/assets/ModuleContextThemeWrapper.html.ae132879.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.3fa9c08d.js rename to docs/assets/ModuleContextThemeWrapper.html.ae132879.js index 09d6291af..2eef6d355 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.3fa9c08d.js +++ b/docs/assets/ModuleContextThemeWrapper.html.ae132879.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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.52c4f999.js b/docs/assets/ModulePreferenceFragment.html.4538994a.js similarity index 99% rename from docs/assets/ModulePreferenceFragment.html.52c4f999.js rename to docs/assets/ModulePreferenceFragment.html.4538994a.js index a06deba3f..b87fe4eed 100644 --- a/docs/assets/ModulePreferenceFragment.html.52c4f999.js +++ b/docs/assets/ModulePreferenceFragment.html.4538994a.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as n,a}from"./app.c86510cc.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.f643a53b.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.3445dfec.js b/docs/assets/ModulePreferenceFragment.html.9f2cf2aa.js
    similarity index 99%
    rename from docs/assets/ModulePreferenceFragment.html.3445dfec.js
    rename to docs/assets/ModulePreferenceFragment.html.9f2cf2aa.js
    index 8fb758296..eccadc7de 100644
    --- a/docs/assets/ModulePreferenceFragment.html.3445dfec.js
    +++ b/docs/assets/ModulePreferenceFragment.html.9f2cf2aa.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as n,a}from"./app.c86510cc.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.f643a53b.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.dd9b9369.js b/docs/assets/NameRules.html.2f941c5a.js
    similarity index 99%
    rename from docs/assets/NameRules.html.dd9b9369.js
    rename to docs/assets/NameRules.html.2f941c5a.js
    index 3a80c07a1..b592cf4ed 100644
    --- a/docs/assets/NameRules.html.dd9b9369.js
    +++ b/docs/assets/NameRules.html.2f941c5a.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.c86510cc.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.f643a53b.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/NameRules.html.de70ddf4.js b/docs/assets/NameRules.html.3f799942.js
    similarity index 99%
    rename from docs/assets/NameRules.html.de70ddf4.js
    rename to docs/assets/NameRules.html.3f799942.js
    index e4101ce16..4bc977f34 100644
    --- a/docs/assets/NameRules.html.de70ddf4.js
    +++ b/docs/assets/NameRules.html.3f799942.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.c86510cc.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.f643a53b.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/ObjectRules.html.51d8f999.js b/docs/assets/ObjectRules.html.4005c0a5.js
    similarity index 96%
    rename from docs/assets/ObjectRules.html.51d8f999.js
    rename to docs/assets/ObjectRules.html.4005c0a5.js
    index 7402fe903..9619e5209 100644
    --- a/docs/assets/ObjectRules.html.51d8f999.js
    +++ b/docs/assets/ObjectRules.html.4005c0a5.js
    @@ -1,2 +1,2 @@
    -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/ObjectRules.html.6333dbd0.js b/docs/assets/ObjectRules.html.c4d0e6b6.js similarity index 96% rename from docs/assets/ObjectRules.html.6333dbd0.js rename to docs/assets/ObjectRules.html.c4d0e6b6.js index 3535ae6ab..b65169f62 100644 --- a/docs/assets/ObjectRules.html.6333dbd0.js +++ b/docs/assets/ObjectRules.html.c4d0e6b6.js @@ -1,2 +1,2 @@ -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/PackageParam.html.ad03afdb.js b/docs/assets/PackageParam.html.a1ac3039.js similarity index 99% rename from docs/assets/PackageParam.html.ad03afdb.js rename to docs/assets/PackageParam.html.a1ac3039.js index 5dbc952f1..c49d4f841 100644 --- a/docs/assets/PackageParam.html.ad03afdb.js +++ b/docs/assets/PackageParam.html.a1ac3039.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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.912202ed.js b/docs/assets/PackageParam.html.e1c4350b.js
    similarity index 99%
    rename from docs/assets/PackageParam.html.912202ed.js
    rename to docs/assets/PackageParam.html.e1c4350b.js
    index dd2c22ac3..640421bbc 100644
    --- a/docs/assets/PackageParam.html.912202ed.js
    +++ b/docs/assets/PackageParam.html.e1c4350b.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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.7c2ea75b.js b/docs/assets/PrefsData.html.8d78be56.js
    similarity index 99%
    rename from docs/assets/PrefsData.html.7c2ea75b.js
    rename to docs/assets/PrefsData.html.8d78be56.js
    index 4a1fc8afc..90c515298 100644
    --- a/docs/assets/PrefsData.html.7c2ea75b.js
    +++ b/docs/assets/PrefsData.html.8d78be56.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as l}from"./app.c86510cc.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.f643a53b.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 YukiHookPrefsBridge \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.35cf61a0.js b/docs/assets/PrefsData.html.92a80177.js
    similarity index 99%
    rename from docs/assets/PrefsData.html.35cf61a0.js
    rename to docs/assets/PrefsData.html.92a80177.js
    index 9fac5e227..2313effb6 100644
    --- a/docs/assets/PrefsData.html.35cf61a0.js
    +++ b/docs/assets/PrefsData.html.92a80177.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as l}from"./app.c86510cc.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.f643a53b.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 YukiHookPrefsBridge \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.1e39e088.js b/docs/assets/ReflectionFactory.html.0063d796.js
    similarity index 99%
    rename from docs/assets/ReflectionFactory.html.1e39e088.js
    rename to docs/assets/ReflectionFactory.html.0063d796.js
    index d8e2b9c41..1848a6133 100644
    --- a/docs/assets/ReflectionFactory.html.1e39e088.js
    +++ b/docs/assets/ReflectionFactory.html.0063d796.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.c86510cc.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.f643a53b.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
    diff --git a/docs/assets/ReflectionFactory.html.7f658677.js b/docs/assets/ReflectionFactory.html.abd530fa.js
    similarity index 99%
    rename from docs/assets/ReflectionFactory.html.7f658677.js
    rename to docs/assets/ReflectionFactory.html.abd530fa.js
    index 673a6de19..f0987addf 100644
    --- a/docs/assets/ReflectionFactory.html.7f658677.js
    +++ b/docs/assets/ReflectionFactory.html.abd530fa.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as n}from"./app.c86510cc.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.f643a53b.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
    diff --git a/docs/assets/VariableTypeFactory.html.fe822a3c.js b/docs/assets/VariableTypeFactory.html.e16c195a.js
    similarity index 94%
    rename from docs/assets/VariableTypeFactory.html.fe822a3c.js
    rename to docs/assets/VariableTypeFactory.html.e16c195a.js
    index 0585226fc..46f60de65 100644
    --- a/docs/assets/VariableTypeFactory.html.fe822a3c.js
    +++ b/docs/assets/VariableTypeFactory.html.e16c195a.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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.4aeb9e87.js b/docs/assets/VariableTypeFactory.html.f2efa4bc.js similarity index 95% rename from docs/assets/VariableTypeFactory.html.4aeb9e87.js rename to docs/assets/VariableTypeFactory.html.f2efa4bc.js index b7d32bd1c..60bcdf6ac 100644 --- a/docs/assets/VariableTypeFactory.html.4aeb9e87.js +++ b/docs/assets/VariableTypeFactory.html.f2efa4bc.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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.9bd050ef.js b/docs/assets/VariousClass.html.0ed01b01.js similarity index 98% rename from docs/assets/VariousClass.html.9bd050ef.js rename to docs/assets/VariousClass.html.0ed01b01.js index 993b1b20a..8f79b8453 100644 --- a/docs/assets/VariousClass.html.9bd050ef.js +++ b/docs/assets/VariousClass.html.0ed01b01.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.c86510cc.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.f643a53b.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.3d353830.js b/docs/assets/VariousClass.html.78bf92f7.js similarity index 98% rename from docs/assets/VariousClass.html.3d353830.js rename to docs/assets/VariousClass.html.78bf92f7.js index bc3916012..b4696343f 100644 --- a/docs/assets/VariousClass.html.3d353830.js +++ b/docs/assets/VariousClass.html.78bf92f7.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as l}from"./app.c86510cc.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.f643a53b.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.1fe8fbc5.js b/docs/assets/ViewTypeFactory.html.107a99ef.js similarity index 95% rename from docs/assets/ViewTypeFactory.html.1fe8fbc5.js rename to docs/assets/ViewTypeFactory.html.107a99ef.js index 8dae2fd50..3331e2382 100644 --- a/docs/assets/ViewTypeFactory.html.1fe8fbc5.js +++ b/docs/assets/ViewTypeFactory.html.107a99ef.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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/ViewTypeFactory.html.f032cc72.js b/docs/assets/ViewTypeFactory.html.515d27f8.js similarity index 94% rename from docs/assets/ViewTypeFactory.html.f032cc72.js rename to docs/assets/ViewTypeFactory.html.515d27f8.js index d63a2f2a6..ec6cec987 100644 --- a/docs/assets/ViewTypeFactory.html.f032cc72.js +++ b/docs/assets/ViewTypeFactory.html.515d27f8.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.c86510cc.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\u53CD\u5C04\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.f643a53b.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\u53CD\u5C04\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/YukiBaseHooker.html.9f4904bf.js b/docs/assets/YukiBaseHooker.html.b8453b66.js similarity index 96% rename from docs/assets/YukiBaseHooker.html.9f4904bf.js rename to docs/assets/YukiBaseHooker.html.b8453b66.js index c1d958186..7f978dccf 100644 --- a/docs/assets/YukiBaseHooker.html.9f4904bf.js +++ b/docs/assets/YukiBaseHooker.html.b8453b66.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as a,a as e}from"./app.c86510cc.js";const n={},c=e(`

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
    +import{_ as s,o,c as a,a as e}from"./app.f643a53b.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/YukiBaseHooker.html.b1778dd2.js b/docs/assets/YukiBaseHooker.html.cac0dae7.js similarity index 97% rename from docs/assets/YukiBaseHooker.html.b1778dd2.js rename to docs/assets/YukiBaseHooker.html.cac0dae7.js index eedcea2ed..f6e5cf9b1 100644 --- a/docs/assets/YukiBaseHooker.html.b1778dd2.js +++ b/docs/assets/YukiBaseHooker.html.cac0dae7.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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/YukiHookAPI.html.69c14410.js b/docs/assets/YukiHookAPI.html.00941116.js similarity index 99% rename from docs/assets/YukiHookAPI.html.69c14410.js rename to docs/assets/YukiHookAPI.html.00941116.js index fdee9d39a..abff7ce31 100644 --- a/docs/assets/YukiHookAPI.html.69c14410.js +++ b/docs/assets/YukiHookAPI.html.00941116.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a}from"./app.c86510cc.js";const e={},l=a(`

    YukiHookAPI - object

    object YukiHookAPI
    +import{_ as s,o as n,c as o,a}from"./app.f643a53b.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
    diff --git a/docs/assets/YukiHookAPI.html.46f00ac6.js b/docs/assets/YukiHookAPI.html.caa72540.js
    similarity index 99%
    rename from docs/assets/YukiHookAPI.html.46f00ac6.js
    rename to docs/assets/YukiHookAPI.html.caa72540.js
    index 6f91eea06..bcf935f29 100644
    --- a/docs/assets/YukiHookAPI.html.46f00ac6.js
    +++ b/docs/assets/YukiHookAPI.html.caa72540.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a as o}from"./app.c86510cc.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.

    YukiHookAPI - object

    object YukiHookAPI
    +import{_ as s,o as n,c as e,a as o}from"./app.f643a53b.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.

    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
    diff --git a/docs/assets/YukiHookDataChannel.html.f9c220a5.js b/docs/assets/YukiHookDataChannel.html.55bd746e.js
    similarity index 99%
    rename from docs/assets/YukiHookDataChannel.html.f9c220a5.js
    rename to docs/assets/YukiHookDataChannel.html.55bd746e.js
    index 3edf75346..80c7b0d1e 100644
    --- a/docs/assets/YukiHookDataChannel.html.f9c220a5.js
    +++ b/docs/assets/YukiHookDataChannel.html.55bd746e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.c86510cc.js";const e={},p=n(`

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +import{_ as s,o as a,c as o,a as n}from"./app.f643a53b.js";const e={},p=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)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.0.90 \u4FEE\u6539

    \u65B0\u589E isSecure \u53C2\u6570

    v1.1.9 \u4FEE\u6539

    \u79FB\u9664 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

    dataMaxByteSize - field

    var dataMaxByteSize: Int
    diff --git a/docs/assets/YukiHookDataChannel.html.e07d0eae.js b/docs/assets/YukiHookDataChannel.html.76c635af.js
    similarity index 99%
    rename from docs/assets/YukiHookDataChannel.html.e07d0eae.js
    rename to docs/assets/YukiHookDataChannel.html.76c635af.js
    index a9c663313..63b253c39 100644
    --- a/docs/assets/YukiHookDataChannel.html.e07d0eae.js
    +++ b/docs/assets/YukiHookDataChannel.html.76c635af.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.c86510cc.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.f643a53b.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)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    \u65B0\u589E isSecure \u53C2\u6570

    v1.1.9 modified

    \u79FB\u9664 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

    dataMaxByteSize - field

    var dataMaxByteSize: Int
    diff --git a/docs/assets/YukiHookFactory.html.8a88619f.js b/docs/assets/YukiHookFactory.html.89107920.js
    similarity index 99%
    rename from docs/assets/YukiHookFactory.html.8a88619f.js
    rename to docs/assets/YukiHookFactory.html.89107920.js
    index f9bd3c8be..0e602c949 100644
    --- a/docs/assets/YukiHookFactory.html.8a88619f.js
    +++ b/docs/assets/YukiHookFactory.html.89107920.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o,c as s,a as n}from"./app.c86510cc.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.

    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.f643a53b.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.

    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

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 prefs \u65B9\u6CD5

    Context.modulePrefs - ext-method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 prefs \u65B9\u6CD5

    Context.prefs - ext-method

    fun Context.prefs(name: String): YukiHookPrefsBridge
    diff --git a/docs/assets/YukiHookFactory.html.6a6d253a.js b/docs/assets/YukiHookFactory.html.be7b653c.js
    similarity index 99%
    rename from docs/assets/YukiHookFactory.html.6a6d253a.js
    rename to docs/assets/YukiHookFactory.html.be7b653c.js
    index 3f1bedf1e..8e34b2b92 100644
    --- a/docs/assets/YukiHookFactory.html.6a6d253a.js
    +++ b/docs/assets/YukiHookFactory.html.be7b653c.js
    @@ -1,4 +1,4 @@
    -import{_ as o,o as e,c as s,a as p}from"./app.c86510cc.js";const c={},n=p(`

    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 p}from"./app.f643a53b.js";const c={},n=p(`

    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

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 prefs \u65B9\u6CD5

    Context.modulePrefs - ext-method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 prefs \u65B9\u6CD5

    Context.prefs - ext-method

    fun Context.prefs(name: String): YukiHookPrefsBridge
    diff --git a/docs/assets/YukiHookPrefsBridge.html.57963641.js b/docs/assets/YukiHookPrefsBridge.html.316d8e8c.js
    similarity index 94%
    rename from docs/assets/YukiHookPrefsBridge.html.57963641.js
    rename to docs/assets/YukiHookPrefsBridge.html.316d8e8c.js
    index 5fc0253cb..582601b1e 100644
    --- a/docs/assets/YukiHookPrefsBridge.html.57963641.js
    +++ b/docs/assets/YukiHookPrefsBridge.html.316d8e8c.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-65c20d2d","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html","title":"YukiHookPrefsBridge - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"native - method","slug":"native-method","link":"#native-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":"contains - method","slug":"contains-method","link":"#contains-method","children":[]},{"level":2,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method","link":"#edit-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method-1","link":"#edit-method-1","children":[]},{"level":2,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]},{"level":2,"title":"Editor - class","slug":"editor-class","link":"#editor-class","children":[{"level":3,"title":"remove - method","slug":"remove-method","link":"#remove-method","children":[]},{"level":3,"title":"remove - method","slug":"remove-method-1","link":"#remove-method-1","children":[]},{"level":3,"title":"clear - method","slug":"clear-method","link":"#clear-method","children":[]},{"level":3,"title":"putString - method","slug":"putstring-method","link":"#putstring-method","children":[]},{"level":3,"title":"putStringSet - method","slug":"putstringset-method","link":"#putstringset-method","children":[]},{"level":3,"title":"putBoolean - method","slug":"putboolean-method","link":"#putboolean-method","children":[]},{"level":3,"title":"putInt - method","slug":"putint-method","link":"#putint-method","children":[]},{"level":3,"title":"putLong - method","slug":"putlong-method","link":"#putlong-method","children":[]},{"level":3,"title":"putFloat - method","slug":"putfloat-method","link":"#putfloat-method","children":[]},{"level":3,"title":"put - method","slug":"put-method","link":"#put-method","children":[]},{"level":3,"title":"commit - method","slug":"commit-method","link":"#commit-method","children":[]},{"level":3,"title":"apply - method","slug":"apply-method","link":"#apply-method","children":[]}]}],"git":{"updatedTime":1681673705000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-65c20d2d","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html","title":"YukiHookPrefsBridge - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"native - method","slug":"native-method","link":"#native-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":"contains - method","slug":"contains-method","link":"#contains-method","children":[]},{"level":2,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method","link":"#edit-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method-1","link":"#edit-method-1","children":[]},{"level":2,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]},{"level":2,"title":"Editor - class","slug":"editor-class","link":"#editor-class","children":[{"level":3,"title":"remove - method","slug":"remove-method","link":"#remove-method","children":[]},{"level":3,"title":"remove - method","slug":"remove-method-1","link":"#remove-method-1","children":[]},{"level":3,"title":"clear - method","slug":"clear-method","link":"#clear-method","children":[]},{"level":3,"title":"putString - method","slug":"putstring-method","link":"#putstring-method","children":[]},{"level":3,"title":"putStringSet - method","slug":"putstringset-method","link":"#putstringset-method","children":[]},{"level":3,"title":"putBoolean - method","slug":"putboolean-method","link":"#putboolean-method","children":[]},{"level":3,"title":"putInt - method","slug":"putint-method","link":"#putint-method","children":[]},{"level":3,"title":"putLong - method","slug":"putlong-method","link":"#putlong-method","children":[]},{"level":3,"title":"putFloat - method","slug":"putfloat-method","link":"#putfloat-method","children":[]},{"level":3,"title":"put - method","slug":"put-method","link":"#put-method","children":[]},{"level":3,"title":"commit - method","slug":"commit-method","link":"#commit-method","children":[]},{"level":3,"title":"apply - method","slug":"apply-method","link":"#apply-method","children":[]}]}],"git":{"updatedTime":1682002135000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.md"}');export{e as data};
    diff --git a/docs/assets/YukiHookPrefsBridge.html.cb065dd5.js b/docs/assets/YukiHookPrefsBridge.html.9b0fbd99.js
    similarity index 90%
    rename from docs/assets/YukiHookPrefsBridge.html.cb065dd5.js
    rename to docs/assets/YukiHookPrefsBridge.html.9b0fbd99.js
    index 64d80ae41..757e89788 100644
    --- a/docs/assets/YukiHookPrefsBridge.html.cb065dd5.js
    +++ b/docs/assets/YukiHookPrefsBridge.html.9b0fbd99.js
    @@ -1,5 +1,5 @@
    -import{_ as p,r as l,o as c,c as t,b as o,d as a,a as n,e as s}from"./app.c86510cc.js";const r={},d=n(`

    YukiHookPrefsBridge - class

    class YukiHookPrefsBridge private constructor(private var context: Context?)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4FEE\u6539

    YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u5BF9 SharedPreferences\u3001XSharedPreferences \u7684\u6269\u5C55\u5B58\u50A8\u6865\u5B9E\u73B0\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    \u7279\u522B\u6CE8\u610F

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u524D\u5171\u4EAB\u6570\u636E\u5B58\u50A8\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

    `,11),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},h=s("New XSharedPreferences"),A=s("\u3002"),g=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),B=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),u=s("\u592A\u6781\u8BF7\u53C2\u9605 "),D={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"},F=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),C=s("\u3002"),k=n("

    \u5BF9\u4E8E\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 PreferenceFragmentCompat\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86 ModulePreferenceFragment \u6765\u5B9E\u73B0\u540C\u6837\u7684\u529F\u80FD\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

    ",3),m=s("\u8BE6\u89C1 "),b={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},v=s("New XSharedPreferences"),f=s("\u3002"),x=n(`

    \u793A\u4F8B\u5982\u4E0B

    <meta-data
    +import{_ as p,r as l,o as c,c as t,b as o,d as a,a as n,e as s}from"./app.f643a53b.js";const r={},d=n(`

    YukiHookPrefsBridge - class

    class YukiHookPrefsBridge private constructor(private var context: Context?)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4FEE\u6539

    YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u5BF9 SharedPreferences\u3001XSharedPreferences \u7684\u6269\u5C55\u5B58\u50A8\u6865\u5B9E\u73B0\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    \u7279\u522B\u6CE8\u610F

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u524D\u5171\u4EAB\u6570\u636E\u5B58\u50A8\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

    `,11),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},h=s("New XSharedPreferences"),g=s("\u3002"),A=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),B=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),u=s("\u592A\u6781\u8BF7\u53C2\u9605 "),D={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"},F=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),C=s("\u3002"),k=n("

    \u5BF9\u4E8E\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 PreferenceFragmentCompat\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86 ModulePreferenceFragment \u6765\u5B9E\u73B0\u540C\u6837\u7684\u529F\u80FD\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

    ",3),m=s("\u8BE6\u89C1 "),b={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},v=s("New XSharedPreferences"),f=s("\u3002"),x=n(`

    \u793A\u4F8B\u5982\u4E0B

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
     

    isXSharePrefsReadable - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.90 \u65B0\u589E

    v1.1.5 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 isPreferencesAvailable

    isRunInNewXShareMode - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.78 \u65B0\u589E

    v1.1.5 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 isPreferencesAvailable

    isPreferencesAvailable - field

    val isPreferencesAvailable: Boolean
    @@ -18,10 +18,10 @@ import{_ as p,r as l,o as c,c as t,b as o,d as a,a as n,e as s}from"./app.c86510
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5224\u65AD\u5F53\u524D\u662F\u5426\u5305\u542B key \u952E\u503C\u7684\u6570\u636E\u3002

    \u667A\u80FD\u8BC6\u522B\u5BF9\u5E94\u73AF\u5883\u8BFB\u53D6\u952E\u503C\u6570\u636E\u3002

    all - method

    fun all(): HashMap<String, Any?>
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.77 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5168\u90E8\u5B58\u50A8\u7684\u952E\u503C\u6570\u636E\u3002

    \u667A\u80FD\u8BC6\u522B\u5BF9\u5E94\u73AF\u5883\u8BFB\u53D6\u952E\u503C\u6570\u636E\u3002

    \u7279\u522B\u6CE8\u610F

    \u6BCF\u6B21\u8C03\u7528\u90FD\u4F1A\u83B7\u53D6\u5B9E\u65F6\u7684\u6570\u636E\uFF0C\u4E0D\u53D7\u7F13\u5B58\u63A7\u5236\uFF0C\u8BF7\u52FF\u5728\u9AD8\u5E76\u53D1\u573A\u666F\u4E2D\u4F7F\u7528\u3002

    remove - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    clear - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.77 \u65B0\u589E

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putString - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putStringSet - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.77 \u65B0\u589E

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putBoolean - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putInt - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putLong - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putFloat - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    get - method

    inline fun <reified T> get(prefs: PrefsData<T>, value: T): T
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.67 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u667A\u80FD\u83B7\u53D6\u6307\u5B9A\u7C7B\u578B\u7684\u952E\u503C\u3002

    put - method

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.67 \u65B0\u589E

    v1.1.9 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    edit - method

    fun edit(): Editor
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u81EA\u52A8\u8C03\u7528 Editor.apply \u65B9\u6CD5\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    clearCache - method

    fun clearCache()
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.5 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6E05\u9664 XSharedPreferences \u4E2D\u7F13\u5B58\u7684\u952E\u503C\u6570\u636E\u3002

    \u65E0\u8BBA\u662F\u5426\u5F00\u542F YukiHookAPI.Configs.isEnablePrefsBridgeCache\u3002

    \u8C03\u7528\u6B64\u65B9\u6CD5\u5C06\u6E05\u9664\u5F53\u524D\u5B58\u50A8\u7684\u5168\u90E8\u952E\u503C\u7F13\u5B58\u3002

    \u4E0B\u6B21\u5C06\u4ECE XSharedPreferences \u91CD\u65B0\u8BFB\u53D6\u3002

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

    Editor - class

    inner class Editor internal constructor()
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    YukiHookPrefsBridge \u7684\u5B58\u50A8\u4EE3\u7406\u7C7B\u3002

    \u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u83B7\u53D6 Editor\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    remove - method

    fun remove(key: String): Editor
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u81EA\u52A8\u8C03\u7528 Editor.apply \u65B9\u6CD5\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    clearCache - method

    fun clearCache()
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.5 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6E05\u9664 YukiHookPrefsBridge \u4E2D\u7F13\u5B58\u7684\u952E\u503C\u6570\u636E\u3002

    \u65E0\u8BBA\u662F\u5426\u5F00\u542F YukiHookAPI.Configs.isEnablePrefsBridgeCache\u3002

    \u8C03\u7528\u6B64\u65B9\u6CD5\u5C06\u6E05\u9664\u5F53\u524D\u5B58\u50A8\u7684\u5168\u90E8\u952E\u503C\u7F13\u5B58\u3002

    Editor - class

    inner class Editor internal constructor()
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    YukiHookPrefsBridge \u7684\u5B58\u50A8\u4EE3\u7406\u7C7B\u3002

    \u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u83B7\u53D6 Editor\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    \u6CE8\u610F

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    remove - method

    fun remove(key: String): Editor
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u79FB\u9664\u5168\u90E8\u5305\u542B key \u7684\u5B58\u50A8\u6570\u636E\u3002

    remove - method

    inline fun <reified T> remove(prefs: PrefsData<T>): Editor
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u79FB\u9664 PrefsData.key \u7684\u5B58\u50A8\u6570\u636E\u3002

    clear - method

    fun clear(): Editor
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u79FB\u9664\u5168\u90E8\u5B58\u50A8\u6570\u636E\u3002

    putString - method

    fun putString(key: String, value: String): Editor
    @@ -33,4 +33,4 @@ import{_ as p,r as l,o as c,c as t,b as o,d as a,a as n,e as s}from"./app.c86510
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5B58\u50A8 Float \u952E\u503C\u3002

    put - method

    inline fun <reified T> put(prefs: PrefsData<T>, value: T): Editor
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u667A\u80FD\u5B58\u50A8\u6307\u5B9A\u7C7B\u578B\u7684\u952E\u503C\u3002

    commit - method

    fun commit(): Boolean
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u63D0\u4EA4\u66F4\u6539 (\u540C\u6B65)\u3002

    apply - method

    fun apply()
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u63D0\u4EA4\u66F4\u6539 (\u5F02\u6B65)\u3002

    `,254);function q(S,_){const e=l("ExternalLinkIcon");return c(),t("div",null,[d,o("p",null,[i,o("a",y,[h,a(e)]),A]),g,B,o("p",null,[u,o("a",D,[F,a(e)]),C]),k,o("p",null,[m,o("a",b,[v,a(e)]),f]),x])}const E=p(r,[["render",q],["__file","YukiHookPrefsBridge.html.vue"]]);export{E as default}; +

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.9 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u63D0\u4EA4\u66F4\u6539 (\u5F02\u6B65)\u3002

    `,255);function q(S,_){const e=l("ExternalLinkIcon");return c(),t("div",null,[d,o("p",null,[i,o("a",y,[h,a(e)]),g]),A,B,o("p",null,[u,o("a",D,[F,a(e)]),C]),k,o("p",null,[m,o("a",b,[v,a(e)]),f]),x])}const E=p(r,[["render",q],["__file","YukiHookPrefsBridge.html.vue"]]);export{E as default}; diff --git a/docs/assets/YukiHookPrefsBridge.html.fc4f5aa2.js b/docs/assets/YukiHookPrefsBridge.html.9cd83fdb.js similarity index 88% rename from docs/assets/YukiHookPrefsBridge.html.fc4f5aa2.js rename to docs/assets/YukiHookPrefsBridge.html.9cd83fdb.js index 0744aefb1..355486dc0 100644 --- a/docs/assets/YukiHookPrefsBridge.html.fc4f5aa2.js +++ b/docs/assets/YukiHookPrefsBridge.html.9cd83fdb.js @@ -1,5 +1,5 @@ -import{_ as p,r as l,o as t,c,b as e,d as a,a as n,e as s}from"./app.c86510cc.js";const r={},d=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.

    YukiHookPrefsBridge - class

    class YukiHookPrefsBridge private constructor(private var context: Context?)
    -

    Change Records

    v1.0 first

    v1.1.9 modified

    YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge

    Function Illustrate

    YukiHookAPI \u5BF9 SharedPreferences\u3001XSharedPreferences \u7684\u6269\u5C55\u5B58\u50A8\u6865\u5B9E\u73B0\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    Pay Attention

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u524D\u5171\u4EAB\u6570\u636E\u5B58\u50A8\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

    `,12),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},h=s("New XSharedPreferences"),g=s("\u3002"),u=e("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 "),e("a",{href:"../../../YukiHookAPI#isenablehooksharedpreferences-field"},"isEnableHookSharedPreferences"),s("\u3002")],-1),A=e("p",null,[s("\u672A\u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5C06\u4F60\u7684\u6A21\u5757 "),e("code",null,"API"),s(" \u964D\u81F3 "),e("code",null,"26"),s(" \u4EE5\u4E0B\uFF0C"),e("code",null,"YukiHookAPI"),s(" \u5C06\u4F1A\u5C1D\u8BD5\u4F7F\u7528 "),e("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"},C=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),D=s("\u3002"),k=n("

    \u5BF9\u4E8E\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 PreferenceFragmentCompat\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86 ModulePreferenceFragment \u6765\u5B9E\u73B0\u540C\u6837\u7684\u529F\u80FD\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

    ",3),m=s("\u8BE6\u89C1 "),b={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},v=s("New XSharedPreferences"),f=s("\u3002"),x=n(`

    The following example

    <meta-data
    +import{_ as p,r as l,o as t,c,b as o,d as a,a as n,e as s}from"./app.f643a53b.js";const r={},d=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.

    YukiHookPrefsBridge - class

    class YukiHookPrefsBridge private constructor(private var context: Context?)
    +

    Change Records

    v1.0 first

    v1.1.9 modified

    YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge

    Function Illustrate

    YukiHookAPI \u5BF9 SharedPreferences\u3001XSharedPreferences \u7684\u6269\u5C55\u5B58\u50A8\u6865\u5B9E\u73B0\u3002

    \u5728\u4E0D\u540C\u73AF\u5883\u667A\u80FD\u9009\u62E9\u5B58\u53D6\u4F7F\u7528\u7684\u5BF9\u8C61\u3002

    Pay Attention

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u524D\u5171\u4EAB\u6570\u636E\u5B58\u50A8\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

    `,12),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},h=s("New XSharedPreferences"),g=s("\u3002"),u=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),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"},C=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),D=s("\u3002"),k=n("

    \u5BF9\u4E8E\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 PreferenceFragmentCompat\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86 ModulePreferenceFragment \u6765\u5B9E\u73B0\u540C\u6837\u7684\u529F\u80FD\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

    ",3),m=s("\u8BE6\u89C1 "),b={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},v=s("New XSharedPreferences"),f=s("\u3002"),x=n(`

    The following example

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
     

    isXSharePrefsReadable - field

    Change Records

    v1.0.90 added

    v1.1.5 deprecated

    \u8BF7\u8F6C\u79FB\u5230 isPreferencesAvailable

    isRunInNewXShareMode - field

    Change Records

    v1.0.78 added

    v1.1.5 deprecated

    \u8BF7\u8F6C\u79FB\u5230 isPreferencesAvailable

    isPreferencesAvailable - field

    val isPreferencesAvailable: Boolean
    @@ -18,10 +18,10 @@ import{_ as p,r as l,o as t,c,b as e,d as a,a as n,e as s}from"./app.c86510cc.js
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u5224\u65AD\u5F53\u524D\u662F\u5426\u5305\u542B key \u952E\u503C\u7684\u6570\u636E\u3002

    \u667A\u80FD\u8BC6\u522B\u5BF9\u5E94\u73AF\u5883\u8BFB\u53D6\u952E\u503C\u6570\u636E\u3002

    all - method

    fun all(): HashMap<String, Any?>
     

    Change Records

    v1.0.77 added

    Function Illustrate

    \u83B7\u53D6\u5168\u90E8\u5B58\u50A8\u7684\u952E\u503C\u6570\u636E\u3002

    \u667A\u80FD\u8BC6\u522B\u5BF9\u5E94\u73AF\u5883\u8BFB\u53D6\u952E\u503C\u6570\u636E\u3002

    Pay Attention

    \u6BCF\u6B21\u8C03\u7528\u90FD\u4F1A\u83B7\u53D6\u5B9E\u65F6\u7684\u6570\u636E\uFF0C\u4E0D\u53D7\u7F13\u5B58\u63A7\u5236\uFF0C\u8BF7\u52FF\u5728\u9AD8\u5E76\u53D1\u573A\u666F\u4E2D\u4F7F\u7528\u3002

    remove - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    clear - method

    Change Records

    v1.0.77 added

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putString - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putStringSet - method

    Change Records

    v1.0.77 added

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putBoolean - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putInt - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putLong - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    putFloat - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    get - method

    inline fun <reified T> get(prefs: PrefsData<T>, value: T): T
     

    Change Records

    v1.0.67 added

    Function Illustrate

    \u667A\u80FD\u83B7\u53D6\u6307\u5B9A\u7C7B\u578B\u7684\u952E\u503C\u3002

    put - method

    Change Records

    v1.0.67 added

    v1.1.9 deprecated

    \u8BF7\u8F6C\u79FB\u5230 edit \u65B9\u6CD5

    edit - method

    fun edit(): Editor
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u81EA\u52A8\u8C03\u7528 Editor.apply \u65B9\u6CD5\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    clearCache - method

    fun clearCache()
    -

    Change Records

    v1.0.5 added

    Function Illustrate

    \u6E05\u9664 XSharedPreferences \u4E2D\u7F13\u5B58\u7684\u952E\u503C\u6570\u636E\u3002

    \u65E0\u8BBA\u662F\u5426\u5F00\u542F YukiHookAPI.Configs.isEnablePrefsBridgeCache\u3002

    \u8C03\u7528\u6B64\u65B9\u6CD5\u5C06\u6E05\u9664\u5F53\u524D\u5B58\u50A8\u7684\u5168\u90E8\u952E\u503C\u7F13\u5B58\u3002

    \u4E0B\u6B21\u5C06\u4ECE XSharedPreferences \u91CD\u65B0\u8BFB\u53D6\u3002

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

    Editor - class

    inner class Editor internal constructor()
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    YukiHookPrefsBridge \u7684\u5B58\u50A8\u4EE3\u7406\u7C7B\u3002

    \u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u83B7\u53D6 Editor\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    remove - method

    fun remove(key: String): Editor
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    \u521B\u5EFA\u65B0\u7684 Editor\u3002

    \u81EA\u52A8\u8C03\u7528 Editor.apply \u65B9\u6CD5\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    clearCache - method

    fun clearCache()
    +

    Change Records

    v1.0.5 added

    Function Illustrate

    \u6E05\u9664 YukiHookPrefsBridge \u4E2D\u7F13\u5B58\u7684\u952E\u503C\u6570\u636E\u3002

    \u65E0\u8BBA\u662F\u5426\u5F00\u542F YukiHookAPI.Configs.isEnablePrefsBridgeCache\u3002

    \u8C03\u7528\u6B64\u65B9\u6CD5\u5C06\u6E05\u9664\u5F53\u524D\u5B58\u50A8\u7684\u5168\u90E8\u952E\u503C\u7F13\u5B58\u3002

    Editor - class

    inner class Editor internal constructor()
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    YukiHookPrefsBridge \u7684\u5B58\u50A8\u4EE3\u7406\u7C7B\u3002

    \u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u83B7\u53D6 Editor\u3002

    \u5728\u6A21\u5757\u73AF\u5883\u4E2D\u6216\u542F\u7528\u4E86 isUsingNativeStorage \u540E\u4F7F\u7528\u3002

    Notice

    \u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E0B\u53EA\u8BFB\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002

    remove - method

    fun remove(key: String): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u79FB\u9664\u5168\u90E8\u5305\u542B key \u7684\u5B58\u50A8\u6570\u636E\u3002

    remove - method

    inline fun <reified T> remove(prefs: PrefsData<T>): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u79FB\u9664 PrefsData.key \u7684\u5B58\u50A8\u6570\u636E\u3002

    clear - method

    fun clear(): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u79FB\u9664\u5168\u90E8\u5B58\u50A8\u6570\u636E\u3002

    putString - method

    fun putString(key: String, value: String): Editor
    @@ -33,4 +33,4 @@ import{_ as p,r as l,o as t,c,b as e,d as a,a as n,e as s}from"./app.c86510cc.js
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u5B58\u50A8 Float \u952E\u503C\u3002

    put - method

    inline fun <reified T> put(prefs: PrefsData<T>, value: T): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u667A\u80FD\u5B58\u50A8\u6307\u5B9A\u7C7B\u578B\u7684\u952E\u503C\u3002

    commit - method

    fun commit(): Boolean
     

    Change Records

    v1.1.9 added

    Function Illustrate

    \u63D0\u4EA4\u66F4\u6539 (\u540C\u6B65)\u3002

    apply - method

    fun apply()
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    \u63D0\u4EA4\u66F4\u6539 (\u5F02\u6B65)\u3002

    `,254);function q(S,P){const o=l("ExternalLinkIcon");return t(),c("div",null,[d,e("p",null,[i,e("a",y,[h,a(o)]),g]),u,A,e("p",null,[B,e("a",F,[C,a(o)]),D]),k,e("p",null,[m,e("a",b,[v,a(o)]),f]),x])}const I=p(r,[["render",q],["__file","YukiHookPrefsBridge.html.vue"]]);export{I as default}; +

    Change Records

    v1.1.9 added

    Function Illustrate

    \u63D0\u4EA4\u66F4\u6539 (\u5F02\u6B65)\u3002

    `,255);function q(S,P){const e=l("ExternalLinkIcon");return t(),c("div",null,[d,o("p",null,[i,o("a",y,[h,a(e)]),g]),u,A,o("p",null,[B,o("a",F,[C,a(e)]),D]),k,o("p",null,[m,o("a",b,[v,a(e)]),f]),x])}const I=p(r,[["render",q],["__file","YukiHookPrefsBridge.html.vue"]]);export{I as default}; diff --git a/docs/assets/YukiHookPrefsBridge.html.95e12ab8.js b/docs/assets/YukiHookPrefsBridge.html.b7eccf96.js similarity index 94% rename from docs/assets/YukiHookPrefsBridge.html.95e12ab8.js rename to docs/assets/YukiHookPrefsBridge.html.b7eccf96.js index e248f6de3..7dbb3748d 100644 --- a/docs/assets/YukiHookPrefsBridge.html.95e12ab8.js +++ b/docs/assets/YukiHookPrefsBridge.html.b7eccf96.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-395d721c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html","title":"YukiHookPrefsBridge - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"native - method","slug":"native-method","link":"#native-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":"contains - method","slug":"contains-method","link":"#contains-method","children":[]},{"level":2,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method","link":"#edit-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method-1","link":"#edit-method-1","children":[]},{"level":2,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]},{"level":2,"title":"Editor - class","slug":"editor-class","link":"#editor-class","children":[{"level":3,"title":"remove - method","slug":"remove-method","link":"#remove-method","children":[]},{"level":3,"title":"remove - method","slug":"remove-method-1","link":"#remove-method-1","children":[]},{"level":3,"title":"clear - method","slug":"clear-method","link":"#clear-method","children":[]},{"level":3,"title":"putString - method","slug":"putstring-method","link":"#putstring-method","children":[]},{"level":3,"title":"putStringSet - method","slug":"putstringset-method","link":"#putstringset-method","children":[]},{"level":3,"title":"putBoolean - method","slug":"putboolean-method","link":"#putboolean-method","children":[]},{"level":3,"title":"putInt - method","slug":"putint-method","link":"#putint-method","children":[]},{"level":3,"title":"putLong - method","slug":"putlong-method","link":"#putlong-method","children":[]},{"level":3,"title":"putFloat - method","slug":"putfloat-method","link":"#putfloat-method","children":[]},{"level":3,"title":"put - method","slug":"put-method","link":"#put-method","children":[]},{"level":3,"title":"commit - method","slug":"commit-method","link":"#commit-method","children":[]},{"level":3,"title":"apply - method","slug":"apply-method","link":"#apply-method","children":[]}]}],"git":{"updatedTime":1681673705000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-395d721c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html","title":"YukiHookPrefsBridge - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"native - method","slug":"native-method","link":"#native-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":"contains - method","slug":"contains-method","link":"#contains-method","children":[]},{"level":2,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method","link":"#edit-method","children":[]},{"level":2,"title":"edit - method","slug":"edit-method-1","link":"#edit-method-1","children":[]},{"level":2,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]},{"level":2,"title":"Editor - class","slug":"editor-class","link":"#editor-class","children":[{"level":3,"title":"remove - method","slug":"remove-method","link":"#remove-method","children":[]},{"level":3,"title":"remove - method","slug":"remove-method-1","link":"#remove-method-1","children":[]},{"level":3,"title":"clear - method","slug":"clear-method","link":"#clear-method","children":[]},{"level":3,"title":"putString - method","slug":"putstring-method","link":"#putstring-method","children":[]},{"level":3,"title":"putStringSet - method","slug":"putstringset-method","link":"#putstringset-method","children":[]},{"level":3,"title":"putBoolean - method","slug":"putboolean-method","link":"#putboolean-method","children":[]},{"level":3,"title":"putInt - method","slug":"putint-method","link":"#putint-method","children":[]},{"level":3,"title":"putLong - method","slug":"putlong-method","link":"#putlong-method","children":[]},{"level":3,"title":"putFloat - method","slug":"putfloat-method","link":"#putfloat-method","children":[]},{"level":3,"title":"put - method","slug":"put-method","link":"#put-method","children":[]},{"level":3,"title":"commit - method","slug":"commit-method","link":"#commit-method","children":[]},{"level":3,"title":"apply - method","slug":"apply-method","link":"#apply-method","children":[]}]}],"git":{"updatedTime":1682002135000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.md"}');export{e as data}; diff --git a/docs/assets/YukiMemberHookCreator.html.1bbce5c5.js b/docs/assets/YukiMemberHookCreator.html.64b92517.js similarity index 99% rename from docs/assets/YukiMemberHookCreator.html.1bbce5c5.js rename to docs/assets/YukiMemberHookCreator.html.64b92517.js index 6e241c1f4..843804bbf 100644 --- a/docs/assets/YukiMemberHookCreator.html.1bbce5c5.js +++ b/docs/assets/YukiMemberHookCreator.html.64b92517.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as n,a as e}from"./app.c86510cc.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.f643a53b.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/YukiMemberHookCreator.html.e0bb95bd.js b/docs/assets/YukiMemberHookCreator.html.dcafc114.js
    similarity index 99%
    rename from docs/assets/YukiMemberHookCreator.html.e0bb95bd.js
    rename to docs/assets/YukiMemberHookCreator.html.dcafc114.js
    index d81dd0cbf..5a9d6f09c 100644
    --- a/docs/assets/YukiMemberHookCreator.html.e0bb95bd.js
    +++ b/docs/assets/YukiMemberHookCreator.html.dcafc114.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as n,a as e}from"./app.c86510cc.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.f643a53b.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/YukiModuleResources.html.8eb97354.js b/docs/assets/YukiModuleResources.html.87630916.js
    similarity index 97%
    rename from docs/assets/YukiModuleResources.html.8eb97354.js
    rename to docs/assets/YukiModuleResources.html.87630916.js
    index 47b2a0589..aa135601a 100644
    --- a/docs/assets/YukiModuleResources.html.8eb97354.js
    +++ b/docs/assets/YukiModuleResources.html.87630916.js
    @@ -1,3 +1,3 @@
    -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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.d45d6e50.js b/docs/assets/YukiModuleResources.html.a9d8c169.js similarity index 97% rename from docs/assets/YukiModuleResources.html.d45d6e50.js rename to docs/assets/YukiModuleResources.html.a9d8c169.js index 542cbadd6..869715058 100644 --- a/docs/assets/YukiModuleResources.html.d45d6e50.js +++ b/docs/assets/YukiModuleResources.html.a9d8c169.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.c86510cc.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.f643a53b.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.dac358dc.js b/docs/assets/YukiResForwarder.html.617cc8ab.js similarity index 98% rename from docs/assets/YukiResForwarder.html.dac358dc.js rename to docs/assets/YukiResForwarder.html.617cc8ab.js index 3a6477b25..eb870ddd4 100644 --- a/docs/assets/YukiResForwarder.html.dac358dc.js +++ b/docs/assets/YukiResForwarder.html.617cc8ab.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/YukiResForwarder.html.6d194458.js b/docs/assets/YukiResForwarder.html.bf4abc16.js similarity index 98% rename from docs/assets/YukiResForwarder.html.6d194458.js rename to docs/assets/YukiResForwarder.html.bf4abc16.js index 7dde8e255..83f363998 100644 --- a/docs/assets/YukiResForwarder.html.6d194458.js +++ b/docs/assets/YukiResForwarder.html.bf4abc16.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/YukiResources.html.75739b02.js b/docs/assets/YukiResources.html.28e3d21e.js similarity index 99% rename from docs/assets/YukiResources.html.75739b02.js rename to docs/assets/YukiResources.html.28e3d21e.js index e9629cebe..3e70445e8 100644 --- a/docs/assets/YukiResources.html.75739b02.js +++ b/docs/assets/YukiResources.html.28e3d21e.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a as o}from"./app.c86510cc.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.f643a53b.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/YukiResources.html.bf1dc9d0.js b/docs/assets/YukiResources.html.a2c69983.js
    similarity index 99%
    rename from docs/assets/YukiResources.html.bf1dc9d0.js
    rename to docs/assets/YukiResources.html.a2c69983.js
    index b5424f9f7..7e608e232 100644
    --- a/docs/assets/YukiResources.html.bf1dc9d0.js
    +++ b/docs/assets/YukiResources.html.a2c69983.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.c86510cc.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.f643a53b.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/YukiResourcesHookCreator.html.f1969bf5.js b/docs/assets/YukiResourcesHookCreator.html.e7b6eee3.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.f1969bf5.js
    rename to docs/assets/YukiResourcesHookCreator.html.e7b6eee3.js
    index fdfbf4ad7..942d3a882 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.f1969bf5.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.e7b6eee3.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.c86510cc.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.f643a53b.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.691c59e6.js b/docs/assets/YukiResourcesHookCreator.html.f4cba156.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.691c59e6.js
    rename to docs/assets/YukiResourcesHookCreator.html.f4cba156.js
    index dd9ef527e..f43c85b4a 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.691c59e6.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.f4cba156.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as o}from"./app.c86510cc.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.f643a53b.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.2da31d77.js b/docs/assets/YukiXposedEvent.html.8e539d31.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.2da31d77.js
    rename to docs/assets/YukiXposedEvent.html.8e539d31.js
    index fa1f18345..fba841c43 100644
    --- a/docs/assets/YukiXposedEvent.html.2da31d77.js
    +++ b/docs/assets/YukiXposedEvent.html.8e539d31.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.c86510cc.js";const n={},l=e(`

    YukiXposedEvent - object

    object YukiXposedEvent
    +import{_ as s,o,c as a,a as e}from"./app.f643a53b.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/YukiXposedEvent.html.9c12b2ea.js b/docs/assets/YukiXposedEvent.html.df166d1b.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.9c12b2ea.js
    rename to docs/assets/YukiXposedEvent.html.df166d1b.js
    index 84866cd0f..2796ddbdc 100644
    --- a/docs/assets/YukiXposedEvent.html.9c12b2ea.js
    +++ b/docs/assets/YukiXposedEvent.html.df166d1b.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/about.html.279e55a7.js b/docs/assets/about.html.6402a0ad.js
    similarity index 98%
    rename from docs/assets/about.html.279e55a7.js
    rename to docs/assets/about.html.6402a0ad.js
    index f2911b962..2ec735435 100644
    --- a/docs/assets/about.html.279e55a7.js
    +++ b/docs/assets/about.html.6402a0ad.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.c86510cc.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.f643a53b.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/about.html.60b9db91.js b/docs/assets/about.html.8c21376b.js
    similarity index 98%
    rename from docs/assets/about.html.60b9db91.js
    rename to docs/assets/about.html.8c21376b.js
    index bfc086ee9..ee81969bf 100644
    --- a/docs/assets/about.html.60b9db91.js
    +++ b/docs/assets/about.html.8c21376b.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.c86510cc.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.f643a53b.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/api-example.html.767640de.js b/docs/assets/api-example.html.671d41e0.js
    similarity index 99%
    rename from docs/assets/api-example.html.767640de.js
    rename to docs/assets/api-example.html.671d41e0.js
    index ed7816611..d7a820550 100644
    --- a/docs/assets/api-example.html.767640de.js
    +++ b/docs/assets/api-example.html.671d41e0.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as e}from"./app.c86510cc.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.f643a53b.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") {
    diff --git a/docs/assets/api-example.html.5d3130b5.js b/docs/assets/api-example.html.c1738f94.js
    similarity index 99%
    rename from docs/assets/api-example.html.5d3130b5.js
    rename to docs/assets/api-example.html.c1738f94.js
    index 555aa5571..7d7a0df79 100644
    --- a/docs/assets/api-example.html.5d3130b5.js
    +++ b/docs/assets/api-example.html.c1738f94.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.c86510cc.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.f643a53b.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") {
    diff --git a/docs/assets/api-exception.html.b918ef70.js b/docs/assets/api-exception.html.95d64baf.js
    similarity index 99%
    rename from docs/assets/api-exception.html.b918ef70.js
    rename to docs/assets/api-exception.html.95d64baf.js
    index 3ea143725..84fe7a45a 100644
    --- a/docs/assets/api-exception.html.b918ef70.js
    +++ b/docs/assets/api-exception.html.95d64baf.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as n,a as o}from"./app.c86510cc.js";const a={},l=o(`

    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 as o}from"./app.f643a53b.js";const a={},l=o(`

    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
    diff --git a/docs/assets/api-exception.html.55534c02.js b/docs/assets/api-exception.html.dd408217.js
    similarity index 99%
    rename from docs/assets/api-exception.html.55534c02.js
    rename to docs/assets/api-exception.html.dd408217.js
    index 96ed3bfa6..588a45fea 100644
    --- a/docs/assets/api-exception.html.55534c02.js
    +++ b/docs/assets/api-exception.html.dd408217.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.c86510cc.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.f643a53b.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
    diff --git a/docs/assets/api-using.html.85f93d1d.js b/docs/assets/api-using.html.75d4a0ea.js
    similarity index 99%
    rename from docs/assets/api-using.html.85f93d1d.js
    rename to docs/assets/api-using.html.75d4a0ea.js
    index 667b8cdde..247b4a460 100644
    --- a/docs/assets/api-using.html.85f93d1d.js
    +++ b/docs/assets/api-using.html.75d4a0ea.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.c86510cc.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.f643a53b.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.7ac3e388.js b/docs/assets/api-using.html.ca9326ea.js
    similarity index 99%
    rename from docs/assets/api-using.html.7ac3e388.js
    rename to docs/assets/api-using.html.ca9326ea.js
    index e21519534..9eb6fcf2a 100644
    --- a/docs/assets/api-using.html.7ac3e388.js
    +++ b/docs/assets/api-using.html.ca9326ea.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.c86510cc.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.f643a53b.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.c86510cc.js b/docs/assets/app.c86510cc.js
    deleted file mode 100644
    index ceaa7409d..000000000
    --- a/docs/assets/app.c86510cc.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.b581aa91.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.290989e8.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.bb6da37d.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.d9d91363.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.ba1743d2.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.09de8b71.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.97f338ca.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.3e784ab5.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.b279975a.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.73248b21.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.667f5444.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.bf02518e.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.850b6810.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.d35b34eb.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.bf4a811f.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.eb335976.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.5dd91d68.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.909201c9.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.edb07f76.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.45822706.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-36aec5ad":()=>d(()=>import("./LoggerFactory.html.52af0d44.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.61e05f29.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.cf48302c.js"),[]).then(({data:e})=>e),"v-30f3ba1e":()=>d(()=>import("./InjectYukiHookWithXposed.html.cf9b500d.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.d2d3ba9a.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.0143ac70.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.d78fe330.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.6555413e.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.ae54c997.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.9db30e67.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.83d09a1a.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.2123b109.js"),[]).then(({data:e})=>e),"v-65c20d2d":()=>d(()=>import("./YukiHookPrefsBridge.html.57963641.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.98825c67.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.cb6ff63d.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.87f19810.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.07a0f5f6.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.57f1d79e.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bd3fae8e.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.a2b13a44.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.5c25c0fb.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.c8a74f24.js"),[]).then(({data:e})=>e),"v-395d721c":()=>d(()=>import("./YukiHookPrefsBridge.html.95e12ab8.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.282236a6.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.ce7337a4.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.9a97f14f.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.34c51103.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.8e38ad6f.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.30e6d2df.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.9be50874.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.343169a5.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.e986a067.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-f150b17c":()=>d(()=>import("./ExecutorType.html.7e3dd355.js"),[]).then(({data:e})=>e),"v-2728e033":()=>d(()=>import("./ExecutorType.html.3e98ffe1.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.34ee16d6.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 Hs={get:Eo(!1,!1)},Ms={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,Hs,Ca)}function $s(e){return Ro(e,!1,Is,Ms,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 Bs(e,t)}class Bs{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 Ys={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,Ys)}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 Ha(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){Ha(e,El,Rl,il)}function Zs(e){Ha(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 Ma(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 Me(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 M=o||i;E=ot(h.call(M,M,p,n,g,m,x)),k=s}else{const M=t;E=ot(M.length>1?M(n,{attrs:s,slots:r,emit:c}):M(n,null)),k=t.props?s:tc(s)}}catch(M){Tl.length=0,Nl(M,e,1),E=oe(Ge)}let L=E;if(k&&P!==!1){const M=Object.keys(k),{shapeFlag:U}=L;M.length&&U&7&&(a&&M.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 He(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=()=>Ye(x,r&&r.suspense):P=()=>Js(x);const E=new _o(s,P);return t?l?x():g=E.run():o==="post"?Ye(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}),Bl(()=>{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=Ya(i,m);L[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=_})}return a}}},Ba=sc;function Ya(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),M=Ya(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const Y=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&Y():v.length<=1&&Y()},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 Y=M[L];Y&&Wt(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),U(q,[v])},enter(v){let q=s,Y=c,G=h;if(!l.isMounted)if(o)q=E||s,Y=k||c,G=_||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(Y,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const Y=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,M[Y]===e&&delete M[Y])};M[Y]=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()=>Hi(c,g);const x=_=>{s=null,Nl(_,g,13,!i)};if(a&&g.suspense||dl)return m().then(_=>()=>Hi(_,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 Hi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Hi(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"),Bl=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:M,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:Y,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=B({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(Bl,_),j(Li,M),j(mc,q),te(Y))if(Y.length){const le=e.exposed||(e.exposed={});Y.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=He(n.from||o,n.default,!0):a=He(n.from||o):a=He(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:Bt,emits:Bt,methods:Bt,computed:Bt,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:Bt,directives:Bt,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 Bt(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=Me((...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,Ye(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,M,U,ee=!1)=>{const w=Zl(k)&&k.data==="[",v=()=>P(k,_,L,M,U,w),{type:q,ref:Y,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,M,U,ee):F=v();break;default:if(G&1)S!==1||_.type.toLowerCase()!==k.tagName.toLowerCase()?F=v():F=m(k,_,L,M,U,ee);else if(G&6){_.slotScopeIds=U;const re=a(k);if(t(_,re,null,L,M,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?Ht(""):oe("div"),j.el=k,_.component.subTree=j}}else G&64?S!==8?F=v():F=_.type.hydrate(k,_,L,M,U,ee,e,g):G&128&&(F=_.type.hydrate(k,_,L,M,Jl(a(k)),U,ee,e,p))}return Y!=null&&ui(Y,null,M,_),F},m=(k,_,L,M,U,ee)=>{ee=ee||!!_.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:Y,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")},M),Y&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,_,k,L,M,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else Y&8&&k.textContent!==_.children&&(Et=!0,k.textContent=_.children)}return k.nextSibling},g=(k,_,L,M,U,ee,w)=>{w=w||!!_.dynamicChildren;const v=_.children,q=v.length;for(let Y=0;Y{const{slotScopeIds:w}=_;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),_,v,L,M,U,ee);return q&&Zl(q)&&q.data==="]"?n(_.anchor=q):(Et=!0,s(_.anchor=c("]"),v,q),q)},P=(k,_,L,M,U,ee)=>{if(Et=!0,_.el=null,ee){const q=E(k);for(;;){const Y=n(k);if(Y&&Y!==q)r(Y);else break}}const w=n(k),v=a(k);return r(k),l(null,_,v,w,L,M,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 Ye=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),Be(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)},M=({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):Y(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,H);"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)&&Ye(()=>{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,H)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in A)&&n(u,D,y[D],null,$,f.children,T,z,H);"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=Yc(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&&Ye(J,T),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Ye(()=>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&&Ye(pe,T),!Ee&&(Q=J&&J.onVnodeMounted)){const Le=f;Ye(()=>tt(Q,xe,Le),T)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Ye(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&&H(I,T,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,A,T,z,$,D,V):H(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?H(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;)Be(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,Yo=0;const kl=new Array(it);for(I=0;I=it){Be(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?Be(We,T,z,!0):(kl[ct-pe]=I+1,ct>=Yo?Yo=ct:el=!0,E(We,f[ct],y,null,T,z,$,D,V),Le++)}const Uo=el?Hc(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)},Be=(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)?H(I,f,y,!1,!0):(z===Pe&&K&384||!T&&Q&16)&&H(V,f,y),A&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Ye(()=>{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,Be($,u,f,y)),D&&Ye(D,f),Ye(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},H=(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&&Be(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Be,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 Mc=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 Hl=1;function pn(e){Hl+=e}function nr(e){return e.dynamicChildren=Hl>0?at||al:null,Sc(),Hl>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),Hl>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),Hl>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:Mc(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 Ht(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=[Ht(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 B=(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"],Mi={};function lh(e,t){const l=Mi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Mi[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",Yl=(e,{slots:t})=>he(Ba,kh(e),t);Yl.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};Yl.props=Se({},Ba.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:M,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()},Y=(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=()=>Y(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(M)||Cn(C,i,E,F))}),jt(M,[C,F])},onEnterCancelled(C){q(C,!1),jt(L,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){Y(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.13817901.js"),[])),"v-2d0a870d":b(()=>d(()=>import("./index.html.006afc0f.js"),[])),"v-c0c85b84":b(()=>d(()=>import("./index.html.47c30167.js"),[])),"v-7a15fe3b":b(()=>d(()=>import("./about.html.60b9db91.js"),[])),"v-3f851d14":b(()=>d(()=>import("./changelog.html.f383c772.js"),[])),"v-193cf592":b(()=>d(()=>import("./contacts.html.b298d308.js"),[])),"v-ae7b83f2":b(()=>d(()=>import("./future.html.aa965605.js"),[])),"v-64fc7bb8":b(()=>d(()=>import("./home.html.29b9ca31.js"),[])),"v-7b22efaf":b(()=>d(()=>import("./example.html.4d234fcd.js"),[])),"v-efb45d4c":b(()=>d(()=>import("./home.html.466c98f9.js"),[])),"v-277b35ca":b(()=>d(()=>import("./knowledge.html.b9236bb6.js"),[])),"v-77d752a2":b(()=>d(()=>import("./move-to-new-api.html.0d2e7326.js"),[])),"v-72889797":b(()=>d(()=>import("./quick-start.html.23ccbac4.js"),[])),"v-9cfea7fc":b(()=>d(()=>import("./api-example.html.767640de.js"),[])),"v-72c12b7d":b(()=>d(()=>import("./api-exception.html.b918ef70.js"),[])),"v-793879e8":b(()=>d(()=>import("./api-using.html.7ac3e388.js"),[])),"v-29d6c1ba":b(()=>d(()=>import("./r8-proguard.html.b3b0b91a.js"),[])),"v-24e71de7":b(()=>d(()=>import("./xposed-using.html.e11454bf.js"),[])),"v-55c11626":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.f8d00361.js"),[])),"v-41967128":b(()=>d(()=>import("./about.html.279e55a7.js"),[])),"v-0e6c3476":b(()=>d(()=>import("./changelog.html.404c5ab3.js"),[])),"v-6cf86266":b(()=>d(()=>import("./contacts.html.9cfe0a74.js"),[])),"v-3106ca14":b(()=>d(()=>import("./future.html.2ead2d85.js"),[])),"v-c8deafb2":b(()=>d(()=>import("./home.html.4cff2251.js"),[])),"v-c6114c9e":b(()=>d(()=>import("./api-example.html.5d3130b5.js"),[])),"v-5b43296c":b(()=>d(()=>import("./api-exception.html.55534c02.js"),[])),"v-2ee67152":b(()=>d(()=>import("./api-using.html.85f93d1d.js"),[])),"v-154d6f69":b(()=>d(()=>import("./r8-proguard.html.bc46ee22.js"),[])),"v-af73b3d0":b(()=>d(()=>import("./xposed-using.html.70b2312d.js"),[])),"v-13b430a0":b(()=>d(()=>import("./example.html.ab78e7c6.js"),[])),"v-6a609e09":b(()=>d(()=>import("./home.html.b0099991.js"),[])),"v-b4f1a468":b(()=>d(()=>import("./knowledge.html.1fc16112.js"),[])),"v-c0d5dada":b(()=>d(()=>import("./move-to-new-api.html.71fd2220.js"),[])),"v-24840ff0":b(()=>d(()=>import("./quick-start.html.672c7eeb.js"),[])),"v-a2fab4d6":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.31d0ff0f.js"),[])),"v-12042f1f":b(()=>d(()=>import("./host-inject.html.3f57d40b.js"),[])),"v-deaff1d0":b(()=>d(()=>import("./host-lifecycle.html.99d6cdd6.js"),[])),"v-33c1dc26":b(()=>d(()=>import("./logger.html.a1cae7d9.js"),[])),"v-581ddb9c":b(()=>d(()=>import("./reflection.html.f12d7c2d.js"),[])),"v-2e6ad66c":b(()=>d(()=>import("./xposed-channel.html.e9cafb9b.js"),[])),"v-68bebbf4":b(()=>d(()=>import("./xposed-storage.html.b08af45b.js"),[])),"v-6ac5be8e":b(()=>d(()=>import("./host-inject.html.b910d795.js"),[])),"v-357a8d49":b(()=>d(()=>import("./host-lifecycle.html.421c3a99.js"),[])),"v-1f0f591e":b(()=>d(()=>import("./logger.html.09ab63ea.js"),[])),"v-001858e3":b(()=>d(()=>import("./reflection.html.c355d348.js"),[])),"v-598546c6":b(()=>d(()=>import("./xposed-channel.html.c513149f.js"),[])),"v-0d914225":b(()=>d(()=>import("./xposed-storage.html.2a2b67f4.js"),[])),"v-053599a5":b(()=>d(()=>import("./YukiHookAPI.html.46f00ac6.js"),[])),"v-6931cb54":b(()=>d(()=>import("./YukiHookAPI.html.69c14410.js"),[])),"v-818b3ca6":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.4df7325f.js"),[])),"v-b6a815c4":b(()=>d(()=>import("./CurrentClass.html.5373bf87.js"),[])),"v-0183e3fc":b(()=>d(()=>import("./GenericClass.html.d868b91f.js"),[])),"v-57506200":b(()=>d(()=>import("./HookClass.html.07d717aa.js"),[])),"v-9af56c1a":b(()=>d(()=>import("./HookResources.html.6c57657d.js"),[])),"v-032b1710":b(()=>d(()=>import("./VariousClass.html.9bd050ef.js"),[])),"v-e288ce96":b(()=>d(()=>import("./YukiBaseHooker.html.b1778dd2.js"),[])),"v-71147891":b(()=>d(()=>import("./YukiMemberHookCreator.html.1bbce5c5.js"),[])),"v-5ed1ceee":b(()=>d(()=>import("./YukiResourcesHookCreator.html.f1969bf5.js"),[])),"v-36aec5ad":b(()=>d(()=>import("./LoggerFactory.html.1a790a09.js"),[])),"v-60cbe1b4":b(()=>d(()=>import("./HookParam.html.f23ef9a6.js"),[])),"v-b381a126":b(()=>d(()=>import("./PackageParam.html.ad03afdb.js"),[])),"v-30f3ba1e":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.c3619713.js"),[])),"v-0d0fcec2":b(()=>d(()=>import("./ReflectionFactory.html.1e39e088.js"),[])),"v-65091354":b(()=>d(()=>import("./YukiHookFactory.html.8a88619f.js"),[])),"v-6e47300f":b(()=>d(()=>import("./CurrentClass.html.2c892c7e.js"),[])),"v-69c1c226":b(()=>d(()=>import("./GenericClass.html.aa7de0a8.js"),[])),"v-735374af":b(()=>d(()=>import("./HookClass.html.d8bd18c6.js"),[])),"v-1c516d22":b(()=>d(()=>import("./HookResources.html.f2b2dd08.js"),[])),"v-66735bfe":b(()=>d(()=>import("./VariousClass.html.3d353830.js"),[])),"v-3ac40680":b(()=>d(()=>import("./YukiMemberHookCreator.html.e0bb95bd.js"),[])),"v-5e81af42":b(()=>d(()=>import("./YukiResourcesHookCreator.html.691c59e6.js"),[])),"v-516df326":b(()=>d(()=>import("./YukiBaseHooker.html.9f4904bf.js"),[])),"v-213d88b3":b(()=>d(()=>import("./ReflectionFactory.html.7f658677.js"),[])),"v-448e9585":b(()=>d(()=>import("./YukiHookFactory.html.6a6d253a.js"),[])),"v-004a009e":b(()=>d(()=>import("./LoggerFactory.html.7f0616c8.js"),[])),"v-75a9b636":b(()=>d(()=>import("./HookParam.html.043453ab.js"),[])),"v-100b529c":b(()=>d(()=>import("./PackageParam.html.912202ed.js"),[])),"v-7fec5836":b(()=>d(()=>import("./ModuleApplication.html.888894cd.js"),[])),"v-7414265a":b(()=>d(()=>import("./YukiHookDataChannel.html.e07d0eae.js"),[])),"v-65c20d2d":b(()=>d(()=>import("./YukiHookPrefsBridge.html.fc4f5aa2.js"),[])),"v-1d680acc":b(()=>d(()=>import("./IYukiHookXposedInit.html.f8668f1c.js"),[])),"v-8293d958":b(()=>d(()=>import("./ComponentTypeFactory.html.6c94d679.js"),[])),"v-7b0abf86":b(()=>d(()=>import("./GraphicsTypeFactory.html.fd636458.js"),[])),"v-5309e4a0":b(()=>d(()=>import("./ViewTypeFactory.html.1fe8fbc5.js"),[])),"v-a2615d0c":b(()=>d(()=>import("./DefinedTypeFactory.html.687da225.js"),[])),"v-ba01a600":b(()=>d(()=>import("./VariableTypeFactory.html.4aeb9e87.js"),[])),"v-5e874c45":b(()=>d(()=>import("./ComponentTypeFactory.html.3b12aea3.js"),[])),"v-4ea62475":b(()=>d(()=>import("./GraphicsTypeFactory.html.eb6110b9.js"),[])),"v-ef79cde2":b(()=>d(()=>import("./ViewTypeFactory.html.f032cc72.js"),[])),"v-5acc12ab":b(()=>d(()=>import("./DefinedTypeFactory.html.8e82c142.js"),[])),"v-14ec8671":b(()=>d(()=>import("./VariableTypeFactory.html.fe822a3c.js"),[])),"v-4709ad58":b(()=>d(()=>import("./ModuleApplication.html.cdb957fa.js"),[])),"v-632be8ee":b(()=>d(()=>import("./YukiHookDataChannel.html.f9c220a5.js"),[])),"v-395d721c":b(()=>d(()=>import("./YukiHookPrefsBridge.html.cb065dd5.js"),[])),"v-763140ee":b(()=>d(()=>import("./IYukiHookXposedInit.html.0878c0a2.js"),[])),"v-4fca92c0":b(()=>d(()=>import("./BaseFinder.html.a0f349bb.js"),[])),"v-2a898c66":b(()=>d(()=>import("./DexClassFinder.html.a8e54565.js"),[])),"v-a71937aa":b(()=>d(()=>import("./ConstructorFinder.html.70ab5d55.js"),[])),"v-42e0f0ab":b(()=>d(()=>import("./FieldFinder.html.16aa5d9f.js"),[])),"v-a4aa4d00":b(()=>d(()=>import("./MethodFinder.html.dcc92045.js"),[])),"v-19e7277e":b(()=>d(()=>import("./YukiXposedEvent.html.9c12b2ea.js"),[])),"v-8455e04e":b(()=>d(()=>import("./YukiModuleResources.html.8eb97354.js"),[])),"v-7b087cce":b(()=>d(()=>import("./YukiResForwarder.html.dac358dc.js"),[])),"v-a00b4de6":b(()=>d(()=>import("./YukiResources.html.75739b02.js"),[])),"v-2f64a2d4":b(()=>d(()=>import("./ChannelData.html.bc836738.js"),[])),"v-87027140":b(()=>d(()=>import("./ChannelPriority.html.eebb3fbb.js"),[])),"v-2d4e0da6":b(()=>d(()=>import("./ModuleClassLoader.html.f1a910a8.js"),[])),"v-58ed8298":b(()=>d(()=>import("./PrefsData.html.7c2ea75b.js"),[])),"v-23e1a817":b(()=>d(()=>import("./ModulePreferenceFragment.html.52c4f999.js"),[])),"v-0f719471":b(()=>d(()=>import("./BaseFinder.html.f111b38d.js"),[])),"v-45111efc":b(()=>d(()=>import("./DexClassFinder.html.47c4671b.js"),[])),"v-1e2cbc9c":b(()=>d(()=>import("./ConstructorFinder.html.873081e1.js"),[])),"v-22449c48":b(()=>d(()=>import("./FieldFinder.html.a260fc99.js"),[])),"v-fd738322":b(()=>d(()=>import("./MethodFinder.html.719cfa77.js"),[])),"v-0a4de82f":b(()=>d(()=>import("./YukiXposedEvent.html.2da31d77.js"),[])),"v-8266e0ec":b(()=>d(()=>import("./YukiModuleResources.html.d45d6e50.js"),[])),"v-aa38fa86":b(()=>d(()=>import("./YukiResForwarder.html.6d194458.js"),[])),"v-21b3b17e":b(()=>d(()=>import("./YukiResources.html.bf1dc9d0.js"),[])),"v-493d37f6":b(()=>d(()=>import("./ChannelData.html.fbd99d6d.js"),[])),"v-b57870de":b(()=>d(()=>import("./ChannelPriority.html.cef31c7e.js"),[])),"v-4b468415":b(()=>d(()=>import("./ModuleClassLoader.html.046cecae.js"),[])),"v-d99f7f36":b(()=>d(()=>import("./PrefsData.html.35cf61a0.js"),[])),"v-53bcae06":b(()=>d(()=>import("./ModulePreferenceFragment.html.3445dfec.js"),[])),"v-52995ef7":b(()=>d(()=>import("./CountRules.html.3f71370d.js"),[])),"v-8d5ce71a":b(()=>d(()=>import("./ModifierRules.html.97695c6f.js"),[])),"v-f5b1ffb2":b(()=>d(()=>import("./NameRules.html.dd9b9369.js"),[])),"v-652b815b":b(()=>d(()=>import("./ObjectRules.html.51d8f999.js"),[])),"v-08b70f7f":b(()=>d(()=>import("./ConstructorRules.html.4d286fe0.js"),[])),"v-21f64ebf":b(()=>d(()=>import("./FieldRules.html.2658894a.js"),[])),"v-77f11cf9":b(()=>d(()=>import("./MemberRules.html.6bc06d05.js"),[])),"v-64827680":b(()=>d(()=>import("./MethodRules.html.d37a7900.js"),[])),"v-2d5d16db":b(()=>d(()=>import("./ModuleAppActivity.html.1e76f8d8.js"),[])),"v-cadbe48e":b(()=>d(()=>import("./ModuleAppCompatActivity.html.5d317031.js"),[])),"v-78731c50":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.2667b0dc.js"),[])),"v-f150b17c":b(()=>d(()=>import("./ExecutorType.html.4cfd9774.js"),[])),"v-2728e033":b(()=>d(()=>import("./ExecutorType.html.edd747ad.js"),[])),"v-1b2ad030":b(()=>d(()=>import("./CountRules.html.95bad8b5.js"),[])),"v-547a3c3c":b(()=>d(()=>import("./ModifierRules.html.02fa5a97.js"),[])),"v-58c26516":b(()=>d(()=>import("./NameRules.html.de70ddf4.js"),[])),"v-80fd32ec":b(()=>d(()=>import("./ObjectRules.html.6333dbd0.js"),[])),"v-a42f54a4":b(()=>d(()=>import("./ConstructorRules.html.d9088ff6.js"),[])),"v-3e67a42e":b(()=>d(()=>import("./FieldRules.html.f9538ab9.js"),[])),"v-2cab152c":b(()=>d(()=>import("./MemberRules.html.92dc802e.js"),[])),"v-5388621e":b(()=>d(()=>import("./MethodRules.html.9d829b15.js"),[])),"v-1446bdca":b(()=>d(()=>import("./ModuleAppActivity.html.927fa3ec.js"),[])),"v-c7cef530":b(()=>d(()=>import("./ModuleAppCompatActivity.html.f3fb58d2.js"),[])),"v-44efb702":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.3fa9c08d.js"),[])),"v-5e375d98":b(()=>d(()=>import("./MemberRulesResult.html.5a8f43ab.js"),[])),"v-b8000f3a":b(()=>d(()=>import("./MemberRulesResult.html.45e91e89.js"),[])),"v-3706649a":b(()=>d(()=>import("./404.html.0d8ea628.js"),[]))};var Mt=(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(M){return(0,M.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 Hh(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 Mh(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 Ml;(function(e){e.pop="pop",e.push="push"})(Ml||(Ml={}));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 Bh(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 Yh(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=Bh(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:Ml.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&&!Hn(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 Hn(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 Mn(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=He(wi),l=He(zo),i=B(()=>t.resolve(O(e.to))),o=B(()=>{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=B(()=>o.value>-1&&wd(l.params,i.value.params)),a=B(()=>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:B(()=>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}=He(wi),o=B(()=>({[$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=He(ho),o=B(()=>e.route||i.value),n=He(Vn,0),a=B(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=B(()=>o.value.matched[a.value]);Gt(Vn,B(()=>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 Bn(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 Bn(l.default,{Component:E,route:c})||E}}});function Bn(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 H,X;return vr(R)?(H=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,H)}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 H;if("path"in R)H=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];H=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(H,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Hh(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 M(R){return w(R)}function U(R){return M(ve(_(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:H}=W;let X=typeof H=="function"?H(R):H;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 H=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(H);if(ie)return w(ve(_(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||H);const u=H;u.redirectedFrom=W;let f;return!_e&&Mh(i,X,H)&&(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 Y(u,X,y),y})}function v(R,W){const H=L(R,W);return H?Promise.reject(H):Promise.resolve()}function q(R,W){let H;const[X,ge,_e]=zd(R,W);H=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{H.push(Tt(u,R,W))});const ce=v.bind(null,R,W);return H.push(ce),tl(H).then(()=>{H=[];for(const ie of n.list())H.push(Tt(ie,R,W));return H.push(ce),tl(H)}).then(()=>{H=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{H.push(Tt(u,R,W))});return H.push(ce),tl(H)}).then(()=>{H=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)H.push(Tt(u,R,W));else H.push(Tt(ie.beforeEnter,R,W));return H.push(ce),tl(H)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),H=$i(_e,"beforeRouteEnter",R,W),H.push(ce),tl(H))).then(()=>{H=[];for(const ie of a.list())H.push(Tt(ie,R,W));return H.push(ce),tl(H)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function Y(R,W,H){for(const X of r.list())X(R,W,H)}function G(R,W,H,X,ge){const _e=L(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};H&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,H,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,H)=>{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,H.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!H.delta&&H.type===Ml.pop&&o.go(-1,!1)}).catch(Al),Promise.reject()):(H.delta&&o.go(-H.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(H.delta&&!pt(ce,8)?o.go(-H.delta,!1):H.type===Ml.pop&&pt(ce,20)&&o.go(-1,!1)),Y(X,_e,ce)}).catch(Al)}))}let F=_l(),re=_l(),j;function le(R,W,H){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,H)):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,H])=>R?H(R):W()),F.reset()),R}function Ne(R,W,H,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!H&&Wh(In(R.fullPath,0))||(X||!H)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Yh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Ze;const Be=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:P,resolve:k,options:e,push:M,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,M(o.location).catch(ge=>{}));const H={};for(const ge in mt)H[ge]=B(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(H)),R.provide(ho,s);const X=R.unmount;Be.add(R),R.unmount=function(){Be.delete(R),Be.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 He(wi)}function St(){return He(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(M=>M.hash===L.hash));for(let L=0;L=((E=(P=M.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),Y=decodeURIComponent(M.hash);if(q===Y)return;if(p){for(let G=L+1;G{window.addEventListener("scroll",a)}),Bl(()=>{window.removeEventListener("scroll",a)})},Yn=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)},Hd="a.sidebar-item",Md=".header-anchor",Sd=300,Vd=5,Nd=Mt({setup(){Dd({headerLinkSelector:Hd,headerAnchorSelector:Md,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=B(()=>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(Yl,{name:"back-to-top"},()=>t.value?i:null)}}),Bd=Mt({rootComponents:[$d]});const Yd=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=B(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Yd,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=Mt({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Yt=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=Yt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Yt({},w,S),L.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:Y}}))}),Y},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Yt({},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:Y}}))}),L=L.filter(function(j){return re.indexOf(j)===-1}),Y},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)}),M.push({type:"medium-zoom:"+C,listener:S,options:F}),Y},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)}),M=M.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),Y},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=Yt({},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,Be=Ne.left,Vt=Ne.top;j=Yt({},j,{width:Ue,height:Ze,left:Be,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,H=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(H,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(Y);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:Y}})),re(Y)};if(v.zoomed){re(Y);return}if(S)v.original=S;else if(L.length>0){var le=L;v.original=le[0]}else{re(Y);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:Y}})),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(Y);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:Y}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(Y)};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:Y}})),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=[],M=[],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=Yt({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 Y={open:g,close:x,toggle:P,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:_};return Y};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=Mt({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=Bi(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)*Bi(Math.random()*t,.1,.95)),t=Bi(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")},Bi=(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=Mt({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/YukiHookPrefsBridge","/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/api/compat/type/ExecutorType","/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/YukiHookPrefsBridge","/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/api/compat/type/ExecutorType","/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=He(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=Mt({enhance({app:e}){const t=du(),l=e._context.provides[No],i=B(()=>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",{},()=>[Ht(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",Yi=()=>{};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,Hu=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,Mu=(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,Hu(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(Mu({},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 Yi;let n=Yi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Yi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Bu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Tu(i,t),l}function Yu(e,t={}){const{window:l=vi}=t,i=Bu(()=>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,()=>M(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function M(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 Yu("(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(""),Ho=()=>{const e=He(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=B({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())},Hr=(...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 Hr({hash:l.hash,query:l.query,params:l.params,...a})},Mo=e=>{const t=Hr(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}},Mr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=He(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=B(()=>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=Mo(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=B(()=>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=B(()=>t.value.footer),i=B(()=>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=B(()=>Ul(o.value.link)),a=B(()=>wh(o.value.link)||Oh(o.value.link)),r=B(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=B(()=>r.value==="_blank"),c=B(()=>!n.value&&!a.value&&!s.value),h=B(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=B(()=>o.value.ariaLabel||o.value.text),m=B(()=>{const P=Object.keys(i.value.locales);return P.length?!P.some(E=>E===o.value.link):o.value.link!=="/"}),g=B(()=>m.value?l.path.startsWith(o.value.link):!1),x=B(()=>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:Me(()=>[Re(P.$slots,"before"),Ht(" "+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"),Ht(" "+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=Ho(),o=B(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=B(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=B(()=>t.value.heroAlt||n.value||"hero"),r=B(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=B(()=>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:Bo(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"]]),Hp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Ho(),n=B(()=>i.value.home||t.value),a=B(()=>l.value.title),r=B(()=>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:Bo(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:Me(()=>[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"])}}}),Mp=Te(Hp,[["__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(Yl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:Me(()=>[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"],Bp={class:"title"},Yp={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=B(()=>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",Bp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:Me(()=>[ci(fe("ul",Yp,[(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 B(()=>{var _,L,M;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:(M=(L=m.value.selectLanguageAriaLabel)!=null?L:m.value.selectLanguageText)!=null?M:"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 Y;if(v===p.value.lang)Y=P;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?Y=`${le}${E}`:Y=(j=w.home)!=null?j:U}return{text:q,link:Y}})}]})},l=()=>{const c=$e(),h=B(()=>c.value.repo),p=B(()=>h.value?$r(h.value):null),m=B(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=B(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return B(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Mo(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return B(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=B(()=>[...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)}}),Br=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=Ho(),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=B(()=>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(Mp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Br,{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=Ht(", "),Tm=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return B(()=>{var _,L,M;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:(M=h.value.editLinkPattern)!=null?M:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return B(()=>{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 B(()=>{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:Me(()=>[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)?Mo(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=B(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=B(()=>{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"]]),Hm={class:"page"},Mm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),Z("main",Hm,[Re(t.$slots,"top"),fe("div",Mm,[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=B(()=>jr(l.value,o)),r=B(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=B(()=>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 Bl(()=>{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"])},[Ht(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:Me(()=>[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)])}}}),Bm=Te($m,[["__file","SidebarItem.vue"]]),Ym={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",Ym,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),we(Bm,{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(Br),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=B(()=>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=B(()=>[{"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=Mr(),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:Me(()=>[Re(E.$slots,"navbar-before")]),after:Me(()=>[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:Me(()=>[Re(E.$slots,"sidebar-top")]),bottom:Me(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Yl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(P)},{default:Me(()=>[(N(),we(Vm,{key:O(t).path},{top:Me(()=>[Re(E.$slots,"page-top")]),"content-top":Me(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":Me(()=>[Re(E.$slots,"page-content-bottom")]),bottom:Me(()=>[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:Me(()=>[Ht(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Te(lf,[["__file","NotFound.vue"]]);const nf=Mt({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 Mr().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)}),Bl(()=>{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.9 | 2023.04.17",slug:"_1-1-9-2023-04-17",link:"#_1-1-9-2023-04-17",children:[]},{level:3,title:"1.1.8 | 2023.02.01",slug:"_1-1-8-2023-02-01",link:"#_1-1-8-2023-02-01",children:[]},{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:"YukiHookPrefsBridge",slug:"yukihookprefsbridge",link:"#yukihookprefsbridge",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 Status",slug:"xposed-module-status",link:"#xposed-module-status",children:[{level:3,title:"Determine Self-activation Status",slug:"determine-self-activation-status",link:"#determine-self-activation-status",children:[]},{level:3,title:"Get Hook Framework Information",slug:"get-hook-framework-information",link:"#get-hook-framework-information",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.9 | 2023.04.17",slug:"_1-1-9-2023-04-17",link:"#_1-1-9-2023-04-17",children:[]},{level:3,title:"1.1.8 | 2023.02.01",slug:"_1-1-8-2023-02-01",link:"#_1-1-8-2023-02-01",children:[]},{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:"YukiHookPrefsBridge",slug:"yukihookprefsbridge",link:"#yukihookprefsbridge",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\u72B6\u6001",slug:"xposed-\u6A21\u5757\u72B6\u6001",link:"#xposed-\u6A21\u5757\u72B6\u6001",children:[{level:3,title:"\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]},{level:3,title:"\u83B7\u53D6 Hook Framework \u4FE1\u606F",slug:"\u83B7\u53D6-hook-framework-\u4FE1\u606F",link:"#\u83B7\u53D6-hook-framework-\u4FE1\u606F",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:[]},{level:2,title:"Use Native Storage",slug:"use-native-storage",link:"#use-native-storage",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:[]},{level:2,title:"\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",slug:"\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",link:"#\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",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:"isEnablePrefsBridgeCache - field",slug:"isenableprefsbridgecache-field",link:"#isenableprefsbridgecache-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:"isEnablePrefsBridgeCache - field",slug:"isenableprefsbridgecache-field",link:"#isenableprefsbridgecache-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:"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:"instanceOrNull - field",slug:"instanceornull-field",link:"#instanceornull-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:"instanceOrNull - method",slug:"instanceornull-method",link:"#instanceornull-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:"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.prefs - ext-method",slug:"context-prefs-ext-method",link:"#context-prefs-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:"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.prefs - ext-method",slug:"context-prefs-ext-method",link:"#context-prefs-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:"instanceOrNull - field",slug:"instanceornull-field",link:"#instanceornull-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:"instanceOrNull - method",slug:"instanceornull-method",link:"#instanceornull-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:"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:"dataMaxByteSize - field",slug:"datamaxbytesize-field",link:"#datamaxbytesize-field",children:[]},{level:3,title:"dataMaxByteCompressionFactor - field",slug:"datamaxbytecompressionfactor-field",link:"#datamaxbytecompressionfactor-field",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:"YukiHookPrefsBridge - 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:"native - method",slug:"native-method",link:"#native-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:"contains - method",slug:"contains-method",link:"#contains-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"edit - method",slug:"edit-method",link:"#edit-method",children:[]},{level:2,title:"edit - method",slug:"edit-method-1",link:"#edit-method-1",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]},{level:2,title:"Editor - class",slug:"editor-class",link:"#editor-class",children:[{level:3,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:3,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:3,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:3,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:3,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:3,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:3,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"commit - method",slug:"commit-method",link:"#commit-method",children:[]},{level:3,title:"apply - method",slug:"apply-method",link:"#apply-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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:"/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:"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:"dataMaxByteSize - field",slug:"datamaxbytesize-field",link:"#datamaxbytesize-field",children:[]},{level:3,title:"dataMaxByteCompressionFactor - field",slug:"datamaxbytecompressionfactor-field",link:"#datamaxbytecompressionfactor-field",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:"YukiHookPrefsBridge - 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:"native - method",slug:"native-method",link:"#native-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:"contains - method",slug:"contains-method",link:"#contains-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"edit - method",slug:"edit-method",link:"#edit-method",children:[]},{level:2,title:"edit - method",slug:"edit-method-1",link:"#edit-method-1",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]},{level:2,title:"Editor - class",slug:"editor-class",link:"#editor-class",children:[{level:3,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:3,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:3,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:3,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:3,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:3,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:3,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"commit - method",slug:"commit-method",link:"#commit-method",children:[]},{level:3,title:"apply - method",slug:"apply-method",link:"#apply-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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:"ExecutorType - class",headers:[{level:2,title:"UNKNOWN - enum",slug:"unknown-enum",link:"#unknown-enum",children:[]},{level:2,title:"XPOSED - enum",slug:"xposed-enum",link:"#xposed-enum",children:[]},{level:2,title:"LSPOSED_LSPATCH - enum",slug:"lsposed-lspatch-enum",link:"#lsposed-lspatch-enum",children:[]},{level:2,title:"ED_XPOSED - enum",slug:"ed-xposed-enum",link:"#ed-xposed-enum",children:[]},{level:2,title:"TAICHI_XPOSED - enum",slug:"taichi-xposed-enum",link:"#taichi-xposed-enum",children:[]},{level:2,title:"BUG_XPOSED - enum",slug:"bug-xposed-enum",link:"#bug-xposed-enum",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html",pathLocale:"/en/",extraFields:[]},{title:"ExecutorType - class",headers:[{level:2,title:"UNKNOWN - enum",slug:"unknown-enum",link:"#unknown-enum",children:[]},{level:2,title:"XPOSED - enum",slug:"xposed-enum",link:"#xposed-enum",children:[]},{level:2,title:"LSPOSED_LSPATCH - enum",slug:"lsposed-lspatch-enum",link:"#lsposed-lspatch-enum",children:[]},{level:2,title:"ED_XPOSED - enum",slug:"ed-xposed-enum",link:"#ed-xposed-enum",children:[]},{level:2,title:"TAICHI_XPOSED - enum",slug:"taichi-xposed-enum",link:"#taichi-xposed-enum",children:[]},{level:2,title:"BUG_XPOSED - enum",slug:"bug-xposed-enum",link:"#bug-xposed-enum",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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:"/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:[]}],Yr=ye(hf),df=()=>Yr;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Yr.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=B(()=>e.value.filter(n=>n.pathLocale===t.value));return B(()=>{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=B(()=>{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=B(()=>s.value&&!!p.value.length),E=()=>{!P.value||x()},k=()=>{!P.value||g()},_=L=>{if(!P.value)return;const M=p.value[L];!M||o.push(M.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:M,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"},M),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Mt({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Bd,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=He(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=He(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=He(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=He(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=He(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=B(()=>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=B(()=>{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)}}),Bo=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-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-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-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-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-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-65c20d2d","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html",{title:"YukiHookPrefsBridge - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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-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-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-395d721c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html",{title:"YukiHookPrefsBridge - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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-f150b17c","/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html",{title:"ExecutorType - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType","/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.md"]],["v-2728e033","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html",{title:"ExecutorType - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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=B(()=>Ut.resolveRouteLocale(At.value.locales,t.currentRoute.value.path)),i=B(()=>Ut.resolveSiteLocaleData(At.value,l.value)),o=B(()=>Ut.resolvePageFrontmatter(gt.value)),n=B(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=B(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=B(()=>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:()=>Bo}}),{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},Hf=Ph,Mf=async()=>{var l;const e=Hf({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}};Mf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Te as _,jc as a,fe as b,Z as c,Mf as createVueApp,oe as d,Ht as e,N as o,_t as r,Me as w}; diff --git a/docs/assets/app.f643a53b.js b/docs/assets/app.f643a53b.js new file mode 100644 index 000000000..bae18c43b --- /dev/null +++ b/docs/assets/app.f643a53b.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.49537782.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.290989e8.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.bb6da37d.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.d9d91363.js"),[]).then(({data:e})=>e),"v-55c11626":()=>d(()=>import("./yukihookapi-projectbuilder.html.ed4fa356.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.ba1743d2.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.09de8b71.js"),[]).then(({data:e})=>e),"v-41967128":()=>d(()=>import("./about.html.4de66a22.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>d(()=>import("./changelog.html.bb9eda6f.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.3e784ab5.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.b279975a.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.73248b21.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.667f5444.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.bf02518e.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.433c5f35.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.850b6810.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.d35b34eb.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.bf4a811f.js"),[]).then(({data:e})=>e),"v-6ac5be8e":()=>d(()=>import("./host-inject.html.0f378e76.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.eb335976.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.5dd91d68.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.909201c9.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.45822706.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.edb07f76.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.d78fe330.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.6555413e.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.ae54c997.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.9db30e67.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.83d09a1a.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-71147891":()=>d(()=>import("./YukiMemberHookCreator.html.7e0c1b2e.js"),[]).then(({data:e})=>e),"v-5ed1ceee":()=>d(()=>import("./YukiResourcesHookCreator.html.2fa2ff0f.js"),[]).then(({data:e})=>e),"v-e288ce96":()=>d(()=>import("./YukiBaseHooker.html.99eec744.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.d2d3ba9a.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.0143ac70.js"),[]).then(({data:e})=>e),"v-36aec5ad":()=>d(()=>import("./LoggerFactory.html.52af0d44.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.61e05f29.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.cf48302c.js"),[]).then(({data:e})=>e),"v-818b3ca6":()=>d(()=>import("./InjectYukiHookWithXposed.html.56391530.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.57f1d79e.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bd3fae8e.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.a2b13a44.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.5c25c0fb.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.c8a74f24.js"),[]).then(({data:e})=>e),"v-395d721c":()=>d(()=>import("./YukiHookPrefsBridge.html.b7eccf96.js"),[]).then(({data:e})=>e),"v-763140ee":()=>d(()=>import("./IYukiHookXposedInit.html.78a55860.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.98825c67.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.cb6ff63d.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.87f19810.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.07a0f5f6.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.2123b109.js"),[]).then(({data:e})=>e),"v-65c20d2d":()=>d(()=>import("./YukiHookPrefsBridge.html.316d8e8c.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.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.8e38ad6f.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.30e6d2df.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.9be50874.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.343169a5.js"),[]).then(({data:e})=>e),"v-53bcae06":()=>d(()=>import("./ModulePreferenceFragment.html.0c7dadc7.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.282236a6.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.ce7337a4.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.9a97f14f.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-19e7277e":()=>d(()=>import("./YukiXposedEvent.html.560fa41c.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-23e1a817":()=>d(()=>import("./ModulePreferenceFragment.html.764fecc3.js"),[]).then(({data:e})=>e),"v-58ed8298":()=>d(()=>import("./PrefsData.html.34c51103.js"),[]).then(({data:e})=>e),"v-2728e033":()=>d(()=>import("./ExecutorType.html.3e98ffe1.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.34ee16d6.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.c4a0eeb4.js"),[]).then(({data:e})=>e),"v-c7cef530":()=>d(()=>import("./ModuleAppCompatActivity.html.e544662e.js"),[]).then(({data:e})=>e),"v-44efb702":()=>d(()=>import("./ModuleContextThemeWrapper.html.229a46ac.js"),[]).then(({data:e})=>e),"v-f150b17c":()=>d(()=>import("./ExecutorType.html.7e3dd355.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.e986a067.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.98cb78a4.js"),[]).then(({data:e})=>e),"v-cadbe48e":()=>d(()=>import("./ModuleAppCompatActivity.html.4c0f53a9.js"),[]).then(({data:e})=>e),"v-78731c50":()=>d(()=>import("./ModuleContextThemeWrapper.html.0879426b.js"),[]).then(({data:e})=>e),"v-b8000f3a":()=>d(()=>import("./MemberRulesResult.html.58e81c94.js"),[]).then(({data:e})=>e),"v-5e375d98":()=>d(()=>import("./MemberRulesResult.html.e79843c3.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 Hs={get:Eo(!1,!1)},Ms={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,Hs,Ca)}function $s(e){return Ro(e,!1,Is,Ms,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 Bs(e,t)}class Bs{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 Ys={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,Ys)}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 Ha(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){Ha(e,El,Rl,il)}function Zs(e){Ha(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 Ma(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 Me(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 M=o||i;E=ot(h.call(M,M,p,n,g,m,x)),k=s}else{const M=t;E=ot(M.length>1?M(n,{attrs:s,slots:r,emit:c}):M(n,null)),k=t.props?s:tc(s)}}catch(M){Tl.length=0,Nl(M,e,1),E=oe(Ge)}let L=E;if(k&&P!==!1){const M=Object.keys(k),{shapeFlag:U}=L;M.length&&U&7&&(a&&M.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 He(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=()=>Ye(x,r&&r.suspense):P=()=>Js(x);const E=new _o(s,P);return t?l?x():g=E.run():o==="post"?Ye(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}),Bl(()=>{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=Ya(i,m);L[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=_})}return a}}},Ba=sc;function Ya(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),M=Ya(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const Y=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&Y():v.length<=1&&Y()},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 Y=M[L];Y&&Wt(e,Y)&&Y.el._leaveCb&&Y.el._leaveCb(),U(q,[v])},enter(v){let q=s,Y=c,G=h;if(!l.isMounted)if(o)q=E||s,Y=k||c,G=_||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(Y,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const Y=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,M[Y]===e&&delete M[Y])};M[Y]=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()=>Hi(c,g);const x=_=>{s=null,Nl(_,g,13,!i)};if(a&&g.suspense||dl)return m().then(_=>()=>Hi(_,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 Hi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Hi(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"),Bl=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:M,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:Y,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=B({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(Bl,_),j(Li,M),j(mc,q),te(Y))if(Y.length){const le=e.exposed||(e.exposed={});Y.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=He(n.from||o,n.default,!0):a=He(n.from||o):a=He(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:Bt,emits:Bt,methods:Bt,computed:Bt,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:Bt,directives:Bt,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 Bt(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=Me((...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,Ye(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,M,U,ee=!1)=>{const w=Zl(k)&&k.data==="[",v=()=>P(k,_,L,M,U,w),{type:q,ref:Y,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,M,U,ee):F=v();break;default:if(G&1)S!==1||_.type.toLowerCase()!==k.tagName.toLowerCase()?F=v():F=m(k,_,L,M,U,ee);else if(G&6){_.slotScopeIds=U;const re=a(k);if(t(_,re,null,L,M,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?Ht(""):oe("div"),j.el=k,_.component.subTree=j}}else G&64?S!==8?F=v():F=_.type.hydrate(k,_,L,M,U,ee,e,g):G&128&&(F=_.type.hydrate(k,_,L,M,Jl(a(k)),U,ee,e,p))}return Y!=null&&ui(Y,null,M,_),F},m=(k,_,L,M,U,ee)=>{ee=ee||!!_.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:Y,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")},M),Y&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,_,k,L,M,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else Y&8&&k.textContent!==_.children&&(Et=!0,k.textContent=_.children)}return k.nextSibling},g=(k,_,L,M,U,ee,w)=>{w=w||!!_.dynamicChildren;const v=_.children,q=v.length;for(let Y=0;Y{const{slotScopeIds:w}=_;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),_,v,L,M,U,ee);return q&&Zl(q)&&q.data==="]"?n(_.anchor=q):(Et=!0,s(_.anchor=c("]"),v,q),q)},P=(k,_,L,M,U,ee)=>{if(Et=!0,_.el=null,ee){const q=E(k);for(;;){const Y=n(k);if(Y&&Y!==q)r(Y);else break}}const w=n(k),v=a(k);return r(k),l(null,_,v,w,L,M,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 Ye=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),Be(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)},M=({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):Y(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,H);"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)&&Ye(()=>{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,H)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in A)&&n(u,D,y[D],null,$,f.children,T,z,H);"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=Yc(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&&Ye(J,T),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Ye(()=>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&&Ye(pe,T),!Ee&&(Q=J&&J.onVnodeMounted)){const Le=f;Ye(()=>tt(Q,xe,Le),T)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Ye(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&&H(I,T,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,A,T,z,$,D,V):H(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?H(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;)Be(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,Yo=0;const kl=new Array(it);for(I=0;I=it){Be(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?Be(We,T,z,!0):(kl[ct-pe]=I+1,ct>=Yo?Yo=ct:el=!0,E(We,f[ct],y,null,T,z,$,D,V),Le++)}const Uo=el?Hc(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)},Be=(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)?H(I,f,y,!1,!0):(z===Pe&&K&384||!T&&Q&16)&&H(V,f,y),A&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Ye(()=>{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,Be($,u,f,y)),D&&Ye(D,f),Ye(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},H=(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&&Be(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Be,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 Mc=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 Hl=1;function pn(e){Hl+=e}function nr(e){return e.dynamicChildren=Hl>0?at||al:null,Sc(),Hl>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),Hl>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),Hl>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:Mc(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 Ht(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=[Ht(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 B=(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"],Mi={};function lh(e,t){const l=Mi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Mi[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",Yl=(e,{slots:t})=>he(Ba,kh(e),t);Yl.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};Yl.props=Se({},Ba.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:M,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()},Y=(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=()=>Y(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(M)||Cn(C,i,E,F))}),jt(M,[C,F])},onEnterCancelled(C){q(C,!1),jt(L,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){Y(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.e0ba9d06.js"),[])),"v-2d0a870d":b(()=>d(()=>import("./index.html.2182569c.js"),[])),"v-c0c85b84":b(()=>d(()=>import("./index.html.ecde69cd.js"),[])),"v-7a15fe3b":b(()=>d(()=>import("./about.html.8c21376b.js"),[])),"v-3f851d14":b(()=>d(()=>import("./changelog.html.7535d1bc.js"),[])),"v-193cf592":b(()=>d(()=>import("./contacts.html.87553cba.js"),[])),"v-ae7b83f2":b(()=>d(()=>import("./future.html.cec35036.js"),[])),"v-64fc7bb8":b(()=>d(()=>import("./home.html.f46eccfc.js"),[])),"v-7b22efaf":b(()=>d(()=>import("./example.html.3900946b.js"),[])),"v-efb45d4c":b(()=>d(()=>import("./home.html.1d7575fe.js"),[])),"v-277b35ca":b(()=>d(()=>import("./knowledge.html.86f06e91.js"),[])),"v-77d752a2":b(()=>d(()=>import("./move-to-new-api.html.0a02f53c.js"),[])),"v-72889797":b(()=>d(()=>import("./quick-start.html.3f3afc29.js"),[])),"v-55c11626":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.5d43aa5a.js"),[])),"v-9cfea7fc":b(()=>d(()=>import("./api-example.html.671d41e0.js"),[])),"v-72c12b7d":b(()=>d(()=>import("./api-exception.html.95d64baf.js"),[])),"v-793879e8":b(()=>d(()=>import("./api-using.html.ca9326ea.js"),[])),"v-29d6c1ba":b(()=>d(()=>import("./r8-proguard.html.ec79e97c.js"),[])),"v-24e71de7":b(()=>d(()=>import("./xposed-using.html.34241ede.js"),[])),"v-41967128":b(()=>d(()=>import("./about.html.6402a0ad.js"),[])),"v-0e6c3476":b(()=>d(()=>import("./changelog.html.66bbb299.js"),[])),"v-6cf86266":b(()=>d(()=>import("./contacts.html.9cf369d9.js"),[])),"v-3106ca14":b(()=>d(()=>import("./future.html.a7a230a8.js"),[])),"v-c8deafb2":b(()=>d(()=>import("./home.html.0f9b4abe.js"),[])),"v-c6114c9e":b(()=>d(()=>import("./api-example.html.c1738f94.js"),[])),"v-5b43296c":b(()=>d(()=>import("./api-exception.html.dd408217.js"),[])),"v-2ee67152":b(()=>d(()=>import("./api-using.html.75d4a0ea.js"),[])),"v-154d6f69":b(()=>d(()=>import("./r8-proguard.html.0579cd4e.js"),[])),"v-af73b3d0":b(()=>d(()=>import("./xposed-using.html.ac70c5e3.js"),[])),"v-13b430a0":b(()=>d(()=>import("./example.html.5bca6c9f.js"),[])),"v-6a609e09":b(()=>d(()=>import("./home.html.be06c02a.js"),[])),"v-b4f1a468":b(()=>d(()=>import("./knowledge.html.998b4830.js"),[])),"v-c0d5dada":b(()=>d(()=>import("./move-to-new-api.html.8918dea3.js"),[])),"v-24840ff0":b(()=>d(()=>import("./quick-start.html.b973dbd4.js"),[])),"v-a2fab4d6":b(()=>d(()=>import("./yukihookapi-projectbuilder.html.628e4394.js"),[])),"v-12042f1f":b(()=>d(()=>import("./host-inject.html.6d53994e.js"),[])),"v-deaff1d0":b(()=>d(()=>import("./host-lifecycle.html.6a663fb5.js"),[])),"v-33c1dc26":b(()=>d(()=>import("./logger.html.d6070d67.js"),[])),"v-581ddb9c":b(()=>d(()=>import("./reflection.html.2214baad.js"),[])),"v-2e6ad66c":b(()=>d(()=>import("./xposed-channel.html.4f58f26e.js"),[])),"v-68bebbf4":b(()=>d(()=>import("./xposed-storage.html.a541db8c.js"),[])),"v-6ac5be8e":b(()=>d(()=>import("./host-inject.html.ad00dd4e.js"),[])),"v-357a8d49":b(()=>d(()=>import("./host-lifecycle.html.319e86cd.js"),[])),"v-1f0f591e":b(()=>d(()=>import("./logger.html.68d61cb5.js"),[])),"v-001858e3":b(()=>d(()=>import("./reflection.html.00550fc4.js"),[])),"v-598546c6":b(()=>d(()=>import("./xposed-channel.html.47936ba5.js"),[])),"v-0d914225":b(()=>d(()=>import("./xposed-storage.html.8c44e3af.js"),[])),"v-6931cb54":b(()=>d(()=>import("./YukiHookAPI.html.00941116.js"),[])),"v-053599a5":b(()=>d(()=>import("./YukiHookAPI.html.caa72540.js"),[])),"v-30f3ba1e":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.30edb248.js"),[])),"v-6e47300f":b(()=>d(()=>import("./CurrentClass.html.106d39c5.js"),[])),"v-69c1c226":b(()=>d(()=>import("./GenericClass.html.c73df2de.js"),[])),"v-735374af":b(()=>d(()=>import("./HookClass.html.a4e5a7f3.js"),[])),"v-1c516d22":b(()=>d(()=>import("./HookResources.html.49dd8807.js"),[])),"v-66735bfe":b(()=>d(()=>import("./VariousClass.html.78bf92f7.js"),[])),"v-3ac40680":b(()=>d(()=>import("./YukiMemberHookCreator.html.dcafc114.js"),[])),"v-5e81af42":b(()=>d(()=>import("./YukiResourcesHookCreator.html.f4cba156.js"),[])),"v-516df326":b(()=>d(()=>import("./YukiBaseHooker.html.b8453b66.js"),[])),"v-213d88b3":b(()=>d(()=>import("./ReflectionFactory.html.abd530fa.js"),[])),"v-448e9585":b(()=>d(()=>import("./YukiHookFactory.html.be7b653c.js"),[])),"v-004a009e":b(()=>d(()=>import("./LoggerFactory.html.f340322f.js"),[])),"v-75a9b636":b(()=>d(()=>import("./HookParam.html.8c4d80fd.js"),[])),"v-100b529c":b(()=>d(()=>import("./PackageParam.html.e1c4350b.js"),[])),"v-b6a815c4":b(()=>d(()=>import("./CurrentClass.html.7391f90b.js"),[])),"v-0183e3fc":b(()=>d(()=>import("./GenericClass.html.4f669f27.js"),[])),"v-57506200":b(()=>d(()=>import("./HookClass.html.b124666e.js"),[])),"v-9af56c1a":b(()=>d(()=>import("./HookResources.html.18641aea.js"),[])),"v-032b1710":b(()=>d(()=>import("./VariousClass.html.0ed01b01.js"),[])),"v-71147891":b(()=>d(()=>import("./YukiMemberHookCreator.html.64b92517.js"),[])),"v-5ed1ceee":b(()=>d(()=>import("./YukiResourcesHookCreator.html.e7b6eee3.js"),[])),"v-e288ce96":b(()=>d(()=>import("./YukiBaseHooker.html.cac0dae7.js"),[])),"v-0d0fcec2":b(()=>d(()=>import("./ReflectionFactory.html.0063d796.js"),[])),"v-65091354":b(()=>d(()=>import("./YukiHookFactory.html.89107920.js"),[])),"v-36aec5ad":b(()=>d(()=>import("./LoggerFactory.html.0b09f39d.js"),[])),"v-60cbe1b4":b(()=>d(()=>import("./HookParam.html.0731d04a.js"),[])),"v-b381a126":b(()=>d(()=>import("./PackageParam.html.a1ac3039.js"),[])),"v-818b3ca6":b(()=>d(()=>import("./InjectYukiHookWithXposed.html.c1ce163a.js"),[])),"v-5e874c45":b(()=>d(()=>import("./ComponentTypeFactory.html.f5d1204f.js"),[])),"v-4ea62475":b(()=>d(()=>import("./GraphicsTypeFactory.html.31df8bc5.js"),[])),"v-ef79cde2":b(()=>d(()=>import("./ViewTypeFactory.html.515d27f8.js"),[])),"v-5acc12ab":b(()=>d(()=>import("./DefinedTypeFactory.html.45f8b277.js"),[])),"v-14ec8671":b(()=>d(()=>import("./VariableTypeFactory.html.e16c195a.js"),[])),"v-4709ad58":b(()=>d(()=>import("./ModuleApplication.html.7a1d4263.js"),[])),"v-632be8ee":b(()=>d(()=>import("./YukiHookDataChannel.html.55bd746e.js"),[])),"v-395d721c":b(()=>d(()=>import("./YukiHookPrefsBridge.html.9b0fbd99.js"),[])),"v-763140ee":b(()=>d(()=>import("./IYukiHookXposedInit.html.af7ab766.js"),[])),"v-8293d958":b(()=>d(()=>import("./ComponentTypeFactory.html.ee7e089a.js"),[])),"v-7b0abf86":b(()=>d(()=>import("./GraphicsTypeFactory.html.04b3b02f.js"),[])),"v-5309e4a0":b(()=>d(()=>import("./ViewTypeFactory.html.107a99ef.js"),[])),"v-a2615d0c":b(()=>d(()=>import("./DefinedTypeFactory.html.21331662.js"),[])),"v-ba01a600":b(()=>d(()=>import("./VariableTypeFactory.html.f2efa4bc.js"),[])),"v-7fec5836":b(()=>d(()=>import("./ModuleApplication.html.f079b7cd.js"),[])),"v-7414265a":b(()=>d(()=>import("./YukiHookDataChannel.html.76c635af.js"),[])),"v-65c20d2d":b(()=>d(()=>import("./YukiHookPrefsBridge.html.9cd83fdb.js"),[])),"v-1d680acc":b(()=>d(()=>import("./IYukiHookXposedInit.html.25ec7528.js"),[])),"v-0f719471":b(()=>d(()=>import("./BaseFinder.html.2ff37655.js"),[])),"v-45111efc":b(()=>d(()=>import("./DexClassFinder.html.c566bd51.js"),[])),"v-1e2cbc9c":b(()=>d(()=>import("./ConstructorFinder.html.f66e071b.js"),[])),"v-22449c48":b(()=>d(()=>import("./FieldFinder.html.7eb8fd1e.js"),[])),"v-fd738322":b(()=>d(()=>import("./MethodFinder.html.f0a501a0.js"),[])),"v-0a4de82f":b(()=>d(()=>import("./YukiXposedEvent.html.8e539d31.js"),[])),"v-8266e0ec":b(()=>d(()=>import("./YukiModuleResources.html.a9d8c169.js"),[])),"v-aa38fa86":b(()=>d(()=>import("./YukiResForwarder.html.bf4abc16.js"),[])),"v-21b3b17e":b(()=>d(()=>import("./YukiResources.html.a2c69983.js"),[])),"v-493d37f6":b(()=>d(()=>import("./ChannelData.html.ba0e607a.js"),[])),"v-b57870de":b(()=>d(()=>import("./ChannelPriority.html.322de5cb.js"),[])),"v-4b468415":b(()=>d(()=>import("./ModuleClassLoader.html.bd4ea569.js"),[])),"v-d99f7f36":b(()=>d(()=>import("./PrefsData.html.92a80177.js"),[])),"v-53bcae06":b(()=>d(()=>import("./ModulePreferenceFragment.html.9f2cf2aa.js"),[])),"v-4fca92c0":b(()=>d(()=>import("./BaseFinder.html.bdb1050e.js"),[])),"v-2a898c66":b(()=>d(()=>import("./DexClassFinder.html.5528dec5.js"),[])),"v-a71937aa":b(()=>d(()=>import("./ConstructorFinder.html.2bb603e0.js"),[])),"v-42e0f0ab":b(()=>d(()=>import("./FieldFinder.html.d93e0b5a.js"),[])),"v-a4aa4d00":b(()=>d(()=>import("./MethodFinder.html.7bdaba1d.js"),[])),"v-8455e04e":b(()=>d(()=>import("./YukiModuleResources.html.87630916.js"),[])),"v-7b087cce":b(()=>d(()=>import("./YukiResForwarder.html.617cc8ab.js"),[])),"v-a00b4de6":b(()=>d(()=>import("./YukiResources.html.28e3d21e.js"),[])),"v-19e7277e":b(()=>d(()=>import("./YukiXposedEvent.html.df166d1b.js"),[])),"v-2f64a2d4":b(()=>d(()=>import("./ChannelData.html.b4f5a2f6.js"),[])),"v-87027140":b(()=>d(()=>import("./ChannelPriority.html.96dd056e.js"),[])),"v-2d4e0da6":b(()=>d(()=>import("./ModuleClassLoader.html.46d7f41d.js"),[])),"v-23e1a817":b(()=>d(()=>import("./ModulePreferenceFragment.html.4538994a.js"),[])),"v-58ed8298":b(()=>d(()=>import("./PrefsData.html.8d78be56.js"),[])),"v-2728e033":b(()=>d(()=>import("./ExecutorType.html.3291de5c.js"),[])),"v-1b2ad030":b(()=>d(()=>import("./CountRules.html.06f6ba1f.js"),[])),"v-547a3c3c":b(()=>d(()=>import("./ModifierRules.html.7357a201.js"),[])),"v-58c26516":b(()=>d(()=>import("./NameRules.html.3f799942.js"),[])),"v-80fd32ec":b(()=>d(()=>import("./ObjectRules.html.c4d0e6b6.js"),[])),"v-a42f54a4":b(()=>d(()=>import("./ConstructorRules.html.333b8d42.js"),[])),"v-3e67a42e":b(()=>d(()=>import("./FieldRules.html.81c8d4a9.js"),[])),"v-2cab152c":b(()=>d(()=>import("./MemberRules.html.53021147.js"),[])),"v-5388621e":b(()=>d(()=>import("./MethodRules.html.b075ed0f.js"),[])),"v-1446bdca":b(()=>d(()=>import("./ModuleAppActivity.html.acd49ae1.js"),[])),"v-c7cef530":b(()=>d(()=>import("./ModuleAppCompatActivity.html.bb1146fa.js"),[])),"v-44efb702":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.ae132879.js"),[])),"v-f150b17c":b(()=>d(()=>import("./ExecutorType.html.1f77c183.js"),[])),"v-52995ef7":b(()=>d(()=>import("./CountRules.html.3bc27b1d.js"),[])),"v-8d5ce71a":b(()=>d(()=>import("./ModifierRules.html.c86821e7.js"),[])),"v-f5b1ffb2":b(()=>d(()=>import("./NameRules.html.2f941c5a.js"),[])),"v-652b815b":b(()=>d(()=>import("./ObjectRules.html.4005c0a5.js"),[])),"v-08b70f7f":b(()=>d(()=>import("./ConstructorRules.html.ef34015b.js"),[])),"v-21f64ebf":b(()=>d(()=>import("./FieldRules.html.60c3abf3.js"),[])),"v-77f11cf9":b(()=>d(()=>import("./MemberRules.html.0c170008.js"),[])),"v-64827680":b(()=>d(()=>import("./MethodRules.html.2b39d4c6.js"),[])),"v-2d5d16db":b(()=>d(()=>import("./ModuleAppActivity.html.b7bc1cfd.js"),[])),"v-cadbe48e":b(()=>d(()=>import("./ModuleAppCompatActivity.html.28457636.js"),[])),"v-78731c50":b(()=>d(()=>import("./ModuleContextThemeWrapper.html.9726886e.js"),[])),"v-b8000f3a":b(()=>d(()=>import("./MemberRulesResult.html.9965dc43.js"),[])),"v-5e375d98":b(()=>d(()=>import("./MemberRulesResult.html.d4d52324.js"),[])),"v-3706649a":b(()=>d(()=>import("./404.html.42b721d3.js"),[]))};var Mt=(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(M){return(0,M.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 Hh(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 Mh(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 Ml;(function(e){e.pop="pop",e.push="push"})(Ml||(Ml={}));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 Bh(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 Yh(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=Bh(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:Ml.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&&!Hn(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 Hn(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 Mn(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=He(wi),l=He(zo),i=B(()=>t.resolve(O(e.to))),o=B(()=>{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=B(()=>o.value>-1&&wd(l.params,i.value.params)),a=B(()=>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:B(()=>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}=He(wi),o=B(()=>({[$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=He(ho),o=B(()=>e.route||i.value),n=He(Vn,0),a=B(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=B(()=>o.value.matched[a.value]);Gt(Vn,B(()=>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 Bn(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 Bn(l.default,{Component:E,route:c})||E}}});function Bn(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 H,X;return vr(R)?(H=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,H)}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 H;if("path"in R)H=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];H=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(H,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Hh(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 M(R){return w(R)}function U(R){return M(ve(_(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:H}=W;let X=typeof H=="function"?H(R):H;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 H=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(H);if(ie)return w(ve(_(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||H);const u=H;u.redirectedFrom=W;let f;return!_e&&Mh(i,X,H)&&(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 Y(u,X,y),y})}function v(R,W){const H=L(R,W);return H?Promise.reject(H):Promise.resolve()}function q(R,W){let H;const[X,ge,_e]=zd(R,W);H=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{H.push(Tt(u,R,W))});const ce=v.bind(null,R,W);return H.push(ce),tl(H).then(()=>{H=[];for(const ie of n.list())H.push(Tt(ie,R,W));return H.push(ce),tl(H)}).then(()=>{H=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{H.push(Tt(u,R,W))});return H.push(ce),tl(H)}).then(()=>{H=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)H.push(Tt(u,R,W));else H.push(Tt(ie.beforeEnter,R,W));return H.push(ce),tl(H)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),H=$i(_e,"beforeRouteEnter",R,W),H.push(ce),tl(H))).then(()=>{H=[];for(const ie of a.list())H.push(Tt(ie,R,W));return H.push(ce),tl(H)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function Y(R,W,H){for(const X of r.list())X(R,W,H)}function G(R,W,H,X,ge){const _e=L(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};H&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,H,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,H)=>{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,H.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!H.delta&&H.type===Ml.pop&&o.go(-1,!1)}).catch(Al),Promise.reject()):(H.delta&&o.go(-H.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(H.delta&&!pt(ce,8)?o.go(-H.delta,!1):H.type===Ml.pop&&pt(ce,20)&&o.go(-1,!1)),Y(X,_e,ce)}).catch(Al)}))}let F=_l(),re=_l(),j;function le(R,W,H){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,H)):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,H])=>R?H(R):W()),F.reset()),R}function Ne(R,W,H,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!H&&Wh(In(R.fullPath,0))||(X||!H)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Yh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Ze;const Be=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:P,resolve:k,options:e,push:M,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,M(o.location).catch(ge=>{}));const H={};for(const ge in mt)H[ge]=B(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(H)),R.provide(ho,s);const X=R.unmount;Be.add(R),R.unmount=function(){Be.delete(R),Be.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 He(wi)}function St(){return He(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(M=>M.hash===L.hash));for(let L=0;L=((E=(P=M.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),Y=decodeURIComponent(M.hash);if(q===Y)return;if(p){for(let G=L+1;G{window.addEventListener("scroll",a)}),Bl(()=>{window.removeEventListener("scroll",a)})},Yn=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)},Hd="a.sidebar-item",Md=".header-anchor",Sd=300,Vd=5,Nd=Mt({setup(){Dd({headerLinkSelector:Hd,headerAnchorSelector:Md,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=B(()=>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(Yl,{name:"back-to-top"},()=>t.value?i:null)}}),Bd=Mt({rootComponents:[$d]});const Yd=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=B(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Yd,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=Mt({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Yt=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=Yt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Yt({},w,S),L.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:Y}}))}),Y},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Yt({},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:Y}}))}),L=L.filter(function(j){return re.indexOf(j)===-1}),Y},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)}),M.push({type:"medium-zoom:"+C,listener:S,options:F}),Y},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)}),M=M.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),Y},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=Yt({},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,Be=Ne.left,Vt=Ne.top;j=Yt({},j,{width:Ue,height:Ze,left:Be,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,H=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(H,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(Y);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:Y}})),re(Y)};if(v.zoomed){re(Y);return}if(S)v.original=S;else if(L.length>0){var le=L;v.original=le[0]}else{re(Y);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:Y}})),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(Y);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:Y}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(Y)};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:Y}})),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=[],M=[],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=Yt({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 Y={open:g,close:x,toggle:P,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:_};return Y};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=Mt({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=Bi(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)*Bi(Math.random()*t,.1,.95)),t=Bi(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")},Bi=(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=Mt({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/YukiHookPrefsBridge","/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/api/compat/type/ExecutorType","/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/YukiHookPrefsBridge","/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/api/compat/type/ExecutorType","/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=He(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=Mt({enhance({app:e}){const t=du(),l=e._context.provides[No],i=B(()=>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",{},()=>[Ht(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",Yi=()=>{};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,Hu=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,Mu=(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,Hu(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(Mu({},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 Yi;let n=Yi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Yi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Bu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Tu(i,t),l}function Yu(e,t={}){const{window:l=vi}=t,i=Bu(()=>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,()=>M(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function M(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 Yu("(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(""),Ho=()=>{const e=He(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=B({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())},Hr=(...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 Hr({hash:l.hash,query:l.query,params:l.params,...a})},Mo=e=>{const t=Hr(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}},Mr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=He(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=B(()=>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=Mo(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=B(()=>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=B(()=>t.value.footer),i=B(()=>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=B(()=>Ul(o.value.link)),a=B(()=>wh(o.value.link)||Oh(o.value.link)),r=B(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=B(()=>r.value==="_blank"),c=B(()=>!n.value&&!a.value&&!s.value),h=B(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=B(()=>o.value.ariaLabel||o.value.text),m=B(()=>{const P=Object.keys(i.value.locales);return P.length?!P.some(E=>E===o.value.link):o.value.link!=="/"}),g=B(()=>m.value?l.path.startsWith(o.value.link):!1),x=B(()=>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:Me(()=>[Re(P.$slots,"before"),Ht(" "+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"),Ht(" "+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=Ho(),o=B(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=B(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=B(()=>t.value.heroAlt||n.value||"hero"),r=B(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=B(()=>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:Bo(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"]]),Hp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Ho(),n=B(()=>i.value.home||t.value),a=B(()=>l.value.title),r=B(()=>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:Bo(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:Me(()=>[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"])}}}),Mp=Te(Hp,[["__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(Yl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:Me(()=>[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"],Bp={class:"title"},Yp={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=B(()=>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",Bp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:Me(()=>[ci(fe("ul",Yp,[(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 B(()=>{var _,L,M;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:(M=(L=m.value.selectLanguageAriaLabel)!=null?L:m.value.selectLanguageText)!=null?M:"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 Y;if(v===p.value.lang)Y=P;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?Y=`${le}${E}`:Y=(j=w.home)!=null?j:U}return{text:q,link:Y}})}]})},l=()=>{const c=$e(),h=B(()=>c.value.repo),p=B(()=>h.value?$r(h.value):null),m=B(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=B(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return B(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Mo(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return B(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=B(()=>[...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)}}),Br=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=Ho(),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=B(()=>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(Mp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Br,{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=Ht(", "),Tm=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return B(()=>{var _,L,M;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:(M=h.value.editLinkPattern)!=null?M:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return B(()=>{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 B(()=>{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:Me(()=>[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)?Mo(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=B(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=B(()=>{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"]]),Hm={class:"page"},Mm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),Z("main",Hm,[Re(t.$slots,"top"),fe("div",Mm,[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=B(()=>jr(l.value,o)),r=B(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=B(()=>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 Bl(()=>{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"])},[Ht(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:Me(()=>[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)])}}}),Bm=Te($m,[["__file","SidebarItem.vue"]]),Ym={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",Ym,[(N(!0),Z(Pe,null,zt(O(l),n=>(N(),we(Bm,{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(Br),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=B(()=>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=B(()=>[{"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=Mr(),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:Me(()=>[Re(E.$slots,"navbar-before")]),after:Me(()=>[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:Me(()=>[Re(E.$slots,"sidebar-top")]),bottom:Me(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Yl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(P)},{default:Me(()=>[(N(),we(Vm,{key:O(t).path},{top:Me(()=>[Re(E.$slots,"page-top")]),"content-top":Me(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":Me(()=>[Re(E.$slots,"page-content-bottom")]),bottom:Me(()=>[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:Me(()=>[Ht(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Te(lf,[["__file","NotFound.vue"]]);const nf=Mt({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 Mr().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)}),Bl(()=>{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.10 | 2023.04.21",slug:"_1-1-10-2023-04-21",link:"#_1-1-10-2023-04-21",children:[]},{level:3,title:"1.1.9 | 2023.04.17",slug:"_1-1-9-2023-04-17",link:"#_1-1-9-2023-04-17",children:[]},{level:3,title:"1.1.8 | 2023.02.01",slug:"_1-1-8-2023-02-01",link:"#_1-1-8-2023-02-01",children:[]},{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:"YukiHookPrefsBridge",slug:"yukihookprefsbridge",link:"#yukihookprefsbridge",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 Status",slug:"xposed-module-status",link:"#xposed-module-status",children:[{level:3,title:"Determine Self-activation Status",slug:"determine-self-activation-status",link:"#determine-self-activation-status",children:[]},{level:3,title:"Get Hook Framework Information",slug:"get-hook-framework-information",link:"#get-hook-framework-information",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:"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:"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:"\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.10 | 2023.04.21",slug:"_1-1-10-2023-04-21",link:"#_1-1-10-2023-04-21",children:[]},{level:3,title:"1.1.9 | 2023.04.17",slug:"_1-1-9-2023-04-17",link:"#_1-1-9-2023-04-17",children:[]},{level:3,title:"1.1.8 | 2023.02.01",slug:"_1-1-8-2023-02-01",link:"#_1-1-8-2023-02-01",children:[]},{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:"YukiHookPrefsBridge",slug:"yukihookprefsbridge",link:"#yukihookprefsbridge",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\u72B6\u6001",slug:"xposed-\u6A21\u5757\u72B6\u6001",link:"#xposed-\u6A21\u5757\u72B6\u6001",children:[{level:3,title:"\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]},{level:3,title:"\u83B7\u53D6 Hook Framework \u4FE1\u606F",slug:"\u83B7\u53D6-hook-framework-\u4FE1\u606F",link:"#\u83B7\u53D6-hook-framework-\u4FE1\u606F",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:[]},{level:2,title:"Use Native Storage",slug:"use-native-storage",link:"#use-native-storage",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:[]},{level:2,title:"\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",slug:"\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",link:"#\u4F7F\u7528\u539F\u751F\u65B9\u5F0F\u5B58\u50A8",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:"isEnablePrefsBridgeCache - field",slug:"isenableprefsbridgecache-field",link:"#isenableprefsbridgecache-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:"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:"isEnablePrefsBridgeCache - field",slug:"isenableprefsbridgecache-field",link:"#isenableprefsbridgecache-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:"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.prefs - ext-method",slug:"context-prefs-ext-method",link:"#context-prefs-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:"instanceOrNull - field",slug:"instanceornull-field",link:"#instanceornull-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:"instanceOrNull - method",slug:"instanceornull-method",link:"#instanceornull-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:"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:"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:"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:"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.prefs - ext-method",slug:"context-prefs-ext-method",link:"#context-prefs-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:"instanceOrNull - field",slug:"instanceornull-field",link:"#instanceornull-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:"instanceOrNull - method",slug:"instanceornull-method",link:"#instanceornull-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:"/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.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:"dataMaxByteSize - field",slug:"datamaxbytesize-field",link:"#datamaxbytesize-field",children:[]},{level:3,title:"dataMaxByteCompressionFactor - field",slug:"datamaxbytecompressionfactor-field",link:"#datamaxbytecompressionfactor-field",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:"YukiHookPrefsBridge - 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:"native - method",slug:"native-method",link:"#native-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:"contains - method",slug:"contains-method",link:"#contains-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"edit - method",slug:"edit-method",link:"#edit-method",children:[]},{level:2,title:"edit - method",slug:"edit-method-1",link:"#edit-method-1",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]},{level:2,title:"Editor - class",slug:"editor-class",link:"#editor-class",children:[{level:3,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:3,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:3,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:3,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:3,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:3,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:3,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"commit - method",slug:"commit-method",link:"#commit-method",children:[]},{level:3,title:"apply - method",slug:"apply-method",link:"#apply-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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:"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:"dataMaxByteSize - field",slug:"datamaxbytesize-field",link:"#datamaxbytesize-field",children:[]},{level:3,title:"dataMaxByteCompressionFactor - field",slug:"datamaxbytecompressionfactor-field",link:"#datamaxbytecompressionfactor-field",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:"YukiHookPrefsBridge - 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:"native - method",slug:"native-method",link:"#native-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:"contains - method",slug:"contains-method",link:"#contains-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"edit - method",slug:"edit-method",link:"#edit-method",children:[]},{level:2,title:"edit - method",slug:"edit-method-1",link:"#edit-method-1",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]},{level:2,title:"Editor - class",slug:"editor-class",link:"#editor-class",children:[{level:3,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:3,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:3,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:3,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:3,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:3,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:3,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:3,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"commit - method",slug:"commit-method",link:"#commit-method",children:[]},{level:3,title:"apply - method",slug:"apply-method",link:"#apply-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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:"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:"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:"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:"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:"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:"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:"PrefsData - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html",pathLocale:"/en/",extraFields:[]},{title:"ExecutorType - class",headers:[{level:2,title:"UNKNOWN - enum",slug:"unknown-enum",link:"#unknown-enum",children:[]},{level:2,title:"XPOSED - enum",slug:"xposed-enum",link:"#xposed-enum",children:[]},{level:2,title:"LSPOSED_LSPATCH - enum",slug:"lsposed-lspatch-enum",link:"#lsposed-lspatch-enum",children:[]},{level:2,title:"ED_XPOSED - enum",slug:"ed-xposed-enum",link:"#ed-xposed-enum",children:[]},{level:2,title:"TAICHI_XPOSED - enum",slug:"taichi-xposed-enum",link:"#taichi-xposed-enum",children:[]},{level:2,title:"BUG_XPOSED - enum",slug:"bug-xposed-enum",link:"#bug-xposed-enum",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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:"/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:[{level:2,title:"proxyClassName - field",slug:"proxyclassname-field",link:"#proxyclassname-field",children:[]}],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:[]},{level:2,title:"proxyClassName - field",slug:"proxyclassname-field",link:"#proxyclassname-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:"ExecutorType - class",headers:[{level:2,title:"UNKNOWN - enum",slug:"unknown-enum",link:"#unknown-enum",children:[]},{level:2,title:"XPOSED - enum",slug:"xposed-enum",link:"#xposed-enum",children:[]},{level:2,title:"LSPOSED_LSPATCH - enum",slug:"lsposed-lspatch-enum",link:"#lsposed-lspatch-enum",children:[]},{level:2,title:"ED_XPOSED - enum",slug:"ed-xposed-enum",link:"#ed-xposed-enum",children:[]},{level:2,title:"TAICHI_XPOSED - enum",slug:"taichi-xposed-enum",link:"#taichi-xposed-enum",children:[]},{level:2,title:"BUG_XPOSED - enum",slug:"bug-xposed-enum",link:"#bug-xposed-enum",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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:"/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:[{level:2,title:"proxyClassName - field",slug:"proxyclassname-field",link:"#proxyclassname-field",children:[]}],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:[]},{level:2,title:"proxyClassName - field",slug:"proxyclassname-field",link:"#proxyclassname-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:"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:"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:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Yr=ye(hf),df=()=>Yr;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Yr.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=B(()=>e.value.filter(n=>n.pathLocale===t.value));return B(()=>{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=B(()=>{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=B(()=>s.value&&!!p.value.length),E=()=>{!P.value||x()},k=()=>{!P.value||g()},_=L=>{if(!P.value)return;const M=p.value[L];!M||o.push(M.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:M,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"},M),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Mt({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Bd,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=He(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=He(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=He(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=He(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=He(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=B(()=>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=B(()=>{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)}}),Bo=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-55c11626","/en/tools/yukihookapi-projectbuilder.html",{title:"YukiHookAPI Project Builder"},["/en/tools/yukihookapi-projectbuilder","/en/tools/yukihookapi-projectbuilder.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-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-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-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-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-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-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-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-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-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-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-395d721c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html",{title:"YukiHookPrefsBridge - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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-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-65c20d2d","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html",{title:"YukiHookPrefsBridge - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.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-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-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-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-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-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-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-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-2728e033","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html",{title:"ExecutorType - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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-f150b17c","/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html",{title:"ExecutorType - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType","/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.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-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-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-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=B(()=>Ut.resolveRouteLocale(At.value.locales,t.currentRoute.value.path)),i=B(()=>Ut.resolveSiteLocaleData(At.value,l.value)),o=B(()=>Ut.resolvePageFrontmatter(gt.value)),n=B(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=B(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=B(()=>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:()=>Bo}}),{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},Hf=Ph,Mf=async()=>{var l;const e=Hf({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}};Mf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Te as _,jc as a,fe as b,Z as c,Mf as createVueApp,oe as d,Ht as e,N as o,_t as r,Me as w}; diff --git a/docs/assets/changelog.html.404c5ab3.js b/docs/assets/changelog.html.404c5ab3.js deleted file mode 100644 index 196a5eade..000000000 --- a/docs/assets/changelog.html.404c5ab3.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 c}from"./app.c86510cc.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-9-2023-04-17",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),g=o(" 1.1.9 | 2023.04.17 \u2002"),H=c("
    • \u5C06\u4F9D\u8D56\u5E93\u7684\u7C7B\u578B\u7531 Java Library (jar) \u4FEE\u6539\u4E3A Android Library (aar)
    • \u79FB\u9664\u901A\u8FC7 Hook \u6216\u53CD\u5C04 API \u5185\u90E8\u65B9\u6CD5\u3001\u53C2\u6570\u7684\u68C0\u67E5\u529F\u80FD
    • \u4FEE\u590D YukiHookDataChannel \u81EA\u52A8\u5206\u6BB5\u53D1\u9001\u6570\u636E\u529F\u80FD\u4E0D\u80FD\u6B63\u5E38\u751F\u6548 (\u4F9D\u7136\u4F1A\u629B\u51FA\u5F02\u5E38) \u7684\u95EE\u9898
    • \u65B0\u589E\u53EF\u4EE5\u624B\u52A8\u6839\u636E\u76EE\u6807\u8BBE\u5907\u7684\u9650\u5236\u4FEE\u6539 YukiHookDataChannel \u5141\u8BB8\u4E00\u6B21\u53D1\u9001\u7684\u6700\u5927\u6570\u636E\u5B57\u8282\u5927\u5C0F
    • \u79FB\u9664 YukiHookDataChannel \u53EA\u80FD\u5728\u6A21\u5757 Activity \u4E2D\u4F7F\u7528\u7684\u9650\u5236\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u5728\u4EFB\u4F55\u5730\u65B9\u4F7F\u7528\u5B83
    • \u4FEE\u6539\u5E76\u89C4\u8303 YukiHookDataChannel \u4F7F\u7528\u7684\u5E7F\u64AD Action \u540D\u79F0
    • \u4FEE\u590D YukiHookDataChannel \u5728\u4E0D\u540C\u6A21\u5757\u540C\u4E00\u5BBF\u4E3B\u7684\u60C5\u51B5\u4E0B\u51FA\u73B0 BadParcelableException \u5F02\u5E38\u7684\u95EE\u9898
    • \u65B0\u589E ExecutorType\uFF0C\u53EF\u4EE5\u901A\u8FC7 YukiHookAPI.Status.Executor.type \u6765\u83B7\u53D6\u5DF2\u77E5 Hook Framework \u7684\u7C7B\u578B
    • YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge
    • \u4FEE\u6539 YukiHookPrefsBridge \u4E3A\u975E\u5355\u4F8B\u5B9E\u73B0\uFF0C\u4F5C\u4E3A\u5355\u4F8B\u53EF\u80FD\u53D1\u751F\u6570\u636E\u6DF7\u6DC6\u7684\u95EE\u9898
    • \u4F5C\u5E9F\u4E86 Context.modulePrefs(...) \u65B9\u6CD5\uFF0C\u8BF7\u8F6C\u79FB\u5230 Context.prefs(...)
    • YukiHookPrefsBridge \u65B0\u589E native \u65B9\u6CD5\uFF0C\u652F\u6301\u76F4\u63A5\u4F5C\u4E3A\u539F\u751F\u5B58\u50A8\u5728\u6A21\u5757\u548C\u5BBF\u4E3B\u4E2D\u5B58\u50A8\u79C1\u6709\u6570\u636E
    • \u6574\u5408 YukiHookPrefsBridge \u4E2D\u7684\u5B58\u50A8\u65B9\u6CD5\u5230 YukiHookPrefsBridge.Editor\uFF0C\u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u5B58\u50A8\u6570\u636E
    • YukiHookPrefsBridge \u65B0\u589E contains \u65B9\u6CD5
    • \u7F13\u5B58 YukiHookPrefsBridge \u4E2D\u52A8\u6001\u521B\u5EFA\u7684\u4EE3\u7406\u5BF9\u8C61\uFF0C\u5C1D\u8BD5\u4FEE\u590D\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5BBF\u4E3B\u3001\u6A21\u5757\u51FA\u73B0 OOM \u7684\u95EE\u9898
    • \u4FEE\u6539 Activity \u4EE3\u7406\u529F\u80FD\u7684\u4EE3\u7406\u7C7B\u4E3A\u52A8\u6001\u751F\u6210\uFF0C\u9632\u6B62\u4E0D\u540C\u6A21\u5757\u6CE8\u5165\u5BBF\u4E3B\u540E\u9020\u6210\u51B2\u7A81
    • \u4FEE\u590D\u4E00\u4E9B\u5176\u5B83\u53EF\u80FD\u51FA\u73B0\u7684\u95EE\u9898
    ",1),f={id:"_1-1-8-2023-02-01",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),P=o(" 1.1.8 | 2023.02.01 \u2002"),b=o("\u4FEE\u590D\u5E95\u5C42 Hook \u65B9\u6CD5\u5728\u56DE\u8C03\u65F6\u4FEE\u6539 "),y=e("code",null,"result",-1),x=o(" \u7B49\u53C2\u6570\u65F6\u65F6\u4E0D\u80FD\u540C\u6B65\u66F4\u65B0\u4FEE\u6539\u540E\u7684\u72B6\u6001\u95EE\u9898\uFF0C\u611F\u8C22 "),C={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},A=o("Yongzheng Lai"),v=o(" \u7684 "),Y={href:"https://github.com/fankes/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},M=o("Issue"),I=c("
  • \u79FB\u52A8 YukiHookAPI \u81EA\u52A8\u751F\u6210\u7684\u5165\u53E3\u7C7B\u540D\u79F0\u6587\u4EF6 assets/yukihookapi_init \u5230 resources/META-INF/yukihookapi_init
  • \u5141\u8BB8\u5728\u4EC5\u6253\u5370\u5F02\u5E38\u5806\u6808\u65F6 msg \u53C2\u6570\u4E3A\u7A7A\u5E76\u53EF\u4EE5\u4E0D\u8BBE\u7F6E msg \u53C2\u6570\uFF0C\u7559\u7A7A msg \u53C2\u6570\u7684\u65E5\u5FD7\u9664\u975E\u5F02\u5E38\u5806\u6808\u4E0D\u4E3A\u7A7A\u5426\u5219\u5C06\u4E0D\u4F1A\u88AB\u8BB0\u5F55
  • \u4FEE\u590D Hook \u56DE\u8C03\u65B9\u6CD5\u4F53\u5185\u53D1\u751F\u7684\u5F02\u5E38\u6253\u5370\u7684\u65E5\u5FD7\u65E0\u5177\u4F53\u65B9\u6CD5\u4FE1\u606F\u7684 BUG
  • HookParam \u65B0\u589E instanceOrNull \u53D8\u91CF\u4E0E\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u5728\u4E0D\u786E\u5B9A Hook \u5B9E\u4F8B\u662F\u5426\u4E3A\u7A7A\u7684\u524D\u63D0\u4E0B\u4F7F\u7528\u4EE5\u9632\u6B62 Hook \u5B9E\u4F8B\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38
  • \u89E3\u8026\u5408\u6240\u6709 Member \u67E5\u627E\u529F\u80FD\u4E2D\u7684 Hooker \u5230 MemberBaseFinder.MemberHookerManager
  • \u4FEE\u6539\u4E86 YukiMemberHookCreator \u4E2D\u7684 by \u6761\u4EF6\u7528\u6CD5\uFF0C\u73B0\u5728\u53EF\u4EE5\u91CD\u590D\u4F7F\u7528 by \u65B9\u6CD5\u8BBE\u7F6E\u591A\u4E2A\u6761\u4EF6
  • \u79FB\u9664\u4E86 Android type \u4E2D\u7684\u9519\u8BEF Class \u5BF9\u8C61\u58F0\u660E
  • PackageParam.AppLifecycle \u4E2D\u7684 registerReceiver \u65B9\u6CD5\u65B0\u589E\u76F4\u63A5\u4F7F\u7528 IntentFilter \u521B\u5EFA\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u7684\u529F\u80FD
  • \u4FEE\u590D\u5728 PackageParam.AppLifecycle \u4E2D\u53EF\u80FD\u5B58\u5728\u591A\u6B21\u6CE8\u518C\u751F\u547D\u5468\u671F\u7684\u95EE\u9898
  • Revert: 1.1.7 \u7248\u672C\u7531\u4E8E\u6709\u4E00\u4E2A\u4E25\u91CD\u95EE\u9898\u5DF2\u7ECF\u64A4\u56DE\uFF0C\u8BF7\u76F4\u63A5\u66F4\u65B0\u5230\u6B64\u7248\u672C\u5373\u53EF (\u66F4\u65B0\u65E5\u5FD7\u540C 1.1.7 \u7248\u672C)
  • ",10),R={id:"_1-1-6-2023-01-21",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),L=o(" 1.1.6 | 2023.01.21 \u2002"),X=c("
    • \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"},D=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),B=o(" 1.1.5 | 2023.01.13 \u2002"),w=c('
    • \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),U={id:"_1-1-4-2022-10-04",tabindex:"-1"},W=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),E=o(" 1.1.4 | 2022.10.04 \u2002"),T=c("
    • \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),G={id:"_1-1-3-2022-09-30",tabindex:"-1"},N=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),O=o(" 1.1.3 | 2022.09.30 \u2002"),z=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),j={id:"_1-1-2-2022-09-30",tabindex:"-1"},V=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),Z=o(" 1.1.2 | 2022.09.30 \u2002"),K=c('
    • \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),J={id:"_1-1-1-2022-09-28",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),Q=o(" 1.1.1 | 2022.09.28 \u2002"),$=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),ee={id:"_1-1-0-2022-09-28",tabindex:"-1"},oe=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),de=o(" 1.1.0 | 2022.09.28 \u2002"),ie=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),ce=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),le={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},te=o("VuePress"),se=c('
  • \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),ne=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 "),ae={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},re=o("5ec1cff"),_e=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),he=c("
  • \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),ue=e("code",null,"ModifierRules",-1),ke=o(" \u4E2D\u7684 "),pe=e("code",null,"as*",-1),ge=o(" \u529F\u80FD\u6539\u540D\u4E3A "),He=e("code",null,"is*",-1),fe=o("\uFF0C\u611F\u8C22 "),me={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Pe=o("Kitsune"),be=o(" \u7684\u5EFA\u8BAE"),ye=c("
  • 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),xe=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 "),Ce=e("strong",null,"AA",-1),Ae=o(" \u4EE5\u53CA "),ve={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Ye=o("Kitsune"),Me=o(" \u7684\u5EFA\u8BAE"),Ie=o("\u4FEE\u590D "),Re=e("code",null,"appClassLoader",-1),Se=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 "),Le={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Xe=o("Luckyzyx"),Fe=o(" \u7684\u53CD\u9988"),De=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),Be=o("\u4FEE\u590D "),we=e("code",null,"YukiHookModulePrefs",-1),Ue=o(" \u4E2D "),We=e("code",null,"getStringSet",-1),Ee=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),Te={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},Ge=o("Teddy_Zhu"),Ne=o(" \u7684 "),Oe={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},ze=o("PR"),je=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),Ve=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),Ze=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),Ke=o("\u65B0\u589E\u81EA\u52A8 Hook "),Je=e("code",null,"SharedPreferences",-1),qe=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),Qe=e("code",null,"0664",-1),$e=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),eo={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},oo=o("5ec1cff"),io=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),co=c("
  • \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),lo=o("Resources Hook \u4E2D\u65B0\u589E "),to=e("code",null,"array",-1),so=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),no={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},ao=o("GSWXXN"),ro=o(" \u7684 "),_o={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},ho=o("PR"),uo=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),ko=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),po=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),go=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),Ho={id:"_1-0-92-2022-05-31",tabindex:"-1"},fo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),mo=o(" 1.0.92 | 2022.05.31 \u2002"),Po=c("
    • \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),bo={id:"_1-0-91-2022-05-29",tabindex:"-1"},yo=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),xo=o(" 1.0.91 | 2022.05.29 \u2002"),Co=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),vo=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Yo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Mo=o("Luckyzyx"),Io=o(" \u7684\u53CD\u9988"),Ro=c("
  • \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),So={id:"_1-0-90-2022-05-27",tabindex:"-1"},Lo=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),Xo=o(" 1.0.90 | 2022.05.27 \u2002"),Fo=c("
    • \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),Do={id:"_1-0-89-2022-05-26",tabindex:"-1"},Bo=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),wo=o(" 1.0.89 | 2022.05.26 \u2002"),Uo=c("
    • \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),Wo={id:"_1-0-88-2022-05-25",tabindex:"-1"},Eo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),To=o(" 1.0.88 | 2022.05.25 \u2002"),Go=c("
    • \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),No={id:"_1-0-87-2022-05-10",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),zo=o(" 1.0.87 | 2022.05.10 \u2002"),jo=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),Vo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Zo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Ko=o(" 1.0.86 | 2022.05.06 \u2002"),Jo=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),qo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Qo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),$o=o(" 1.0.85 | 2022.05.04 \u2002"),ed=c("
    • \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),od={id:"_1-0-83-2022-05-04",tabindex:"-1"},dd=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),id=o(" 1.0.83 | 2022.05.04 \u2002"),cd=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),ld={id:"_1-0-82-2022-05-04",tabindex:"-1"},td=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),sd=o(" 1.0.82 | 2022.05.04 \u2002"),nd=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),ad={id:"_1-0-81-2022-05-04",tabindex:"-1"},rd=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),_d=o(" 1.0.81 | 2022.05.04 \u2002"),hd=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),ud={id:"_1-0-80-2022-05-01",tabindex:"-1"},kd=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),pd=o(" 1.0.80 | 2022.05.01 \u2002"),gd=c("
  • 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),Hd=o("\u4FEE\u590D Hook "),fd=e("code",null,"ClassLoader",-1),md=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Pd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},bd=o("WankkoRee"),yd=o(" \u7684\u53CD\u9988"),xd=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),Cd=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),vd={id:"_1-0-78-2022-04-18",tabindex:"-1"},Yd=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Md=o(" 1.0.78 | 2022.04.18 \u2002"),Id=c("
  • 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 "),Sd=e("code",null,"PreferenceFragmentCompat",-1),Ld=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),Xd={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},Fd=o("mahoshojoHCG"),Dd=o(" \u7684\u53CD\u9988"),Bd=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),wd=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),Ud={id:"_1-0-77-2022-04-15",tabindex:"-1"},Wd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),Ed=o(" 1.0.77 | 2022.04.15 \u2002"),Td=e("code",null,"YukiHookModulePrefs",-1),Gd=o(" \u65B0\u589E "),Nd=e("code",null,"clear",-1),Od=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),zd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},jd=o("WankkoRee"),Vd=o(" \u7684\u5EFA\u8BAE"),Zd=c("
  • 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),Kd={id:"_1-0-75-2022-04-13",tabindex:"-1"},Jd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),qd=o(" 1.0.75 | 2022.04.13 \u2002"),Qd=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),$d={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},ei=o("ApeaSuperz"),oi=o(" \u7684\u8D21\u732E"),di=c("
  • \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),ii=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),ci=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),li={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ti=o("WankkoRee"),si=o(" \u7684\u8D21\u732E"),ni=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),ai=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),ri=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),_i={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},hi=o("Luckyzyx"),ui=o(" \u7684\u53CD\u9988"),ki=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),pi={id:"_1-0-72-2022-04-09",tabindex:"-1"},gi=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Hi=o(" 1.0.72 | 2022.04.09 \u2002"),fi=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),mi={id:"_1-0-71-2022-04-04",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),bi=o(" 1.0.71 | 2022.04.04 \u2002"),yi=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),xi={id:"_1-0-70-2022-04-04",tabindex:"-1"},Ci=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Ai=o(" 1.0.70 | 2022.04.04 \u2002"),vi=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),Yi=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),Mi=e("code",null,"isUseAppClassLoader",-1),Ii=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),Ri={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Si=o("WankkoRee"),Li=o(" \u7684\u53CD\u9988"),Xi=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),Fi=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),Di=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),Bi=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),wi=o("\u4FEE\u590D "),Ui=e("code",null,"allMethods",-1),Wi=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Ei={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ti=o("WankkoRee"),Gi=o(" \u7684\u53CD\u9988"),Ni=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),Oi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},zi=o("WankkoRee"),ji=o(" \u7684\u5EFA\u8BAE"),Vi=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),Zi=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 "),Ki=e("code",null,"index",-1),Ji=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),qi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Qi=o("WankkoRee"),$i=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),ec=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),oc=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),dc=o("\u4FEE\u590D\u4E86 Hook \u8FC7\u7A0B\u4E2D\u7684\u5927\u91CF BUG\uFF0C\u611F\u8C22 "),ic={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},cc=o("WankkoRee"),lc=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),tc={id:"_1-0-69-2022-03-30",tabindex:"-1"},sc=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),nc=o(" 1.0.69 | 2022.03.30 \u2002"),ac=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),rc=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),_c=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),hc=e("code",null,"allMethods",-1),uc=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),kc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},pc=o("WankkoRee"),gc=o(" \u7684\u53CD\u9988"),Hc={id:"_1-0-68-2022-03-29",tabindex:"-1"},fc=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),mc=o(" 1.0.68 | 2022.03.29 \u2002"),Pc=c("
    • \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),bc={id:"_1-0-67-2022-03-27",tabindex:"-1"},yc=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),xc=o(" 1.0.67 | 2022.03.27 \u2002"),Cc=c("
    • \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),Ac={id:"_1-0-66-2022-03-25",tabindex:"-1"},vc=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),Yc=o(" 1.0.66 | 2022.03.25 \u2002"),Mc=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),Ic={id:"_1-0-65-2022-03-25",tabindex:"-1"},Rc=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),Sc=o(" 1.0.65 | 2022.03.25 \u2002"),Lc=c("
    • \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),Xc={id:"_1-0-6-2022-03-20",tabindex:"-1"},Fc=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),Dc=o(" 1.0.6 | 2022.03.20 \u2002"),Bc=c("
    • \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),wc={id:"_1-0-55-2022-03-18",tabindex:"-1"},Uc=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),Wc=o(" 1.0.55 | 2022.03.18 \u2002"),Ec=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),Tc={id:"_1-0-5-2022-03-18",tabindex:"-1"},Gc=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Nc=o(" 1.0.5 | 2022.03.18 \u2002"),Oc=c("
    • \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),zc={id:"_1-0-4-2022-03-06",tabindex:"-1"},jc=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Vc=o(" 1.0.4 | 2022.03.06 \u2002"),Zc=c("
    • \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),Kc={id:"_1-0-3-2022-03-02",tabindex:"-1"},Jc=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),qc=o(" 1.0.3 | 2022.03.02 \u2002"),Qc=c("
    • \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),$c={id:"_1-0-2-2022-02-18",tabindex:"-1"},el=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),ol=o(" 1.0.2 | 2022.02.18 \u2002"),dl=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),il={id:"_1-0-1-2022-02-15",tabindex:"-1"},cl=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),ll=o(" 1.0.1 | 2022.02.15 \u2002"),tl=c("
    • 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),sl={id:"_1-0-2022-02-14",tabindex:"-1"},nl=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),al=o(" 1.0 | 2022.02.14 \u2002"),rl=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function _l(hl,ul){const i=t("Badge"),l=t("ExternalLinkIcon");return n(),a("div",null,[_,h,u,e("h3",k,[p,g,d(i,{type:"tip",text:"\u6700\u65B0",vertical:"middle"})]),H,e("h3",f,[m,P,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),e("ul",null,[e("li",null,[b,y,x,e("a",C,[A,d(l)]),v,e("a",Y,[M,d(l)])]),I]),e("h3",R,[S,L,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),X,e("h3",F,[D,B,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),w,e("h3",U,[W,E,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),T,e("h3",G,[N,O,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),z,e("h3",j,[V,Z,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),K,e("h3",J,[q,Q,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),$,e("h3",ee,[oe,de,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[ie,e("li",null,[ce,e("a",le,[te,d(l)])]),se,e("li",null,[ne,e("a",ae,[re,d(l)]),_e]),he,e("li",null,[ue,ke,pe,ge,He,fe,e("a",me,[Pe,d(l)]),be]),ye,e("li",null,[xe,Ce,Ae,e("a",ve,[Ye,d(l)]),Me]),e("li",null,[Ie,Re,Se,e("a",Le,[Xe,d(l)]),Fe]),De,e("li",null,[Be,we,Ue,We,Ee,e("a",Te,[Ge,d(l)]),Ne,e("a",Oe,[ze,d(l)])]),je,Ve,Ze,e("li",null,[Ke,Je,qe,Qe,$e,e("a",eo,[oo,d(l)]),io]),co,e("li",null,[lo,to,so,e("a",no,[ao,d(l)]),ro,e("a",_o,[ho,d(l)])]),uo,ko,po,go]),e("h3",Ho,[fo,mo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Po,e("h3",bo,[yo,xo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Co,Ao,vo,e("a",Yo,[Mo,d(l)]),Io]),Ro]),e("h3",So,[Lo,Xo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Fo,e("h3",Do,[Bo,wo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Uo,e("h3",Wo,[Eo,To,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Go,e("h3",No,[Oo,zo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),jo,e("h3",Vo,[Zo,Ko,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Jo,e("h3",qo,[Qo,$o,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ed,e("h3",od,[dd,id,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),cd,e("h3",ld,[td,sd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),nd,e("h3",ad,[rd,_d,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hd,e("h3",ud,[kd,pd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[gd,e("li",null,[Hd,fd,md,e("a",Pd,[bd,d(l)]),yd]),xd,Cd,Ad]),e("h3",vd,[Yd,Md,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Id,e("li",null,[Rd,Sd,Ld,e("a",Xd,[Fd,d(l)]),Dd]),Bd,wd]),e("h3",Ud,[Wd,Ed,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Td,Gd,Nd,Od,e("a",zd,[jd,d(l)]),Vd]),Zd]),e("h3",Kd,[Jd,qd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Qd,e("a",$d,[ei,d(l)]),oi]),di]),ii,e("ul",null,[e("li",null,[ci,e("a",li,[ti,d(l)]),si]),e("li",null,[ni,ai,ri,e("a",_i,[hi,d(l)]),ui]),ki]),e("h3",pi,[gi,Hi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),fi,e("h3",mi,[Pi,bi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),yi,e("h3",xi,[Ci,Ai,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[vi,e("li",null,[Yi,Mi,Ii,e("a",Ri,[Si,d(l)]),Li]),Xi,Fi,Di,Bi,e("li",null,[wi,Ui,Wi,e("a",Ei,[Ti,d(l)]),Gi]),e("li",null,[Ni,e("a",Oi,[zi,d(l)]),ji]),Vi,e("li",null,[Zi,Ki,Ji,e("a",qi,[Qi,d(l)]),$i]),ec,oc,e("li",null,[dc,e("a",ic,[cc,d(l)]),lc])]),e("h3",tc,[sc,nc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[ac,rc,e("li",null,[_c,hc,uc,e("a",kc,[pc,d(l)]),gc])]),e("h3",Hc,[fc,mc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Pc,e("h3",bc,[yc,xc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Cc,e("h3",Ac,[vc,Yc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Mc,e("h3",Ic,[Rc,Sc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Lc,e("h3",Xc,[Fc,Dc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Bc,e("h3",wc,[Uc,Wc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ec,e("h3",Tc,[Gc,Nc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Oc,e("h3",zc,[jc,Vc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Zc,e("h3",Kc,[Jc,qc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Qc,e("h3",$c,[el,ol,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),dl,e("h3",il,[cl,ll,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),tl,e("h3",sl,[nl,al,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),rl])}const pl=s(r,[["render",_l],["__file","changelog.html.vue"]]);export{pl as default}; diff --git a/docs/assets/changelog.html.49537782.js b/docs/assets/changelog.html.49537782.js new file mode 100644 index 000000000..38c8710b5 --- /dev/null +++ b/docs/assets/changelog.html.49537782.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.10 | 2023.04.21","slug":"_1-1-10-2023-04-21","link":"#_1-1-10-2023-04-21","children":[]},{"level":3,"title":"1.1.9 | 2023.04.17","slug":"_1-1-9-2023-04-17","link":"#_1-1-9-2023-04-17","children":[]},{"level":3,"title":"1.1.8 | 2023.02.01","slug":"_1-1-8-2023-02-01","link":"#_1-1-8-2023-02-01","children":[]},{"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":1682010575000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":12}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.66bbb299.js b/docs/assets/changelog.html.66bbb299.js new file mode 100644 index 000000000..169e13492 --- /dev/null +++ b/docs/assets/changelog.html.66bbb299.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 c}from"./app.f643a53b.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-10-2023-04-21",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-10-2023-04-21","aria-hidden":"true"},"#",-1),g=o(" 1.1.10 | 2023.04.21 \u2002"),f=c("
    • Activity \u4EE3\u7406\u529F\u80FD\u65B0\u589E\u6BCF\u4E2A\u88AB\u4EE3\u7406\u7684 Activity \u6307\u5B9A\u5355\u72EC\u7684\u4EE3\u7406 Activity \u529F\u80FD
    • \u4FEE\u590D YukiHookPrefsBridge \u4E2D\u7684 contains\u3001all \u65B9\u6CD5\u672A\u5224\u65AD native \u529F\u80FD\u7684\u95EE\u9898
    • \u6574\u5408 YukiHookPrefsBridge \u4E2D\u7684\u7F13\u5B58\u529F\u80FD\u5230 PreferencesCacheManager \u5E76\u4F7F\u7528 LruCache \u4F5C\u4E3A\u952E\u503C\u5BF9\u524D\u7F6E\u7F13\u5B58
    • \u4FEE\u6539 YukiHookPrefsBridge \u952E\u503C\u5BF9\u7F13\u5B58\u529F\u80FD\u5728\u6240\u6709\u73AF\u5883\u4E2D\u751F\u6548 (\u6A21\u5757\u3001\u5BBF\u4E3B)
    • \u4FEE\u6539\u90E8\u5206\u7528\u4E8E\u7F13\u5B58\u7684 HashMap \u5230 ArrayMap \u4EE5\u51CF\u5C11\u5185\u5B58\u6D88\u8017
    • \u4FEE\u590D\u4E00\u4E9B\u5176\u5B83\u53EF\u80FD\u51FA\u73B0\u7684\u95EE\u9898
    ",1),H={id:"_1-1-9-2023-04-17",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),P=o(" 1.1.9 | 2023.04.17 \u2002"),b=c("
    • \u5C06\u4F9D\u8D56\u5E93\u7684\u7C7B\u578B\u7531 Java Library (jar) \u4FEE\u6539\u4E3A Android Library (aar)
    • \u79FB\u9664\u901A\u8FC7 Hook \u6216\u53CD\u5C04 API \u5185\u90E8\u65B9\u6CD5\u3001\u53C2\u6570\u7684\u68C0\u67E5\u529F\u80FD
    • \u4FEE\u590D YukiHookDataChannel \u81EA\u52A8\u5206\u6BB5\u53D1\u9001\u6570\u636E\u529F\u80FD\u4E0D\u80FD\u6B63\u5E38\u751F\u6548 (\u4F9D\u7136\u4F1A\u629B\u51FA\u5F02\u5E38) \u7684\u95EE\u9898
    • \u65B0\u589E\u53EF\u4EE5\u624B\u52A8\u6839\u636E\u76EE\u6807\u8BBE\u5907\u7684\u9650\u5236\u4FEE\u6539 YukiHookDataChannel \u5141\u8BB8\u4E00\u6B21\u53D1\u9001\u7684\u6700\u5927\u6570\u636E\u5B57\u8282\u5927\u5C0F
    • \u79FB\u9664 YukiHookDataChannel \u53EA\u80FD\u5728\u6A21\u5757 Activity \u4E2D\u4F7F\u7528\u7684\u9650\u5236\uFF0C\u73B0\u5728\u4F60\u53EF\u4EE5\u5728\u4EFB\u4F55\u5730\u65B9\u4F7F\u7528\u5B83
    • \u4FEE\u6539\u5E76\u89C4\u8303 YukiHookDataChannel \u4F7F\u7528\u7684\u5E7F\u64AD Action \u540D\u79F0
    • \u4FEE\u590D YukiHookDataChannel \u5728\u4E0D\u540C\u6A21\u5757\u540C\u4E00\u5BBF\u4E3B\u7684\u60C5\u51B5\u4E0B\u51FA\u73B0 BadParcelableException \u5F02\u5E38\u7684\u95EE\u9898
    • \u65B0\u589E ExecutorType\uFF0C\u53EF\u4EE5\u901A\u8FC7 YukiHookAPI.Status.Executor.type \u6765\u83B7\u53D6\u5DF2\u77E5 Hook Framework \u7684\u7C7B\u578B
    • YukiHookModulePrefs \u66F4\u540D\u4E3A YukiHookPrefsBridge
    • \u4FEE\u6539 YukiHookPrefsBridge \u4E3A\u975E\u5355\u4F8B\u5B9E\u73B0\uFF0C\u4F5C\u4E3A\u5355\u4F8B\u53EF\u80FD\u53D1\u751F\u6570\u636E\u6DF7\u6DC6\u7684\u95EE\u9898
    • \u4F5C\u5E9F\u4E86 Context.modulePrefs(...) \u65B9\u6CD5\uFF0C\u8BF7\u8F6C\u79FB\u5230 Context.prefs(...)
    • YukiHookPrefsBridge \u65B0\u589E native \u65B9\u6CD5\uFF0C\u652F\u6301\u76F4\u63A5\u4F5C\u4E3A\u539F\u751F\u5B58\u50A8\u5728\u6A21\u5757\u548C\u5BBF\u4E3B\u4E2D\u5B58\u50A8\u79C1\u6709\u6570\u636E
    • \u6574\u5408 YukiHookPrefsBridge \u4E2D\u7684\u5B58\u50A8\u65B9\u6CD5\u5230 YukiHookPrefsBridge.Editor\uFF0C\u8BF7\u4F7F\u7528 edit \u65B9\u6CD5\u6765\u5B58\u50A8\u6570\u636E
    • YukiHookPrefsBridge \u65B0\u589E contains \u65B9\u6CD5
    • \u7F13\u5B58 YukiHookPrefsBridge \u4E2D\u52A8\u6001\u521B\u5EFA\u7684\u4EE3\u7406\u5BF9\u8C61\uFF0C\u5C1D\u8BD5\u4FEE\u590D\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5BBF\u4E3B\u3001\u6A21\u5757\u51FA\u73B0 OOM \u7684\u95EE\u9898
    • \u4FEE\u6539 Activity \u4EE3\u7406\u529F\u80FD\u7684\u4EE3\u7406\u7C7B\u4E3A\u52A8\u6001\u751F\u6210\uFF0C\u9632\u6B62\u4E0D\u540C\u6A21\u5757\u6CE8\u5165\u5BBF\u4E3B\u540E\u9020\u6210\u51B2\u7A81
    • \u4FEE\u590D\u4E00\u4E9B\u5176\u5B83\u53EF\u80FD\u51FA\u73B0\u7684\u95EE\u9898
    ",1),y={id:"_1-1-8-2023-02-01",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),C=o(" 1.1.8 | 2023.02.01 \u2002"),A=o("\u4FEE\u590D\u5E95\u5C42 Hook \u65B9\u6CD5\u5728\u56DE\u8C03\u65F6\u4FEE\u6539 "),v=e("code",null,"result",-1),Y=o(" \u7B49\u53C2\u6570\u65F6\u65F6\u4E0D\u80FD\u540C\u6B65\u66F4\u65B0\u4FEE\u6539\u540E\u7684\u72B6\u6001\u95EE\u9898\uFF0C\u611F\u8C22 "),M={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},I=o("Yongzheng Lai"),R=o(" \u7684 "),L={href:"https://github.com/fankes/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},S=o("Issue"),X=c("
  • \u79FB\u52A8 YukiHookAPI \u81EA\u52A8\u751F\u6210\u7684\u5165\u53E3\u7C7B\u540D\u79F0\u6587\u4EF6 assets/yukihookapi_init \u5230 resources/META-INF/yukihookapi_init
  • \u5141\u8BB8\u5728\u4EC5\u6253\u5370\u5F02\u5E38\u5806\u6808\u65F6 msg \u53C2\u6570\u4E3A\u7A7A\u5E76\u53EF\u4EE5\u4E0D\u8BBE\u7F6E msg \u53C2\u6570\uFF0C\u7559\u7A7A msg \u53C2\u6570\u7684\u65E5\u5FD7\u9664\u975E\u5F02\u5E38\u5806\u6808\u4E0D\u4E3A\u7A7A\u5426\u5219\u5C06\u4E0D\u4F1A\u88AB\u8BB0\u5F55
  • \u4FEE\u590D Hook \u56DE\u8C03\u65B9\u6CD5\u4F53\u5185\u53D1\u751F\u7684\u5F02\u5E38\u6253\u5370\u7684\u65E5\u5FD7\u65E0\u5177\u4F53\u65B9\u6CD5\u4FE1\u606F\u7684 BUG
  • HookParam \u65B0\u589E instanceOrNull \u53D8\u91CF\u4E0E\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u5728\u4E0D\u786E\u5B9A Hook \u5B9E\u4F8B\u662F\u5426\u4E3A\u7A7A\u7684\u524D\u63D0\u4E0B\u4F7F\u7528\u4EE5\u9632\u6B62 Hook \u5B9E\u4F8B\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38
  • \u89E3\u8026\u5408\u6240\u6709 Member \u67E5\u627E\u529F\u80FD\u4E2D\u7684 Hooker \u5230 MemberBaseFinder.MemberHookerManager
  • \u4FEE\u6539\u4E86 YukiMemberHookCreator \u4E2D\u7684 by \u6761\u4EF6\u7528\u6CD5\uFF0C\u73B0\u5728\u53EF\u4EE5\u91CD\u590D\u4F7F\u7528 by \u65B9\u6CD5\u8BBE\u7F6E\u591A\u4E2A\u6761\u4EF6
  • \u79FB\u9664\u4E86 Android type \u4E2D\u7684\u9519\u8BEF Class \u5BF9\u8C61\u58F0\u660E
  • PackageParam.AppLifecycle \u4E2D\u7684 registerReceiver \u65B9\u6CD5\u65B0\u589E\u76F4\u63A5\u4F7F\u7528 IntentFilter \u521B\u5EFA\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u7684\u529F\u80FD
  • \u4FEE\u590D\u5728 PackageParam.AppLifecycle \u4E2D\u53EF\u80FD\u5B58\u5728\u591A\u6B21\u6CE8\u518C\u751F\u547D\u5468\u671F\u7684\u95EE\u9898
  • Revert: 1.1.7 \u7248\u672C\u7531\u4E8E\u6709\u4E00\u4E2A\u4E25\u91CD\u95EE\u9898\u5DF2\u7ECF\u64A4\u56DE\uFF0C\u8BF7\u76F4\u63A5\u66F4\u65B0\u5230\u6B64\u7248\u672C\u5373\u53EF (\u66F4\u65B0\u65E5\u5FD7\u540C 1.1.7 \u7248\u672C)
  • ",10),F={id:"_1-1-6-2023-01-21",tabindex:"-1"},B=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),D=o(" 1.1.6 | 2023.01.21 \u2002"),w=c("
    • \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),U={id:"_1-1-5-2023-01-13",tabindex:"-1"},W=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),E=o(" 1.1.5 | 2023.01.13 \u2002"),T=c('
    • \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),G={id:"_1-1-4-2022-10-04",tabindex:"-1"},N=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),O=o(" 1.1.4 | 2022.10.04 \u2002"),z=c("
    • \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),j={id:"_1-1-3-2022-09-30",tabindex:"-1"},V=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),Z=o(" 1.1.3 | 2022.09.30 \u2002"),K=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),J={id:"_1-1-2-2022-09-30",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),Q=o(" 1.1.2 | 2022.09.30 \u2002"),$=c('
    • \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),ee={id:"_1-1-1-2022-09-28",tabindex:"-1"},oe=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),de=o(" 1.1.1 | 2022.09.28 \u2002"),ie=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),ce={id:"_1-1-0-2022-09-28",tabindex:"-1"},le=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),te=o(" 1.1.0 | 2022.09.28 \u2002"),se=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),ne=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),ae={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},re=o("VuePress"),_e=c('
  • \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),he=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 "),ue={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},ke=o("5ec1cff"),pe=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),ge=c("
  • \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),fe=e("code",null,"ModifierRules",-1),He=o(" \u4E2D\u7684 "),me=e("code",null,"as*",-1),Pe=o(" \u529F\u80FD\u6539\u540D\u4E3A "),be=e("code",null,"is*",-1),ye=o("\uFF0C\u611F\u8C22 "),xe={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Ce=o("Kitsune"),Ae=o(" \u7684\u5EFA\u8BAE"),ve=c("
  • 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),Ye=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 "),Me=e("strong",null,"AA",-1),Ie=o(" \u4EE5\u53CA "),Re={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Le=o("Kitsune"),Se=o(" \u7684\u5EFA\u8BAE"),Xe=o("\u4FEE\u590D "),Fe=e("code",null,"appClassLoader",-1),Be=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 "),De={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},we=o("Luckyzyx"),Ue=o(" \u7684\u53CD\u9988"),We=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),Ee=o("\u4FEE\u590D "),Te=e("code",null,"YukiHookModulePrefs",-1),Ge=o(" \u4E2D "),Ne=e("code",null,"getStringSet",-1),Oe=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),ze={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},je=o("Teddy_Zhu"),Ve=o(" \u7684 "),Ze={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ke=o("PR"),Je=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),qe=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),Qe=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),$e=o("\u65B0\u589E\u81EA\u52A8 Hook "),eo=e("code",null,"SharedPreferences",-1),oo=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),io=e("code",null,"0664",-1),co=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),lo={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},to=o("5ec1cff"),so=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),no=c("
  • \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),ao=o("Resources Hook \u4E2D\u65B0\u589E "),ro=e("code",null,"array",-1),_o=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),ho={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},uo=o("GSWXXN"),ko=o(" \u7684 "),po={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},go=o("PR"),fo=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),Ho=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),mo=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),Po=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),bo={id:"_1-0-92-2022-05-31",tabindex:"-1"},yo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),xo=o(" 1.0.92 | 2022.05.31 \u2002"),Co=c("
    • \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),Ao={id:"_1-0-91-2022-05-29",tabindex:"-1"},vo=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),Yo=o(" 1.0.91 | 2022.05.29 \u2002"),Mo=o("\u4FEE\u590D\u90E8\u5206\u8BBE\u5907\u7684\u5B9A\u5236\u7CFB\u7EDF\u5728 LSPosed \u73AF\u5883\u4E0B\u5F00\u673A\u542F\u52A8\u83B7\u53D6\u7684 "),Io=e("code",null,"ClassLoader",-1),Ro=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Lo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},So=o("Luckyzyx"),Xo=o(" \u7684\u53CD\u9988"),Fo=c("
  • \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),Bo={id:"_1-0-90-2022-05-27",tabindex:"-1"},Do=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),wo=o(" 1.0.90 | 2022.05.27 \u2002"),Uo=c("
    • \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),Wo={id:"_1-0-89-2022-05-26",tabindex:"-1"},Eo=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),To=o(" 1.0.89 | 2022.05.26 \u2002"),Go=c("
    • \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),No={id:"_1-0-88-2022-05-25",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),zo=o(" 1.0.88 | 2022.05.25 \u2002"),jo=c("
    • \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),Vo={id:"_1-0-87-2022-05-10",tabindex:"-1"},Zo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Ko=o(" 1.0.87 | 2022.05.10 \u2002"),Jo=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),qo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Qo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),$o=o(" 1.0.86 | 2022.05.06 \u2002"),ed=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),od={id:"_1-0-85-2022-05-04",tabindex:"-1"},dd=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),id=o(" 1.0.85 | 2022.05.04 \u2002"),cd=c("
    • \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),ld={id:"_1-0-83-2022-05-04",tabindex:"-1"},td=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),sd=o(" 1.0.83 | 2022.05.04 \u2002"),nd=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),ad={id:"_1-0-82-2022-05-04",tabindex:"-1"},rd=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),_d=o(" 1.0.82 | 2022.05.04 \u2002"),hd=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),ud={id:"_1-0-81-2022-05-04",tabindex:"-1"},kd=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),pd=o(" 1.0.81 | 2022.05.04 \u2002"),gd=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),fd={id:"_1-0-80-2022-05-01",tabindex:"-1"},Hd=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),md=o(" 1.0.80 | 2022.05.01 \u2002"),Pd=c("
  • 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),bd=o("\u4FEE\u590D Hook "),yd=e("code",null,"ClassLoader",-1),xd=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Cd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ad=o("WankkoRee"),vd=o(" \u7684\u53CD\u9988"),Yd=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),Md=e("li",null,[o("Java "),e("code",null,"type"),o(" \u65B0\u589E "),e("code",null,"ClassLoader"),o(" \u7C7B\u578B")],-1),Id=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"},Ld=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Sd=o(" 1.0.78 | 2022.04.18 \u2002"),Xd=c("
  • 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),Fd=o("\u9002\u914D "),Bd=e("code",null,"PreferenceFragmentCompat",-1),Dd=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),wd={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},Ud=o("mahoshojoHCG"),Wd=o(" \u7684\u53CD\u9988"),Ed=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),Td=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),Gd={id:"_1-0-77-2022-04-15",tabindex:"-1"},Nd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),Od=o(" 1.0.77 | 2022.04.15 \u2002"),zd=e("code",null,"YukiHookModulePrefs",-1),jd=o(" \u65B0\u589E "),Vd=e("code",null,"clear",-1),Zd=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),Kd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Jd=o("WankkoRee"),qd=o(" \u7684\u5EFA\u8BAE"),Qd=c("
  • 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),$d={id:"_1-0-75-2022-04-13",tabindex:"-1"},ei=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),oi=o(" 1.0.75 | 2022.04.13 \u2002"),di=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),ii={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},ci=o("ApeaSuperz"),li=o(" \u7684\u8D21\u732E"),ti=c("
  • \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),si=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),ni=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),ai={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ri=o("WankkoRee"),_i=o(" \u7684\u8D21\u732E"),hi=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),ui=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),ki=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),pi={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},gi=o("Luckyzyx"),fi=o(" \u7684\u53CD\u9988"),Hi=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),mi={id:"_1-0-72-2022-04-09",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),bi=o(" 1.0.72 | 2022.04.09 \u2002"),yi=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),xi={id:"_1-0-71-2022-04-04",tabindex:"-1"},Ci=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),Ai=o(" 1.0.71 | 2022.04.04 \u2002"),vi=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),Yi={id:"_1-0-70-2022-04-04",tabindex:"-1"},Mi=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Ii=o(" 1.0.70 | 2022.04.04 \u2002"),Ri=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),Li=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),Si=e("code",null,"isUseAppClassLoader",-1),Xi=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),Fi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Bi=o("WankkoRee"),Di=o(" \u7684\u53CD\u9988"),wi=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),Ui=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),Wi=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),Ei=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),Ti=o("\u4FEE\u590D "),Gi=e("code",null,"allMethods",-1),Ni=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Oi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},zi=o("WankkoRee"),ji=o(" \u7684\u53CD\u9988"),Vi=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),Zi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ki=o("WankkoRee"),Ji=o(" \u7684\u5EFA\u8BAE"),qi=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),Qi=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 "),$i=e("code",null,"index",-1),ec=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),oc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},dc=o("WankkoRee"),ic=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),cc=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),lc=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 "),sc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},nc=o("WankkoRee"),ac=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),rc={id:"_1-0-69-2022-03-30",tabindex:"-1"},_c=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),hc=o(" 1.0.69 | 2022.03.30 \u2002"),uc=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),kc=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),pc=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),gc=e("code",null,"allMethods",-1),fc=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Hc={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},mc=o("WankkoRee"),Pc=o(" \u7684\u53CD\u9988"),bc={id:"_1-0-68-2022-03-29",tabindex:"-1"},yc=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),xc=o(" 1.0.68 | 2022.03.29 \u2002"),Cc=c("
    • \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),Ac={id:"_1-0-67-2022-03-27",tabindex:"-1"},vc=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),Yc=o(" 1.0.67 | 2022.03.27 \u2002"),Mc=c("
    • \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),Ic={id:"_1-0-66-2022-03-25",tabindex:"-1"},Rc=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),Lc=o(" 1.0.66 | 2022.03.25 \u2002"),Sc=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),Xc={id:"_1-0-65-2022-03-25",tabindex:"-1"},Fc=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),Bc=o(" 1.0.65 | 2022.03.25 \u2002"),Dc=c("
    • \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),wc={id:"_1-0-6-2022-03-20",tabindex:"-1"},Uc=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),Wc=o(" 1.0.6 | 2022.03.20 \u2002"),Ec=c("
    • \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),Tc={id:"_1-0-55-2022-03-18",tabindex:"-1"},Gc=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),Nc=o(" 1.0.55 | 2022.03.18 \u2002"),Oc=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),zc={id:"_1-0-5-2022-03-18",tabindex:"-1"},jc=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Vc=o(" 1.0.5 | 2022.03.18 \u2002"),Zc=c("
    • \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),Kc={id:"_1-0-4-2022-03-06",tabindex:"-1"},Jc=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),qc=o(" 1.0.4 | 2022.03.06 \u2002"),Qc=c("
    • \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),$c={id:"_1-0-3-2022-03-02",tabindex:"-1"},el=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),ol=o(" 1.0.3 | 2022.03.02 \u2002"),dl=c("
    • \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),il={id:"_1-0-2-2022-02-18",tabindex:"-1"},cl=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),ll=o(" 1.0.2 | 2022.02.18 \u2002"),tl=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),sl={id:"_1-0-1-2022-02-15",tabindex:"-1"},nl=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),al=o(" 1.0.1 | 2022.02.15 \u2002"),rl=c("
    • 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),_l={id:"_1-0-2022-02-14",tabindex:"-1"},hl=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),ul=o(" 1.0 | 2022.02.14 \u2002"),kl=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function pl(gl,fl){const i=t("Badge"),l=t("ExternalLinkIcon");return n(),a("div",null,[_,h,u,e("h3",k,[p,g,d(i,{type:"tip",text:"\u6700\u65B0",vertical:"middle"})]),f,e("h3",H,[m,P,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),b,e("h3",y,[x,C,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),e("ul",null,[e("li",null,[A,v,Y,e("a",M,[I,d(l)]),R,e("a",L,[S,d(l)])]),X]),e("h3",F,[B,D,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),w,e("h3",U,[W,E,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),T,e("h3",G,[N,O,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),z,e("h3",j,[V,Z,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),K,e("h3",J,[q,Q,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),$,e("h3",ee,[oe,de,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ie,e("h3",ce,[le,te,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[se,e("li",null,[ne,e("a",ae,[re,d(l)])]),_e,e("li",null,[he,e("a",ue,[ke,d(l)]),pe]),ge,e("li",null,[fe,He,me,Pe,be,ye,e("a",xe,[Ce,d(l)]),Ae]),ve,e("li",null,[Ye,Me,Ie,e("a",Re,[Le,d(l)]),Se]),e("li",null,[Xe,Fe,Be,e("a",De,[we,d(l)]),Ue]),We,e("li",null,[Ee,Te,Ge,Ne,Oe,e("a",ze,[je,d(l)]),Ve,e("a",Ze,[Ke,d(l)])]),Je,qe,Qe,e("li",null,[$e,eo,oo,io,co,e("a",lo,[to,d(l)]),so]),no,e("li",null,[ao,ro,_o,e("a",ho,[uo,d(l)]),ko,e("a",po,[go,d(l)])]),fo,Ho,mo,Po]),e("h3",bo,[yo,xo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Co,e("h3",Ao,[vo,Yo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Mo,Io,Ro,e("a",Lo,[So,d(l)]),Xo]),Fo]),e("h3",Bo,[Do,wo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Uo,e("h3",Wo,[Eo,To,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Go,e("h3",No,[Oo,zo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),jo,e("h3",Vo,[Zo,Ko,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Jo,e("h3",qo,[Qo,$o,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ed,e("h3",od,[dd,id,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),cd,e("h3",ld,[td,sd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),nd,e("h3",ad,[rd,_d,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hd,e("h3",ud,[kd,pd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),gd,e("h3",fd,[Hd,md,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Pd,e("li",null,[bd,yd,xd,e("a",Cd,[Ad,d(l)]),vd]),Yd,Md,Id]),e("h3",Rd,[Ld,Sd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Xd,e("li",null,[Fd,Bd,Dd,e("a",wd,[Ud,d(l)]),Wd]),Ed,Td]),e("h3",Gd,[Nd,Od,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[zd,jd,Vd,Zd,e("a",Kd,[Jd,d(l)]),qd]),Qd]),e("h3",$d,[ei,oi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[di,e("a",ii,[ci,d(l)]),li]),ti]),si,e("ul",null,[e("li",null,[ni,e("a",ai,[ri,d(l)]),_i]),e("li",null,[hi,ui,ki,e("a",pi,[gi,d(l)]),fi]),Hi]),e("h3",mi,[Pi,bi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),yi,e("h3",xi,[Ci,Ai,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),vi,e("h3",Yi,[Mi,Ii,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Ri,e("li",null,[Li,Si,Xi,e("a",Fi,[Bi,d(l)]),Di]),wi,Ui,Wi,Ei,e("li",null,[Ti,Gi,Ni,e("a",Oi,[zi,d(l)]),ji]),e("li",null,[Vi,e("a",Zi,[Ki,d(l)]),Ji]),qi,e("li",null,[Qi,$i,ec,e("a",oc,[dc,d(l)]),ic]),cc,lc,e("li",null,[tc,e("a",sc,[nc,d(l)]),ac])]),e("h3",rc,[_c,hc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[uc,kc,e("li",null,[pc,gc,fc,e("a",Hc,[mc,d(l)]),Pc])]),e("h3",bc,[yc,xc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Cc,e("h3",Ac,[vc,Yc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Mc,e("h3",Ic,[Rc,Lc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Sc,e("h3",Xc,[Fc,Bc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Dc,e("h3",wc,[Uc,Wc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ec,e("h3",Tc,[Gc,Nc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Oc,e("h3",zc,[jc,Vc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Zc,e("h3",Kc,[Jc,qc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Qc,e("h3",$c,[el,ol,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),dl,e("h3",il,[cl,ll,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),tl,e("h3",sl,[nl,al,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),rl,e("h3",_l,[hl,ul,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),kl])}const ml=s(r,[["render",pl],["__file","changelog.html.vue"]]);export{ml as default}; diff --git a/docs/assets/changelog.html.7535d1bc.js b/docs/assets/changelog.html.7535d1bc.js new file mode 100644 index 000000000..21c7dcb99 --- /dev/null +++ b/docs/assets/changelog.html.7535d1bc.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.f643a53b.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-10-2023-04-21",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-10-2023-04-21","aria-hidden":"true"},"#",-1),_=o(" 1.1.10 | 2023.04.21 \u2002"),p=i("
    • The Activity proxy function adds the function of specifying a separate proxy Activity for each proxied Activity
    • Fixed problem that the contains and all methods in YukiHookPrefsBridge did not judge the native function
    • Integrate the cache function in YukiHookPrefsBridge into PreferencesCacheManager and use LruCache as a key-value pair cache
    • Modify YukiHookPrefsBridge key-value pair caching function to take effect in all environments (Module Apps, Host Apps)
    • Modify part of HashMap used for caching to ArrayMap to reduce memory consumption
    • Fix some other possible problems
    ",1),f={id:"_1-1-9-2023-04-17",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),k=o(" 1.1.9 | 2023.04.17 \u2002"),y=i("
    • Change the type of dependent library from Java Library (jar) to Android Library (aar)
    • Remove the inspection function of internal methods and parameters through Hook or reflection API
    • Fixed the problem that YukiHookDataChannel automatically segmented data sending function could not work normally (exception would still be thrown)
    • Added the ability to manually modify the maximum data byte size allowed by YukiHookDataChannel to be sent at one time according to the limitations of the target device
    • Remove the restriction that YukiHookDataChannel can only be used in module Activity, now you can use it anywhere
    • Modify and standardize the broadcast Action name used by YukiHookDataChannel
    • Fix the problem that BadParcelableException occurs when YukiHookDataChannel has different modules with the same host
    • Added ExecutorType, you can get the type of known Hook Framework through YukiHookAPI.Status.Executor.type
    • YukiHookModulePrefs renamed to YukiHookPrefsBridge
    • Modify YukiHookPrefsBridge to be implemented as a non-singleton, as a singleton may cause data confusion
    • Deprecated Context.modulePrefs(...) method, please move to Context.prefs(...)
    • YukiHookPrefsBridge adds native method, which supports storing private data in modules and hosts directly as native storage
    • Integrate the storage method in YukiHookPrefsBridge to YukiHookPrefsBridge.Editor, please use edit method to store data
    • YukiHookPrefsBridge adds contains method
    • Cache dynamically created proxy objects in YukiHookPrefsBridge, try to fix problems that may cause OOM in the host and modules
    • Modify the proxy class of the Activity proxy function to be dynamically generated to prevent conflicts caused by injecting different modules into the host
    • Fixed some other possible problems
    ",1),b={id:"_1-1-8-2023-02-01",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),v=o(" 1.1.8 | 2023.02.01 \u2002"),w=o("Fixed the problem that the underlying Hook method cannot update the modified state synchronously when modifying parameters such as "),A=e("code",null,"result",-1),H=o(" during callback, thanks to the "),P={href:"https://github.com/fankes/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},C=o("Issue"),F=o(" of "),M={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},Y=o("Yongzheng Lai"),I=i("
  • Move the entry class name file automatically generated by YukiHookAPI from assets/yukihookapi_init to resources/META-INF/yukihookapi_init
  • When only printing the exception stack, the msg parameter is allowed to be empty and the msg parameter can not be set, and the log with the msg parameter left blank will not be logged unless the exception stack is not empty
  • Fixed the bug that the log printed by the exception that occurs in the body of the Hook callback method has no specific method information
  • HookParam adds instanceOrNull variable and method, which can be used on the premise that the Hook instance is not sure whether it is empty to prevent the Hook instance from being empty and throw an exception
  • Decoupled all hookers in Member lookup functionality to MemberBaseFinder.MemberHookerManager
  • Modified the usage of by condition in YukiMemberHookCreator, now you can reuse by method to set multiple conditions
  • Removed wrong Class object declaration in Android type
  • The registerReceiver method in PackageParam.AppLifecycle adds the function of directly using IntentFilter to create a system broadcast listener
  • Fixed the problem that there may be multiple registration lifecycles in PackageParam.AppLifecycle
  • Revert: The 1.1.7 version has been withdrawn due to a serious problem, please update to this version directly (the update log is the same as version 1.1.7)
  • ",10),R={id:"_1-1-6-2023-01-21",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-6-2023-01-21","aria-hidden":"true"},"#",-1),D=o(" 1.1.6 | 2023.01.21 \u2002"),L=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),T={id:"_1-1-5-2023-01-13",tabindex:"-1"},z=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),X=o(" 1.1.5 | 2023.01.13 \u2002"),j=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"},O=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),W=o(" 1.1.4 | 2022.10.04 \u2002"),E=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),N={id:"_1-1-3-2022-09-30",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),U=o(" 1.1.3 | 2022.09.30 \u2002"),V=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),K={id:"_1-1-2-2022-09-30",tabindex:"-1"},Z=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),G=o(" 1.1.2 | 2022.09.30 \u2002"),J=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),Q={id:"_1-1-1-2022-09-28",tabindex:"-1"},$=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),ee=o(" 1.1.1 | 2022.09.28 \u2002"),oe=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),te={id:"_1-1-0-2022-09-28",tabindex:"-1"},de=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),ie=o(" 1.1.0 | 2022.09.28 \u2002"),ne=e("li",null,[o("This is a major version update, please refer to "),e("a",{href:"../api/home"},"API Document"),o(" and "),e("a",{href:"../api/special-features/reflection"},"Special Features"),o(" for the changes and usage mentioned in the changelog")],-1),ce=o("Change the help documentation framework to "),ae={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},se=o("VuePress"),le=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),re=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 "),he={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},ue=o("5ec1cff"),me=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),pe=e("code",null,"as*",-1),fe=o(" function in "),ge=e("code",null,"ModifierRules",-1),ke=o(" renamed to "),ye=e("code",null,"is*",-1),be=o(", thanks to "),xe={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ve=o("Kitsune"),we=o(" suggestion"),Ae=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),He=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 "),Pe=e("strong",null,"AA",-1),Ce=o(" and "),Fe={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},Me=o("Kitsune"),Ye=o(" for suggestions"),Ie=o("Fixed the problem that the object obtained by "),Re=e("code",null,"appClassLoader",-1),Se=o(" is incorrect in system applications in some systems, thanks to "),De={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Le=o("Luckyzyx"),Te=o(" for the feedback"),ze=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),Xe=o("Fixed the problem of wrong value of "),je=e("code",null,"getStringSet",-1),Be=o(" method in "),Oe=e("code",null,"YukiHookModulePrefs",-1),We=o(" and optimize the code style, thanks to "),Ee={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},Ne=o("Teddy_Zhu"),qe=o(),Ue={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ve=o("PR"),Ke=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),Ze=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),Ge=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),Je=o("Added automatic hook "),Qe=e("code",null,"SharedPreferences",-1),$e=o(" to fix the problem that file permissions are not "),eo=e("code",null,"0664",-1),oo=o(" in some systems, thanks to "),to={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},io=o("5ec1cff"),no=o(" for the feedback and implementation code provided"),co=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),ao=o("Added "),so=e("code",null,"array",-1),lo=o(" type to Resources Hook, thanks to "),ro={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},ho=o("PR"),uo=o(" of "),mo={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},_o=o("GSWXXN"),po=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),fo=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),go=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),ko=e("li",null,"Updated Demo API version to 33",-1),yo={id:"_1-0-92-2022-05-31",tabindex:"-1"},bo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),xo=o(" 1.0.92 | 2022.05.31 \u2002"),vo=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),wo={id:"_1-0-91-2022-05-29",tabindex:"-1"},Ao=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),Ho=o(" 1.0.91 | 2022.05.29 \u2002"),Po=o("Fixed the "),Co=e("code",null,"ClassLoader",-1),Fo=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),Mo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Yo=o("Luckyzyx"),Io=o(" for the feedback"),Ro=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),So={id:"_1-0-90-2022-05-27",tabindex:"-1"},Do=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),Lo=o(" 1.0.90 | 2022.05.27 \u2002"),To=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),zo={id:"_1-0-89-2022-05-26",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),jo=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),Oo={id:"_1-0-88-2022-05-25",tabindex:"-1"},Wo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),Eo=o(" 1.0.88 | 2022.05.25 \u2002"),No=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),qo={id:"_1-0-87-2022-05-10",tabindex:"-1"},Uo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Vo=o(" 1.0.87 | 2022.05.10 \u2002"),Ko=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),Zo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Go=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Jo=o(" 1.0.86 | 2022.05.06 \u2002"),Qo=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),$o={id:"_1-0-85-2022-05-04",tabindex:"-1"},et=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),ot=o(" 1.0.85 | 2022.05.04 \u2002"),tt=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),dt={id:"_1-0-83-2022-05-04",tabindex:"-1"},it=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),nt=o(" 1.0.83 | 2022.05.04 \u2002"),ct=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),at={id:"_1-0-82-2022-05-04",tabindex:"-1"},st=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),lt=o(" 1.0.82 | 2022.05.04 \u2002"),rt=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),ht={id:"_1-0-81-2022-05-04",tabindex:"-1"},ut=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),mt=o(" 1.0.81 | 2022.05.04 \u2002"),_t=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),pt={id:"_1-0-80-2022-05-01",tabindex:"-1"},ft=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),gt=o(" 1.0.80 | 2022.05.01 \u2002"),kt=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),yt=o("Fixed the problem that Hook "),bt=e("code",null,"ClassLoader",-1),xt=o(" causes Hook to freeze, thanks to "),vt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},wt=o("WankkoRee"),At=o(" for the feedback"),Ht=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),Pt=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),Ct=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),Ft={id:"_1-0-78-2022-04-18",tabindex:"-1"},Mt=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Yt=o(" 1.0.78 | 2022.04.18 \u2002"),It=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),Rt=o("Adapt the Sp data storage solution of "),St=e("code",null,"PreferenceFragmentCompat",-1),Dt=o(", thanks to "),Lt={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},Tt=o("mahoshojoHCG"),zt=o(" for feedback"),Xt=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),jt=e("li",null,"Fixed some bugs in documentation and code comments",-1),Bt={id:"_1-0-77-2022-04-15",tabindex:"-1"},Ot=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),Wt=o(" 1.0.77 | 2022.04.15 \u2002"),Et=e("code",null,"YukiHookModulePrefs",-1),Nt=o(" added "),qt=e("code",null,"clear",-1),Ut=o(" method, thanks to "),Vt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Kt=o("WankkoRee"),Zt=o(" for the suggestion"),Gt=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),Jt={id:"_1-0-75-2022-04-13",tabindex:"-1"},Qt=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),$t=o(" 1.0.75 | 2022.04.13 \u2002"),ed=o("Corrected the logic recognition part of the automatic handler, thanks to "),od={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},td=o("ApeaSuperz"),dd=o(" contribution"),id=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),nd={id:"_1-0-73-2022-04-10",tabindex:"-1"},cd=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),ad=o(" 1.0.73 | 2022.04.10 \u2002"),sd=o("Fixed some Chinese translation errors in documents, thanks to "),ld={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},rd=o("WankkoRee"),hd=o(" for their contributions"),ud=o("Fixed the problem that "),md=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),_d=o(" throws an exception when the content is empty in some cases, thanks to "),pd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},fd=o("Luckyzyx"),gd=o(" for the feedback"),kd=e("li",null,"Fixed some known bugs and improve Hook stability",-1),yd={id:"_1-0-72-2022-04-09",tabindex:"-1"},bd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),xd=o(" 1.0.72 | 2022.04.09 \u2002"),vd=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),wd={id:"_1-0-71-2022-04-04",tabindex:"-1"},Ad=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),Hd=o(" 1.0.71 | 2022.04.04 \u2002"),Pd=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),Cd={id:"_1-0-70-2022-04-04",tabindex:"-1"},Fd=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Md=o(" 1.0.70 | 2022.04.04 \u2002"),Yd=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),Id=o("Add "),Rd=e("code",null,"isUseAppClassLoader",-1),Sd=o(" function in Hook process, thanks to "),Dd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ld=o("WankkoRee"),Td=o(" for feedback"),zd=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),Xd=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),jd=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),Od=o("Fixed "),Wd=e("code",null,"allMethods",-1),Ed=o(" not throwing an exception when it is not hooked to a method, thanks to "),Nd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},qd=o("WankkoRee"),Ud=o(" for the feedback"),Vd=o("Added Hook status monitoring function, thanks to "),Kd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Zd=o("WankkoRee"),Gd=o(" for the suggestion"),Jd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),Qd=o("Added obfuscated method and variable lookup function, you can use different types of filter "),$d=e("code",null,"index",-1),ei=o(" to locate the specified method and variable, thanks to "),oi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ti=o("WankkoRee"),di=o(" for the ideas provided"),ii=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),ni=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),ci=o("Fixed a lot of bugs in the hook process, thanks to "),ai={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},si=o("WankkoRee"),li=o(" for contributing to this project"),ri={id:"_1-0-69-2022-03-30",tabindex:"-1"},hi=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),ui=o(" 1.0.69 | 2022.03.30 \u2002"),mi=e("li",null,"Added and improved annotations for some method functions",-1),_i=e("li",null,"Added more example Hook content in Demo",-1),pi=o("Fixed the issue that only the last one takes effect when "),fi=e("code",null,"allMethods",-1),gi=o(" is used multiple times in a Hook instance, thanks to "),ki={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},yi=o("WankkoRee"),bi=o(" for the feedback"),xi={id:"_1-0-68-2022-03-29",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),wi=o(" 1.0.68 | 2022.03.29 \u2002"),Ai=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),Hi={id:"_1-0-67-2022-03-27",tabindex:"-1"},Pi=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"),Fi=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),Mi={id:"_1-0-66-2022-03-25",tabindex:"-1"},Yi=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),Ii=o(" 1.0.66 | 2022.03.25 \u2002"),Ri=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),Si={id:"_1-0-65-2022-03-25",tabindex:"-1"},Di=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),Li=o(" 1.0.65 | 2022.03.25 \u2002"),Ti=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),zi={id:"_1-0-6-2022-03-20",tabindex:"-1"},Xi=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),ji=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),Oi={id:"_1-0-55-2022-03-18",tabindex:"-1"},Wi=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),Ei=o(" 1.0.55 | 2022.03.18 \u2002"),Ni=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),qi={id:"_1-0-5-2022-03-18",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Vi=o(" 1.0.5 | 2022.03.18 \u2002"),Ki=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),Zi={id:"_1-0-4-2022-03-06",tabindex:"-1"},Gi=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Ji=o(" 1.0.4 | 2022.03.06 \u2002"),Qi=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),$i={id:"_1-0-3-2022-03-02",tabindex:"-1"},en=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),on=o(" 1.0.3 | 2022.03.02 \u2002"),tn=i("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),dn={id:"_1-0-2-2022-02-18",tabindex:"-1"},nn=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),cn=o(" 1.0.2 | 2022.02.18 \u2002"),an=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),sn={id:"_1-0-1-2022-02-15",tabindex:"-1"},ln=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),rn=o(" 1.0.1 | 2022.02.15 \u2002"),hn=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),un={id:"_1-0-2022-02-14",tabindex:"-1"},mn=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),_n=o(" 1.0 | 2022.02.14 \u2002"),pn=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function fn(gn,kn){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"})]),e("ul",null,[e("li",null,[w,A,H,e("a",P,[C,t(n)]),F,e("a",M,[Y,t(n)])]),I]),e("h3",R,[S,D,t(d,{type:"warning",text:"stale",vertical:"middle"})]),L,e("h3",T,[z,X,t(d,{type:"warning",text:"stale",vertical:"middle"})]),j,e("h3",B,[O,W,t(d,{type:"warning",text:"stale",vertical:"middle"})]),E,e("h3",N,[q,U,t(d,{type:"warning",text:"stale",vertical:"middle"})]),V,e("h3",K,[Z,G,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),J,e("h3",Q,[$,ee,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),oe,e("h3",te,[de,ie,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[ne,e("li",null,[ce,e("a",ae,[se,t(n)])]),le,e("li",null,[re,e("a",he,[ue,t(n)]),me]),_e,e("li",null,[pe,fe,ge,ke,ye,be,e("a",xe,[ve,t(n)]),we]),Ae,e("li",null,[He,Pe,Ce,e("a",Fe,[Me,t(n)]),Ye]),e("li",null,[Ie,Re,Se,e("a",De,[Le,t(n)]),Te]),ze,e("li",null,[Xe,je,Be,Oe,We,e("a",Ee,[Ne,t(n)]),qe,e("a",Ue,[Ve,t(n)])]),Ke,Ze,Ge,e("li",null,[Je,Qe,$e,eo,oo,e("a",to,[io,t(n)]),no]),co,e("li",null,[ao,so,lo,e("a",ro,[ho,t(n)]),uo,e("a",mo,[_o,t(n)])]),po,fo,go,ko]),e("h3",yo,[bo,xo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),vo,e("h3",wo,[Ao,Ho,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Po,Co,Fo,e("a",Mo,[Yo,t(n)]),Io]),Ro]),e("h3",So,[Do,Lo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),To,e("h3",zo,[Xo,jo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Bo,e("h3",Oo,[Wo,Eo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),No,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"})]),Qo,e("h3",$o,[et,ot,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),tt,e("h3",dt,[it,nt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ct,e("h3",at,[st,lt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),rt,e("h3",ht,[ut,mt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),_t,e("h3",pt,[ft,gt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[kt,e("li",null,[yt,bt,xt,e("a",vt,[wt,t(n)]),At]),Ht,Pt,Ct]),e("h3",Ft,[Mt,Yt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[It,e("li",null,[Rt,St,Dt,e("a",Lt,[Tt,t(n)]),zt]),Xt,jt]),e("h3",Bt,[Ot,Wt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Et,Nt,qt,Ut,e("a",Vt,[Kt,t(n)]),Zt]),Gt]),e("h3",Jt,[Qt,$t,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[ed,e("a",od,[td,t(n)]),dd]),id]),e("h3",nd,[cd,ad,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[sd,e("a",ld,[rd,t(n)]),hd]),e("li",null,[ud,md,_d,e("a",pd,[fd,t(n)]),gd]),kd]),e("h3",yd,[bd,xd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),vd,e("h3",wd,[Ad,Hd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Pd,e("h3",Cd,[Fd,Md,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Yd,e("li",null,[Id,Rd,Sd,e("a",Dd,[Ld,t(n)]),Td]),zd,Xd,jd,Bd,e("li",null,[Od,Wd,Ed,e("a",Nd,[qd,t(n)]),Ud]),e("li",null,[Vd,e("a",Kd,[Zd,t(n)]),Gd]),Jd,e("li",null,[Qd,$d,ei,e("a",oi,[ti,t(n)]),di]),ii,ni,e("li",null,[ci,e("a",ai,[si,t(n)]),li])]),e("h3",ri,[hi,ui,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[mi,_i,e("li",null,[pi,fi,gi,e("a",ki,[yi,t(n)]),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,[Yi,Ii,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ri,e("h3",Si,[Di,Li,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ti,e("h3",zi,[Xi,ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Bi,e("h3",Oi,[Wi,Ei,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ni,e("h3",qi,[Ui,Vi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ki,e("h3",Zi,[Gi,Ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Qi,e("h3",$i,[en,on,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),tn,e("h3",dn,[nn,cn,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),an,e("h3",sn,[ln,rn,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),hn,e("h3",un,[mn,_n,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),pn])}const bn=a(r,[["render",fn],["__file","changelog.html.vue"]]);export{bn as default}; diff --git a/docs/assets/changelog.html.97f338ca.js b/docs/assets/changelog.html.97f338ca.js deleted file mode 100644 index ee5f3a89a..000000000 --- a/docs/assets/changelog.html.97f338ca.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.9 | 2023.04.17","slug":"_1-1-9-2023-04-17","link":"#_1-1-9-2023-04-17","children":[]},{"level":3,"title":"1.1.8 | 2023.02.01","slug":"_1-1-8-2023-02-01","link":"#_1-1-8-2023-02-01","children":[]},{"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":1681680475000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":13}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.b581aa91.js b/docs/assets/changelog.html.b581aa91.js deleted file mode 100644 index 2858883b3..000000000 --- a/docs/assets/changelog.html.b581aa91.js +++ /dev/null @@ -1 +0,0 @@ -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.9 | 2023.04.17","slug":"_1-1-9-2023-04-17","link":"#_1-1-9-2023-04-17","children":[]},{"level":3,"title":"1.1.8 | 2023.02.01","slug":"_1-1-8-2023-02-01","link":"#_1-1-8-2023-02-01","children":[]},{"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":1681680475000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":11}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.bb9eda6f.js b/docs/assets/changelog.html.bb9eda6f.js new file mode 100644 index 000000000..203db6b1c --- /dev/null +++ b/docs/assets/changelog.html.bb9eda6f.js @@ -0,0 +1 @@ +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.10 | 2023.04.21","slug":"_1-1-10-2023-04-21","link":"#_1-1-10-2023-04-21","children":[]},{"level":3,"title":"1.1.9 | 2023.04.17","slug":"_1-1-9-2023-04-17","link":"#_1-1-9-2023-04-17","children":[]},{"level":3,"title":"1.1.8 | 2023.02.01","slug":"_1-1-8-2023-02-01","link":"#_1-1-8-2023-02-01","children":[]},{"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":1682010575000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":14}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.f383c772.js b/docs/assets/changelog.html.f383c772.js deleted file mode 100644 index 11ae5434d..000000000 --- a/docs/assets/changelog.html.f383c772.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as c,r as a,o as s,c as l,b as e,d as t,a as i,e as o}from"./app.c86510cc.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-9-2023-04-17",tabindex:"-1"},m=e("a",{class:"header-anchor",href:"#_1-1-9-2023-04-17","aria-hidden":"true"},"#",-1),_=o(" 1.1.9 | 2023.04.17 \u2002"),p=i("
    • Change the type of dependent library from Java Library (jar) to Android Library (aar)
    • Remove the inspection function of internal methods and parameters through Hook or reflection API
    • Fixed the problem that YukiHookDataChannel automatically segmented data sending function could not work normally (exception would still be thrown)
    • Added the ability to manually modify the maximum data byte size allowed by YukiHookDataChannel to be sent at one time according to the limitations of the target device
    • Remove the restriction that YukiHookDataChannel can only be used in module Activity, now you can use it anywhere
    • Modify and standardize the broadcast Action name used by YukiHookDataChannel
    • Fix the problem that BadParcelableException occurs when YukiHookDataChannel has different modules with the same host
    • Added ExecutorType, you can get the type of known Hook Framework through YukiHookAPI.Status.Executor.type
    • YukiHookModulePrefs renamed to YukiHookPrefsBridge
    • Modify YukiHookPrefsBridge to be implemented as a non-singleton, as a singleton may cause data confusion
    • Deprecated Context.modulePrefs(...) method, please move to Context.prefs(...)
    • YukiHookPrefsBridge adds native method, which supports storing private data in modules and hosts directly as native storage
    • Integrate the storage method in YukiHookPrefsBridge to YukiHookPrefsBridge.Editor, please use edit method to store data
    • YukiHookPrefsBridge adds contains method
    • Cache dynamically created proxy objects in YukiHookPrefsBridge, try to fix problems that may cause OOM in the host and modules
    • Modify the proxy class of the Activity proxy function to be dynamically generated to prevent conflicts caused by injecting different modules into the host
    • Fixed some other possible problems
    ",1),f={id:"_1-1-8-2023-02-01",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-8-2023-02-01","aria-hidden":"true"},"#",-1),k=o(" 1.1.8 | 2023.02.01 \u2002"),y=o("Fixed the problem that the underlying Hook method cannot update the modified state synchronously when modifying parameters such as "),b=e("code",null,"result",-1),x=o(" during callback, thanks to the "),v={href:"https://github.com/fankes/YukiHookAPI/issues/23",target:"_blank",rel:"noopener noreferrer"},w=o("Issue"),A=o(" of "),H={href:"https://github.com/elvizlai",target:"_blank",rel:"noopener noreferrer"},P=o("Yongzheng Lai"),C=i("
  • Move the entry class name file automatically generated by YukiHookAPI from assets/yukihookapi_init to resources/META-INF/yukihookapi_init
  • When only printing the exception stack, the msg parameter is allowed to be empty and the msg parameter can not be set, and the log with the msg parameter left blank will not be logged unless the exception stack is not empty
  • Fixed the bug that the log printed by the exception that occurs in the body of the Hook callback method has no specific method information
  • HookParam adds instanceOrNull variable and method, which can be used on the premise that the Hook instance is not sure whether it is empty to prevent the Hook instance from being empty and throw an exception
  • Decoupled all hookers in Member lookup functionality to MemberBaseFinder.MemberHookerManager
  • Modified the usage of by condition in YukiMemberHookCreator, now you can reuse by method to set multiple conditions
  • Removed wrong Class object declaration in Android type
  • The registerReceiver method in PackageParam.AppLifecycle adds the function of directly using IntentFilter to create a system broadcast listener
  • Fixed the problem that there may be multiple registration lifecycles in PackageParam.AppLifecycle
  • Revert: The 1.1.7 version has been withdrawn due to a serious problem, please update to this version directly (the update log is the same as version 1.1.7)
  • ",10),F={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),Y=o(" 1.1.6 | 2023.01.21 \u2002"),I=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),R={id:"_1-1-5-2023-01-13",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-5-2023-01-13","aria-hidden":"true"},"#",-1),D=o(" 1.1.5 | 2023.01.13 \u2002"),L=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),z={id:"_1-1-4-2022-10-04",tabindex:"-1"},T=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),X=o(" 1.1.4 | 2022.10.04 \u2002"),j=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),O={id:"_1-1-3-2022-09-30",tabindex:"-1"},W=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),B=o(" 1.1.3 | 2022.09.30 \u2002"),E=e("ul",null,[e("li",null,"Fixed a fatal bug where the Hook entry class name could not be customized"),e("li",null,[o("Added some code notes in "),e("code",null,"LoggerFactory"),o(" and updated special features documentation")])],-1),N={id:"_1-1-2-2022-09-30",tabindex:"-1"},q=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),U=o(" 1.1.2 | 2022.09.30 \u2002"),V=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),K={id:"_1-1-1-2022-09-28",tabindex:"-1"},Z=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),G=o(" 1.1.1 | 2022.09.28 \u2002"),J=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),Q={id:"_1-1-0-2022-09-28",tabindex:"-1"},$=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),ee=o(" 1.1.0 | 2022.09.28 \u2002"),oe=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),te=o("Change the help documentation framework to "),de={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},ie=o("VuePress"),ne=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),ae=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 "),ce={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},se=o("5ec1cff"),le=o(" for the feedback and solutions provided"),re=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),he=e("code",null,"as*",-1),ue=o(" function in "),me=e("code",null,"ModifierRules",-1),_e=o(" renamed to "),pe=e("code",null,"is*",-1),fe=o(", thanks to "),ge={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ke=o("Kitsune"),ye=o(" suggestion"),be=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),xe=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 "),ve=e("strong",null,"AA",-1),we=o(" and "),Ae={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},He=o("Kitsune"),Pe=o(" for suggestions"),Ce=o("Fixed the problem that the object obtained by "),Fe=e("code",null,"appClassLoader",-1),Me=o(" is incorrect in system applications in some systems, thanks to "),Ye={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Ie=o("Luckyzyx"),Re=o(" for the feedback"),Se=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),De=o("Fixed the problem of wrong value of "),Le=e("code",null,"getStringSet",-1),ze=o(" method in "),Te=e("code",null,"YukiHookModulePrefs",-1),Xe=o(" and optimize the code style, thanks to "),je={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},Oe=o("Teddy_Zhu"),We=o(),Be={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},Ee=o("PR"),Ne=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),qe=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),Ue=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),Ve=o("Added automatic hook "),Ke=e("code",null,"SharedPreferences",-1),Ze=o(" to fix the problem that file permissions are not "),Ge=e("code",null,"0664",-1),Je=o(" in some systems, thanks to "),Qe={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},$e=o("5ec1cff"),eo=o(" for the feedback and implementation code provided"),oo=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),to=o("Added "),io=e("code",null,"array",-1),no=o(" type to Resources Hook, thanks to "),ao={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},co=o("PR"),so=o(" of "),lo={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},ro=o("GSWXXN"),ho=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),uo=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),mo=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),_o=e("li",null,"Updated Demo API version to 33",-1),po={id:"_1-0-92-2022-05-31",tabindex:"-1"},fo=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),go=o(" 1.0.92 | 2022.05.31 \u2002"),ko=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),yo={id:"_1-0-91-2022-05-29",tabindex:"-1"},bo=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),xo=o(" 1.0.91 | 2022.05.29 \u2002"),vo=o("Fixed the "),wo=e("code",null,"ClassLoader",-1),Ao=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),Ho={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Po=o("Luckyzyx"),Co=o(" for the feedback"),Fo=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"},Yo=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),Io=o(" 1.0.90 | 2022.05.27 \u2002"),Ro=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),So={id:"_1-0-89-2022-05-26",tabindex:"-1"},Do=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),Lo=o(" 1.0.89 | 2022.05.26 \u2002"),zo=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),To={id:"_1-0-88-2022-05-25",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),jo=o(" 1.0.88 | 2022.05.25 \u2002"),Oo=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),Wo={id:"_1-0-87-2022-05-10",tabindex:"-1"},Bo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),Eo=o(" 1.0.87 | 2022.05.10 \u2002"),No=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),qo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Uo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Vo=o(" 1.0.86 | 2022.05.06 \u2002"),Ko=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),Zo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Go=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Jo=o(" 1.0.85 | 2022.05.04 \u2002"),Qo=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),$o={id:"_1-0-83-2022-05-04",tabindex:"-1"},et=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),ot=o(" 1.0.83 | 2022.05.04 \u2002"),tt=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),dt={id:"_1-0-82-2022-05-04",tabindex:"-1"},it=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),nt=o(" 1.0.82 | 2022.05.04 \u2002"),at=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),ct={id:"_1-0-81-2022-05-04",tabindex:"-1"},st=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),lt=o(" 1.0.81 | 2022.05.04 \u2002"),rt=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),ht={id:"_1-0-80-2022-05-01",tabindex:"-1"},ut=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),mt=o(" 1.0.80 | 2022.05.01 \u2002"),_t=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),pt=o("Fixed the problem that Hook "),ft=e("code",null,"ClassLoader",-1),gt=o(" causes Hook to freeze, thanks to "),kt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},yt=o("WankkoRee"),bt=o(" for the feedback"),xt=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),vt=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),wt=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),At={id:"_1-0-78-2022-04-18",tabindex:"-1"},Ht=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Pt=o(" 1.0.78 | 2022.04.18 \u2002"),Ct=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),Ft=o("Adapt the Sp data storage solution of "),Mt=e("code",null,"PreferenceFragmentCompat",-1),Yt=o(", thanks to "),It={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},Rt=o("mahoshojoHCG"),St=o(" for feedback"),Dt=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),Lt=e("li",null,"Fixed some bugs in documentation and code comments",-1),zt={id:"_1-0-77-2022-04-15",tabindex:"-1"},Tt=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),Xt=o(" 1.0.77 | 2022.04.15 \u2002"),jt=e("code",null,"YukiHookModulePrefs",-1),Ot=o(" added "),Wt=e("code",null,"clear",-1),Bt=o(" method, thanks to "),Et={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Nt=o("WankkoRee"),qt=o(" for the suggestion"),Ut=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),Vt={id:"_1-0-75-2022-04-13",tabindex:"-1"},Kt=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Zt=o(" 1.0.75 | 2022.04.13 \u2002"),Gt=o("Corrected the logic recognition part of the automatic handler, thanks to "),Jt={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Qt=o("ApeaSuperz"),$t=o(" contribution"),ed=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),od={id:"_1-0-73-2022-04-10",tabindex:"-1"},td=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),dd=o(" 1.0.73 | 2022.04.10 \u2002"),id=o("Fixed some Chinese translation errors in documents, thanks to "),nd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ad=o("WankkoRee"),cd=o(" for their contributions"),sd=o("Fixed the problem that "),ld=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),rd=o(" throws an exception when the content is empty in some cases, thanks to "),hd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ud=o("Luckyzyx"),md=o(" for the feedback"),_d=e("li",null,"Fixed some known bugs and improve Hook stability",-1),pd={id:"_1-0-72-2022-04-09",tabindex:"-1"},fd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),gd=o(" 1.0.72 | 2022.04.09 \u2002"),kd=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),yd={id:"_1-0-71-2022-04-04",tabindex:"-1"},bd=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),xd=o(" 1.0.71 | 2022.04.04 \u2002"),vd=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),wd={id:"_1-0-70-2022-04-04",tabindex:"-1"},Ad=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Hd=o(" 1.0.70 | 2022.04.04 \u2002"),Pd=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),Cd=o("Add "),Fd=e("code",null,"isUseAppClassLoader",-1),Md=o(" function in Hook process, thanks to "),Yd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Id=o("WankkoRee"),Rd=o(" for feedback"),Sd=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),Dd=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),Ld=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),zd=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),Td=o("Fixed "),Xd=e("code",null,"allMethods",-1),jd=o(" not throwing an exception when it is not hooked to a method, thanks to "),Od={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Wd=o("WankkoRee"),Bd=o(" for the feedback"),Ed=o("Added Hook status monitoring function, thanks to "),Nd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},qd=o("WankkoRee"),Ud=o(" for the suggestion"),Vd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),Kd=o("Added obfuscated method and variable lookup function, you can use different types of filter "),Zd=e("code",null,"index",-1),Gd=o(" to locate the specified method and variable, thanks to "),Jd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Qd=o("WankkoRee"),$d=o(" for the ideas provided"),ei=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),oi=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),ti=o("Fixed a lot of bugs in the hook process, thanks to "),di={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ii=o("WankkoRee"),ni=o(" for contributing to this project"),ai={id:"_1-0-69-2022-03-30",tabindex:"-1"},ci=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),si=o(" 1.0.69 | 2022.03.30 \u2002"),li=e("li",null,"Added and improved annotations for some method functions",-1),ri=e("li",null,"Added more example Hook content in Demo",-1),hi=o("Fixed the issue that only the last one takes effect when "),ui=e("code",null,"allMethods",-1),mi=o(" is used multiple times in a Hook instance, thanks to "),_i={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},pi=o("WankkoRee"),fi=o(" for the feedback"),gi={id:"_1-0-68-2022-03-29",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),yi=o(" 1.0.68 | 2022.03.29 \u2002"),bi=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),xi={id:"_1-0-67-2022-03-27",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),wi=o(" 1.0.67 | 2022.03.27 \u2002"),Ai=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),Hi={id:"_1-0-66-2022-03-25",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),Ci=o(" 1.0.66 | 2022.03.25 \u2002"),Fi=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"},Yi=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),Ii=o(" 1.0.65 | 2022.03.25 \u2002"),Ri=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),Si={id:"_1-0-6-2022-03-20",tabindex:"-1"},Di=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),Li=o(" 1.0.6 | 2022.03.20 \u2002"),zi=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),Ti={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),ji=o(" 1.0.55 | 2022.03.18 \u2002"),Oi=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),Wi={id:"_1-0-5-2022-03-18",tabindex:"-1"},Bi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Ei=o(" 1.0.5 | 2022.03.18 \u2002"),Ni=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),qi={id:"_1-0-4-2022-03-06",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Vi=o(" 1.0.4 | 2022.03.06 \u2002"),Ki=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),Zi={id:"_1-0-3-2022-03-02",tabindex:"-1"},Gi=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Ji=o(" 1.0.3 | 2022.03.02 \u2002"),Qi=i("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),$i={id:"_1-0-2-2022-02-18",tabindex:"-1"},en=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),on=o(" 1.0.2 | 2022.02.18 \u2002"),tn=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),dn={id:"_1-0-1-2022-02-15",tabindex:"-1"},nn=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),an=o(" 1.0.1 | 2022.02.15 \u2002"),cn=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),sn={id:"_1-0-2022-02-14",tabindex:"-1"},ln=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),rn=o(" 1.0 | 2022.02.14 \u2002"),hn=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function un(mn,_n){const d=a("Badge"),n=a("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"})]),e("ul",null,[e("li",null,[y,b,x,e("a",v,[w,t(n)]),A,e("a",H,[P,t(n)])]),C]),e("h3",F,[M,Y,t(d,{type:"warning",text:"stale",vertical:"middle"})]),I,e("h3",R,[S,D,t(d,{type:"warning",text:"stale",vertical:"middle"})]),L,e("h3",z,[T,X,t(d,{type:"warning",text:"stale",vertical:"middle"})]),j,e("h3",O,[W,B,t(d,{type:"warning",text:"stale",vertical:"middle"})]),E,e("h3",N,[q,U,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),V,e("h3",K,[Z,G,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),J,e("h3",Q,[$,ee,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[oe,e("li",null,[te,e("a",de,[ie,t(n)])]),ne,e("li",null,[ae,e("a",ce,[se,t(n)]),le]),re,e("li",null,[he,ue,me,_e,pe,fe,e("a",ge,[ke,t(n)]),ye]),be,e("li",null,[xe,ve,we,e("a",Ae,[He,t(n)]),Pe]),e("li",null,[Ce,Fe,Me,e("a",Ye,[Ie,t(n)]),Re]),Se,e("li",null,[De,Le,ze,Te,Xe,e("a",je,[Oe,t(n)]),We,e("a",Be,[Ee,t(n)])]),Ne,qe,Ue,e("li",null,[Ve,Ke,Ze,Ge,Je,e("a",Qe,[$e,t(n)]),eo]),oo,e("li",null,[to,io,no,e("a",ao,[co,t(n)]),so,e("a",lo,[ro,t(n)])]),ho,uo,mo,_o]),e("h3",po,[fo,go,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ko,e("h3",yo,[bo,xo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[vo,wo,Ao,e("a",Ho,[Po,t(n)]),Co]),Fo]),e("h3",Mo,[Yo,Io,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ro,e("h3",So,[Do,Lo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),zo,e("h3",To,[Xo,jo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Oo,e("h3",Wo,[Bo,Eo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),No,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"})]),Qo,e("h3",$o,[et,ot,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),tt,e("h3",dt,[it,nt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),at,e("h3",ct,[st,lt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),rt,e("h3",ht,[ut,mt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[_t,e("li",null,[pt,ft,gt,e("a",kt,[yt,t(n)]),bt]),xt,vt,wt]),e("h3",At,[Ht,Pt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Ct,e("li",null,[Ft,Mt,Yt,e("a",It,[Rt,t(n)]),St]),Dt,Lt]),e("h3",zt,[Tt,Xt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[jt,Ot,Wt,Bt,e("a",Et,[Nt,t(n)]),qt]),Ut]),e("h3",Vt,[Kt,Zt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Gt,e("a",Jt,[Qt,t(n)]),$t]),ed]),e("h3",od,[td,dd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[id,e("a",nd,[ad,t(n)]),cd]),e("li",null,[sd,ld,rd,e("a",hd,[ud,t(n)]),md]),_d]),e("h3",pd,[fd,gd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),kd,e("h3",yd,[bd,xd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),vd,e("h3",wd,[Ad,Hd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Pd,e("li",null,[Cd,Fd,Md,e("a",Yd,[Id,t(n)]),Rd]),Sd,Dd,Ld,zd,e("li",null,[Td,Xd,jd,e("a",Od,[Wd,t(n)]),Bd]),e("li",null,[Ed,e("a",Nd,[qd,t(n)]),Ud]),Vd,e("li",null,[Kd,Zd,Gd,e("a",Jd,[Qd,t(n)]),$d]),ei,oi,e("li",null,[ti,e("a",di,[ii,t(n)]),ni])]),e("h3",ai,[ci,si,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[li,ri,e("li",null,[hi,ui,mi,e("a",_i,[pi,t(n)]),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,[Yi,Ii,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ri,e("h3",Si,[Di,Li,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),zi,e("h3",Ti,[Xi,ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Oi,e("h3",Wi,[Bi,Ei,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ni,e("h3",qi,[Ui,Vi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ki,e("h3",Zi,[Gi,Ji,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Qi,e("h3",$i,[en,on,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),tn,e("h3",dn,[nn,an,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),cn,e("h3",sn,[ln,rn,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),hn])}const fn=c(r,[["render",un],["__file","changelog.html.vue"]]);export{fn as default}; diff --git a/docs/assets/contacts.html.b298d308.js b/docs/assets/contacts.html.87553cba.js similarity index 94% rename from docs/assets/contacts.html.b298d308.js rename to docs/assets/contacts.html.87553cba.js index c14d57449..f8819d871 100644 --- a/docs/assets/contacts.html.b298d308.js +++ b/docs/assets/contacts.html.87553cba.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.c86510cc.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.f643a53b.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.9cfe0a74.js b/docs/assets/contacts.html.9cf369d9.js similarity index 91% rename from docs/assets/contacts.html.9cfe0a74.js rename to docs/assets/contacts.html.9cf369d9.js index ad57f57ff..759399919 100644 --- a/docs/assets/contacts.html.9cfe0a74.js +++ b/docs/assets/contacts.html.9cf369d9.js @@ -1 +1 @@ -import{_ as s,r,o as c,c as a,b as e,d as n,e as o}from"./app.c86510cc.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.f643a53b.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.4d234fcd.js b/docs/assets/example.html.3900946b.js similarity index 99% rename from docs/assets/example.html.4d234fcd.js rename to docs/assets/example.html.3900946b.js index 7c216f2fa..95f574121 100644 --- a/docs/assets/example.html.4d234fcd.js +++ b/docs/assets/example.html.3900946b.js @@ -1,4 +1,4 @@ -import{_ as l,r as p,o as i,c,b as s,d as a,a as o,e as n}from"./app.c86510cc.js";const t={},r=o(`

    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 l,r as p,o as i,c,b as s,d as a,a as o,e as n}from"./app.f643a53b.js";const t={},r=o(`

    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.ab78e7c6.js b/docs/assets/example.html.5bca6c9f.js
    similarity index 99%
    rename from docs/assets/example.html.ab78e7c6.js
    rename to docs/assets/example.html.5bca6c9f.js
    index 0beccd27f..b5c2b90af 100644
    --- a/docs/assets/example.html.ab78e7c6.js
    +++ b/docs/assets/example.html.5bca6c9f.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.c86510cc.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.f643a53b.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.2ead2d85.js b/docs/assets/future.html.a7a230a8.js
    similarity index 98%
    rename from docs/assets/future.html.2ead2d85.js
    rename to docs/assets/future.html.a7a230a8.js
    index 71c0e396b..f24f9f800 100644
    --- a/docs/assets/future.html.2ead2d85.js
    +++ b/docs/assets/future.html.a7a230a8.js
    @@ -1 +1 @@
    -import{_ as t,r,o as c,c as i,b as e,d as n,a,e as o}from"./app.c86510cc.js";const s={},h=a('

    \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

    YukiHookPrefsBridge

    \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

    \u5982\u679C\u4F60\u559C\u6B22 YukiHookAPI \u7684\u53CD\u5C04 API\uFF0C\u4F46\u4F60\u7684\u9879\u76EE\u53EF\u80FD\u5E76\u4E0D\u9700\u8981\u76F8\u5173 Hook \u529F\u80FD\u3002

    \u90A3\u4E48\u8FD9\u91CC\u6709\u4E00\u4E2A\u597D\u6D88\u606F\u8981\u544A\u8BC9\u4F60\uFF1A

    ',14),p=e("code",null,"YukiHookAPI",-1),k=o(" \u7684\u6838\u5FC3\u53CD\u5C04 API \u5DF2\u88AB\u89E3\u8026\u5408\u4E3A "),l={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},u=o("YukiReflection"),_=o(" \u9879\u76EE\uFF0C\u5B83\u73B0\u5728\u80FD\u5728\u4EFB\u4F55 Android \u9879\u76EE\u4E2D\u4F7F\u7528\u3002"),f=a('

    \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

    ',5);function A(P,b){const d=r("ExternalLinkIcon");return c(),i("div",null,[h,e("p",null,[p,k,e("a",l,[u,n(d)]),_]),f])}const I=t(s,[["render",A],["__file","future.html.vue"]]);export{I as default}; +import{_ as t,r,o as c,c as i,b as e,d as n,a,e as o}from"./app.f643a53b.js";const s={},h=a('

    \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

    YukiHookPrefsBridge

    \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

    \u5982\u679C\u4F60\u559C\u6B22 YukiHookAPI \u7684\u53CD\u5C04 API\uFF0C\u4F46\u4F60\u7684\u9879\u76EE\u53EF\u80FD\u5E76\u4E0D\u9700\u8981\u76F8\u5173 Hook \u529F\u80FD\u3002

    \u90A3\u4E48\u8FD9\u91CC\u6709\u4E00\u4E2A\u597D\u6D88\u606F\u8981\u544A\u8BC9\u4F60\uFF1A

    ',14),p=e("code",null,"YukiHookAPI",-1),k=o(" \u7684\u6838\u5FC3\u53CD\u5C04 API \u5DF2\u88AB\u89E3\u8026\u5408\u4E3A "),l={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},u=o("YukiReflection"),_=o(" \u9879\u76EE\uFF0C\u5B83\u73B0\u5728\u80FD\u5728\u4EFB\u4F55 Android \u9879\u76EE\u4E2D\u4F7F\u7528\u3002"),f=a('

    \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

    ',5);function A(P,b){const d=r("ExternalLinkIcon");return c(),i("div",null,[h,e("p",null,[p,k,e("a",l,[u,n(d)]),_]),f])}const I=t(s,[["render",A],["__file","future.html.vue"]]);export{I as default}; diff --git a/docs/assets/future.html.aa965605.js b/docs/assets/future.html.cec35036.js similarity index 98% rename from docs/assets/future.html.aa965605.js rename to docs/assets/future.html.cec35036.js index 14c64e51f..edf6f5cbb 100644 --- a/docs/assets/future.html.aa965605.js +++ b/docs/assets/future.html.cec35036.js @@ -1 +1 @@ -import{_ as a,r as n,o as i,c as s,b as o,d,a as t,e}from"./app.c86510cc.js";const c={},u=t('

    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.

    YukiHookPrefsBridge

    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

    If you like the Reflection API of YukiHookAPI, but your project may not need related Hook functions.

    Well here is some good news for you:

    ',14),l=e("The core Reflection API of "),h=o("code",null,"YukiHookAPI",-1),p=e(" has been decoupled into "),f={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},m=e("YukiReflection"),k=e(" project, which can now be used in any Android project."),b=t('

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic builder.

    If you don't like the automatic builder, 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.

    ',5);function g(y,_){const r=n("ExternalLinkIcon");return i(),s("div",null,[u,o("p",null,[l,h,p,o("a",f,[m,d(r)]),k]),b])}const I=a(c,[["render",g],["__file","future.html.vue"]]);export{I as default}; +import{_ as a,r as n,o as i,c as s,b as o,d,a as t,e}from"./app.f643a53b.js";const c={},u=t('

    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.

    YukiHookPrefsBridge

    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

    If you like the Reflection API of YukiHookAPI, but your project may not need related Hook functions.

    Well here is some good news for you:

    ',14),l=e("The core Reflection API of "),h=o("code",null,"YukiHookAPI",-1),p=e(" has been decoupled into "),f={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},m=e("YukiReflection"),k=e(" project, which can now be used in any Android project."),b=t('

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic builder.

    If you don't like the automatic builder, 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.

    ',5);function g(y,_){const r=n("ExternalLinkIcon");return i(),s("div",null,[u,o("p",null,[l,h,p,o("a",f,[m,d(r)]),k]),b])}const I=a(c,[["render",g],["__file","future.html.vue"]]);export{I as default}; diff --git a/docs/assets/home.html.4cff2251.js b/docs/assets/home.html.0f9b4abe.js similarity index 98% rename from docs/assets/home.html.4cff2251.js rename to docs/assets/home.html.0f9b4abe.js index 1492ed947..b313e8357 100644 --- a/docs/assets/home.html.4cff2251.js +++ b/docs/assets/home.html.0f9b4abe.js @@ -1 +1 @@ -import{_ as e,o,c as i,a as d}from"./app.c86510cc.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.f643a53b.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/home.html.466c98f9.js b/docs/assets/home.html.1d7575fe.js similarity index 99% rename from docs/assets/home.html.466c98f9.js rename to docs/assets/home.html.1d7575fe.js index 086ef3717..f3004d7bb 100644 --- a/docs/assets/home.html.466c98f9.js +++ b/docs/assets/home.html.1d7575fe.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.c86510cc.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.f643a53b.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.b0099991.js b/docs/assets/home.html.be06c02a.js similarity index 99% rename from docs/assets/home.html.b0099991.js rename to docs/assets/home.html.be06c02a.js index 231f2614b..b9d8ea70c 100644 --- a/docs/assets/home.html.b0099991.js +++ b/docs/assets/home.html.be06c02a.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.c86510cc.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.f643a53b.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.29b9ca31.js b/docs/assets/home.html.f46eccfc.js similarity index 97% rename from docs/assets/home.html.29b9ca31.js rename to docs/assets/home.html.f46eccfc.js index 4586d9017..877292981 100644 --- a/docs/assets/home.html.29b9ca31.js +++ b/docs/assets/home.html.f46eccfc.js @@ -1 +1 @@ -import{_ as e,o,c as t,a as i}from"./app.c86510cc.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.f643a53b.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/host-inject.html.77802245.js b/docs/assets/host-inject.html.0f378e76.js similarity index 88% rename from docs/assets/host-inject.html.77802245.js rename to docs/assets/host-inject.html.0f378e76.js index 43aa29ea3..e283855cb 100644 --- a/docs/assets/host-inject.html.77802245.js +++ b/docs/assets/host-inject.html.0f378e76.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-6ac5be8e","path":"/zh-cn/api/special-features/host-inject.html","title":"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55","lang":"zh-CN","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664474911000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/special-features/host-inject.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-6ac5be8e","path":"/zh-cn/api/special-features/host-inject.html","title":"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55","lang":"zh-CN","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1682008175000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/api/special-features/host-inject.md"}');export{e as data}; diff --git a/docs/assets/host-inject.html.8e7a6aa7.js b/docs/assets/host-inject.html.433c5f35.js similarity index 86% rename from docs/assets/host-inject.html.8e7a6aa7.js rename to docs/assets/host-inject.html.433c5f35.js index f17ff3063..dfd2c7b12 100644 --- a/docs/assets/host-inject.html.8e7a6aa7.js +++ b/docs/assets/host-inject.html.433c5f35.js @@ -1 +1 @@ -const e=JSON.parse(`{"key":"v-12042f1f","path":"/en/api/special-features/host-inject.html","title":"Host Resource Injection Extension","lang":"en-US","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664474911000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/special-features/host-inject.md"}`);export{e as data}; +const e=JSON.parse(`{"key":"v-12042f1f","path":"/en/api/special-features/host-inject.html","title":"Host Resource Injection Extension","lang":"en-US","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1682008175000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"en/api/special-features/host-inject.md"}`);export{e as data}; diff --git a/docs/assets/host-inject.html.3f57d40b.js b/docs/assets/host-inject.html.6d53994e.js similarity index 89% rename from docs/assets/host-inject.html.3f57d40b.js rename to docs/assets/host-inject.html.6d53994e.js index 55217dea3..60237e909 100644 --- a/docs/assets/host-inject.html.3f57d40b.js +++ b/docs/assets/host-inject.html.6d53994e.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.c86510cc.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.f643a53b.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 {
    @@ -75,7 +75,20 @@ import{_ as l,r as o,o as p,c as t,b as s,d as i,a as n,e}from"./app.c86510cc.js
     }
     

    After all the above steps are completed, you can happily call startActivity anywhere in the (Xposed) Host environment where a Context exists.

    The following example

    val context: Context = ... // Assume this is your Context
     context.startActivity(context, HostTestActivity::class.java)
    -

    Tips

    For more functions, please refer to the Context.registerModuleAppActivities method.

    Create ContextThemeWrapper Proxy

    Sometimes, we need to use MaterialAlertDialogBuilder to beautify our own dialogs in the Host App, but we can't create them without the AppCompat theme.

    • Will got the following exception
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
    +

    The proxy parameter we set in the registerModuleAppActivities method above is the default global proxy Activity.

    If you need to specify a delegated Activity to use another Host App's Activity as a proxy, you can refer to the following method.

    The following example

    class HostTestActivity : ModuleAppActivity() {
    +
    +    // Specify an additional proxy Activity class name
    +    // Which must also exist in the Host App's AndroidManifest
    +    override val proxyClassName get() = "com.demo.test.activity.OtherActivity"
    +
    +    override fun onCreate(savedInstanceState: Bundle?) {
    +        super.onCreate(savedInstanceState)
    +        // Module App's Resources have been injected automatically
    +        // You can directly use xml to load the layout
    +        setContentView(R. layout. activity_main)
    +    }
    +}
    +

    Tips

    For more functions, please refer to the Context.registerModuleAppActivities method.

    Create ContextThemeWrapper Proxy

    Sometimes, we need to use MaterialAlertDialogBuilder to beautify our own dialogs in the Host App, but we can't create them without the AppCompat theme.

    • Will got the following exception
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
     

    At this time, we want to use MaterialAlertDialogBuilder to create a dialog in the current Activity of the Host App being hooked, you can have the following methods.

    The following example

    injectMember {
         method {
             name = "onCreate"
    @@ -119,7 +132,7 @@ import{_ as l,r as o,o as p,c as t,b as s,d as i,a as n,e}from"./app.c86510cc.js
                 .show()
         }
     }
    -

    This way, we can create dialogs in the Host App very simply using MaterialAlertDialogBuilder.

    `,61),d={class:"custom-container warning"},u=s("p",{class:"custom-container-title"},"Possible Problems",-1),A=s("p",null,[e("Because some "),s("strong",null,"androidx"),e(" dependent libraries or custom themes used by some apps may interfere with the actual style of the current "),s("strong",null,"MaterialAlertDialog"),e(", such as the button style of the dialog.")],-1),y=e("You can refer to the "),v=s("strong",null,"Module App Demo",-1),m=e(" in this case and see "),h={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt",target:"_blank",rel:"noopener noreferrer"},C=e("here is the sample code"),D=e(" to fix this problem."),b=s("p",null,[s("strong",null,"ClassCastException"),e(" may occur when some apps are created, please manually specify a new "),s("strong",null,"Configuration"),e(" instance to fix.")],-1),B=n(`

    Tips

    For more functions, please refer to the Context.applyModuleTheme method.

    ClassLoader Conflict Problem

    The content introduced on this page is to directly inject the resources of the Module App into the Host App.

    Since the Module App and the Host App are not in the same process (the same APK), there may be a ClassLoader conflict.

    If a ClassLoader conflict occurs, you may encounter a ClassCastException.

    YukiHookAPI has solved the problem of possible conflicts by default, and you need to configure the exclusion list by yourself in other cases.

    The exclusion list determines whether these Class need to be loaded by the Module App or the Host App's ClassLoader.

    The following example

    // Exclude Class names belonging to the Host App
    +

    This way, we can create dialogs in the Host App very simply using MaterialAlertDialogBuilder.

    `,65),d={class:"custom-container warning"},u=s("p",{class:"custom-container-title"},"Possible Problems",-1),A=s("p",null,[e("Because some "),s("strong",null,"androidx"),e(" dependent libraries or custom themes used by some apps may interfere with the actual style of the current "),s("strong",null,"MaterialAlertDialog"),e(", such as the button style of the dialog.")],-1),y=e("You can refer to the "),v=s("strong",null,"Module App Demo",-1),m=e(" in this case and see "),h={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt",target:"_blank",rel:"noopener noreferrer"},C=e("here is the sample code"),D=e(" to fix this problem."),b=s("p",null,[s("strong",null,"ClassCastException"),e(" may occur when some apps are created, please manually specify a new "),s("strong",null,"Configuration"),e(" instance to fix.")],-1),B=n(`

    Tips

    For more functions, please refer to the Context.applyModuleTheme method.

    ClassLoader Conflict Problem

    The content introduced on this page is to directly inject the resources of the Module App into the Host App.

    Since the Module App and the Host App are not in the same process (the same APK), there may be a ClassLoader conflict.

    If a ClassLoader conflict occurs, you may encounter a ClassCastException.

    YukiHookAPI has solved the problem of possible conflicts by default, and you need to configure the exclusion list by yourself in other cases.

    The exclusion list determines whether these Class need to be loaded by the Module App or the Host App's ClassLoader.

    The following example

    // Exclude Class names belonging to the Host App
     // They will be loaded by the Host App's ClassLoader
     // \u2757The following content is for demonstration only
     // DO NOT USE IT DIRECTLY, please refer to your actual situation
    diff --git a/docs/assets/host-inject.html.b910d795.js b/docs/assets/host-inject.html.ad00dd4e.js
    similarity index 89%
    rename from docs/assets/host-inject.html.b910d795.js
    rename to docs/assets/host-inject.html.ad00dd4e.js
    index 84f4d3722..7f16b2374 100644
    --- a/docs/assets/host-inject.html.b910d795.js
    +++ b/docs/assets/host-inject.html.ad00dd4e.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.c86510cc.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.f643a53b.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 {
    @@ -72,7 +72,18 @@ import{_ as e,r as o,o as p,c,b as s,d as i,a,e as n}from"./app.c86510cc.js";con
     }
     

    \u4EE5\u4E0A\u6B65\u9AA4\u5168\u90E8\u5B8C\u6210\u540E\uFF0C\u4F60\u5C31\u53EF\u4EE5\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4EFB\u610F\u5B58\u5728 Context \u7684\u5730\u65B9\u6109\u5FEB\u5730\u8C03\u7528 startActivity \u4E86\u3002

    \u793A\u4F8B\u5982\u4E0B

    val context: Context = ... // \u5047\u8BBE\u8FD9\u5C31\u662F\u4F60\u7684 Context
     context.startActivity(context, HostTestActivity::class.java)
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 Context.registerModuleAppActivities \u65B9\u6CD5\u3002

    \u521B\u5EFA ContextThemeWrapper \u4EE3\u7406

    \u6709\u65F6\u5019\uFF0C\u6211\u4EEC\u9700\u8981\u4F7F\u7528 MaterialAlertDialogBuilder \u6765\u7F8E\u5316\u81EA\u5DF1\u5728\u5BBF\u4E3B\u4E2D\u7684\u5BF9\u8BDD\u6846\uFF0C\u4F46\u662F\u62FF\u4E0D\u5230 AppCompat \u4E3B\u9898\u5C31\u65E0\u6CD5\u521B\u5EFA\u3002

    • \u4F1A\u5F97\u5230\u5982\u4E0B\u5F02\u5E38
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
    +

    \u4E0A\u9762\u6211\u4EEC\u5728 registerModuleAppActivities \u65B9\u6CD5\u4E2D\u8BBE\u7F6E\u7684 proxy \u53C2\u6570\u4E3A\u9ED8\u8BA4\u7684\u5168\u5C40\u4EE3\u7406 Activity\u3002

    \u5982\u679C\u4F60\u9700\u8981\u6307\u5B9A\u67D0\u4E2A\u4EE3\u7406\u7684 Activity \u4F7F\u7528\u53E6\u5916\u7684\u5BBF\u4E3B Activity \u8FDB\u884C\u4EE3\u7406\uFF0C\u4F60\u53EF\u4EE5\u53C2\u8003\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    class HostTestActivity : ModuleAppActivity() {
    +
    +    // \u6307\u5B9A\u4E00\u4E2A\u53E6\u5916\u7684\u4EE3\u7406 Activity \u7C7B\u540D\uFF0C\u5176\u4E5F\u5FC5\u987B\u5B58\u5728\u4E8E\u5BBF\u4E3B\u7684 AndroidManifest \u4E2D
    +    override val proxyClassName get() = "com.demo.test.activity.OtherActivity"
    +
    +    override fun onCreate(savedInstanceState: Bundle?) {
    +        super.onCreate(savedInstanceState)
    +        // \u6A21\u5757\u8D44\u6E90\u5DF2\u88AB\u81EA\u52A8\u6CE8\u5165\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 xml \u88C5\u8F7D\u5E03\u5C40
    +        setContentView(R.layout.activity_main)
    +    }
    +}
    +

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 Context.registerModuleAppActivities \u65B9\u6CD5\u3002

    \u521B\u5EFA ContextThemeWrapper \u4EE3\u7406

    \u6709\u65F6\u5019\uFF0C\u6211\u4EEC\u9700\u8981\u4F7F\u7528 MaterialAlertDialogBuilder \u6765\u7F8E\u5316\u81EA\u5DF1\u5728\u5BBF\u4E3B\u4E2D\u7684\u5BF9\u8BDD\u6846\uFF0C\u4F46\u662F\u62FF\u4E0D\u5230 AppCompat \u4E3B\u9898\u5C31\u65E0\u6CD5\u521B\u5EFA\u3002

    • \u4F1A\u5F97\u5230\u5982\u4E0B\u5F02\u5E38
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
     

    \u8FD9\u65F6\uFF0C\u6211\u4EEC\u60F3\u5728\u5BBF\u4E3B\u88AB Hook \u7684\u5F53\u524D Activity \u4E2D\u4F7F\u7528 MaterialAlertDialogBuilder \u6765\u521B\u5EFA\u5BF9\u8BDD\u6846\uFF0C\u5C31\u53EF\u4EE5\u6709\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         method {
             name = "onCreate"
    @@ -115,7 +126,7 @@ import{_ as e,r as o,o as p,c,b as s,d as i,a,e as n}from"./app.c86510cc.js";con
                 .show()
         }
     }
    -

    \u8FD9\u6837\uFF0C\u6211\u4EEC\u5C31\u53EF\u4EE5\u5728\u5BBF\u4E3B\u4E2D\u975E\u5E38\u7B80\u5355\u5730\u4F7F\u7528 MaterialAlertDialogBuilder \u521B\u5EFA\u5BF9\u8BDD\u6846\u4E86\u3002

    `,59),d={class:"custom-container warning"},A=s("p",{class:"custom-container-title"},"\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898",-1),y=n("\u7531\u4E8E\u4E00\u4E9B APP \u81EA\u8EAB\u4F7F\u7528\u7684 "),u=s("strong",null,"androidx",-1),v=n(" \u4F9D\u8D56\u5E93\u6216\u81EA\u5B9A\u4E49\u4E3B\u9898\u53EF\u80FD\u4F1A\u5BF9\u5F53\u524D "),C=s("strong",null,"MaterialAlertDialog",-1),m=n(" \u5B9E\u9645\u6837\u5F0F\u9020\u6210\u5E72\u6270\uFF0C\u4F8B\u5982\u5BF9\u8BDD\u6846\u7684\u6309\u94AE\u6837\u5F0F\uFF0C\u8FD9\u79CD\u60C5\u51B5\u4F60\u53EF\u4EE5\u53C2\u8003 "),D=s("strong",null,"\u6A21\u5757 Demo",-1),B=n(" \u4E2D "),b={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt",target:"_blank",rel:"noopener noreferrer"},F=n("\u8FD9\u91CC\u7684\u793A\u4F8B\u4EE3\u7801"),h=n(" \u6765\u4FEE\u590D\u8FD9\u4E2A\u95EE\u9898\u3002"),k=s("p",null,[n("\u67D0\u4E9B APP \u5728\u521B\u5EFA\u65F6\u53EF\u80FD\u4F1A\u53D1\u751F "),s("strong",null,"ClassCastException"),n(" \u5F02\u5E38\uFF0C\u8BF7\u624B\u52A8\u6307\u5B9A\u65B0\u7684 "),s("strong",null,"Configuration"),n(" \u5B9E\u4F8B\u6765\u8FDB\u884C\u4FEE\u590D\u3002")],-1),g=a(`

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 Context.applyModuleTheme \u65B9\u6CD5\u3002

    ClassLoader \u51B2\u7A81\u95EE\u9898

    \u672C\u9875\u9762\u6240\u4ECB\u7ECD\u7684\u5185\u5BB9\u90FD\u662F\u76F4\u63A5\u5C06\u6A21\u5757\u7684\u8D44\u6E90\u6CE8\u5165\u5230\u4E86\u5BBF\u4E3B\uFF0C\u7531\u4E8E\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E0D\u5728\u540C\u4E00\u4E2A\u8FDB\u7A0B (\u540C\u4E00\u4E2A APK) \u4E2D\uFF0C\u5176\u53EF\u80FD\u5B58\u5728 ClassLoader \u51B2\u7A81\u7684\u95EE\u9898\u3002

    \u82E5\u53D1\u751F\u4E86 ClassLoader \u51B2\u7A81\uFF0C\u4F60\u53EF\u80FD\u4F1A\u9047\u5230 ClassCastException \u5F02\u5E38\u3002

    YukiHookAPI \u9ED8\u8BA4\u5DF2\u89E3\u51B3\u4E86\u53EF\u80FD\u51B2\u7A81\u7684\u95EE\u9898\uFF0C\u5176\u4F59\u60C5\u51B5\u9700\u8981\u4F60\u81EA\u884C\u914D\u7F6E\u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u51B3\u5B9A\u4E86\u8FD9\u4E9B Class \u9700\u8981\u88AB\u6A21\u5757\u8FD8\u662F\u5BBF\u4E3B\u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u6392\u9664\u5C5E\u4E8E\u5BBF\u4E3B\u7684 Class \u7C7B\u540D
    +

    \u8FD9\u6837\uFF0C\u6211\u4EEC\u5C31\u53EF\u4EE5\u5728\u5BBF\u4E3B\u4E2D\u975E\u5E38\u7B80\u5355\u5730\u4F7F\u7528 MaterialAlertDialogBuilder \u521B\u5EFA\u5BF9\u8BDD\u6846\u4E86\u3002

    `,63),d={class:"custom-container warning"},A=s("p",{class:"custom-container-title"},"\u53EF\u80FD\u5B58\u5728\u7684\u95EE\u9898",-1),y=n("\u7531\u4E8E\u4E00\u4E9B APP \u81EA\u8EAB\u4F7F\u7528\u7684 "),v=s("strong",null,"androidx",-1),u=n(" \u4F9D\u8D56\u5E93\u6216\u81EA\u5B9A\u4E49\u4E3B\u9898\u53EF\u80FD\u4F1A\u5BF9\u5F53\u524D "),C=s("strong",null,"MaterialAlertDialog",-1),D=n(" \u5B9E\u9645\u6837\u5F0F\u9020\u6210\u5E72\u6270\uFF0C\u4F8B\u5982\u5BF9\u8BDD\u6846\u7684\u6309\u94AE\u6837\u5F0F\uFF0C\u8FD9\u79CD\u60C5\u51B5\u4F60\u53EF\u4EE5\u53C2\u8003 "),m=s("strong",null,"\u6A21\u5757 Demo",-1),B=n(" \u4E2D "),b={href:"https://github.com/fankes/YukiHookAPI/tree/master/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/factory/ComponentCompatFactory.kt",target:"_blank",rel:"noopener noreferrer"},F=n("\u8FD9\u91CC\u7684\u793A\u4F8B\u4EE3\u7801"),h=n(" \u6765\u4FEE\u590D\u8FD9\u4E2A\u95EE\u9898\u3002"),k=s("p",null,[n("\u67D0\u4E9B APP \u5728\u521B\u5EFA\u65F6\u53EF\u80FD\u4F1A\u53D1\u751F "),s("strong",null,"ClassCastException"),n(" \u5F02\u5E38\uFF0C\u8BF7\u624B\u52A8\u6307\u5B9A\u65B0\u7684 "),s("strong",null,"Configuration"),n(" \u5B9E\u4F8B\u6765\u8FDB\u884C\u4FEE\u590D\u3002")],-1),g=a(`

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 Context.applyModuleTheme \u65B9\u6CD5\u3002

    ClassLoader \u51B2\u7A81\u95EE\u9898

    \u672C\u9875\u9762\u6240\u4ECB\u7ECD\u7684\u5185\u5BB9\u90FD\u662F\u76F4\u63A5\u5C06\u6A21\u5757\u7684\u8D44\u6E90\u6CE8\u5165\u5230\u4E86\u5BBF\u4E3B\uFF0C\u7531\u4E8E\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E0D\u5728\u540C\u4E00\u4E2A\u8FDB\u7A0B (\u540C\u4E00\u4E2A APK) \u4E2D\uFF0C\u5176\u53EF\u80FD\u5B58\u5728 ClassLoader \u51B2\u7A81\u7684\u95EE\u9898\u3002

    \u82E5\u53D1\u751F\u4E86 ClassLoader \u51B2\u7A81\uFF0C\u4F60\u53EF\u80FD\u4F1A\u9047\u5230 ClassCastException \u5F02\u5E38\u3002

    YukiHookAPI \u9ED8\u8BA4\u5DF2\u89E3\u51B3\u4E86\u53EF\u80FD\u51B2\u7A81\u7684\u95EE\u9898\uFF0C\u5176\u4F59\u60C5\u51B5\u9700\u8981\u4F60\u81EA\u884C\u914D\u7F6E\u6392\u9664\u5217\u8868\u3002

    \u6392\u9664\u5217\u8868\u51B3\u5B9A\u4E86\u8FD9\u4E9B Class \u9700\u8981\u88AB\u6A21\u5757\u8FD8\u662F\u5BBF\u4E3B\u7684 ClassLoader \u8FDB\u884C\u88C5\u8F7D\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u6392\u9664\u5C5E\u4E8E\u5BBF\u4E3B\u7684 Class \u7C7B\u540D
     // \u5B83\u4EEC\u5C06\u4F1A\u88AB\u5BBF\u4E3B\u7684 ClassLoader \u88C5\u8F7D
     // \u2757\u4EE5\u4E0B\u5185\u5BB9\u4EC5\u4F9B\u6F14\u793A\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u8BF7\u4EE5\u4F60\u7684\u5B9E\u9645\u60C5\u51B5\u4E3A\u51C6
     ModuleClassLoader.excludeHostClasses(
    @@ -129,4 +140,4 @@ import{_ as e,r as o,o as p,c,b as s,d as i,a,e as n}from"./app.c86510cc.js";con
         "com.demo.entry.HookEntry",
         "com.demo.controller.ModuleController"
     )
    -

    \u4F60\u9700\u8981\u5728\u5411\u5BBF\u4E3B\u6CE8\u5165\u6A21\u5757\u8D44\u6E90\u7684\u65B9\u6CD5\u6267\u884C\u4E4B\u524D\u8FDB\u884C\u8BBE\u7F6E\u624D\u80FD\u751F\u6548\u3002

    \u6B64\u529F\u80FD\u4EC5\u4E3A\u89E3\u51B3\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u53EF\u80FD\u5B58\u5728\u540C\u540D\u7684 Class \u60C5\u51B5\uFF0C\u4F8B\u5982\u5171\u7528\u7684 SDK \u4EE5\u53CA\u4F9D\u8D56\uFF0C\u5728\u5927\u90E8\u5206\u60C5\u51B5\u4E0B\u4F60\u4E0D\u4F1A\u7528\u5230\u6B64\u529F\u80FD\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 ModuleClassLoader\u3002

    `,11);function x(q,_){const l=o("ExternalLinkIcon");return p(),c("div",null,[r,s("div",d,[A,s("p",null,[y,u,v,C,m,D,B,s("a",b,[F,i(l)]),h]),k]),g])}const f=e(t,[["render",x],["__file","host-inject.html.vue"]]);export{f as default}; +

    \u4F60\u9700\u8981\u5728\u5411\u5BBF\u4E3B\u6CE8\u5165\u6A21\u5757\u8D44\u6E90\u7684\u65B9\u6CD5\u6267\u884C\u4E4B\u524D\u8FDB\u884C\u8BBE\u7F6E\u624D\u80FD\u751F\u6548\u3002

    \u6B64\u529F\u80FD\u4EC5\u4E3A\u89E3\u51B3\u5BBF\u4E3B\u4E0E\u6A21\u5757\u4E2D\u53EF\u80FD\u5B58\u5728\u540C\u540D\u7684 Class \u60C5\u51B5\uFF0C\u4F8B\u5982\u5171\u7528\u7684 SDK \u4EE5\u53CA\u4F9D\u8D56\uFF0C\u5728\u5927\u90E8\u5206\u60C5\u51B5\u4E0B\u4F60\u4E0D\u4F1A\u7528\u5230\u6B64\u529F\u80FD\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 ModuleClassLoader\u3002

    `,11);function x(q,_){const l=o("ExternalLinkIcon");return p(),c("div",null,[r,s("div",d,[A,s("p",null,[y,v,u,C,D,m,B,s("a",b,[F,i(l)]),h]),k]),g])}const f=e(t,[["render",x],["__file","host-inject.html.vue"]]);export{f as default}; diff --git a/docs/assets/host-lifecycle.html.421c3a99.js b/docs/assets/host-lifecycle.html.319e86cd.js similarity index 99% rename from docs/assets/host-lifecycle.html.421c3a99.js rename to docs/assets/host-lifecycle.html.319e86cd.js index dedd7e3d0..db6d4a462 100644 --- a/docs/assets/host-lifecycle.html.421c3a99.js +++ b/docs/assets/host-lifecycle.html.319e86cd.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,a as l}from"./app.c86510cc.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.f643a53b.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.99d6cdd6.js b/docs/assets/host-lifecycle.html.6a663fb5.js
    similarity index 99%
    rename from docs/assets/host-lifecycle.html.99d6cdd6.js
    rename to docs/assets/host-lifecycle.html.6a663fb5.js
    index 7b8f01698..1dbd3657f 100644
    --- a/docs/assets/host-lifecycle.html.99d6cdd6.js
    +++ b/docs/assets/host-lifecycle.html.6a663fb5.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.c86510cc.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.f643a53b.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.006afc0f.js b/docs/assets/index.html.2182569c.js
    similarity index 98%
    rename from docs/assets/index.html.006afc0f.js
    rename to docs/assets/index.html.2182569c.js
    index 4f98af7b6..52ac0f6ab 100644
    --- a/docs/assets/index.html.006afc0f.js
    +++ b/docs/assets/index.html.2182569c.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.c86510cc.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.f643a53b.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.13817901.js b/docs/assets/index.html.e0ba9d06.js
    similarity index 63%
    rename from docs/assets/index.html.13817901.js
    rename to docs/assets/index.html.e0ba9d06.js
    index 110068617..3c08a65f8 100644
    --- a/docs/assets/index.html.13817901.js
    +++ b/docs/assets/index.html.e0ba9d06.js
    @@ -1 +1 @@
    -import{_ as e,o as c,c as t}from"./app.c86510cc.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.f643a53b.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.47c30167.js b/docs/assets/index.html.ecde69cd.js
    similarity index 98%
    rename from docs/assets/index.html.47c30167.js
    rename to docs/assets/index.html.ecde69cd.js
    index 52c8e35e5..8fedd70be 100644
    --- a/docs/assets/index.html.47c30167.js
    +++ b/docs/assets/index.html.ecde69cd.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.c86510cc.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.f643a53b.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.b9236bb6.js b/docs/assets/knowledge.html.86f06e91.js
    similarity index 99%
    rename from docs/assets/knowledge.html.b9236bb6.js
    rename to docs/assets/knowledge.html.86f06e91.js
    index bb12aabde..18ba91925 100644
    --- a/docs/assets/knowledge.html.b9236bb6.js
    +++ b/docs/assets/knowledge.html.86f06e91.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.c86510cc.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.f643a53b.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.1fc16112.js b/docs/assets/knowledge.html.998b4830.js
    similarity index 98%
    rename from docs/assets/knowledge.html.1fc16112.js
    rename to docs/assets/knowledge.html.998b4830.js
    index a91a7922a..a9845d73e 100644
    --- a/docs/assets/knowledge.html.1fc16112.js
    +++ b/docs/assets/knowledge.html.998b4830.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.c86510cc.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.f643a53b.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.09ab63ea.js b/docs/assets/logger.html.68d61cb5.js
    similarity index 99%
    rename from docs/assets/logger.html.09ab63ea.js
    rename to docs/assets/logger.html.68d61cb5.js
    index 153cd763d..c8c5a374c 100644
    --- a/docs/assets/logger.html.09ab63ea.js
    +++ b/docs/assets/logger.html.68d61cb5.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.c86510cc.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.f643a53b.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/logger.html.a1cae7d9.js b/docs/assets/logger.html.d6070d67.js
    similarity index 99%
    rename from docs/assets/logger.html.a1cae7d9.js
    rename to docs/assets/logger.html.d6070d67.js
    index 9be840836..cfc745a4a 100644
    --- a/docs/assets/logger.html.a1cae7d9.js
    +++ b/docs/assets/logger.html.d6070d67.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.c86510cc.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.f643a53b.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/move-to-new-api.html.0d2e7326.js b/docs/assets/move-to-new-api.html.0a02f53c.js
    similarity index 99%
    rename from docs/assets/move-to-new-api.html.0d2e7326.js
    rename to docs/assets/move-to-new-api.html.0a02f53c.js
    index 64fc0220b..5d8ffcb18 100644
    --- a/docs/assets/move-to-new-api.html.0d2e7326.js
    +++ b/docs/assets/move-to-new-api.html.0a02f53c.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.c86510cc.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.f643a53b.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.71fd2220.js b/docs/assets/move-to-new-api.html.8918dea3.js similarity index 99% rename from docs/assets/move-to-new-api.html.71fd2220.js rename to docs/assets/move-to-new-api.html.8918dea3.js index 123415611..6ba5a6ca9 100644 --- a/docs/assets/move-to-new-api.html.71fd2220.js +++ b/docs/assets/move-to-new-api.html.8918dea3.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.c86510cc.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.f643a53b.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.23ccbac4.js b/docs/assets/quick-start.html.3f3afc29.js similarity index 99% rename from docs/assets/quick-start.html.23ccbac4.js rename to docs/assets/quick-start.html.3f3afc29.js index 2b4a88c58..087527193 100644 --- a/docs/assets/quick-start.html.23ccbac4.js +++ b/docs/assets/quick-start.html.3f3afc29.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.c86510cc.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.f643a53b.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.672c7eeb.js b/docs/assets/quick-start.html.b973dbd4.js
    similarity index 99%
    rename from docs/assets/quick-start.html.672c7eeb.js
    rename to docs/assets/quick-start.html.b973dbd4.js
    index 1882b7f31..ccfdefb47 100644
    --- a/docs/assets/quick-start.html.672c7eeb.js
    +++ b/docs/assets/quick-start.html.b973dbd4.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.c86510cc.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.f643a53b.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.bc46ee22.js b/docs/assets/r8-proguard.html.0579cd4e.js
    similarity index 97%
    rename from docs/assets/r8-proguard.html.bc46ee22.js
    rename to docs/assets/r8-proguard.html.0579cd4e.js
    index 611748340..1b4af7d01 100644
    --- a/docs/assets/r8-proguard.html.bc46ee22.js
    +++ b/docs/assets/r8-proguard.html.0579cd4e.js
    @@ -1,2 +1,2 @@
    -import{_ as e,o,c as r,a}from"./app.c86510cc.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.f643a53b.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/r8-proguard.html.b3b0b91a.js b/docs/assets/r8-proguard.html.ec79e97c.js similarity index 96% rename from docs/assets/r8-proguard.html.b3b0b91a.js rename to docs/assets/r8-proguard.html.ec79e97c.js index 11b1594b0..156a88b86 100644 --- a/docs/assets/r8-proguard.html.b3b0b91a.js +++ b/docs/assets/r8-proguard.html.ec79e97c.js @@ -1,2 +1,2 @@ -import{_ as e,o,c as a,a as r}from"./app.c86510cc.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.f643a53b.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/reflection.html.c355d348.js b/docs/assets/reflection.html.00550fc4.js similarity index 99% rename from docs/assets/reflection.html.c355d348.js rename to docs/assets/reflection.html.00550fc4.js index 795dea40c..3a39d0b51 100644 --- a/docs/assets/reflection.html.c355d348.js +++ b/docs/assets/reflection.html.00550fc4.js @@ -1,4 +1,4 @@ -import{_ as c,r as a,o as r,c as i,b as s,d as l,e as n,a as e}from"./app.c86510cc.js";const t={},d=s("h1",{id:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55","aria-hidden":"true"},"#"),n(" \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55")],-1),A=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),n(" \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")])],-1),y=n("\u6B64\u529F\u80FD\u7684\u6838\u5FC3\u90E8\u5206\u5DF2\u88AB\u89E3\u8026\u5408\u4E3A "),u={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},v=n("YukiReflection"),C=n(" \u9879\u76EE\uFF0C\u5B83\u53EF\u4EE5\u72EC\u7ACB\u4F7F\u7528\u4E8E\u4EFB\u4F55 Android \u9879\u76EE\u4E2D\u3002"),D=e(`

    \u73B0\u5728 YukiReflection \u4F5C\u4E3A\u6838\u5FC3\u4F9D\u8D56\u96C6\u6210\u4E8E YukiHookAPI\u3002

    YukiHookAPI \u5728 YukiReflection \u7684\u57FA\u7840\u4E0A\u52A0\u5165\u4E86\u9488\u5BF9 Hook \u529F\u80FD\u7684\u76F8\u5173\u6269\u5C55\uFF0C\u4F7F\u7528 YukiHookAPI \u65E0\u9700\u5F15\u5165\u6B64\u4F9D\u8D56\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 c,r as a,o as r,c as i,b as s,d as l,e as n,a as e}from"./app.f643a53b.js";const t={},d=s("h1",{id:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55","aria-hidden":"true"},"#"),n(" \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55")],-1),A=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),n(" \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")])],-1),y=n("\u6B64\u529F\u80FD\u7684\u6838\u5FC3\u90E8\u5206\u5DF2\u88AB\u89E3\u8026\u5408\u4E3A "),u={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},v=n("YukiReflection"),C=n(" \u9879\u76EE\uFF0C\u5B83\u53EF\u4EE5\u72EC\u7ACB\u4F7F\u7528\u4E8E\u4EFB\u4F55 Android \u9879\u76EE\u4E2D\u3002"),D=e(`

    \u73B0\u5728 YukiReflection \u4F5C\u4E3A\u6838\u5FC3\u4F9D\u8D56\u96C6\u6210\u4E8E YukiHookAPI\u3002

    YukiHookAPI \u5728 YukiReflection \u7684\u57FA\u7840\u4E0A\u52A0\u5165\u4E86\u9488\u5BF9 Hook \u529F\u80FD\u7684\u76F8\u5173\u6269\u5C55\uFF0C\u4F7F\u7528 YukiHookAPI \u65E0\u9700\u5F15\u5165\u6B64\u4F9D\u8D56\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/reflection.html.f12d7c2d.js b/docs/assets/reflection.html.2214baad.js
    similarity index 99%
    rename from docs/assets/reflection.html.f12d7c2d.js
    rename to docs/assets/reflection.html.2214baad.js
    index 12b364251..3e02561dd 100644
    --- a/docs/assets/reflection.html.f12d7c2d.js
    +++ b/docs/assets/reflection.html.2214baad.js
    @@ -1,4 +1,4 @@
    -import{_ as t,r as a,o as c,c as i,b as s,d as e,e as n,a as l}from"./app.c86510cc.js";const r={},d=s("h1",{id:"reflection-extensions",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#reflection-extensions","aria-hidden":"true"},"#"),n(" Reflection Extensions")],-1),y=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),n(" 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.")])],-1),A=n("The core part of this functionality has been decoupled into the "),u={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},m=n("YukiReflection"),v=n(" project, which can be used independently in any Android project."),h=l(`

    Now YukiReflection is integrated into YukiHookAPI as a core dependency.

    YukiHookAPI adds related extensions for Hook functions on the basis of YukiReflection, and there is no need to introduce this dependency to use YukiHookAPI.

    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 t,r as a,o as c,c as i,b as s,d as e,e as n,a as l}from"./app.f643a53b.js";const r={},d=s("h1",{id:"reflection-extensions",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#reflection-extensions","aria-hidden":"true"},"#"),n(" Reflection Extensions")],-1),y=s("blockquote",null,[s("p",null,[s("code",null,"YukiHookAPI"),n(" 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.")])],-1),A=n("The core part of this functionality has been decoupled into the "),u={href:"https://github.com/fankes/YukiReflection",target:"_blank",rel:"noopener noreferrer"},m=n("YukiReflection"),v=n(" project, which can be used independently in any Android project."),h=l(`

    Now YukiReflection is integrated into YukiHookAPI as a core dependency.

    YukiHookAPI adds related extensions for Hook functions on the basis of YukiReflection, and there is no need to introduce this dependency to use YukiHookAPI.

    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/xposed-channel.html.c513149f.js b/docs/assets/xposed-channel.html.47936ba5.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.c513149f.js
    rename to docs/assets/xposed-channel.html.47936ba5.js
    index ea1a703f5..7377fd2d4 100644
    --- a/docs/assets/xposed-channel.html.c513149f.js
    +++ b/docs/assets/xposed-channel.html.47936ba5.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.c86510cc.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.f643a53b.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.e9cafb9b.js b/docs/assets/xposed-channel.html.4f58f26e.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.e9cafb9b.js
    rename to docs/assets/xposed-channel.html.4f58f26e.js
    index 9fe85abce..5f33c68fd 100644
    --- a/docs/assets/xposed-channel.html.e9cafb9b.js
    +++ b/docs/assets/xposed-channel.html.4f58f26e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as e}from"./app.c86510cc.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.f643a53b.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.2a2b67f4.js b/docs/assets/xposed-storage.html.8c44e3af.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.2a2b67f4.js
    rename to docs/assets/xposed-storage.html.8c44e3af.js
    index 0d932a265..6d85e4322 100644
    --- a/docs/assets/xposed-storage.html.2a2b67f4.js
    +++ b/docs/assets/xposed-storage.html.8c44e3af.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as a,a as n}from"./app.c86510cc.js";const o={},l=n(`

    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 YukiHookPrefsBridge \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 s,o as e,c as a,a as n}from"./app.f643a53b.js";const o={},l=n(`

    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 YukiHookPrefsBridge \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

    prefs().edit { 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 YukiHookPrefsBridge \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.b08af45b.js b/docs/assets/xposed-storage.html.a541db8c.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.b08af45b.js
    rename to docs/assets/xposed-storage.html.a541db8c.js
    index 3abee6a62..7a0cb107d 100644
    --- a/docs/assets/xposed-storage.html.b08af45b.js
    +++ b/docs/assets/xposed-storage.html.a541db8c.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as a,a as n}from"./app.c86510cc.js";const o={},l=n(`

    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 YukiHookPrefsBridge 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 a,a as n}from"./app.f643a53b.js";const o={},l=n(`

    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 YukiHookPrefsBridge 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

    prefs().edit { 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 YukiHookPrefsBridge.

    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.e11454bf.js b/docs/assets/xposed-using.html.34241ede.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.e11454bf.js
    rename to docs/assets/xposed-using.html.34241ede.js
    index e8cc38ce3..b6027598d 100644
    --- a/docs/assets/xposed-using.html.e11454bf.js
    +++ b/docs/assets/xposed-using.html.34241ede.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as a,a as o}from"./app.c86510cc.js";const n={},l=o(`

    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 o}from"./app.f643a53b.js";const n={},l=o(`

    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.70b2312d.js b/docs/assets/xposed-using.html.ac70c5e3.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.70b2312d.js
    rename to docs/assets/xposed-using.html.ac70c5e3.js
    index 2b8e4b1f6..03a163434 100644
    --- a/docs/assets/xposed-using.html.70b2312d.js
    +++ b/docs/assets/xposed-using.html.ac70c5e3.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as o,a}from"./app.c86510cc.js";const e={},l=a(`

    \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 o,a}from"./app.f643a53b.js";const e={},l=a(`

    \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.f8d00361.js b/docs/assets/yukihookapi-projectbuilder.html.5d43aa5a.js
    similarity index 98%
    rename from docs/assets/yukihookapi-projectbuilder.html.f8d00361.js
    rename to docs/assets/yukihookapi-projectbuilder.html.5d43aa5a.js
    index 6015f742c..55fae3194 100644
    --- a/docs/assets/yukihookapi-projectbuilder.html.f8d00361.js
    +++ b/docs/assets/yukihookapi-projectbuilder.html.5d43aa5a.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.c86510cc.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.f643a53b.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.31d0ff0f.js b/docs/assets/yukihookapi-projectbuilder.html.628e4394.js similarity index 98% rename from docs/assets/yukihookapi-projectbuilder.html.31d0ff0f.js rename to docs/assets/yukihookapi-projectbuilder.html.628e4394.js index afde7120e..dd59b04e8 100644 --- a/docs/assets/yukihookapi-projectbuilder.html.31d0ff0f.js +++ b/docs/assets/yukihookapi-projectbuilder.html.628e4394.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.c86510cc.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.f643a53b.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 921ae7e92..fc24d1ef9 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 c58d3f6f5..7bbca94e1 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.9 | 2023.04.17  latest

    • Change the type of dependent library from Java Library (jar) to Android Library (aar)
    • Remove the inspection function of internal methods and parameters through Hook or reflection API
    • Fixed the problem that YukiHookDataChannel automatically segmented data sending function could not work normally (exception would still be thrown)
    • Added the ability to manually modify the maximum data byte size allowed by YukiHookDataChannel to be sent at one time according to the limitations of the target device
    • Remove the restriction that YukiHookDataChannel can only be used in module Activity, now you can use it anywhere
    • Modify and standardize the broadcast Action name used by YukiHookDataChannel
    • Fix the problem that BadParcelableException occurs when YukiHookDataChannel has different modules with the same host
    • Added ExecutorType, you can get the type of known Hook Framework through YukiHookAPI.Status.Executor.type
    • YukiHookModulePrefs renamed to YukiHookPrefsBridge
    • Modify YukiHookPrefsBridge to be implemented as a non-singleton, as a singleton may cause data confusion
    • Deprecated Context.modulePrefs(...) method, please move to Context.prefs(...)
    • YukiHookPrefsBridge adds native method, which supports storing private data in modules and hosts directly as native storage
    • Integrate the storage method in YukiHookPrefsBridge to YukiHookPrefsBridge.Editor, please use edit method to store data
    • YukiHookPrefsBridge adds contains method
    • Cache dynamically created proxy objects in YukiHookPrefsBridge, try to fix problems that may cause OOM in the host and modules
    • Modify the proxy class of the Activity proxy function to be dynamically generated to prevent conflicts caused by injecting different modules into the host
    • Fixed some other possible problems

    1.1.8 | 2023.02.01  stale

    • Fixed the problem that the underlying Hook method cannot update the modified state synchronously when modifying parameters such as result during callback, thanks to the Issueopen in new window of Yongzheng Laiopen in new window
    • Move the entry class name file automatically generated by YukiHookAPI from assets/yukihookapi_init to resources/META-INF/yukihookapi_init
    • When only printing the exception stack, the msg parameter is allowed to be empty and the msg parameter can not be set, and the log with the msg parameter left blank will not be logged unless the exception stack is not empty
    • Fixed the bug that the log printed by the exception that occurs in the body of the Hook callback method has no specific method information
    • HookParam adds instanceOrNull variable and method, which can be used on the premise that the Hook instance is not sure whether it is empty to prevent the Hook instance from being empty and throw an exception
    • Decoupled all hookers in Member lookup functionality to MemberBaseFinder.MemberHookerManager
    • Modified the usage of by condition in YukiMemberHookCreator, now you can reuse by method to set multiple conditions
    • Removed wrong Class object declaration in Android type
    • The registerReceiver method in PackageParam.AppLifecycle adds the function of directly using IntentFilter to create a system broadcast listener
    • Fixed the problem that there may be multiple registration lifecycles in PackageParam.AppLifecycle
    • Revert: The 1.1.7 version has been withdrawn due to a serious problem, please update to this version directly (the update log is the same as version 1.1.7)

    1.1.6 | 2023.01.21  stale

    • 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
    - +

    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.10 | 2023.04.21  latest

    • The Activity proxy function adds the function of specifying a separate proxy Activity for each proxied Activity
    • Fixed problem that the contains and all methods in YukiHookPrefsBridge did not judge the native function
    • Integrate the cache function in YukiHookPrefsBridge into PreferencesCacheManager and use LruCache as a key-value pair cache
    • Modify YukiHookPrefsBridge key-value pair caching function to take effect in all environments (Module Apps, Host Apps)
    • Modify part of HashMap used for caching to ArrayMap to reduce memory consumption
    • Fix some other possible problems

    1.1.9 | 2023.04.17  stale

    • Change the type of dependent library from Java Library (jar) to Android Library (aar)
    • Remove the inspection function of internal methods and parameters through Hook or reflection API
    • Fixed the problem that YukiHookDataChannel automatically segmented data sending function could not work normally (exception would still be thrown)
    • Added the ability to manually modify the maximum data byte size allowed by YukiHookDataChannel to be sent at one time according to the limitations of the target device
    • Remove the restriction that YukiHookDataChannel can only be used in module Activity, now you can use it anywhere
    • Modify and standardize the broadcast Action name used by YukiHookDataChannel
    • Fix the problem that BadParcelableException occurs when YukiHookDataChannel has different modules with the same host
    • Added ExecutorType, you can get the type of known Hook Framework through YukiHookAPI.Status.Executor.type
    • YukiHookModulePrefs renamed to YukiHookPrefsBridge
    • Modify YukiHookPrefsBridge to be implemented as a non-singleton, as a singleton may cause data confusion
    • Deprecated Context.modulePrefs(...) method, please move to Context.prefs(...)
    • YukiHookPrefsBridge adds native method, which supports storing private data in modules and hosts directly as native storage
    • Integrate the storage method in YukiHookPrefsBridge to YukiHookPrefsBridge.Editor, please use edit method to store data
    • YukiHookPrefsBridge adds contains method
    • Cache dynamically created proxy objects in YukiHookPrefsBridge, try to fix problems that may cause OOM in the host and modules
    • Modify the proxy class of the Activity proxy function to be dynamically generated to prevent conflicts caused by injecting different modules into the host
    • Fixed some other possible problems

    1.1.8 | 2023.02.01  stale

    • Fixed the problem that the underlying Hook method cannot update the modified state synchronously when modifying parameters such as result during callback, thanks to the Issueopen in new window of Yongzheng Laiopen in new window
    • Move the entry class name file automatically generated by YukiHookAPI from assets/yukihookapi_init to resources/META-INF/yukihookapi_init
    • When only printing the exception stack, the msg parameter is allowed to be empty and the msg parameter can not be set, and the log with the msg parameter left blank will not be logged unless the exception stack is not empty
    • Fixed the bug that the log printed by the exception that occurs in the body of the Hook callback method has no specific method information
    • HookParam adds instanceOrNull variable and method, which can be used on the premise that the Hook instance is not sure whether it is empty to prevent the Hook instance from being empty and throw an exception
    • Decoupled all hookers in Member lookup functionality to MemberBaseFinder.MemberHookerManager
    • Modified the usage of by condition in YukiMemberHookCreator, now you can reuse by method to set multiple conditions
    • Removed wrong Class object declaration in Android type
    • The registerReceiver method in PackageParam.AppLifecycle adds the function of directly using IntentFilter to create a system broadcast listener
    • Fixed the problem that there may be multiple registration lifecycles in PackageParam.AppLifecycle
    • Revert: The 1.1.7 version has been withdrawn due to a serious problem, please update to this version directly (the update log is the same as version 1.1.7)

    1.1.6 | 2023.01.21  stale

    • 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 314dbb6fd..2b0968c84 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 8c8d3dcac..7a1359ba6 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.

    YukiHookPrefsBridge

    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

    If you like the Reflection API of YukiHookAPI, but your project may not need related Hook functions.

    Well here is some good news for you:

    The core Reflection API of YukiHookAPI has been decoupled into YukiReflectionopen in new window project, which can now be used in any Android project.

    To be Discussed

    At present, the API only supports binding to xposed_init through the automatic builder.

    If you don't like the automatic builder, 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 328836c0d..a491caa14 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 9a29deccf..1f47e8a49 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 - + @@ -129,6 +129,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 63db617e2..8f9fe35e6 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 7f4054a21..0f48c87d1 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 1a79afd9e..7fad080b7 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 494323e22..54d2fda0b 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 da226d6ef..8a264f954 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 d42b3910e..e3c5b90e4 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 2d66f1534..155e42c6f 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 7ad654a0d..06ae1ee2d 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/api/compat/type/ExecutorType.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html index fde7120a9..322f43d05 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html @@ -23,7 +23,7 @@ } ExecutorType - class | Yuki Hook API - + @@ -35,6 +35,6 @@

    Change Records

    v1.1.9 added

    Function Illustrate

    EdXposed。

    TAICHI_XPOSED - enum

    TAICHI_XPOSED
     

    Change Records

    v1.1.9 added

    Function Illustrate

    TaiChi (太极)。

    BUG_XPOSED - enum

    BUG_XPOSED
     

    Change Records

    v1.1.9 added

    Function Illustrate

    BugXposed (应用转生)。

    - + 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 e6c2796bb..58bcca582 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 32f3ae361..370e1cb8c 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 eae371605..3208a686e 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 5476df2ee..e92d42e8b 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 3b9383b52..29214ccee 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 a9d6412f2..a4ea034b5 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 5eba18aba..a731e4ae1 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 8ca476427..5679f54db 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 079f2833c..639581d8c 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 e437984d3..314c9be65 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 56ca14d7a..236b1cbd5 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 5f7cfea7f..59cd0e444 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 - + @@ -115,6 +115,6 @@

    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 973ced71d..05b365971 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 0e4f09276..498c1d641 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 - + @@ -131,6 +131,6 @@

    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 4117d9318..17a76918b 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 7ce4181ab..bc366ddb5 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 - + @@ -136,6 +136,6 @@

    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 265d78a91..16220e86d 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 - + @@ -38,6 +38,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 605f0ee8c..b5c09a26e 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 491341064..2679ad7d0 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 - + @@ -120,6 +120,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 5ff04a96b..ce058a8fd 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 - + @@ -169,6 +169,6 @@

    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)
     
    fun registerReceiver(filter: IntentFilter, result: (context: Context, intent: Intent) -> Unit)
     

    Change Records

    v1.0.88 added

    v1.1.8 modified

    新增直接使用 IntentFilter 注册系统广播监听

    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 f24bb2745..4975cee3a 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

    这是一个预置反射类型的常量类,主要为 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 cd6b8bda2..e02ad0021 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

    这是一个预置反射类型的常量类,主要为 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 5a67a1430..382dd25d0 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

    这是一个预置反射类型的常量类,主要为 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 b8fb6405b..0e936e084 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 c299cb571..2258f9482 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

    这是一个预置反射类型的常量类,主要为 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 1cabdb739..d10a503c8 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 850461d38..bc3fdbbf2 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 2b474bbe3..0e56234de 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 de8bd7efa..2be2699c7 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 55becf8cb..1f324bf08 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 56fac7f94..b2d3b7d4c 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 - + @@ -43,6 +43,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 58e0d8009..8c8a2077c 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 34ae5ae7a..1518dcaec 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 16a8c4b92..0f3e7139d 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,13 @@ } 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 进行注册。

    - +

    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 进行注册。

    proxyClassName - field

    open val proxyClassName: String
    +

    Change Records

    v1.1.10 added

    Function Illustrate

    设置当前代理的 Activity 类名。

    留空则使用 Context.registerModuleAppActivities 时设置的类名

    Pay Attention

    代理的 Activity 类名必须存在于宿主的 AndroidMainifest 清单中。

    + 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 d818da98e..9fb23ee93 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,14 @@ } 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()
    +    

    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 主题。

    - +

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前代理的 Activity 主题。

    proxyClassName - field

    open val proxyClassName: String
    +

    Change Records

    v1.1.10 added

    Function Illustrate

    设置当前代理的 Activity 类名。

    留空则使用 Context.registerModuleAppActivities 时设置的类名

    Pay Attention

    代理的 Activity 类名必须存在于宿主的 AndroidMainifest 清单中。

    + 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 e71481117..0fa01d447 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 3f9e73778..e426b48b3 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/YukiHookPrefsBridge.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html index 4990b6d0d..afece2ff4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html @@ -23,7 +23,7 @@ } YukiHookPrefsBridge - class | Yuki Hook API - + @@ -47,10 +47,10 @@

    Change Records

    v1.1.9 added

    Function Illustrate

    判断当前是否包含 key 键值的数据。

    智能识别对应环境读取键值数据。

    all - method

    fun all(): HashMap<String, Any?>
     

    Change Records

    v1.0.77 added

    Function Illustrate

    获取全部存储的键值数据。

    智能识别对应环境读取键值数据。

    Pay Attention

    每次调用都会获取实时的数据,不受缓存控制,请勿在高并发场景中使用。

    remove - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    clear - method

    Change Records

    v1.0.77 added

    v1.1.9 deprecated

    请转移到 edit 方法

    putString - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    putStringSet - method

    Change Records

    v1.0.77 added

    v1.1.9 deprecated

    请转移到 edit 方法

    putBoolean - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    putInt - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    putLong - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    putFloat - method

    Change Records

    v1.0 first

    v1.1.9 deprecated

    请转移到 edit 方法

    get - method

    inline fun <reified T> get(prefs: PrefsData<T>, value: T): T
     

    Change Records

    v1.0.67 added

    Function Illustrate

    智能获取指定类型的键值。

    put - method

    Change Records

    v1.0.67 added

    v1.1.9 deprecated

    请转移到 edit 方法

    edit - method

    fun edit(): Editor
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    创建新的 Editor

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    创建新的 Editor

    自动调用 Editor.apply 方法。

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
    -

    Change Records

    v1.0.5 added

    Function Illustrate

    清除 XSharedPreferences 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnablePrefsBridgeCache

    调用此方法将清除当前存储的全部键值缓存。

    下次将从 XSharedPreferences 重新读取。

    在 (Xposed) 宿主环境中使用。

    Editor - class

    inner class Editor internal constructor()
    -

    Change Records

    v1.1.9 added

    Function Illustrate

    YukiHookPrefsBridge 的存储代理类。

    请使用 edit 方法来获取 Editor

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    remove - method

    fun remove(key: String): Editor
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    创建新的 Editor

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    创建新的 Editor

    自动调用 Editor.apply 方法。

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
    +

    Change Records

    v1.0.5 added

    Function Illustrate

    清除 YukiHookPrefsBridge 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnablePrefsBridgeCache

    调用此方法将清除当前存储的全部键值缓存。

    Editor - class

    inner class Editor internal constructor()
    +

    Change Records

    v1.1.9 added

    Function Illustrate

    YukiHookPrefsBridge 的存储代理类。

    请使用 edit 方法来获取 Editor

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    Notice

    在 (Xposed) 宿主环境下只读,无法使用。

    remove - method

    fun remove(key: String): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    移除全部包含 key 的存储数据。

    remove - method

    inline fun <reified T> remove(prefs: PrefsData<T>): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    移除 PrefsData.key 的存储数据。

    clear - method

    fun clear(): Editor
     

    Change Records

    v1.1.9 added

    Function Illustrate

    移除全部存储数据。

    putString - method

    fun putString(key: String, value: String): Editor
    @@ -63,6 +63,6 @@
     

    Change Records

    v1.1.9 added

    Function Illustrate

    智能存储指定类型的键值。

    commit - method

    fun commit(): Boolean
     

    Change Records

    v1.1.9 added

    Function Illustrate

    提交更改 (同步)。

    apply - method

    fun apply()
     

    Change Records

    v1.1.9 added

    Function Illustrate

    提交更改 (异步)。

    - + 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 610facf44..c7151c458 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 3aa4d2da2..7695ec705 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 fd08f4405..cd1f2c533 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 d9233a86d..9615dad20 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 - + @@ -104,7 +104,20 @@ }

    After all the above steps are completed, you can happily call startActivity anywhere in the (Xposed) Host environment where a Context exists.

    The following example

    val context: Context = ... // Assume this is your Context
     context.startActivity(context, HostTestActivity::class.java)
    -

    Tips

    For more functions, please refer to the Context.registerModuleAppActivities method.

    Create ContextThemeWrapper Proxy

    Sometimes, we need to use MaterialAlertDialogBuilder to beautify our own dialogs in the Host App, but we can't create them without the AppCompat theme.

    • Will got the following exception
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
    +

    The proxy parameter we set in the registerModuleAppActivities method above is the default global proxy Activity.

    If you need to specify a delegated Activity to use another Host App's Activity as a proxy, you can refer to the following method.

    The following example

    class HostTestActivity : ModuleAppActivity() {
    +
    +    // Specify an additional proxy Activity class name
    +    // Which must also exist in the Host App's AndroidManifest
    +    override val proxyClassName get() = "com.demo.test.activity.OtherActivity"
    +
    +    override fun onCreate(savedInstanceState: Bundle?) {
    +        super.onCreate(savedInstanceState)
    +        // Module App's Resources have been injected automatically
    +        // You can directly use xml to load the layout
    +        setContentView(R. layout. activity_main)
    +    }
    +}
    +

    Tips

    For more functions, please refer to the Context.registerModuleAppActivities method.

    Create ContextThemeWrapper Proxy

    Sometimes, we need to use MaterialAlertDialogBuilder to beautify our own dialogs in the Host App, but we can't create them without the AppCompat theme.

    • Will got the following exception
    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
     

    At this time, we want to use MaterialAlertDialogBuilder to create a dialog in the current Activity of the Host App being hooked, you can have the following methods.

    The following example

    injectMember {
         method {
             name = "onCreate"
    @@ -165,6 +178,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 d8f06ba0b..588ddc97a 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 7ca38c28d..ce0024cc6 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 @@ // ... }
    - + diff --git a/docs/en/api/special-features/reflection.html b/docs/en/api/special-features/reflection.html index a0888dda2..34780de53 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.

    • voidUnitType

    • java.lang.VoidUnitClass

    • java.lang.ObjectAnyClass

    • java.lang.IntegerIntClass

    • java.lang.CharacterCharClass

    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.

    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 119e87e82..883480e7f 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 c47834bb3..4bec7ae87 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 - + @@ -65,6 +65,6 @@ // Read shared data val publicData = prefs.getBoolean("public_data")

    After using the native method, no matter in Activity or PackageParam, the data will be stored and read in the private directory of the corresponding environment, and the data will be isolated from each other.

    Tips

    For more functions, please refer to YukiHookPrefsBridge.

    - + diff --git a/docs/en/config/api-example.html b/docs/en/config/api-example.html index 457f8f40b..15561c68b 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 - + @@ -216,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 a76caeda2..21f623022 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 - + @@ -379,6 +379,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 691135ebf..febd04045 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 3d0be716a..dc70ca07c 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 4d33a5ae0..f3e2ebd77 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 39e9a4425..43c24cda6 100644 --- a/docs/en/guide/example.html +++ b/docs/en/guide/example.html @@ -23,7 +23,7 @@ } Usage Example | Yuki Hook API - + @@ -321,6 +321,6 @@

    If the activation status of TaiChi and Wuji is included in the Module App activation judgment, the Application of the Module App must be extends from ModuleApplication or directly use ModuleApplication.

    Get Hook Framework Information

    In addition to judging your own activation status, you can also get information about the current Hook Framework through the Executor in YukiHookAPI.Status.

    For example, we can use YukiHookAPI.Status.Executor.name to get the name of the current Hook Framework.

    The following example

    val frameworkName = YukiHookAPI.Status.Executor.name
     

    We can also use YukiHookAPI.Status.Executor.apiLevel to get the API Level of the current Hook Framework.

    The following example

    val frameworkApiLevel = YukiHookAPI.Status.Executor.apiLevel
     

    Tips

    For more functions, please refer to YukiHookAPI.Status.Executor.

    Notice

    YukiHookAPI after 1.0.91 version modifies the logical judgment method of obtaining the status of the Xposed Module, and 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;

    YukiHookAPI only connects to the known acquisition methods.

    Except for the Hook Framework that provides standard APIs, in other cases, the Xposed Module may not be able to determine whether it is activated or obtain information about the Hook Framework.

    - + diff --git a/docs/en/guide/home.html b/docs/en/guide/home.html index d90a97f78..2ea7d2270 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 6b2f79ef7..374d54f59 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 2fb63ea65..3c0d67dc8 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 6e6317ae2..d7a430169 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

    YukiHookPrefsBridge, 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 e4d9526f3..a5891b779 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 ae2d6da52..36212ef5d 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 13c5c5549..477c7a5fc 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 4ff198a43..5cb2397d1 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 8e3f39399..519626377 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.9 | 2023.04.17  最新

    • 将依赖库的类型由 Java Library (jar) 修改为 Android Library (aar)
    • 移除通过 Hook 或反射 API 内部方法、参数的检查功能
    • 修复 YukiHookDataChannel 自动分段发送数据功能不能正常生效 (依然会抛出异常) 的问题
    • 新增可以手动根据目标设备的限制修改 YukiHookDataChannel 允许一次发送的最大数据字节大小
    • 移除 YukiHookDataChannel 只能在模块 Activity 中使用的限制,现在你可以在任何地方使用它
    • 修改并规范 YukiHookDataChannel 使用的广播 Action 名称
    • 修复 YukiHookDataChannel 在不同模块同一宿主的情况下出现 BadParcelableException 异常的问题
    • 新增 ExecutorType,可以通过 YukiHookAPI.Status.Executor.type 来获取已知 Hook Framework 的类型
    • YukiHookModulePrefs 更名为 YukiHookPrefsBridge
    • 修改 YukiHookPrefsBridge 为非单例实现,作为单例可能发生数据混淆的问题
    • 作废了 Context.modulePrefs(...) 方法,请转移到 Context.prefs(...)
    • YukiHookPrefsBridge 新增 native 方法,支持直接作为原生存储在模块和宿主中存储私有数据
    • 整合 YukiHookPrefsBridge 中的存储方法到 YukiHookPrefsBridge.Editor,请使用 edit 方法来存储数据
    • YukiHookPrefsBridge 新增 contains 方法
    • 缓存 YukiHookPrefsBridge 中动态创建的代理对象,尝试修复可能会导致宿主、模块出现 OOM 的问题
    • 修改 Activity 代理功能的代理类为动态生成,防止不同模块注入宿主后造成冲突
    • 修复一些其它可能出现的问题

    1.1.8 | 2023.02.01  过旧

    • 修复底层 Hook 方法在回调时修改 result 等参数时时不能同步更新修改后的状态问题,感谢 Yongzheng Lai在新窗口中打开Issue在新窗口中打开
    • 移动 YukiHookAPI 自动生成的入口类名称文件 assets/yukihookapi_initresources/META-INF/yukihookapi_init
    • 允许在仅打印异常堆栈时 msg 参数为空并可以不设置 msg 参数,留空 msg 参数的日志除非异常堆栈不为空否则将不会被记录
    • 修复 Hook 回调方法体内发生的异常打印的日志无具体方法信息的 BUG
    • HookParam 新增 instanceOrNull 变量与方法,可以在不确定 Hook 实例是否为空的前提下使用以防止 Hook 实例为空抛出异常
    • 解耦合所有 Member 查找功能中的 Hooker 到 MemberBaseFinder.MemberHookerManager
    • 修改了 YukiMemberHookCreator 中的 by 条件用法,现在可以重复使用 by 方法设置多个条件
    • 移除了 Android type 中的错误 Class 对象声明
    • PackageParam.AppLifecycle 中的 registerReceiver 方法新增直接使用 IntentFilter 创建系统广播监听的功能
    • 修复在 PackageParam.AppLifecycle 中可能存在多次注册生命周期的问题
    • Revert: 1.1.7 版本由于有一个严重问题已经撤回,请直接更新到此版本即可 (更新日志同 1.1.7 版本)

    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
    - +

    更新日志

    这里记录了 YukiHookAPI 的版本更新历史。

    特别注意

    我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。

    1.1.10 | 2023.04.21  最新

    • Activity 代理功能新增每个被代理的 Activity 指定单独的代理 Activity 功能
    • 修复 YukiHookPrefsBridge 中的 containsall 方法未判断 native 功能的问题
    • 整合 YukiHookPrefsBridge 中的缓存功能到 PreferencesCacheManager 并使用 LruCache 作为键值对前置缓存
    • 修改 YukiHookPrefsBridge 键值对缓存功能在所有环境中生效 (模块、宿主)
    • 修改部分用于缓存的 HashMapArrayMap 以减少内存消耗
    • 修复一些其它可能出现的问题

    1.1.9 | 2023.04.17  过旧

    • 将依赖库的类型由 Java Library (jar) 修改为 Android Library (aar)
    • 移除通过 Hook 或反射 API 内部方法、参数的检查功能
    • 修复 YukiHookDataChannel 自动分段发送数据功能不能正常生效 (依然会抛出异常) 的问题
    • 新增可以手动根据目标设备的限制修改 YukiHookDataChannel 允许一次发送的最大数据字节大小
    • 移除 YukiHookDataChannel 只能在模块 Activity 中使用的限制,现在你可以在任何地方使用它
    • 修改并规范 YukiHookDataChannel 使用的广播 Action 名称
    • 修复 YukiHookDataChannel 在不同模块同一宿主的情况下出现 BadParcelableException 异常的问题
    • 新增 ExecutorType,可以通过 YukiHookAPI.Status.Executor.type 来获取已知 Hook Framework 的类型
    • YukiHookModulePrefs 更名为 YukiHookPrefsBridge
    • 修改 YukiHookPrefsBridge 为非单例实现,作为单例可能发生数据混淆的问题
    • 作废了 Context.modulePrefs(...) 方法,请转移到 Context.prefs(...)
    • YukiHookPrefsBridge 新增 native 方法,支持直接作为原生存储在模块和宿主中存储私有数据
    • 整合 YukiHookPrefsBridge 中的存储方法到 YukiHookPrefsBridge.Editor,请使用 edit 方法来存储数据
    • YukiHookPrefsBridge 新增 contains 方法
    • 缓存 YukiHookPrefsBridge 中动态创建的代理对象,尝试修复可能会导致宿主、模块出现 OOM 的问题
    • 修改 Activity 代理功能的代理类为动态生成,防止不同模块注入宿主后造成冲突
    • 修复一些其它可能出现的问题

    1.1.8 | 2023.02.01  过旧

    • 修复底层 Hook 方法在回调时修改 result 等参数时时不能同步更新修改后的状态问题,感谢 Yongzheng Lai在新窗口中打开Issue在新窗口中打开
    • 移动 YukiHookAPI 自动生成的入口类名称文件 assets/yukihookapi_initresources/META-INF/yukihookapi_init
    • 允许在仅打印异常堆栈时 msg 参数为空并可以不设置 msg 参数,留空 msg 参数的日志除非异常堆栈不为空否则将不会被记录
    • 修复 Hook 回调方法体内发生的异常打印的日志无具体方法信息的 BUG
    • HookParam 新增 instanceOrNull 变量与方法,可以在不确定 Hook 实例是否为空的前提下使用以防止 Hook 实例为空抛出异常
    • 解耦合所有 Member 查找功能中的 Hooker 到 MemberBaseFinder.MemberHookerManager
    • 修改了 YukiMemberHookCreator 中的 by 条件用法,现在可以重复使用 by 方法设置多个条件
    • 移除了 Android type 中的错误 Class 对象声明
    • PackageParam.AppLifecycle 中的 registerReceiver 方法新增直接使用 IntentFilter 创建系统广播监听的功能
    • 修复在 PackageParam.AppLifecycle 中可能存在多次注册生命周期的问题
    • Revert: 1.1.7 版本由于有一个严重问题已经撤回,请直接更新到此版本即可 (更新日志同 1.1.7 版本)

    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 717d86fd4..1d377b5e9 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 9ad91c287..8f238df51 100644 --- a/docs/zh-cn/about/future.html +++ b/docs/zh-cn/about/future.html @@ -23,11 +23,11 @@ } 展望未来 | Yuki Hook API - +

    展望未来

    未来是美好的,也是不确定的,让我们共同期待 YukiHookAPI 在未来的发展空间。

    未解决的问题

    这里收录了 YukiHookAPI 尚未解决的问题。

    YukiHookPrefsBridge

    目前仅限完美支持 LSPosed,其它 Xposed 框架需要降级模块 API。

    可能完全不支持太极,太极在高版本系统上需要更低的 API 才能适配。

    部分 Xposed 模块开发者目前选择 Hook 目标 APP 内置 Sp 存储方案解决模块设置共享问题。

    后期 Android 系统的权限将越来越严格,selinux 就是目前面临的一个大问题,有待讨论和研究。

    未来的计划

    这里收录了 YukiHookAPI 可能会在后期添加的功能。

    支持独立使用的 Lite 版本

    如果你喜欢 YukiHookAPI 的反射 API,但你的项目可能并不需要相关 Hook 功能。

    那么这里有一个好消息要告诉你:

    YukiHookAPI 的核心反射 API 已被解耦合为 YukiReflection在新窗口中打开 项目,它现在能在任何 Android 项目中使用。

    待讨论

    目前 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 9d45fd972..9e3880f66 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 07ba81fb2..9c4bc0deb 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 - + @@ -129,6 +129,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 71f320913..a1ea7a6ee 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 f69799922..1852d10bf 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 826ddde1a..b7ac334b5 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 04a88f8c3..85f846ba5 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 f72db5b4c..a1b33c5ae 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 1f7d3e6ab..3397f6222 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 2018469cd..d69e74d91 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 9737def52..952f8e285 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/api/compat/type/ExecutorType.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html index 962882351..16a11b1e1 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/api/compat/type/ExecutorType.html @@ -23,7 +23,7 @@ } ExecutorType - class | Yuki Hook API - + @@ -35,6 +35,6 @@

    变更记录

    v1.1.9 新增

    功能描述

    EdXposed。

    TAICHI_XPOSED - enum

    TAICHI_XPOSED
     

    变更记录

    v1.1.9 新增

    功能描述

    TaiChi (太极)。

    BUG_XPOSED - enum

    BUG_XPOSED
     

    变更记录

    v1.1.9 新增

    功能描述

    BugXposed (应用转生)。

    - + 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 bbbcd2532..932c0b8e3 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 59f2e23e0..37f9dc482 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 8643385ff..951301d9d 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 2464ecaac..bcad74c80 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 4d3778d12..046172330 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 df8236732..ec24b6bca 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 c03afeaa4..dc8cc054b 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 31d05ed06..f58425c7c 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 089c1b636..2b1f6f914 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 17248cd37..97e1ba955 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 e06645506..68d480be2 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 978669f84..41d503093 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 - + @@ -115,6 +115,6 @@

    变更记录

    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 d74adee1c..a78ad1ae5 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 cec6f02fa..1ebcf0fc0 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 - + @@ -131,6 +131,6 @@

    变更记录

    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 756997f9c..c0e45bd55 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 3b7f7c355..ed4f8609d 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 - + @@ -136,6 +136,6 @@

    变更记录

    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 299973298..a1cb840e2 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 - + @@ -38,6 +38,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 067ee86e7..6ec24b2e7 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 71e22018a..279ed2a38 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 - + @@ -120,6 +120,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 d0350578b..8c1aeedf9 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 - + @@ -169,6 +169,6 @@

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 装载 Application.onConfigurationChanged

    registerReceiver - method

    fun registerReceiver(vararg action: String, result: (context: Context, intent: Intent) -> Unit)
     
    fun registerReceiver(filter: IntentFilter, result: (context: Context, intent: Intent) -> Unit)
     

    变更记录

    v1.0.88 新增

    v1.1.8 修改

    新增直接使用 IntentFilter 注册系统广播监听

    功能描述

    注册系统广播监听。

    - + 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 5148bd06f..dd5e7ab0d 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 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 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 7302cea28..f9c188a08 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 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 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 9fa326521..9be57354d 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 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 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 f2ac26b1d..23bc96911 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 e7d9a4d91..140e9e0ab 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 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 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 03fda988e..9f41508a5 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 2ab68b886..4f4ef370e 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 47c6701ba..7b72a0686 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 c4ee159eb..7b6e45270 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 d35a7b7b8..78af15b9b 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 dc60a02cf..aad676d03 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 - + @@ -43,6 +43,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 b922d78ff..6b8544546 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 44aeaed97..de958ce85 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 6f7ab9493..b0bad245d 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,13 @@ } ModuleAppActivity - class | Yuki Hook API - + -

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
    -

    变更记录

    v1.1.0 新增

    功能描述

    代理 Activity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    - +

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
    +

    变更记录

    v1.1.0 新增

    功能描述

    代理 Activity

    继承于此类的 Activity 可以同时在宿主与模块中启动。

    在 (Xposed) 宿主环境需要在宿主启动时调用 Context.registerModuleAppActivities 进行注册。

    proxyClassName - field

    open val proxyClassName: String
    +

    变更记录

    v1.1.10 新增

    功能描述

    设置当前代理的 Activity 类名。

    留空则使用 Context.registerModuleAppActivities 时设置的类名

    特别注意

    代理的 Activity 类名必须存在于宿主的 AndroidMainifest 清单中。

    + 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 6ec72ad96..8243ac739 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,14 @@ } ModuleAppCompatActivity - class | Yuki Hook API - + -

    ModuleAppCompatActivity - class

    open class ModuleAppCompatActivity : AppCompatActivity()
    +    

    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 主题。

    - +

    变更记录

    v1.1.0 新增

    功能描述

    设置当前代理的 Activity 主题。

    proxyClassName - field

    open val proxyClassName: String
    +

    变更记录

    v1.1.10 新增

    功能描述

    设置当前代理的 Activity 类名。

    留空则使用 Context.registerModuleAppActivities 时设置的类名

    特别注意

    代理的 Activity 类名必须存在于宿主的 AndroidMainifest 清单中。

    + 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 a8fb4da95..03d639ae7 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 48159efc2..4c8f819e4 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/YukiHookPrefsBridge.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html index f714270c6..2181b3213 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookPrefsBridge.html @@ -23,7 +23,7 @@ } YukiHookPrefsBridge - class | Yuki Hook API - + @@ -47,10 +47,10 @@

    变更记录

    v1.1.9 新增

    功能描述

    判断当前是否包含 key 键值的数据。

    智能识别对应环境读取键值数据。

    all - method

    fun all(): HashMap<String, Any?>
     

    变更记录

    v1.0.77 新增

    功能描述

    获取全部存储的键值数据。

    智能识别对应环境读取键值数据。

    特别注意

    每次调用都会获取实时的数据,不受缓存控制,请勿在高并发场景中使用。

    remove - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    clear - method

    变更记录

    v1.0.77 新增

    v1.1.9 作废

    请转移到 edit 方法

    putString - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    putStringSet - method

    变更记录

    v1.0.77 新增

    v1.1.9 作废

    请转移到 edit 方法

    putBoolean - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    putInt - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    putLong - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    putFloat - method

    变更记录

    v1.0 添加

    v1.1.9 作废

    请转移到 edit 方法

    get - method

    inline fun <reified T> get(prefs: PrefsData<T>, value: T): T
     

    变更记录

    v1.0.67 新增

    功能描述

    智能获取指定类型的键值。

    put - method

    变更记录

    v1.0.67 新增

    v1.1.9 作废

    请转移到 edit 方法

    edit - method

    fun edit(): Editor
    -

    变更记录

    v1.1.9 新增

    功能描述

    创建新的 Editor

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    -

    变更记录

    v1.1.9 新增

    功能描述

    创建新的 Editor

    自动调用 Editor.apply 方法。

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
    -

    变更记录

    v1.0.5 新增

    功能描述

    清除 XSharedPreferences 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnablePrefsBridgeCache

    调用此方法将清除当前存储的全部键值缓存。

    下次将从 XSharedPreferences 重新读取。

    在 (Xposed) 宿主环境中使用。

    Editor - class

    inner class Editor internal constructor()
    -

    变更记录

    v1.1.9 新增

    功能描述

    YukiHookPrefsBridge 的存储代理类。

    请使用 edit 方法来获取 Editor

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    remove - method

    fun remove(key: String): Editor
    +

    变更记录

    v1.1.9 新增

    功能描述

    创建新的 Editor

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    edit - method

    fun edit(initiate: Editor.() -> Unit)
    +

    变更记录

    v1.1.9 新增

    功能描述

    创建新的 Editor

    自动调用 Editor.apply 方法。

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    clearCache - method

    fun clearCache()
    +

    变更记录

    v1.0.5 新增

    功能描述

    清除 YukiHookPrefsBridge 中缓存的键值数据。

    无论是否开启 YukiHookAPI.Configs.isEnablePrefsBridgeCache

    调用此方法将清除当前存储的全部键值缓存。

    Editor - class

    inner class Editor internal constructor()
    +

    变更记录

    v1.1.9 新增

    功能描述

    YukiHookPrefsBridge 的存储代理类。

    请使用 edit 方法来获取 Editor

    在模块环境中或启用了 isUsingNativeStorage 后使用。

    注意

    在 (Xposed) 宿主环境下只读,无法使用。

    remove - method

    fun remove(key: String): Editor
     

    变更记录

    v1.1.9 新增

    功能描述

    移除全部包含 key 的存储数据。

    remove - method

    inline fun <reified T> remove(prefs: PrefsData<T>): Editor
     

    变更记录

    v1.1.9 新增

    功能描述

    移除 PrefsData.key 的存储数据。

    clear - method

    fun clear(): Editor
     

    变更记录

    v1.1.9 新增

    功能描述

    移除全部存储数据。

    putString - method

    fun putString(key: String, value: String): Editor
    @@ -63,6 +63,6 @@
     

    变更记录

    v1.1.9 新增

    功能描述

    智能存储指定类型的键值。

    commit - method

    fun commit(): Boolean
     

    变更记录

    v1.1.9 新增

    功能描述

    提交更改 (同步)。

    apply - method

    fun apply()
     

    变更记录

    v1.1.9 新增

    功能描述

    提交更改 (异步)。

    - + 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 ddcd8e473..1e8039bdd 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 e3d4b8ac3..75f19d5df 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 aafc44582..9e7d47107 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 da7bd93a2..c7316f89a 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 - + @@ -101,7 +101,18 @@ }

    以上步骤全部完成后,你就可以在 (Xposed) 宿主环境任意存在 Context 的地方愉快地调用 startActivity 了。

    示例如下

    val context: Context = ... // 假设这就是你的 Context
     context.startActivity(context, HostTestActivity::class.java)
    -

    小提示

    更多功能请参考 Context.registerModuleAppActivities 方法。

    创建 ContextThemeWrapper 代理

    有时候,我们需要使用 MaterialAlertDialogBuilder 来美化自己在宿主中的对话框,但是拿不到 AppCompat 主题就无法创建。

    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
    +

    上面我们在 registerModuleAppActivities 方法中设置的 proxy 参数为默认的全局代理 Activity

    如果你需要指定某个代理的 Activity 使用另外的宿主 Activity 进行代理,你可以参考如下方法。

    示例如下

    class HostTestActivity : ModuleAppActivity() {
    +
    +    // 指定一个另外的代理 Activity 类名,其也必须存在于宿主的 AndroidManifest 中
    +    override val proxyClassName get() = "com.demo.test.activity.OtherActivity"
    +
    +    override fun onCreate(savedInstanceState: Bundle?) {
    +        super.onCreate(savedInstanceState)
    +        // 模块资源已被自动注入,可以直接使用 xml 装载布局
    +        setContentView(R.layout.activity_main)
    +    }
    +}
    +

    小提示

    更多功能请参考 Context.registerModuleAppActivities 方法。

    创建 ContextThemeWrapper 代理

    有时候,我们需要使用 MaterialAlertDialogBuilder 来美化自己在宿主中的对话框,但是拿不到 AppCompat 主题就无法创建。

    The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
     

    这时,我们想在宿主被 Hook 的当前 Activity 中使用 MaterialAlertDialogBuilder 来创建对话框,就可以有如下方法。

    示例如下

    injectMember {
         method {
             name = "onCreate"
    @@ -159,6 +170,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 977c8d2f0..cd402bb39 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 1e35c0d8e..6130271ac 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 e081fd0e7..f03933663 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 82753abfc..1a79993e9 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 827603204..5f7a63753 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 - + @@ -65,6 +65,6 @@ // 读取共享数据 val publicData = prefs.getBoolean("public_data")

    使用 native 方法后,无论在 Activity 还是 PackageParam 中都会将数据在对应环境的私有目录中存储、读取,数据相互隔离。

    小提示

    更多功能请参考 YukiHookPrefsBridge

    - + diff --git a/docs/zh-cn/config/api-example.html b/docs/zh-cn/config/api-example.html index f6ed40878..c2eb1b421 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 - + @@ -214,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 fbda5734f..857a8f8bc 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 - + @@ -375,6 +375,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 8a91b69bc..6d6839fa0 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 59fb71b41..deca98d06 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 0fa74c1c7..54c296356 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 2d8378c99..eb7f29c68 100644 --- a/docs/zh-cn/guide/example.html +++ b/docs/zh-cn/guide/example.html @@ -23,7 +23,7 @@ } 用法示例 | Yuki Hook API - + @@ -321,6 +321,6 @@

    若模块激活判断中包含太极、无极中的激活状态,就必须将模块的 Application 继承于 ModuleApplication 或直接使用 ModuleApplication

    获取 Hook Framework 信息

    除了判断自身激活状态之外,你还可以通过 YukiHookAPI.Status 中的 Executor 来获取当前 Hook Framework 的相关信息。

    例如我们可以使用 YukiHookAPI.Status.Executor.name 来获取当前 Hook Framework 的名称。

    示例如下

    val frameworkName = YukiHookAPI.Status.Executor.name
     

    我们还可以使用 YukiHookAPI.Status.Executor.apiLevel 来获取当前 Hook Framework 的 API Level。

    示例如下

    val frameworkApiLevel = YukiHookAPI.Status.Executor.apiLevel
     

    小提示

    更多功能请参考 YukiHookAPI.Status.Executor

    注意

    1.0.91 版本后的 YukiHookAPI 修改了获取 Xposed 模块状态的逻辑判断方式,现在你可以在模块与 Hook APP (宿主) 中同时使用此 API;

    需要确保 YukiHookAPI.Configs.isEnableHookModuleStatus 是启用状态;

    YukiHookAPI 仅对已知的获取方式进行了对接,除了提供标准 API 的 Hook Framework 之外,其它情况下模块可能都将无法判断自己是否被激活或是获取 Hook Framework 的相关信息。

    - + diff --git a/docs/zh-cn/guide/home.html b/docs/zh-cn/guide/home.html index c58ab665d..c136a19f7 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 783d93d70..2bdf9ebc4 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 b11ef4459..745a0fcde 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 4e379c7d7..8221c02bb 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 模块时,YukiHookPrefsBridgeYukiHookDataChannel 以及 Resources Hook 功能将失效。

    - + diff --git a/docs/zh-cn/index.html b/docs/zh-cn/index.html index ab5c683a0..2dae80665 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 a1ea9d613..c7763ac9f 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) 一栏手动选择软件的界面语言。

    - +