diff --git a/docs/404.html b/docs/404.html index 04c34878..76fca13f 100644 --- a/docs/404.html +++ b/docs/404.html @@ -23,11 +23,11 @@ } Yuki Hook API - + -

404

That's a Four-Oh-Four.
Take me home
- +

404

Looks like we've got some broken links.
Take me home
+ diff --git a/docs/assets/404.html.000669bd.js b/docs/assets/404.html.4241c760.js similarity index 63% rename from docs/assets/404.html.000669bd.js rename to docs/assets/404.html.4241c760.js index 6716aa7c..9f0f5477 100644 --- a/docs/assets/404.html.000669bd.js +++ b/docs/assets/404.html.4241c760.js @@ -1 +1 @@ -import{_ as e,o as c,c as t}from"./app.b0c3bf74.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.99fcdd51.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.68495a55.js b/docs/assets/BaseFinder.html.ad905538.js similarity index 99% rename from docs/assets/BaseFinder.html.68495a55.js rename to docs/assets/BaseFinder.html.ad905538.js index 01c62b13..67f6ab84 100644 --- a/docs/assets/BaseFinder.html.68495a55.js +++ b/docs/assets/BaseFinder.html.ad905538.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as n,a as o}from"./app.b0c3bf74.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.99fcdd51.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/BaseFinder.html.d36635ff.js b/docs/assets/BaseFinder.html.e92b3674.js
similarity index 99%
rename from docs/assets/BaseFinder.html.d36635ff.js
rename to docs/assets/BaseFinder.html.e92b3674.js
index 218d7c1e..fee08718 100644
--- a/docs/assets/BaseFinder.html.d36635ff.js
+++ b/docs/assets/BaseFinder.html.e92b3674.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a as n}from"./app.b0c3bf74.js";const a={},p=n(`

BaseFinder - class

abstract class BaseFinder
+import{_ as s,o as e,c as o,a as n}from"./app.99fcdd51.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/ChannelData.html.a6594b7c.js b/docs/assets/ChannelData.html.2e6c6569.js
similarity index 99%
rename from docs/assets/ChannelData.html.a6594b7c.js
rename to docs/assets/ChannelData.html.2e6c6569.js
index ec75a828..9017af66 100644
--- a/docs/assets/ChannelData.html.a6594b7c.js
+++ b/docs/assets/ChannelData.html.2e6c6569.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.b0c3bf74.js";const e={},o=l(`

ChannelData - class

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

ChannelData - class

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

\u53D8\u66F4\u8BB0\u5F55

v1.0.88 \u65B0\u589E

\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/ChannelData.html.eeec7743.js b/docs/assets/ChannelData.html.35215702.js
similarity index 99%
rename from docs/assets/ChannelData.html.eeec7743.js
rename to docs/assets/ChannelData.html.35215702.js
index b20bbdf4..dbde76f8 100644
--- a/docs/assets/ChannelData.html.eeec7743.js
+++ b/docs/assets/ChannelData.html.35215702.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as l}from"./app.b0c3bf74.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?)
+import{_ as s,o as a,c as n,a as l}from"./app.99fcdd51.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?)
 

Change Records

v1.0.88 added

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/ComponentTypeFactory.html.da9b8c9c.js b/docs/assets/ComponentTypeFactory.html.0c913ae3.js
similarity index 95%
rename from docs/assets/ComponentTypeFactory.html.da9b8c9c.js
rename to docs/assets/ComponentTypeFactory.html.0c913ae3.js
index ce27cbac..394d2366 100644
--- a/docs/assets/ComponentTypeFactory.html.da9b8c9c.js
+++ b/docs/assets/ComponentTypeFactory.html.0c913ae3.js
@@ -1 +1 @@
-import{_ as n,r as a,o as c,c as s,b as e,d as r,a as i,e as o}from"./app.b0c3bf74.js";const p={},l=i('

Notice

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

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

ComponentTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

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

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

Notice

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

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

ComponentTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

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

',6),d=o("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=o("\u70B9\u51FB\u8FD9\u91CC"),m=o(" \u8FDB\u884C\u67E5\u770B\u3002");function u(k,f){const t=a("ExternalLinkIcon");return c(),s("div",null,[l,e("p",null,[d,e("a",h,[_,r(t)]),m])])}const g=n(p,[["render",u],["__file","ComponentTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/ComponentTypeFactory.html.cf5d5250.js b/docs/assets/ComponentTypeFactory.html.7e04a8b3.js similarity index 94% rename from docs/assets/ComponentTypeFactory.html.cf5d5250.js rename to docs/assets/ComponentTypeFactory.html.7e04a8b3.js index aaddf426..0ffc8447 100644 --- a/docs/assets/ComponentTypeFactory.html.cf5d5250.js +++ b/docs/assets/ComponentTypeFactory.html.7e04a8b3.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.b0c3bf74.js";const d={},i=p('

ComponentTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

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

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

ComponentTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

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

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

Notice

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

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

ConstructorFinder - class

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

Notice

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

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

ConstructorFinder - class

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

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Constructor \u67E5\u627E\u7C7B\u3002

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

paramCount - field

var paramCount: Int
 

Change Records

v1.0.67 added

Function Illustrate

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

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

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

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
 

Change Records

v1.0.67 added

v1.0.80 modified

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

v1.1.0 modified

\u5408\u5E76\u5230 ModifierConditions

Function Illustrate

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

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

Pay Attention

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

emptyParam - method

fun emptyParam(): IndexTypeCondition
diff --git a/docs/assets/ConstructorFinder.html.e01a5106.js b/docs/assets/ConstructorFinder.html.73258725.js
similarity index 99%
rename from docs/assets/ConstructorFinder.html.e01a5106.js
rename to docs/assets/ConstructorFinder.html.73258725.js
index 06f906af..5db6a942 100644
--- a/docs/assets/ConstructorFinder.html.e01a5106.js
+++ b/docs/assets/ConstructorFinder.html.73258725.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as o,a}from"./app.b0c3bf74.js";const e={},l=a(`

ConstructorFinder - class

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

ConstructorFinder - class

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

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u7C7B\u3002

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

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

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

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

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

v1.0.80 \u4FEE\u6539

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

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 ModifierConditions

\u529F\u80FD\u63CF\u8FF0

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

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

\u7279\u522B\u6CE8\u610F

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

emptyParam - method

fun emptyParam(): IndexTypeCondition
diff --git a/docs/assets/ConstructorRules.html.a20e5321.js b/docs/assets/ConstructorRules.html.89ac6cea.js
similarity index 99%
rename from docs/assets/ConstructorRules.html.a20e5321.js
rename to docs/assets/ConstructorRules.html.89ac6cea.js
index 639de1fa..9e8a8589 100644
--- a/docs/assets/ConstructorRules.html.a20e5321.js
+++ b/docs/assets/ConstructorRules.html.89ac6cea.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.b0c3bf74.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.99fcdd51.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/ConstructorRules.html.38bd707d.js b/docs/assets/ConstructorRules.html.8f57ac81.js
similarity index 99%
rename from docs/assets/ConstructorRules.html.38bd707d.js
rename to docs/assets/ConstructorRules.html.8f57ac81.js
index faa5b200..9aed5bf8 100644
--- a/docs/assets/ConstructorRules.html.38bd707d.js
+++ b/docs/assets/ConstructorRules.html.8f57ac81.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as n}from"./app.b0c3bf74.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.99fcdd51.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/CountRules.html.95e4f390.js b/docs/assets/CountRules.html.3361aff7.js
similarity index 98%
rename from docs/assets/CountRules.html.95e4f390.js
rename to docs/assets/CountRules.html.3361aff7.js
index a8a6db4c..dbeaf8db 100644
--- a/docs/assets/CountRules.html.95e4f390.js
+++ b/docs/assets/CountRules.html.3361aff7.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as o,a as e}from"./app.b0c3bf74.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.99fcdd51.js";const a={},t=e(`

Notice

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

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

CountRules - class

class CountRules private constructor()
 

Change Records

v1.1.0 added

Function Illustrate

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

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

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
 

Change Records

v1.1.0 added

Function Illustrate

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
 

Change Records

v1.1.0 added

Function Illustrate

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
diff --git a/docs/assets/CountRules.html.66082c4b.js b/docs/assets/CountRules.html.64b9467a.js
similarity index 98%
rename from docs/assets/CountRules.html.66082c4b.js
rename to docs/assets/CountRules.html.64b9467a.js
index 82745841..f228ef4d 100644
--- a/docs/assets/CountRules.html.66082c4b.js
+++ b/docs/assets/CountRules.html.64b9467a.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a as e}from"./app.b0c3bf74.js";const a={},l=e(`

CountRules - class

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

CountRules - class

class CountRules private constructor()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

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

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
diff --git a/docs/assets/CurrentClass.html.8e06ec8e.js b/docs/assets/CurrentClass.html.7154b0ad.js
similarity index 99%
rename from docs/assets/CurrentClass.html.8e06ec8e.js
rename to docs/assets/CurrentClass.html.7154b0ad.js
index b22bc70a..fccd8b4b 100644
--- a/docs/assets/CurrentClass.html.8e06ec8e.js
+++ b/docs/assets/CurrentClass.html.7154b0ad.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,a as o}from"./app.b0c3bf74.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.99fcdd51.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.86fa9f30.js b/docs/assets/CurrentClass.html.8b40838c.js
similarity index 99%
rename from docs/assets/CurrentClass.html.86fa9f30.js
rename to docs/assets/CurrentClass.html.8b40838c.js
index e08d2a02..cc16e4e1 100644
--- a/docs/assets/CurrentClass.html.86fa9f30.js
+++ b/docs/assets/CurrentClass.html.8b40838c.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as e,a as n}from"./app.b0c3bf74.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.99fcdd51.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.5efcadc8.js b/docs/assets/DefinedTypeFactory.html.3ff07e63.js
similarity index 95%
rename from docs/assets/DefinedTypeFactory.html.5efcadc8.js
rename to docs/assets/DefinedTypeFactory.html.3ff07e63.js
index fe7ef42a..660f5b99 100644
--- a/docs/assets/DefinedTypeFactory.html.5efcadc8.js
+++ b/docs/assets/DefinedTypeFactory.html.3ff07e63.js
@@ -1,2 +1,2 @@
-import{_ as e,o as s,c as a,a as o}from"./app.b0c3bf74.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.99fcdd51.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/DefinedTypeFactory.html.2ea6dbab.js b/docs/assets/DefinedTypeFactory.html.d1c53dd5.js similarity index 96% rename from docs/assets/DefinedTypeFactory.html.2ea6dbab.js rename to docs/assets/DefinedTypeFactory.html.d1c53dd5.js index bc458c4e..49b129e6 100644 --- a/docs/assets/DefinedTypeFactory.html.2ea6dbab.js +++ b/docs/assets/DefinedTypeFactory.html.d1c53dd5.js @@ -1,2 +1,2 @@ -import{_ as e,o as s,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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/DexClassFinder.html.e2733806.js b/docs/assets/DexClassFinder.html.d84667d3.js similarity index 99% rename from docs/assets/DexClassFinder.html.e2733806.js rename to docs/assets/DexClassFinder.html.d84667d3.js index 4cde021f..1973c2fd 100644 --- a/docs/assets/DexClassFinder.html.e2733806.js +++ b/docs/assets/DexClassFinder.html.d84667d3.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

DexClassFinder - class

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

DexClassFinder - class

class DexClassFinder internal constructor(
     internal var name: String,
     internal var async: Boolean,
     override val loaderSet: ClassLoader?
diff --git a/docs/assets/DexClassFinder.html.0ca80b25.js b/docs/assets/DexClassFinder.html.db21690b.js
similarity index 99%
rename from docs/assets/DexClassFinder.html.0ca80b25.js
rename to docs/assets/DexClassFinder.html.db21690b.js
index 3747ad29..06fa6dea 100644
--- a/docs/assets/DexClassFinder.html.0ca80b25.js
+++ b/docs/assets/DexClassFinder.html.db21690b.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},l=a(`

Notice

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

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

DexClassFinder - class

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

FieldFinder - class

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

FieldFinder - class

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

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u7C7B\u3002

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

classSet - field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u79FB\u9664

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.70 \u4FEE\u6539

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

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

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

type - field

var type: Any?
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

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

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
diff --git a/docs/assets/FieldFinder.html.f89903c2.js b/docs/assets/FieldFinder.html.9d8f7b17.js
similarity index 99%
rename from docs/assets/FieldFinder.html.f89903c2.js
rename to docs/assets/FieldFinder.html.9d8f7b17.js
index b67ee2b2..3433feaf 100644
--- a/docs/assets/FieldFinder.html.f89903c2.js
+++ b/docs/assets/FieldFinder.html.9d8f7b17.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a as n}from"./app.b0c3bf74.js";const a={},l=n(`

Notice

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

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

FieldFinder - class

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

Notice

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

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

FieldFinder - class

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

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Field \u67E5\u627E\u7C7B\u3002

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

classSet - field

Change Records

v1.0 first

v1.0.2 removed

name - field

var name: String
 

Change Records

v1.0 first

v1.0.70 modified

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

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

Pay Attention

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

type - field

var type: Any?
 

Change Records

v1.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

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

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
diff --git a/docs/assets/FieldRules.html.c2cff299.js b/docs/assets/FieldRules.html.0cbc7d43.js
similarity index 98%
rename from docs/assets/FieldRules.html.c2cff299.js
rename to docs/assets/FieldRules.html.0cbc7d43.js
index f772569c..b7161312 100644
--- a/docs/assets/FieldRules.html.c2cff299.js
+++ b/docs/assets/FieldRules.html.0cbc7d43.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.js";const n={},l=a(`

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
+import{_ as s,o as e,c as o,a}from"./app.99fcdd51.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/FieldRules.html.bb621298.js b/docs/assets/FieldRules.html.d12c9b1b.js
similarity index 98%
rename from docs/assets/FieldRules.html.bb621298.js
rename to docs/assets/FieldRules.html.d12c9b1b.js
index 236e3045..05d7c987 100644
--- a/docs/assets/FieldRules.html.bb621298.js
+++ b/docs/assets/FieldRules.html.d12c9b1b.js
@@ -1,4 +1,4 @@
-import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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/GenericClass.html.ee1f07d7.js b/docs/assets/GenericClass.html.81e862b7.js
similarity index 97%
rename from docs/assets/GenericClass.html.ee1f07d7.js
rename to docs/assets/GenericClass.html.81e862b7.js
index 20bbf26c..78be3f94 100644
--- a/docs/assets/GenericClass.html.ee1f07d7.js
+++ b/docs/assets/GenericClass.html.81e862b7.js
@@ -1,3 +1,3 @@
-import{_ as s,o as a,c as e,a as n}from"./app.b0c3bf74.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.

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
+import{_ as s,o as a,c as e,a as n}from"./app.99fcdd51.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.

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

Change Records

v1.1.0 added

Function Illustrate

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

`,13),t=[l];function c(p,r){return a(),e("div",null,t)}const d=s(o,[["render",c],["__file","GenericClass.html.vue"]]);export{d as default}; diff --git a/docs/assets/GenericClass.html.906476af.js b/docs/assets/GenericClass.html.d5c74ff7.js similarity index 97% rename from docs/assets/GenericClass.html.906476af.js rename to docs/assets/GenericClass.html.d5c74ff7.js index 6e3e1a69..d6e1d999 100644 --- a/docs/assets/GenericClass.html.906476af.js +++ b/docs/assets/GenericClass.html.d5c74ff7.js @@ -1,3 +1,3 @@ -import{_ as s,o as a,c as e,a as n}from"./app.b0c3bf74.js";const o={},l=n(`

GenericClass - class

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

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

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

`,12),c=[l];function p(t,r){return a(),e("div",null,c)}const i=s(o,[["render",p],["__file","GenericClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/GraphicsTypeFactory.html.212a219e.js b/docs/assets/GraphicsTypeFactory.html.7de8d5a4.js similarity index 94% rename from docs/assets/GraphicsTypeFactory.html.212a219e.js rename to docs/assets/GraphicsTypeFactory.html.7de8d5a4.js index b07e8c3e..e1dab7bd 100644 --- a/docs/assets/GraphicsTypeFactory.html.212a219e.js +++ b/docs/assets/GraphicsTypeFactory.html.7de8d5a4.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.b0c3bf74.js";const i={},d=p('

GraphicsTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

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

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

GraphicsTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

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

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

Notice

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

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

GraphicsTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

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

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

Notice

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

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

GraphicsTypeFactory - kt

Change Records

v1.0 first

Function Illustrate

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

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,g){const t=c("ExternalLinkIcon");return s(),r("div",null,[l,o("p",null,[d,o("a",h,[_,n(t)]),u])])}const y=a(p,[["render",k],["__file","GraphicsTypeFactory.html.vue"]]);export{y as default}; diff --git a/docs/assets/HookClass.html.a8204777.js b/docs/assets/HookClass.html.8c45a8ee.js similarity index 97% rename from docs/assets/HookClass.html.a8204777.js rename to docs/assets/HookClass.html.8c45a8ee.js index c5fb823b..066770ee 100644 --- a/docs/assets/HookClass.html.a8204777.js +++ b/docs/assets/HookClass.html.8c45a8ee.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.b0c3bf74.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.99fcdd51.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.35dc7066.js b/docs/assets/HookClass.html.e17b98a3.js similarity index 97% rename from docs/assets/HookClass.html.35dc7066.js rename to docs/assets/HookClass.html.e17b98a3.js index 9c361d10..5872bdca 100644 --- a/docs/assets/HookClass.html.35dc7066.js +++ b/docs/assets/HookClass.html.e17b98a3.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as a,a as n}from"./app.b0c3bf74.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.99fcdd51.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.ac648aa9.js b/docs/assets/HookParam.html.0ea0d120.js similarity index 99% rename from docs/assets/HookParam.html.ac648aa9.js rename to docs/assets/HookParam.html.0ea0d120.js index ec8179c3..63debc37 100644 --- a/docs/assets/HookParam.html.ac648aa9.js +++ b/docs/assets/HookParam.html.0ea0d120.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

HookParam - class

class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
+import{_ as s,o,c as a,a as e}from"./app.99fcdd51.js";const n={},l=e(`

HookParam - class

class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u79FB\u52A8 HookParamWrapper \u5230 YukiHookCallback.Param

\u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 creater \u547D\u540D\u5230 creator

\u529F\u80FD\u63CF\u8FF0

Hook \u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u7C7B\u3002

args - field

val args: Array<Any?>
 

\u53D8\u66F4\u8BB0\u5F55

\u5728 v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D Hook \u5BF9\u8C61 member \u6216 constructor \u7684\u53C2\u6570\u5BF9\u8C61\u6570\u7EC4\u3002

\u8FD9\u91CC\u7684\u6570\u7EC4\u6BCF\u9879\u7C7B\u578B\u9ED8\u8BA4\u4E3A Any\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 args \u65B9\u6CD5\u6765\u5B9E\u73B0 ArgsModifyer.cast \u529F\u80FD\u3002

firstArgs - field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.75 \u79FB\u9664

\u8BF7\u4F7F\u7528 args(index = 0) \u6216 args().first()

lastArgs - field

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.75 \u79FB\u9664

\u8BF7\u4F7F\u7528 args().last()

instance - field

val instance: Any
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D Hook \u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

\u7279\u522B\u6CE8\u610F

\u5982\u679C\u4F60\u5F53\u524D Hook \u7684\u5BF9\u8C61\u662F\u4E00\u4E2A\u9759\u6001\uFF0C\u90A3\u4E48\u5B83\u5C06\u4E0D\u5B58\u5728\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

instanceClass - field

val instanceClass: Class<*>
diff --git a/docs/assets/HookParam.html.4691cd4c.js b/docs/assets/HookParam.html.b72403ea.js
similarity index 99%
rename from docs/assets/HookParam.html.4691cd4c.js
rename to docs/assets/HookParam.html.b72403ea.js
index 2fb2ebf3..c29ece1b 100644
--- a/docs/assets/HookParam.html.4691cd4c.js
+++ b/docs/assets/HookParam.html.b72403ea.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a}from"./app.b0c3bf74.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 param: YukiHookCallback.Param?)
+import{_ as s,o,c as e,a}from"./app.99fcdd51.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 param: YukiHookCallback.Param?)
 

Change Records

v1.0 first

v1.1.0 modified

\u79FB\u52A8 HookParamWrapper \u5230 YukiHookCallback.Param

\u4FEE\u6B63\u62FC\u5199\u9519\u8BEF\u7684 creater \u547D\u540D\u5230 creator

Function Illustrate

Hook \u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u76EE\u6807\u5BF9\u8C61\u5B9E\u73B0\u7C7B\u3002

args - field

val args: Array<Any?>
 

Change Records

\u5728 v1.0 \u6DFB\u52A0

Function Illustrate

\u83B7\u53D6\u5F53\u524D Hook \u5BF9\u8C61 member \u6216 constructor \u7684\u53C2\u6570\u5BF9\u8C61\u6570\u7EC4\u3002

\u8FD9\u91CC\u7684\u6570\u7EC4\u6BCF\u9879\u7C7B\u578B\u9ED8\u8BA4\u4E3A Any\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 args \u65B9\u6CD5\u6765\u5B9E\u73B0 ArgsModifyer.cast \u529F\u80FD\u3002

firstArgs - field

Change Records

v1.0 first

v1.0.75 removed

\u8BF7\u4F7F\u7528 args(index = 0) \u6216 args().first()

lastArgs - field

Change Records

v1.0 first

v1.0.75 removed

\u8BF7\u4F7F\u7528 args().last()

instance - field

val instance: Any
 

Change Records

v1.0 first

Function Illustrate

\u83B7\u53D6\u5F53\u524D Hook \u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

Pay Attention

\u5982\u679C\u4F60\u5F53\u524D Hook \u7684\u5BF9\u8C61\u662F\u4E00\u4E2A\u9759\u6001\uFF0C\u90A3\u4E48\u5B83\u5C06\u4E0D\u5B58\u5728\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

instanceClass - field

val instanceClass: Class<*>
diff --git a/docs/assets/HookResources.html.74ebe2d5.js b/docs/assets/HookResources.html.505eac26.js
similarity index 95%
rename from docs/assets/HookResources.html.74ebe2d5.js
rename to docs/assets/HookResources.html.505eac26.js
index 5aa5a6b2..717a3e8d 100644
--- a/docs/assets/HookResources.html.74ebe2d5.js
+++ b/docs/assets/HookResources.html.505eac26.js
@@ -1,2 +1,2 @@
-import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const c={},n=a(`

HookResources - class

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

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.80 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

`,6),l=[n];function r(t,p){return o(),e("div",null,l)}const i=s(c,[["render",r],["__file","HookResources.html.vue"]]);export{i as default}; diff --git a/docs/assets/HookResources.html.05daf277.js b/docs/assets/HookResources.html.78582f9b.js similarity index 96% rename from docs/assets/HookResources.html.05daf277.js rename to docs/assets/HookResources.html.78582f9b.js index f92a8987..cec40b18 100644 --- a/docs/assets/HookResources.html.05daf277.js +++ b/docs/assets/HookResources.html.78582f9b.js @@ -1,2 +1,2 @@ -import{_ as s,o,c as e,a as n}from"./app.b0c3bf74.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.99fcdd51.js";const a={},c=n(`

Notice

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

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

HookResources - class

class HookResources internal constructor(var instance: YukiResources?)
 

Change Records

v1.0.80 added

Function Illustrate

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

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

IYukiHookXposedInit - interface

interface IYukiHookXposedInit
+import{_ as o,o as e,c as s,a as n}from"./app.99fcdd51.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/IYukiHookXposedInit.html.7e3e4d06.js b/docs/assets/IYukiHookXposedInit.html.ceb84101.js
similarity index 98%
rename from docs/assets/IYukiHookXposedInit.html.7e3e4d06.js
rename to docs/assets/IYukiHookXposedInit.html.ceb84101.js
index 65d6c386..7b3236f4 100644
--- a/docs/assets/IYukiHookXposedInit.html.7e3e4d06.js
+++ b/docs/assets/IYukiHookXposedInit.html.ceb84101.js
@@ -1,4 +1,4 @@
-import{_ as o,o as e,c as s,a as n}from"./app.b0c3bf74.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.99fcdd51.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/InjectYukiHookWithXposed.html.f98bfb29.js b/docs/assets/InjectYukiHookWithXposed.html.50a0e9ff.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.f98bfb29.js
rename to docs/assets/InjectYukiHookWithXposed.html.50a0e9ff.js
index 1c4ec136..d056200b 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.f98bfb29.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.50a0e9ff.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.b0c3bf74.js";const e={},p=a(`

InjectYukiHookWithXposed - annotation

annotation class InjectYukiHookWithXposed(
+import{_ as s,o,c as n,a}from"./app.99fcdd51.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.20c5fe08.js b/docs/assets/InjectYukiHookWithXposed.html.7e7e596c.js
similarity index 97%
rename from docs/assets/InjectYukiHookWithXposed.html.20c5fe08.js
rename to docs/assets/InjectYukiHookWithXposed.html.7e7e596c.js
index 1ac85956..80bf205e 100644
--- a/docs/assets/InjectYukiHookWithXposed.html.20c5fe08.js
+++ b/docs/assets/InjectYukiHookWithXposed.html.7e7e596c.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.b0c3bf74.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.99fcdd51.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.b830497c.js b/docs/assets/LoggerFactory.html.5acb1c04.js
similarity index 93%
rename from docs/assets/LoggerFactory.html.b830497c.js
rename to docs/assets/LoggerFactory.html.5acb1c04.js
index c96928a5..fd907361 100644
--- a/docs/assets/LoggerFactory.html.b830497c.js
+++ b/docs/assets/LoggerFactory.html.5acb1c04.js
@@ -1 +1 @@
-const e=JSON.parse('{"key":"v-36aec5ad","path":"/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html","title":"LoggerFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"XPOSEDBRIDGE - enum","slug":"xposedbridge-enum","link":"#xposedbridge-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":"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":[]}],"git":{"updatedTime":1664551801000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"}');export{e as data};
+const e=JSON.parse('{"key":"v-36aec5ad","path":"/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html","title":"LoggerFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"XPOSEDBRIDGE - enum","slug":"xposedbridge-enum","link":"#xposedbridge-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":"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":[]}],"git":{"updatedTime":1664828712000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"}');export{e as data};
diff --git a/docs/assets/LoggerFactory.html.b964404b.js b/docs/assets/LoggerFactory.html.b69954d3.js
similarity index 91%
rename from docs/assets/LoggerFactory.html.b964404b.js
rename to docs/assets/LoggerFactory.html.b69954d3.js
index cca77bc2..6af35f07 100644
--- a/docs/assets/LoggerFactory.html.b964404b.js
+++ b/docs/assets/LoggerFactory.html.b69954d3.js
@@ -1,9 +1,9 @@
-import{_ as s,o,c as e,a}from"./app.b0c3bf74.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 XposedBridge.log \u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

enum class LoggerType
+import{_ as s,o,c as e,a}from"./app.99fcdd51.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 XposedBridge.log \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

XPOSEDBRIDGE
 

Change Records

v1.1.0 added

Function Illustrate

\u4EC5\u4F7F\u7528 XposedBridge.log\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
 

Change Records

v1.1.0 added

Function Illustrate

\u5206\u533A\u4F7F\u7528\u3002

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

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

BOTH - enum

BOTH
-

Change Records

v1.1.0 added

Function Illustrate

\u540C\u65F6\u4F7F\u7528\u3002

(Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528 LOGD \u4E0E XPOSEDBRIDGE\u3002

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

YukiLoggerData - class

class YukiLoggerData internal constructor(
+

Change Records

v1.1.0 added

Function Illustrate

\u540C\u65F6\u4F7F\u7528\u3002

(Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528 LOGD \u4E0E XPOSEDBRIDGE\u3002

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

YukiLoggerData - class

data class YukiLoggerData internal constructor(
     var timestamp: Long,
     var time: String,
     var tag: String,
@@ -12,10 +12,10 @@ import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const n={},l=a(`
var userId: Int, var msg: String, var throwable: Throwable? -) -

Change Records

v1.1.2 added

Function Illustrate

\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5B9E\u73B0\u7C7B\u3002

YukiHookLogger - object

object YukiHookLogger
-

Change Records

v1.1.0 added

Function Illustrate

\u8C03\u8BD5\u65E5\u5FD7\u5B9E\u73B0\u7C7B\u3002

inMemoryData - field

val inMemoryData: HashSet<YukiLoggerData>
-

Change Records

v1.1.2 added

Function Illustrate

\u5F53\u524D\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u6570\u636E\u3002

Pay Attention

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

contents - field

val contents: String
+) : Serializable
+

Change Records

v1.1.2 added

v1.1.4 modified

\u5B9E\u73B0 Serializable \u63A5\u53E3\u5E76\u6807\u8BC6\u4E3A data class

Function Illustrate

\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5B9E\u73B0\u7C7B\u3002

YukiHookLogger - object

object YukiHookLogger
+

Change Records

v1.1.0 added

Function Illustrate

\u8C03\u8BD5\u65E5\u5FD7\u5B9E\u73B0\u7C7B\u3002

inMemoryData - field

val inMemoryData: ArrayList<YukiLoggerData>
+

Change Records

v1.1.2 added

v1.1.4 modified

\u7C7B\u578B\u7531 HashSet \u4FEE\u6539\u4E3A ArrayList

Function Illustrate

\u5F53\u524D\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u6570\u636E\u3002

Pay Attention

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

contents - field

val contents: String
 

Change Records

v1.1.0 added

Function Illustrate

\u83B7\u53D6\u5F53\u524D\u65E5\u5FD7\u6587\u4EF6\u5185\u5BB9\u3002

\u5982\u679C\u5F53\u524D\u6CA1\u6709\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u4F1A\u8FD4\u56DE\u7A7A\u5B57\u7B26\u4E32\u3002

Pay Attention

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

clear - method

fun clear()
 

Change Records

v1.1.0 added

Function Illustrate

\u6E05\u9664\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u3002

Pay Attention

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u83B7\u53D6 inMemoryData \u6765\u6E05\u9664\u3002

saveToFile - method

fun saveToFile(fileName: String)
 

Change Records

v1.1.0 added

Function Illustrate

\u4FDD\u5B58\u5F53\u524D\u65E5\u5FD7\u5230\u6587\u4EF6\u3002

\u82E5\u5F53\u524D\u672A\u5F00\u542F Configs.isRecord \u6216\u8BB0\u5F55\u4E3A\u7A7A\u5219\u4E0D\u4F1A\u8FDB\u884C\u4EFB\u4F55\u64CD\u4F5C\u3002

\u65E5\u5FD7\u6587\u4EF6\u4F1A\u8FFD\u52A0\u5230 fileName \u7684\u6587\u4EF6\u7ED3\u5C3E\uFF0C\u82E5\u6587\u4EF6\u4E0D\u5B58\u5728\u4F1A\u81EA\u52A8\u521B\u5EFA\u3002

Pay Attention

\u6587\u4EF6\u8BFB\u5199\u6743\u9650\u53D6\u51B3\u4E8E\u5F53\u524D\u5BBF\u4E3B\u3001\u6A21\u5757\u5DF2\u83B7\u53D6\u7684\u6743\u9650\u3002

Configs - object

object Configs
@@ -35,4 +35,4 @@ import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const n={},l=a(`

Change Records

v1.0 first

v1.1.0 modified

\u65B0\u589E type \u53C2\u6570

Function Illustrate

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B D\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerI - method

fun loggerI(tag: String, msg: String, type: LoggerType)
 

Change Records

v1.0 first

v1.1.0 modified

\u65B0\u589E type \u53C2\u6570

Function Illustrate

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B I\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerW - method

fun loggerW(tag: String, msg: String, type: LoggerType)
 

Change Records

v1.0 first

v1.1.0 modified

\u65B0\u589E type \u53C2\u6570

Function Illustrate

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B W\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerE - method

fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
-

Change Records

v1.0 first

v1.1.0 modified

\u65B0\u589E type \u53C2\u6570

Function Illustrate

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B E\uFF0C\u53EF\u643A\u5E26 e \u5F02\u5E38\u4FE1\u606F\uFF0C\u5C06\u6253\u5370\u5F02\u5E38\u5806\u6808\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

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

Change Records

v1.0 first

v1.1.0 modified

\u65B0\u589E type \u53C2\u6570

Function Illustrate

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B E\uFF0C\u53EF\u643A\u5E26 e \u5F02\u5E38\u4FE1\u606F\uFF0C\u5C06\u6253\u5370\u5F02\u5E38\u5806\u6808\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

`,207),p=[l];function c(t,r){return o(),e("div",null,p)}const i=s(n,[["render",c],["__file","LoggerFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/LoggerFactory.html.348193ab.js b/docs/assets/LoggerFactory.html.b8bfff32.js similarity index 93% rename from docs/assets/LoggerFactory.html.348193ab.js rename to docs/assets/LoggerFactory.html.b8bfff32.js index 0b85df20..f411d10e 100644 --- a/docs/assets/LoggerFactory.html.348193ab.js +++ b/docs/assets/LoggerFactory.html.b8bfff32.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-004a009e","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html","title":"LoggerFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"XPOSEDBRIDGE - enum","slug":"xposedbridge-enum","link":"#xposedbridge-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":"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":[]}],"git":{"updatedTime":1664551801000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-004a009e","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html","title":"LoggerFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"XPOSEDBRIDGE - enum","slug":"xposedbridge-enum","link":"#xposedbridge-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":"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":[]}],"git":{"updatedTime":1664828712000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":6}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"}');export{e as data}; diff --git a/docs/assets/LoggerFactory.html.afda4d7c.js b/docs/assets/LoggerFactory.html.c27c8365.js similarity index 91% rename from docs/assets/LoggerFactory.html.afda4d7c.js rename to docs/assets/LoggerFactory.html.c27c8365.js index fccbc31d..62a7bfd6 100644 --- a/docs/assets/LoggerFactory.html.afda4d7c.js +++ b/docs/assets/LoggerFactory.html.c27c8365.js @@ -1,9 +1,9 @@ -import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const n={},p=a(`

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 XposedBridge.log \u6253\u5370\u65E5\u5FD7\u7684\u529F\u80FD\u3002

LoggerType - class

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

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 XposedBridge.log \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

XPOSEDBRIDGE
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EC5\u4F7F\u7528 XposedBridge.log\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
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5206\u533A\u4F7F\u7528\u3002

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

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

BOTH - enum

BOTH
-

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u540C\u65F6\u4F7F\u7528\u3002

(Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528 LOGD \u4E0E XPOSEDBRIDGE\u3002

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

YukiLoggerData - class

class YukiLoggerData internal constructor(
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u540C\u65F6\u4F7F\u7528\u3002

(Xposed) \u5BBF\u4E3B\u73AF\u5883\u4F7F\u7528 LOGD \u4E0E XPOSEDBRIDGE\u3002

\u6A21\u5757\u73AF\u5883\u4EC5\u4F7F\u7528 LOGD\u3002

YukiLoggerData - class

data class YukiLoggerData internal constructor(
     var timestamp: Long,
     var time: String,
     var tag: String,
@@ -12,10 +12,10 @@ import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const n={},p=a(`

var userId: Int, var msg: String, var throwable: Throwable? -) -

\u53D8\u66F4\u8BB0\u5F55

v1.1.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5B9E\u73B0\u7C7B\u3002

YukiHookLogger - object

object YukiHookLogger
-

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8C03\u8BD5\u65E5\u5FD7\u5B9E\u73B0\u7C7B\u3002

inMemoryData - field

val inMemoryData: HashSet<YukiLoggerData>
-

\u53D8\u66F4\u8BB0\u5F55

v1.1.2 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u6570\u636E\u3002

\u7279\u522B\u6CE8\u610F

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

contents - field

val contents: String
+) : Serializable
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.2 \u65B0\u589E

v1.1.4 \u4FEE\u6539

\u5B9E\u73B0 Serializable \u63A5\u53E3\u5E76\u6807\u8BC6\u4E3A data class

\u529F\u80FD\u63CF\u8FF0

\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u5B9E\u73B0\u7C7B\u3002

YukiHookLogger - object

object YukiHookLogger
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u8C03\u8BD5\u65E5\u5FD7\u5B9E\u73B0\u7C7B\u3002

inMemoryData - field

val inMemoryData: ArrayList<YukiLoggerData>
+

\u53D8\u66F4\u8BB0\u5F55

v1.1.2 \u65B0\u589E

v1.1.4 \u4FEE\u6539

\u7C7B\u578B\u7531 HashSet \u4FEE\u6539\u4E3A ArrayList

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u6570\u636E\u3002

\u7279\u522B\u6CE8\u610F

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

contents - field

val contents: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D\u65E5\u5FD7\u6587\u4EF6\u5185\u5BB9\u3002

\u5982\u679C\u5F53\u524D\u6CA1\u6709\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u4F1A\u8FD4\u56DE\u7A7A\u5B57\u7B26\u4E32\u3002

\u7279\u522B\u6CE8\u610F

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

clear - method

fun clear()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u6E05\u9664\u5168\u90E8\u5DF2\u8BB0\u5F55\u7684\u65E5\u5FD7\u3002

\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u83B7\u53D6 inMemoryData \u6765\u6E05\u9664\u3002

\u7279\u522B\u6CE8\u610F

\u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

saveToFile - method

fun saveToFile(fileName: String)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4FDD\u5B58\u5F53\u524D\u65E5\u5FD7\u5230\u6587\u4EF6\u3002

\u82E5\u5F53\u524D\u672A\u5F00\u542F Configs.isRecord \u6216\u8BB0\u5F55\u4E3A\u7A7A\u5219\u4E0D\u4F1A\u8FDB\u884C\u4EFB\u4F55\u64CD\u4F5C\u3002

\u65E5\u5FD7\u6587\u4EF6\u4F1A\u8FFD\u52A0\u5230 fileName \u7684\u6587\u4EF6\u7ED3\u5C3E\uFF0C\u82E5\u6587\u4EF6\u4E0D\u5B58\u5728\u4F1A\u81EA\u52A8\u521B\u5EFA\u3002

\u7279\u522B\u6CE8\u610F

\u6587\u4EF6\u8BFB\u5199\u6743\u9650\u53D6\u51B3\u4E8E\u5F53\u524D\u5BBF\u4E3B\u3001\u6A21\u5757\u5DF2\u83B7\u53D6\u7684\u6743\u9650\u3002

Configs - object

object Configs
@@ -35,4 +35,4 @@ import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const n={},p=a(`

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u65B0\u589E type \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B D\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerI - method

fun loggerI(tag: String, msg: String, type: LoggerType)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u65B0\u589E type \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B I\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerW - method

fun loggerW(tag: String, msg: String, type: LoggerType)
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u65B0\u589E type \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B W\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

loggerE - method

fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u65B0\u589E type \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B E\uFF0C\u53EF\u643A\u5E26 e \u5F02\u5E38\u4FE1\u606F\uFF0C\u5C06\u6253\u5370\u5F02\u5E38\u5806\u6808\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

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

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.1.0 \u4FEE\u6539

\u65B0\u589E type \u53C2\u6570

\u529F\u80FD\u63CF\u8FF0

\u5411 Logcat \u548C XposedBridge \u6253\u5370\u65E5\u5FD7\uFF0C\u7EA7\u522B E\uFF0C\u53EF\u643A\u5E26 e \u5F02\u5E38\u4FE1\u606F\uFF0C\u5C06\u6253\u5370\u5F02\u5E38\u5806\u6808\u3002

tag \u7684\u9ED8\u8BA4\u53C2\u6570\u4E3A YukiHookAPI.Configs.debugTag\uFF0C\u4F60\u53EF\u4EE5\u8FDB\u884C\u81EA\u5B9A\u4E49\u3002

`,206),l=[p];function c(t,r){return o(),e("div",null,l)}const i=s(n,[["render",c],["__file","LoggerFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/MemberRules.html.24752192.js b/docs/assets/MemberRules.html.a94d7ce4.js similarity index 97% rename from docs/assets/MemberRules.html.24752192.js rename to docs/assets/MemberRules.html.a94d7ce4.js index 76dcd918..419045cd 100644 --- a/docs/assets/MemberRules.html.24752192.js +++ b/docs/assets/MemberRules.html.a94d7ce4.js @@ -1,3 +1,3 @@ -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},l=a(`

MemberRules - class

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

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

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

`,13),p=[l];function c(r,t){return e(),o("div",null,p)}const i=s(n,[["render",c],["__file","MemberRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/MemberRules.html.9fa4cbe3.js b/docs/assets/MemberRules.html.bfe09c90.js similarity index 97% rename from docs/assets/MemberRules.html.9fa4cbe3.js rename to docs/assets/MemberRules.html.bfe09c90.js index 7d279979..0e62a049 100644 --- a/docs/assets/MemberRules.html.9fa4cbe3.js +++ b/docs/assets/MemberRules.html.bfe09c90.js @@ -1,3 +1,3 @@ -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},l=a(`

Notice

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

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

MemberRules - class

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

Change Records

v1.1.0 added

Function Illustrate

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

modifiers - method

fun modifiers(conditions: ModifierConditions)
 

Change Records

v1.1.0 added

Function Illustrate

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

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

`,14),t=[l];function r(c,p){return e(),o("div",null,t)}const d=s(n,[["render",r],["__file","MemberRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/MemberRulesResult.html.32168f65.js b/docs/assets/MemberRulesResult.html.2769b569.js similarity index 98% rename from docs/assets/MemberRulesResult.html.32168f65.js rename to docs/assets/MemberRulesResult.html.2769b569.js index 36c5fb58..1798c14a 100644 --- a/docs/assets/MemberRulesResult.html.32168f65.js +++ b/docs/assets/MemberRulesResult.html.2769b569.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a as n}from"./app.b0c3bf74.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.99fcdd51.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/MemberRulesResult.html.c94d1804.js b/docs/assets/MemberRulesResult.html.c69c4756.js
similarity index 98%
rename from docs/assets/MemberRulesResult.html.c94d1804.js
rename to docs/assets/MemberRulesResult.html.c69c4756.js
index 5f6515cb..370f258f 100644
--- a/docs/assets/MemberRulesResult.html.c94d1804.js
+++ b/docs/assets/MemberRulesResult.html.c69c4756.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as e,a as n}from"./app.b0c3bf74.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.99fcdd51.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/MethodFinder.html.bb3a8ed8.js b/docs/assets/MethodFinder.html.0e730b7b.js
similarity index 99%
rename from docs/assets/MethodFinder.html.bb3a8ed8.js
rename to docs/assets/MethodFinder.html.0e730b7b.js
index 79c57fd7..a1b9833e 100644
--- a/docs/assets/MethodFinder.html.bb3a8ed8.js
+++ b/docs/assets/MethodFinder.html.0e730b7b.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.b0c3bf74.js";const e={},l=a(`

MethodFinder - class

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

MethodFinder - class

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

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.2 \u4FEE\u6539

\u5408\u5E76\u5230 BaseFinder

v1.1.0 \u4FEE\u6539

\u5408\u5E76\u5230 MemberBaseFinder

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u7C7B\u3002

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

name - field

var name: String
 

\u53D8\u66F4\u8BB0\u5F55

v1.0 \u6DFB\u52A0

v1.0.70 \u4FEE\u6539

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

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

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

paramCount - field

var paramCount: Int
 

\u53D8\u66F4\u8BB0\u5F55

v1.0.67 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

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

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

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

returnType - field

var returnType: Any?
diff --git a/docs/assets/MethodFinder.html.97933c3d.js b/docs/assets/MethodFinder.html.417d29b0.js
similarity index 99%
rename from docs/assets/MethodFinder.html.97933c3d.js
rename to docs/assets/MethodFinder.html.417d29b0.js
index e853cf9f..ca5f236d 100644
--- a/docs/assets/MethodFinder.html.97933c3d.js
+++ b/docs/assets/MethodFinder.html.417d29b0.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as n,a}from"./app.b0c3bf74.js";const e={},l=a(`

Notice

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

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

MethodFinder - class

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

Notice

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

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

MethodFinder - class

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

Change Records

v1.0 first

v1.0.2 modified

\u5408\u5E76\u5230 BaseFinder

v1.1.0 modified

\u5408\u5E76\u5230 MemberBaseFinder

Function Illustrate

Method \u67E5\u627E\u7C7B\u3002

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

name - field

var name: String
 

Change Records

v1.0 first

v1.0.70 modified

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

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

Pay Attention

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

paramCount - field

var paramCount: Int
 

Change Records

v1.0.67 added

Function Illustrate

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

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

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

returnType - field

var returnType: Any?
diff --git a/docs/assets/MethodRules.html.f5989f03.js b/docs/assets/MethodRules.html.181e5e4f.js
similarity index 99%
rename from docs/assets/MethodRules.html.f5989f03.js
rename to docs/assets/MethodRules.html.181e5e4f.js
index cdd4e79d..6648d50e 100644
--- a/docs/assets/MethodRules.html.f5989f03.js
+++ b/docs/assets/MethodRules.html.181e5e4f.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.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.99fcdd51.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.84dd33bb.js b/docs/assets/MethodRules.html.3a185a29.js
similarity index 99%
rename from docs/assets/MethodRules.html.84dd33bb.js
rename to docs/assets/MethodRules.html.3a185a29.js
index fa31081b..80e266a6 100644
--- a/docs/assets/MethodRules.html.84dd33bb.js
+++ b/docs/assets/MethodRules.html.3a185a29.js
@@ -1,4 +1,4 @@
-import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.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.99fcdd51.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.0edf97e0.js b/docs/assets/ModifierRules.html.5e136d47.js
similarity index 99%
rename from docs/assets/ModifierRules.html.0edf97e0.js
rename to docs/assets/ModifierRules.html.5e136d47.js
index 9677225c..1d31f046 100644
--- a/docs/assets/ModifierRules.html.0edf97e0.js
+++ b/docs/assets/ModifierRules.html.5e136d47.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.b0c3bf74.js";const c={},n=a(`

ModifierRules - class

class ModifierRules private constructor()
+import{_ as e,o as s,c as o,a}from"./app.99fcdd51.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.ccf48294.js b/docs/assets/ModifierRules.html.a23f860d.js
similarity index 99%
rename from docs/assets/ModifierRules.html.ccf48294.js
rename to docs/assets/ModifierRules.html.a23f860d.js
index cee22d5a..7972dfc1 100644
--- a/docs/assets/ModifierRules.html.ccf48294.js
+++ b/docs/assets/ModifierRules.html.a23f860d.js
@@ -1,4 +1,4 @@
-import{_ as e,o as s,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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.ead779c0.js b/docs/assets/ModuleAppActivity.html.31db2b27.js
similarity index 96%
rename from docs/assets/ModuleAppActivity.html.ead779c0.js
rename to docs/assets/ModuleAppActivity.html.31db2b27.js
index 29767885..65b4a959 100644
--- a/docs/assets/ModuleAppActivity.html.ead779c0.js
+++ b/docs/assets/ModuleAppActivity.html.31db2b27.js
@@ -1,2 +1,2 @@
-import{_ as e,o as s,c as o,a as t}from"./app.b0c3bf74.js";const a={},n=t(`

Notice

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

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

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
+import{_ as e,o as s,c as o,a as t}from"./app.99fcdd51.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.aa34a817.js b/docs/assets/ModuleAppActivity.html.f8671049.js similarity index 95% rename from docs/assets/ModuleAppActivity.html.aa34a817.js rename to docs/assets/ModuleAppActivity.html.f8671049.js index fc7adf32..1f3a61ac 100644 --- a/docs/assets/ModuleAppActivity.html.aa34a817.js +++ b/docs/assets/ModuleAppActivity.html.f8671049.js @@ -1,2 +1,2 @@ -import{_ as s,o as e,c as o,a as t}from"./app.b0c3bf74.js";const c={},a=t(`

ModuleAppActivity - class

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

ModuleAppActivity - class

open class ModuleAppActivity : Activity()
 

\u53D8\u66F4\u8BB0\u5F55

v1.1.0 \u65B0\u589E

\u529F\u80FD\u63CF\u8FF0

\u4EE3\u7406 Activity\u3002

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

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

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

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
+import{_ as s,o,c as e,a as p}from"./app.99fcdd51.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/ModuleAppCompatActivity.html.8e681c35.js b/docs/assets/ModuleAppCompatActivity.html.d6ea50a2.js similarity index 97% rename from docs/assets/ModuleAppCompatActivity.html.8e681c35.js rename to docs/assets/ModuleAppCompatActivity.html.d6ea50a2.js index 1eeb9e42..0836c031 100644 --- a/docs/assets/ModuleAppCompatActivity.html.8e681c35.js +++ b/docs/assets/ModuleAppCompatActivity.html.d6ea50a2.js @@ -1,3 +1,3 @@ -import{_ as e,o,c as s,a}from"./app.b0c3bf74.js";const t={},n=a(`

Notice

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

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

ModuleAppCompatActivity - class

open class ModuleAppCompatActivity : AppCompatActivity()
+import{_ as e,o,c as s,a}from"./app.99fcdd51.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/ModuleApplication.html.73c30ddc.js b/docs/assets/ModuleApplication.html.0947d2e6.js similarity index 99% rename from docs/assets/ModuleApplication.html.73c30ddc.js rename to docs/assets/ModuleApplication.html.0947d2e6.js index 4f3af0fe..c97c371a 100644 --- a/docs/assets/ModuleApplication.html.73c30ddc.js +++ b/docs/assets/ModuleApplication.html.0947d2e6.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.b0c3bf74.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.99fcdd51.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.c524f410.js b/docs/assets/ModuleApplication.html.b6666040.js
    similarity index 99%
    rename from docs/assets/ModuleApplication.html.c524f410.js
    rename to docs/assets/ModuleApplication.html.b6666040.js
    index 724913b5..8b244ed3 100644
    --- a/docs/assets/ModuleApplication.html.c524f410.js
    +++ b/docs/assets/ModuleApplication.html.b6666040.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.b0c3bf74.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.99fcdd51.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.ecfdc324.js b/docs/assets/ModuleClassLoader.html.7b5cc225.js
    similarity index 98%
    rename from docs/assets/ModuleClassLoader.html.ecfdc324.js
    rename to docs/assets/ModuleClassLoader.html.7b5cc225.js
    index ff1a2e89..63fff900 100644
    --- a/docs/assets/ModuleClassLoader.html.ecfdc324.js
    +++ b/docs/assets/ModuleClassLoader.html.7b5cc225.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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.2d39b360.js b/docs/assets/ModuleClassLoader.html.dd180fc9.js similarity index 98% rename from docs/assets/ModuleClassLoader.html.2d39b360.js rename to docs/assets/ModuleClassLoader.html.dd180fc9.js index 0db1fb39..9d993765 100644 --- a/docs/assets/ModuleClassLoader.html.2d39b360.js +++ b/docs/assets/ModuleClassLoader.html.dd180fc9.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as e,a}from"./app.b0c3bf74.js";const l={},n=a(`

    ModuleClassLoader - class

    class ModuleClassLoader private constructor() : ClassLoader
    +import{_ as s,o,c as e,a}from"./app.99fcdd51.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.10294a35.js b/docs/assets/ModuleContextThemeWrapper.html.5e67972f.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.10294a35.js rename to docs/assets/ModuleContextThemeWrapper.html.5e67972f.js index b9fe70ec..961eb985 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.10294a35.js +++ b/docs/assets/ModuleContextThemeWrapper.html.5e67972f.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.b0c3bf74.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.99fcdd51.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/ModuleContextThemeWrapper.html.cf03da52.js b/docs/assets/ModuleContextThemeWrapper.html.5f49ff05.js similarity index 98% rename from docs/assets/ModuleContextThemeWrapper.html.cf03da52.js rename to docs/assets/ModuleContextThemeWrapper.html.5f49ff05.js index 20197476..e10520d3 100644 --- a/docs/assets/ModuleContextThemeWrapper.html.cf03da52.js +++ b/docs/assets/ModuleContextThemeWrapper.html.5f49ff05.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a as n}from"./app.b0c3bf74.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.99fcdd51.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/ModulePreferenceFragment.html.3e077a4d.js b/docs/assets/ModulePreferenceFragment.html.03eaf777.js similarity index 99% rename from docs/assets/ModulePreferenceFragment.html.3e077a4d.js rename to docs/assets/ModulePreferenceFragment.html.03eaf777.js index 113ad4c3..b76a3d67 100644 --- a/docs/assets/ModulePreferenceFragment.html.3e077a4d.js +++ b/docs/assets/ModulePreferenceFragment.html.03eaf777.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.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.99fcdd51.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/ModulePreferenceFragment.html.1ddb5a30.js b/docs/assets/ModulePreferenceFragment.html.f7ecd440.js
    similarity index 99%
    rename from docs/assets/ModulePreferenceFragment.html.1ddb5a30.js
    rename to docs/assets/ModulePreferenceFragment.html.f7ecd440.js
    index 076c9d38..a63f0d70 100644
    --- a/docs/assets/ModulePreferenceFragment.html.1ddb5a30.js
    +++ b/docs/assets/ModulePreferenceFragment.html.f7ecd440.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.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.99fcdd51.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/NameRules.html.eb17d2fc.js b/docs/assets/NameRules.html.1ac92120.js
    similarity index 99%
    rename from docs/assets/NameRules.html.eb17d2fc.js
    rename to docs/assets/NameRules.html.1ac92120.js
    index 12f9e665..7f5b716f 100644
    --- a/docs/assets/NameRules.html.eb17d2fc.js
    +++ b/docs/assets/NameRules.html.1ac92120.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.b0c3bf74.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.99fcdd51.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.d6097c6b.js b/docs/assets/NameRules.html.eb726c41.js
    similarity index 99%
    rename from docs/assets/NameRules.html.d6097c6b.js
    rename to docs/assets/NameRules.html.eb726c41.js
    index c5fd6f69..964d0a88 100644
    --- a/docs/assets/NameRules.html.d6097c6b.js
    +++ b/docs/assets/NameRules.html.eb726c41.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a as n}from"./app.b0c3bf74.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.99fcdd51.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/PackageParam.html.7a64d58c.js b/docs/assets/PackageParam.html.5e695f66.js
    similarity index 97%
    rename from docs/assets/PackageParam.html.7a64d58c.js
    rename to docs/assets/PackageParam.html.5e695f66.js
    index 808c99ae..a7e49075 100644
    --- a/docs/assets/PackageParam.html.7a64d58c.js
    +++ b/docs/assets/PackageParam.html.5e695f66.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-b381a126","path":"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html","title":"PackageParam - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":[]}]}],"git":{"updatedTime":1664299331000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-b381a126","path":"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html","title":"PackageParam - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":[]}]}],"git":{"updatedTime":1664837145000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"}');export{e as data};
    diff --git a/docs/assets/PackageParam.html.2efa079c.js b/docs/assets/PackageParam.html.8c9c140e.js
    similarity index 85%
    rename from docs/assets/PackageParam.html.2efa079c.js
    rename to docs/assets/PackageParam.html.8c9c140e.js
    index b37f4b9a..fbf46e88 100644
    --- a/docs/assets/PackageParam.html.2efa079c.js
    +++ b/docs/assets/PackageParam.html.8c9c140e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
    +import{_ as s,o,c as a,a as n}from"./app.99fcdd51.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

    val appClassLoader\uFF1AClassLoader
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D Hook APP \u7684 ClassLoader\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
    @@ -19,7 +19,9 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.87 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5237\u65B0\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB Resources\u3002

    onAppLifecycle - method

    inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u76D1\u542C\u5F53\u524D Hook APP \u751F\u547D\u5468\u671F\u88C5\u8F7D\u4E8B\u4EF6\u3002

    \u6CE8\u610F

    \u5728 loadZygote \u4E2D\u4E0D\u4F1A\u88AB\u88C5\u8F7D\uFF0C\u4EC5\u4F1A\u5728 loadSystem\u3001loadApp \u4E2D\u88C5\u8F7D\u3002

    \u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u8BF7\u4F7F\u7528\u539F\u751F\u7684 Application \u5B9E\u73B0\u751F\u547D\u5468\u671F\u76D1\u542C\u3002

    loadApp - method

    inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
     
    fun loadApp(name: String, hooker: YukiBaseHooker)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

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

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u5305\u540D\u7684 APP\u3002

    name \u4E3A APP \u7684\u5305\u540D\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u3001\u5168\u90E8\u5305\u540D\u7684 APP\u3002

    \u82E5\u8981\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\uFF0C\u8BF7\u4F7F\u7528 loadZygote\u3002

    \u82E5\u8981 Hook \u7CFB\u7EDF\u6846\u67B6\uFF0C\u8BF7\u4F7F\u7528 loadSystem\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F60\u53EF\u4EE5\u4F7F\u7528 loadApp \u7684 lambda \u65B9\u6CD5\u4F53\u5F62\u5F0F\u6216\u76F4\u63A5\u88C5\u8F7D\u4E00\u4E2A Hooker\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u4F7F\u7528 lambda
    +
    inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadApp(name: String, vararg hooker: YukiBaseHooker)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

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

    v1.1.4 \u4FEE\u6539

    \u65B0\u589E\u4E24\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A APP \u4E0E\u5B50 Hooker

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u5305\u540D\u7684 APP\u3002

    name \u4E3A APP \u7684\u5305\u540D\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u3001\u5168\u90E8\u5305\u540D\u7684 APP\u3002

    \u82E5\u8981\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\uFF0C\u8BF7\u4F7F\u7528 loadZygote\u3002

    \u82E5\u8981 Hook \u7CFB\u7EDF\u6846\u67B6\uFF0C\u8BF7\u4F7F\u7528 loadSystem\u3002

    \u529F\u80FD\u793A\u4F8B

    \u4F60\u53EF\u4EE5\u4F7F\u7528 loadApp \u7684 lambda \u65B9\u6CD5\u4F53\u5F62\u5F0F\u6216\u76F4\u63A5\u88C5\u8F7D\u4E00\u4E2A Hooker\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u4F7F\u7528 lambda
     loadApp(name = "com.example.test") {
         // Your code here.
     }
    @@ -31,13 +33,23 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    } // \u4F7F\u7528 Hooker loadApp(hooker = CustomHooker) -

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
    +

    \u82E5\u60F3\u8981\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u9700\u8981 Hook \u7684 APP\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u9700\u8981 Hook \u7684 APP
    +loadApp("com.example.test", "com.example.next") {
    +    // Your code here.
    +}
    +

    \u82E5\u60F3\u8981\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\uFF0C\u4F46\u6B64\u65F6\u53EA\u80FD\u6307\u5B9A\u4E00\u4E2A\u9700\u8981 Hook \u7684 APP\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker
    +loadApp("com.example.test", CustomHooker1, CustomHooker2)
    +

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
     
    fun loadZygote(hooker: YukiBaseHooker)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D APP Zygote \u4E8B\u4EF6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
    +
    fun loadZygote(vararg hooker: YukiBaseHooker)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    v1.1.4 \u4FEE\u6539

    \u65B0\u589E\u4E00\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D APP Zygote \u4E8B\u4EF6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
     
    fun loadSystem(hooker: YukiBaseHooker)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.82 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook \u7CFB\u7EDF\u6846\u67B6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadSystem(vararg hooker: YukiBaseHooker)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.82 \u65B0\u589E

    v1.1.4 \u4FEE\u6539

    \u65B0\u589E\u4E00\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook \u7CFB\u7EDF\u6846\u67B6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
     
    fun withProcess(name: String, hooker: YukiBaseHooker)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook APP \u7684\u6307\u5B9A\u8FDB\u7A0B\u3002

    name \u4E3A APP \u7684\u8FDB\u7A0B\u540D\u79F0\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
    +
    fun withProcess(vararg name: String, hooker: YukiBaseHooker)
    +
    fun withProcess(name: String, vararg hooker: YukiBaseHooker)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    v1.1.4 \u4FEE\u6539

    \u65B0\u589E\u4E24\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u8FDB\u7A0B\u4E0E\u5B50 Hooker

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D\u5E76 Hook APP \u7684\u6307\u5B9A\u8FDB\u7A0B\u3002

    name \u4E3A APP \u7684\u8FDB\u7A0B\u540D\u79F0\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D Hook \u5B50\u7C7B\u3002

    \u4F60\u53EF\u4EE5\u586B\u5165 hooker \u5728 Hooker \u4E2D\u7EE7\u7EED\u88C5\u8F7D Hooker\u3002

    searchClass - method

    inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u901A\u8FC7 appClassLoader \u6309\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u5E76\u5F97\u5230\u5F53\u524D Hook APP Dex \u4E2D\u7684 Class\u3002

    \u7279\u522B\u6CE8\u610F

    \u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u53CA\u67E5\u627E\u6761\u4EF6\u590D\u6742\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

    \u5EFA\u8BAE\u542F\u7528 async \u6216\u8BBE\u7F6E name \u53C2\u6570\uFF0Cname \u53C2\u6570\u5C06\u5728 Hook APP (\u5BBF\u4E3B) \u4E0D\u540C\u7248\u672C\u4E2D\u81EA\u52A8\u8FDB\u884C\u672C\u5730\u7F13\u5B58\u4EE5\u63D0\u5347\u6548\u7387\u3002

    \u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

    String+VariousClass.clazz - i-ext-field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.0 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 toClass(...) \u65B9\u6CD5

    String.hasClass - i-ext-field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.1.0 \u4F5C\u5E9F

    \u8BF7\u8F6C\u79FB\u5230 hasClass(...) \u65B9\u6CD5

    String+VariousClass.toClass - i-ext-method

    fun String.toClass(loader: ClassLoader?): Class<*>
     
    fun VariousClass.toClass(loader: ClassLoader?): Class<*>
    @@ -101,4 +113,4 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onLowMemory\u3002

    onTrimMemory - method

    fun onTrimMemory(result: (self: Application, level: Int) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onTrimMemory\u3002

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onConfigurationChanged\u3002

    registerReceiver - method

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

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002

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

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002

    `,400),p=[l];function c(r,t){return o(),a("div",null,p)}const i=s(e,[["render",c],["__file","PackageParam.html.vue"]]);export{i as default}; diff --git a/docs/assets/PackageParam.html.37aae471.js b/docs/assets/PackageParam.html.9385a8d2.js similarity index 97% rename from docs/assets/PackageParam.html.37aae471.js rename to docs/assets/PackageParam.html.9385a8d2.js index 1c096318..13ff52e4 100644 --- a/docs/assets/PackageParam.html.37aae471.js +++ b/docs/assets/PackageParam.html.9385a8d2.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-100b529c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html","title":"PackageParam - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":[]}]}],"git":{"updatedTime":1663766338000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-100b529c","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html","title":"PackageParam - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":[]}]}],"git":{"updatedTime":1664837145000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"}');export{e as data}; diff --git a/docs/assets/PackageParam.html.31b391fa.js b/docs/assets/PackageParam.html.f4ec4919.js similarity index 85% rename from docs/assets/PackageParam.html.31b391fa.js rename to docs/assets/PackageParam.html.f4ec4919.js index 1e04c57f..0d7e74f2 100644 --- a/docs/assets/PackageParam.html.31b391fa.js +++ b/docs/assets/PackageParam.html.f4ec4919.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.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.

    PackageParam - class

    open class PackageParam internal constructor(internal var wrapper: PackageParamWrapper?)
    +import{_ as s,o,c as a,a as e}from"./app.99fcdd51.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.

    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

    val appClassLoader\uFF1AClassLoader
     

    Change Records

    v1.0 first

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D Hook APP \u7684 ClassLoader\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
    @@ -19,7 +19,9 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    Change Records

    v1.0.87 added

    Function Illustrate

    \u5237\u65B0\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB Resources\u3002

    onAppLifecycle - method

    inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u76D1\u542C\u5F53\u524D Hook APP \u751F\u547D\u5468\u671F\u88C5\u8F7D\u4E8B\u4EF6\u3002

    Notice

    \u5728 loadZygote \u4E2D\u4E0D\u4F1A\u88AB\u88C5\u8F7D\uFF0C\u4EC5\u4F1A\u5728 loadSystem\u3001loadApp \u4E2D\u88C5\u8F7D\u3002

    \u4F5C\u4E3A Hook API \u88C5\u8F7D\u65F6\u8BF7\u4F7F\u7528\u539F\u751F\u7684 Application \u5B9E\u73B0\u751F\u547D\u5468\u671F\u76D1\u542C\u3002

    loadApp - method

    inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
     
    fun loadApp(name: String, hooker: YukiBaseHooker)
    -

    Change Records

    v1.0 first

    v1.0.80 modified

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

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u5305\u540D\u7684 APP\u3002

    name \u4E3A APP \u7684\u5305\u540D\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u3001\u5168\u90E8\u5305\u540D\u7684 APP\u3002

    \u82E5\u8981\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\uFF0C\u8BF7\u4F7F\u7528 loadZygote\u3002

    \u82E5\u8981 Hook \u7CFB\u7EDF\u6846\u67B6\uFF0C\u8BF7\u4F7F\u7528 loadSystem\u3002

    Function Example

    \u4F60\u53EF\u4EE5\u4F7F\u7528 loadApp \u7684 lambda \u65B9\u6CD5\u4F53\u5F62\u5F0F\u6216\u76F4\u63A5\u88C5\u8F7D\u4E00\u4E2A Hooker\u3002

    The following example

    // \u4F7F\u7528 lambda
    +
    inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadApp(name: String, vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0 first

    v1.0.80 modified

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

    v1.1.4 modified

    \u65B0\u589E\u4E24\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A APP \u4E0E\u5B50 Hooker

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u5305\u540D\u7684 APP\u3002

    name \u4E3A APP \u7684\u5305\u540D\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    \u88C5\u8F7D\u5E76 Hook \u6307\u5B9A\u3001\u5168\u90E8\u5305\u540D\u7684 APP\u3002

    \u82E5\u8981\u88C5\u8F7D APP Zygote \u4E8B\u4EF6\uFF0C\u8BF7\u4F7F\u7528 loadZygote\u3002

    \u82E5\u8981 Hook \u7CFB\u7EDF\u6846\u67B6\uFF0C\u8BF7\u4F7F\u7528 loadSystem\u3002

    Function Example

    \u4F60\u53EF\u4EE5\u4F7F\u7528 loadApp \u7684 lambda \u65B9\u6CD5\u4F53\u5F62\u5F0F\u6216\u76F4\u63A5\u88C5\u8F7D\u4E00\u4E2A Hooker\u3002

    The following example

    // \u4F7F\u7528 lambda
     loadApp(name = "com.example.test") {
         // Your code here.
     }
    @@ -31,13 +33,23 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`
    } // \u4F7F\u7528 Hooker loadApp(hooker = CustomHooker) -

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
    +

    \u82E5\u60F3\u8981\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u9700\u8981 Hook \u7684 APP\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u3002

    The following example

    // \u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u9700\u8981 Hook \u7684 APP
    +loadApp("com.example.test", "com.example.next") {
    +    // Your code here.
    +}
    +

    \u82E5\u60F3\u8981\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\uFF0C\u4F46\u6B64\u65F6\u53EA\u80FD\u6307\u5B9A\u4E00\u4E2A\u9700\u8981 Hook \u7684 APP\u3002

    The following example

    // \u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker
    +loadApp("com.example.test", CustomHooker1, CustomHooker2)
    +

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
     
    fun loadZygote(hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.80 added

    Function Illustrate

    \u88C5\u8F7D APP Zygote \u4E8B\u4EF6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
    +
    fun loadZygote(vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.80 added

    v1.1.4 modified

    \u65B0\u589E\u4E00\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker

    Function Illustrate

    \u88C5\u8F7D APP Zygote \u4E8B\u4EF6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
     
    fun loadSystem(hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.82 added

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook \u7CFB\u7EDF\u6846\u67B6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadSystem(vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.82 added

    v1.1.4 modified

    \u65B0\u589E\u4E00\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u5B50 Hooker

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook \u7CFB\u7EDF\u6846\u67B6\u3002

    \u65B9\u6CD5\u4E2D\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
     
    fun withProcess(name: String, hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.70 added

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook APP \u7684\u6307\u5B9A\u8FDB\u7A0B\u3002

    name \u4E3A APP \u7684\u8FDB\u7A0B\u540D\u79F0\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
    +
    fun withProcess(vararg name: String, hooker: YukiBaseHooker)
    +
    fun withProcess(name: String, vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.70 added

    v1.1.4 modified

    \u65B0\u589E\u4E24\u4E2A\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u540C\u65F6\u88C5\u8F7D\u591A\u4E2A\u8FDB\u7A0B\u4E0E\u5B50 Hooker

    Function Illustrate

    \u88C5\u8F7D\u5E76 Hook APP \u7684\u6307\u5B9A\u8FDB\u7A0B\u3002

    name \u4E3A APP \u7684\u8FDB\u7A0B\u540D\u79F0\uFF0C\u540E\u65B9\u7684\u4E24\u4E2A\u53C2\u6570\u4E00\u4E2A\u53EF\u4F5C\u4E3A lambda \u65B9\u6CD5\u4F53\u4F7F\u7528\uFF0C\u4E00\u4E2A\u53EF\u4EE5\u76F4\u63A5\u88C5\u8F7D\u5B50 Hooker\u3002

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
     

    Change Records

    v1.0 first

    Function Illustrate

    \u88C5\u8F7D Hook \u5B50\u7C7B\u3002

    \u4F60\u53EF\u4EE5\u586B\u5165 hooker \u5728 Hooker \u4E2D\u7EE7\u7EED\u88C5\u8F7D Hooker\u3002

    searchClass - method

    inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    \u901A\u8FC7 appClassLoader \u6309\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u5E76\u5F97\u5230\u5F53\u524D Hook APP Dex \u4E2D\u7684 Class\u3002

    Pay Attention

    \u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u53CA\u67E5\u627E\u6761\u4EF6\u590D\u6742\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

    \u5EFA\u8BAE\u542F\u7528 async \u6216\u8BBE\u7F6E name \u53C2\u6570\uFF0Cname \u53C2\u6570\u5C06\u5728 Hook APP (\u5BBF\u4E3B) \u4E0D\u540C\u7248\u672C\u4E2D\u81EA\u52A8\u8FDB\u884C\u672C\u5730\u7F13\u5B58\u4EE5\u63D0\u5347\u6548\u7387\u3002

    \u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

    String+VariousClass.clazz - i-ext-field

    Change Records

    v1.0 first

    v1.1.0 deprecated

    \u8BF7\u8F6C\u79FB\u5230 toClass(...) \u65B9\u6CD5

    String.hasClass - i-ext-field

    Change Records

    v1.0 first

    v1.1.0 deprecated

    \u8BF7\u8F6C\u79FB\u5230 hasClass(...) \u65B9\u6CD5

    String+VariousClass.toClass - i-ext-method

    fun String.toClass(loader: ClassLoader?): Class<*>
     
    fun VariousClass.toClass(loader: ClassLoader?): Class<*>
    @@ -101,4 +113,4 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    Change Records

    v1.0.88 added

    Function Illustrate

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onLowMemory\u3002

    onTrimMemory - method

    fun onTrimMemory(result: (self: Application, level: Int) -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onTrimMemory\u3002

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u76D1\u542C\u5F53\u524D Hook APP \u88C5\u8F7D Application.onConfigurationChanged\u3002

    registerReceiver - method

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

    Change Records

    v1.0.88 added

    Function Illustrate

    \u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002

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

    Change Records

    v1.0.88 added

    Function Illustrate

    \u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD\u76D1\u542C\u3002

    `,401),p=[l];function c(t,r){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","PackageParam.html.vue"]]);export{i as default}; diff --git a/docs/assets/PrefsData.html.78eabdcb.js b/docs/assets/PrefsData.html.ca16253d.js similarity index 99% rename from docs/assets/PrefsData.html.78eabdcb.js rename to docs/assets/PrefsData.html.ca16253d.js index e1af9c65..52c99a26 100644 --- a/docs/assets/PrefsData.html.78eabdcb.js +++ b/docs/assets/PrefsData.html.ca16253d.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a as l}from"./app.b0c3bf74.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)
    +import{_ as s,o as a,c as n,a as l}from"./app.99fcdd51.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)
     

    Change Records

    v1.0.67 added

    Function Illustrate

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

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

    Function Example

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

    The following example

    object DataConst {
     
         val TEST_KV_DATA_1 = PrefsData("test_data_1", "defalut value")
    diff --git a/docs/assets/PrefsData.html.ff4818af.js b/docs/assets/PrefsData.html.fc0793be.js
    similarity index 99%
    rename from docs/assets/PrefsData.html.ff4818af.js
    rename to docs/assets/PrefsData.html.fc0793be.js
    index 25a3e750..a163887a 100644
    --- a/docs/assets/PrefsData.html.ff4818af.js
    +++ b/docs/assets/PrefsData.html.fc0793be.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as l}from"./app.b0c3bf74.js";const o={},p=l(`

    PrefsData - class

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

    PrefsData - class

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

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.67 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

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

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

    \u529F\u80FD\u793A\u4F8B

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

    \u793A\u4F8B\u5982\u4E0B

    object DataConst {
     
         val TEST_KV_DATA_1 = PrefsData("test_data_1", "defalut value")
    diff --git a/docs/assets/ReflectionFactory.html.631c97c4.js b/docs/assets/ReflectionFactory.html.0b0fdaba.js
    similarity index 99%
    rename from docs/assets/ReflectionFactory.html.631c97c4.js
    rename to docs/assets/ReflectionFactory.html.0b0fdaba.js
    index a7fcbf02..6b648f96 100644
    --- a/docs/assets/ReflectionFactory.html.631c97c4.js
    +++ b/docs/assets/ReflectionFactory.html.0b0fdaba.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as e,a}from"./app.b0c3bf74.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.

    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 e,a}from"./app.99fcdd51.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.

    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.f8ba7ee0.js b/docs/assets/ReflectionFactory.html.b1a986a7.js
    similarity index 99%
    rename from docs/assets/ReflectionFactory.html.f8ba7ee0.js
    rename to docs/assets/ReflectionFactory.html.b1a986a7.js
    index 0cca3d30..ce684c53 100644
    --- a/docs/assets/ReflectionFactory.html.f8ba7ee0.js
    +++ b/docs/assets/ReflectionFactory.html.b1a986a7.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

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

    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.6b3e75ef.js b/docs/assets/VariableTypeFactory.html.9fceba3f.js
    similarity index 95%
    rename from docs/assets/VariableTypeFactory.html.6b3e75ef.js
    rename to docs/assets/VariableTypeFactory.html.9fceba3f.js
    index bedf39af..3ae89d63 100644
    --- a/docs/assets/VariableTypeFactory.html.6b3e75ef.js
    +++ b/docs/assets/VariableTypeFactory.html.9fceba3f.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.b0c3bf74.js";const l={},p=i('

    Notice

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

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

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

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

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

    Notice

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

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

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

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

    ',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(b,f){const t=n("ExternalLinkIcon");return r(),s("div",null,[p,o("p",null,[d,o("a",h,[_,c(t)]),u])])}const y=a(l,[["render",k],["__file","VariableTypeFactory.html.vue"]]);export{y as default}; diff --git a/docs/assets/VariableTypeFactory.html.3326723f.js b/docs/assets/VariableTypeFactory.html.b28309cb.js similarity index 94% rename from docs/assets/VariableTypeFactory.html.3326723f.js rename to docs/assets/VariableTypeFactory.html.b28309cb.js index 35022b4f..4a362983 100644 --- a/docs/assets/VariableTypeFactory.html.3326723f.js +++ b/docs/assets/VariableTypeFactory.html.b28309cb.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.b0c3bf74.js";const l={},p=i('

    VariableTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

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

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

    VariableTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

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

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

    VariousClass - class

    class VariousClass(vararg var name: String)
    +import{_ as s,o as a,c as o,a as l}from"./app.99fcdd51.js";const e={},n=l(`

    VariousClass - class

    class VariousClass(vararg var name: String)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \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): Class<*>
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.70 \u65B0\u589E

    \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): Class<*>?
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.0 \u65B0\u589E

    \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

    `,21),p=[n];function c(t,r){return a(),o("div",null,p)}const y=s(e,[["render",c],["__file","VariousClass.html.vue"]]);export{y as default}; diff --git a/docs/assets/VariousClass.html.083eb230.js b/docs/assets/VariousClass.html.40fd0a28.js similarity index 98% rename from docs/assets/VariousClass.html.083eb230.js rename to docs/assets/VariousClass.html.40fd0a28.js index 6c475a3a..5ca86586 100644 --- a/docs/assets/VariousClass.html.083eb230.js +++ b/docs/assets/VariousClass.html.40fd0a28.js @@ -1,4 +1,4 @@ -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.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(vararg var name: String)
    +import{_ as s,o,c as a,a as e}from"./app.99fcdd51.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(vararg var name: String)
     

    Change Records

    v1.0 first

    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): Class<*>
     

    Change Records

    v1.0.70 added

    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): Class<*>?
     

    Change Records

    v1.1.0 added

    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

    `,22),p=[l];function t(c,r){return o(),a("div",null,p)}const i=s(n,[["render",t],["__file","VariousClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/ViewTypeFactory.html.c3404bdb.js b/docs/assets/ViewTypeFactory.html.52d860fb.js similarity index 94% rename from docs/assets/ViewTypeFactory.html.c3404bdb.js rename to docs/assets/ViewTypeFactory.html.52d860fb.js index c58db862..4d0f920f 100644 --- a/docs/assets/ViewTypeFactory.html.c3404bdb.js +++ b/docs/assets/ViewTypeFactory.html.52d860fb.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.b0c3bf74.js";const d={},p=i('

    ViewTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

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

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

    ViewTypeFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

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

    ',5),l=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),k=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(f,u){const t=a("ExternalLinkIcon");return r(),n("div",null,[p,o("p",null,[l,o("a",_,[h,s(t)]),k])])}const b=c(d,[["render",y],["__file","ViewTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/ViewTypeFactory.html.69d3b402.js b/docs/assets/ViewTypeFactory.html.b429be07.js similarity index 95% rename from docs/assets/ViewTypeFactory.html.69d3b402.js rename to docs/assets/ViewTypeFactory.html.b429be07.js index 37d7c494..b0d79e54 100644 --- a/docs/assets/ViewTypeFactory.html.69d3b402.js +++ b/docs/assets/ViewTypeFactory.html.b429be07.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.b0c3bf74.js";const p={},d=i('

    Notice

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

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

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

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

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

    Notice

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

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

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

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

    ',6),l=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiHookAPI/blob/master/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function k(f,m){const t=n("ExternalLinkIcon");return c(),s("div",null,[d,o("p",null,[l,o("a",h,[_,r(t)]),u])])}const g=a(p,[["render",k],["__file","ViewTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/YukiBaseHooker.html.11e0c1ee.js b/docs/assets/YukiBaseHooker.html.ade84104.js similarity index 97% rename from docs/assets/YukiBaseHooker.html.11e0c1ee.js rename to docs/assets/YukiBaseHooker.html.ade84104.js index 3bc79c23..38642a23 100644 --- a/docs/assets/YukiBaseHooker.html.11e0c1ee.js +++ b/docs/assets/YukiBaseHooker.html.ade84104.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as e,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},t=a(`

    Notice

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

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

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    Change Records

    v1.0 first

    Function Illustrate

    YukiHookAPI \u7684\u5B50\u7C7B Hooker \u5B9E\u73B0\u3002

    onHook - method

    fun onHook()
     

    Change Records

    v1.0 first

    Function Illustrate

    \u5B50\u7C7B Hook \u5F00\u59CB\u3002

    `,13),c=[t];function l(r,p){return o(),e("div",null,c)}const d=s(n,[["render",l],["__file","YukiBaseHooker.html.vue"]]);export{d as default}; diff --git a/docs/assets/YukiBaseHooker.html.a77f957c.js b/docs/assets/YukiBaseHooker.html.d407e53d.js similarity index 96% rename from docs/assets/YukiBaseHooker.html.a77f957c.js rename to docs/assets/YukiBaseHooker.html.d407e53d.js index f6e5d27e..9fdc5c87 100644 --- a/docs/assets/YukiBaseHooker.html.a77f957c.js +++ b/docs/assets/YukiBaseHooker.html.d407e53d.js @@ -1,3 +1,3 @@ -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},c=e(`

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
    +import{_ as s,o,c as a,a as e}from"./app.99fcdd51.js";const n={},c=e(`

    YukiBaseHooker - class

    abstract class YukiBaseHooker : PackageParam()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u7684\u5B50\u7C7B Hooker \u5B9E\u73B0\u3002

    onHook - method

    fun onHook()
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5B50\u7C7B Hook \u5F00\u59CB\u3002

    `,12),l=[c];function p(t,r){return o(),a("div",null,l)}const i=s(n,[["render",p],["__file","YukiBaseHooker.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiHookAPI.html.f533d3b1.js b/docs/assets/YukiHookAPI.html.423ff5d5.js similarity index 99% rename from docs/assets/YukiHookAPI.html.f533d3b1.js rename to docs/assets/YukiHookAPI.html.423ff5d5.js index 0b79d7f4..c3177706 100644 --- a/docs/assets/YukiHookAPI.html.f533d3b1.js +++ b/docs/assets/YukiHookAPI.html.423ff5d5.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as o,a}from"./app.b0c3bf74.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.

    YukiHookAPI - object

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

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

    executorVersion - field

    Change Records

    v1.0.5 added

    v1.0.91 removed

    \u8BF7\u8F6C\u79FB\u5230 Status.executorVersion

    Status - object

    object Status
    diff --git a/docs/assets/YukiHookAPI.html.1fa29a43.js b/docs/assets/YukiHookAPI.html.52aa5899.js
    similarity index 99%
    rename from docs/assets/YukiHookAPI.html.1fa29a43.js
    rename to docs/assets/YukiHookAPI.html.52aa5899.js
    index f2e2d9f2..9cd3b63a 100644
    --- a/docs/assets/YukiHookAPI.html.1fa29a43.js
    +++ b/docs/assets/YukiHookAPI.html.52aa5899.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as o,a}from"./app.b0c3bf74.js";const e={},l=a(`

    YukiHookAPI - object

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

    executorVersion - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.5 \u65B0\u589E

    v1.0.91 \u79FB\u9664

    \u8BF7\u8F6C\u79FB\u5230 Status.executorVersion

    Status - object

    object Status
    diff --git a/docs/assets/YukiHookDataChannel.html.74e08a45.js b/docs/assets/YukiHookDataChannel.html.3b0eec14.js
    similarity index 70%
    rename from docs/assets/YukiHookDataChannel.html.74e08a45.js
    rename to docs/assets/YukiHookDataChannel.html.3b0eec14.js
    index b3f03ab2..446b6e8f 100644
    --- a/docs/assets/YukiHookDataChannel.html.74e08a45.js
    +++ b/docs/assets/YukiHookDataChannel.html.3b0eec14.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-632be8ee","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html","title":"YukiHookDataChannel - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"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":[]}]}],"git":{"updatedTime":1663397167000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-632be8ee","path":"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html","title":"YukiHookDataChannel - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"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":[]}]}],"git":{"updatedTime":1664833809000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"}');export{e as data};
    diff --git a/docs/assets/YukiHookDataChannel.html.7c119fab.js b/docs/assets/YukiHookDataChannel.html.3db91b76.js
    similarity index 85%
    rename from docs/assets/YukiHookDataChannel.html.7c119fab.js
    rename to docs/assets/YukiHookDataChannel.html.3db91b76.js
    index da2475b2..20a2014e 100644
    --- a/docs/assets/YukiHookDataChannel.html.7c119fab.js
    +++ b/docs/assets/YukiHookDataChannel.html.3db91b76.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as o,a as n}from"./app.b0c3bf74.js";const l={},p=n(`

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +import{_ as s,o as a,c as o,a as n}from"./app.99fcdd51.js";const l={},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, private val isSecure: Boolean)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.0.90 \u4FEE\u6539

    \u65B0\u589E isSecure \u53C2\u6570

    \u529F\u80FD\u63CF\u8FF0

    YukiHookDataChannel \u547D\u540D\u7A7A\u95F4\u3002

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u521B\u5EFA\u4E00\u4E2A\u8C03\u7528\u7A7A\u95F4\u3002

    put - method

    fun <T> put(key: String, value: T)
    @@ -9,4 +9,5 @@ import{_ as s,o as a,c as o,a as n}from"./app.b0c3bf74.js";const l={},p=n(`

    fun <T> wait(data: ChannelData<T>, result: (value: T) -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    v1.0.90 \u4FEE\u6539

    \u79FB\u9664\u9ED8\u8BA4\u503C value

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u952E\u503C\u6570\u636E\u3002

    wait - method

    fun wait(key: String, callback: () -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u4EC5\u83B7\u53D6\u76D1\u542C\u7ED3\u679C\uFF0C\u4E0D\u83B7\u53D6\u952E\u503C\u6570\u636E\u3002

    \u7279\u522B\u6CE8\u610F

    \u4EC5\u9650\u4F7F\u7528 VALUE_WAIT_FOR_LISTENER \u53D1\u9001\u7684\u76D1\u542C\u624D\u80FD\u88AB\u63A5\u6536\u3002

    checkingVersionEquals - method

    fun checkingVersionEquals(result: (Boolean) -> Unit)
    -

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7684\u7248\u672C\u662F\u5426\u5339\u914D\u3002

    \u901A\u8FC7\u6B64\u65B9\u6CD5\u53EF\u539F\u751F\u5224\u65AD Xposed \u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u91CD\u65B0\u88C5\u8F7D\u9020\u6210\u4E24\u8005\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u3002

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

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.88 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7684\u7248\u672C\u662F\u5426\u5339\u914D\u3002

    \u901A\u8FC7\u6B64\u65B9\u6CD5\u53EF\u539F\u751F\u5224\u65AD Xposed \u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u91CD\u65B0\u88C5\u8F7D\u9020\u6210\u4E24\u8005\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u3002

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(result: (ArrayList<YukiLoggerData>) -> Unit)
    +

    \u53D8\u66F4\u8BB0\u5F55

    v1.1.4 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u7684 ArrayList<YukiLoggerData> \u6570\u636E\u3002

    \u7531\u4E8E\u6A21\u5757\u4E0E\u5BBF\u4E3B\u5904\u4E8E\u4E0D\u540C\u7684\u8FDB\u7A0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6570\u636E\u901A\u8BAF\u6865\u8BBF\u95EE\u5404\u81EA\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u3002

    \u7279\u522B\u6CE8\u610F

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u5FC5\u987B\u542F\u7528 YukiHookLogger.Configs.isRecord \u624D\u80FD\u83B7\u53D6\u5230\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u3002

    \u7531\u4E8E Android \u9650\u5236\u4E86\u6570\u636E\u4F20\u8F93\u5927\u5C0F\u7684\u6700\u5927\u503C\uFF0C\u5982\u679C\u8C03\u8BD5\u65E5\u5FD7\u8FC7\u591A\u53EF\u80FD\u4F1A\u9020\u6210 TransactionTooLargeException \u5F02\u5E38\u3002

    `,68),e=[p];function t(c,r){return a(),o("div",null,e)}const d=s(l,[["render",t],["__file","YukiHookDataChannel.html.vue"]]);export{d as default}; diff --git a/docs/assets/YukiHookDataChannel.html.75c012dd.js b/docs/assets/YukiHookDataChannel.html.6f5cc6e1.js similarity index 70% rename from docs/assets/YukiHookDataChannel.html.75c012dd.js rename to docs/assets/YukiHookDataChannel.html.6f5cc6e1.js index 4f40930b..88a319cb 100644 --- a/docs/assets/YukiHookDataChannel.html.75c012dd.js +++ b/docs/assets/YukiHookDataChannel.html.6f5cc6e1.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-7414265a","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html","title":"YukiHookDataChannel - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"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":[]}]}],"git":{"updatedTime":1664299331000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-7414265a","path":"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html","title":"YukiHookDataChannel - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","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":"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":[]}]}],"git":{"updatedTime":1664833809000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"}');export{e as data}; diff --git a/docs/assets/YukiHookDataChannel.html.88bf0ce2.js b/docs/assets/YukiHookDataChannel.html.edaeb594.js similarity index 85% rename from docs/assets/YukiHookDataChannel.html.88bf0ce2.js rename to docs/assets/YukiHookDataChannel.html.edaeb594.js index b85e017c..b99e3975 100644 --- a/docs/assets/YukiHookDataChannel.html.88bf0ce2.js +++ b/docs/assets/YukiHookDataChannel.html.edaeb594.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,a as o}from"./app.b0c3bf74.js";const l={},e=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.

    YukiHookDataChannel - class

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

    Notice

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

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

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u901A\u8BAF\u6865\u3002

    \u901A\u8FC7\u6A21\u5757\u4E0E\u5BBF\u4E3B\u76F8\u4E92\u6CE8\u518C BroadcastReceiver \u6765\u5B9E\u73B0\u6570\u636E\u7684\u4EA4\u4E92\u3002

    \u6A21\u5757\u9700\u8981\u5C06 Application \u7EE7\u627F\u4E8E ModuleApplication \u6765\u5B9E\u73B0\u6B64\u529F\u80FD\u3002

    Pay Attention

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u9700\u8981\u4FDD\u6301\u5B58\u6D3B\u72B6\u6001\uFF0C\u5426\u5219\u65E0\u6CD5\u5EFA\u7ACB\u901A\u8BAF\u3002

    NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String, private val isSecure: Boolean)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    \u65B0\u589E isSecure \u53C2\u6570

    Function Illustrate

    YukiHookDataChannel \u547D\u540D\u7A7A\u95F4\u3002

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u521B\u5EFA\u4E00\u4E2A\u8C03\u7528\u7A7A\u95F4\u3002

    put - method

    fun <T> put(key: String, value: T)
    @@ -9,4 +9,5 @@ import{_ as s,o as a,c as n,a as o}from"./app.b0c3bf74.js";const l={},e=o(`
    fun <T> wait(data: ChannelData<T>, result: (value: T) -> Unit)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    \u79FB\u9664\u9ED8\u8BA4\u503C value

    Function Illustrate

    \u83B7\u53D6\u952E\u503C\u6570\u636E\u3002

    wait - method

    fun wait(key: String, callback: () -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    \u4EC5\u83B7\u53D6\u76D1\u542C\u7ED3\u679C\uFF0C\u4E0D\u83B7\u53D6\u952E\u503C\u6570\u636E\u3002

    Pay Attention

    \u4EC5\u9650\u4F7F\u7528 VALUE_WAIT_FOR_LISTENER \u53D1\u9001\u7684\u76D1\u542C\u624D\u80FD\u88AB\u63A5\u6536\u3002

    checkingVersionEquals - method

    fun checkingVersionEquals(result: (Boolean) -> Unit)
    -

    Change Records

    v1.0.88 added

    Function Illustrate

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7684\u7248\u672C\u662F\u5426\u5339\u914D\u3002

    \u901A\u8FC7\u6B64\u65B9\u6CD5\u53EF\u539F\u751F\u5224\u65AD Xposed \u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u91CD\u65B0\u88C5\u8F7D\u9020\u6210\u4E24\u8005\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u3002

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

    Change Records

    v1.0.88 added

    Function Illustrate

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7684\u7248\u672C\u662F\u5426\u5339\u914D\u3002

    \u901A\u8FC7\u6B64\u65B9\u6CD5\u53EF\u539F\u751F\u5224\u65AD Xposed \u6A21\u5757\u66F4\u65B0\u540E\u5BBF\u4E3B\u5E76\u672A\u91CD\u65B0\u88C5\u8F7D\u9020\u6210\u4E24\u8005\u4E0D\u5339\u914D\u7684\u60C5\u51B5\u3002

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(result: (ArrayList<YukiLoggerData>) -> Unit)
    +

    Change Records

    v1.1.4 added

    Function Illustrate

    \u83B7\u53D6\u6A21\u5757\u4E0E\u5BBF\u4E3B\u4E4B\u95F4\u7684 ArrayList<YukiLoggerData> \u6570\u636E\u3002

    \u7531\u4E8E\u6A21\u5757\u4E0E\u5BBF\u4E3B\u5904\u4E8E\u4E0D\u540C\u7684\u8FDB\u7A0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6570\u636E\u901A\u8BAF\u6865\u8BBF\u95EE\u5404\u81EA\u7684\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u3002

    Pay Attention

    \u6A21\u5757\u4E0E\u5BBF\u4E3B\u5FC5\u987B\u542F\u7528 YukiHookLogger.Configs.isRecord \u624D\u80FD\u83B7\u53D6\u5230\u8C03\u8BD5\u65E5\u5FD7\u6570\u636E\u3002

    \u7531\u4E8E Android \u9650\u5236\u4E86\u6570\u636E\u4F20\u8F93\u5927\u5C0F\u7684\u6700\u5927\u503C\uFF0C\u5982\u679C\u8C03\u8BD5\u65E5\u5FD7\u8FC7\u591A\u53EF\u80FD\u4F1A\u9020\u6210 TransactionTooLargeException \u5F02\u5E38\u3002

    `,69),p=[e];function t(c,r){return a(),o("div",null,p)}const i=s(l,[["render",t],["__file","YukiHookDataChannel.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiHookFactory.html.af2c8a4b.js b/docs/assets/YukiHookFactory.html.233ed606.js similarity index 99% rename from docs/assets/YukiHookFactory.html.af2c8a4b.js rename to docs/assets/YukiHookFactory.html.233ed606.js index ba9775cc..070666dd 100644 --- a/docs/assets/YukiHookFactory.html.af2c8a4b.js +++ b/docs/assets/YukiHookFactory.html.233ed606.js @@ -1,4 +1,4 @@ -import{_ as e,o,c as s,a as n}from"./app.b0c3bf74.js";const a={},t=n(`

    Notice

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

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

    YukiHookFactory - kt

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
    +import{_ as e,o,c as s,a as n}from"./app.99fcdd51.js";const a={},t=n(`

    Notice

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

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

    YukiHookFactory - kt

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    Function Illustrate

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
     

    Change Records

    v1.0.1 added

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit

    Function Illustrate

    \u5728 IYukiHookXposedInit \u4E2D\u914D\u7F6E Configs\u3002

    IYukiHookXposedInit.encase - ext-method

    fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit)
     
    fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker)
     

    Change Records

    v1.0 first

    v1.0.80 modified

    \u5408\u5E76\u5230 IYukiHookXposedInit

    Function Illustrate

    \u5728 IYukiHookXposedInit \u4E2D\u8C03\u7528 YukiHookAPI\u3002

    Context.modulePrefs - ext-field

    val Context.modulePrefs: YukiHookModulePrefs
    diff --git a/docs/assets/YukiHookFactory.html.5003d00d.js b/docs/assets/YukiHookFactory.html.b68c21d1.js
    similarity index 99%
    rename from docs/assets/YukiHookFactory.html.5003d00d.js
    rename to docs/assets/YukiHookFactory.html.b68c21d1.js
    index b91d41bb..41ff97ff 100644
    --- a/docs/assets/YukiHookFactory.html.5003d00d.js
    +++ b/docs/assets/YukiHookFactory.html.b68c21d1.js
    @@ -1,4 +1,4 @@
    -import{_ as o,o as e,c as s,a as n}from"./app.b0c3bf74.js";const a={},p=n(`

    YukiHookFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
    +import{_ as o,o as e,c as s,a as n}from"./app.99fcdd51.js";const a={},p=n(`

    YukiHookFactory - kt

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit\uFF0C\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline

    \u529F\u80FD\u63CF\u8FF0

    \u8FD9\u662F YukiHookAPI \u76F8\u5173 lambda \u65B9\u6CD5\u7684\u5C01\u88C5\u7C7B\u4EE5\u53CA\u90E8\u5206 API \u7528\u6CD5\u3002

    IYukiHookXposedInit.configs - ext-method

    inline fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.1 \u65B0\u589E

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit

    \u529F\u80FD\u63CF\u8FF0

    \u5728 IYukiHookXposedInit \u4E2D\u914D\u7F6E Configs\u3002

    IYukiHookXposedInit.encase - ext-method

    fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit)
     
    fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    v1.0.80 \u4FEE\u6539

    \u5408\u5E76\u5230 IYukiHookXposedInit

    \u529F\u80FD\u63CF\u8FF0

    \u5728 IYukiHookXposedInit \u4E2D\u8C03\u7528 YukiHookAPI\u3002

    Context.modulePrefs - ext-field

    val Context.modulePrefs: YukiHookModulePrefs
    diff --git a/docs/assets/YukiHookModulePrefs.html.4dc1695f.js b/docs/assets/YukiHookModulePrefs.html.aad74b54.js
    similarity index 99%
    rename from docs/assets/YukiHookModulePrefs.html.4dc1695f.js
    rename to docs/assets/YukiHookModulePrefs.html.aad74b54.js
    index 3d659599..62c384ea 100644
    --- a/docs/assets/YukiHookModulePrefs.html.4dc1695f.js
    +++ b/docs/assets/YukiHookModulePrefs.html.aad74b54.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.b0c3bf74.js";const r={},d=a(`

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
    +import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.99fcdd51.js";const r={},d=a(`

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0 \u6DFB\u52A0

    \u529F\u80FD\u63CF\u8FF0

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u5B58\u53D6\uFF0C\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences\u3002

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

    \u7279\u522B\u6CE8\u610F

    \u6B64\u529F\u80FD\u4E3A\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u4EC5\u5728 LSPosed \u73AF\u5883\u6D4B\u8BD5\u901A\u8FC7\uFF0CEdXposed \u7406\u8BBA\u4E5F\u53EF\u4EE5\u4F7F\u7528\u4F46\u4E0D\u518D\u63A8\u8350\u3002

    \u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5728 AndroidManifests.xml \u4E2D\u5C06 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\u3002

    `,9),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},g=s("New XSharedPreferences"),u=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),h=o("p",null,[s("\u672A\u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5C06\u4F60\u7684\u6A21\u5757 "),o("code",null,"API"),s(" \u964D\u81F3 "),o("code",null,"26"),s(" \u4EE5\u4E0B\uFF0C"),o("code",null,"YukiHookAPI"),s(" \u5C06\u4F1A\u5C1D\u8BD5\u4F7F\u7528 "),o("code",null,"makeWorldReadable"),s(" \u4F46\u4ECD\u6709\u53EF\u80FD\u4E0D\u6210\u529F\u3002")],-1),B=s("\u592A\u6781\u8BF7\u53C2\u9605 "),F={href:"https://taichi.cool/zh/doc/for-xposed-dev.html#%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90-%E9%85%8D%E7%BD%AE-xsharedpreference",target:"_blank",rel:"noopener noreferrer"},D=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),C=s("\u3002"),k=a('

    \u7279\u522B\u6CE8\u610F

    \u5F53\u4F60\u5728 Xposed \u6A21\u5757\u4E2D\u5B58\u53D6\u6570\u636E\u7684\u65F6\u5019 context \u5FC5\u987B\u4E0D\u80FD\u662F\u7A7A\u7684\u3002

    \u82E5\u4F60\u6B63\u5728\u4F7F\u7528 PreferenceFragmentCompat\uFF0C\u8BF7\u8FC1\u79FB\u5230 ModulePreferenceFragment \u4EE5\u9002\u914D\u4E0A\u8FF0\u529F\u80FD\u7279\u6027\u3002

    \u53EF\u9009\u914D\u7F6E

    \u82E5\u4F60\u4E0D\u60F3\u5C06\u4F60\u7684\u6A21\u5757\u7684 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\uFF0C\u4F60\u53EF\u4EE5\u5728 AndroidManifest.xml \u4E2D\u6DFB\u52A0 xposedsharedprefs \u6765\u5B9E\u73B0\u652F\u6301\u3002

    ',4),m=s("\u8BE6\u89C1 "),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=a(`

    \u793A\u4F8B\u5982\u4E0B

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
    diff --git a/docs/assets/YukiHookModulePrefs.html.bfcdc380.js b/docs/assets/YukiHookModulePrefs.html.bdd6b713.js
    similarity index 99%
    rename from docs/assets/YukiHookModulePrefs.html.bfcdc380.js
    rename to docs/assets/YukiHookModulePrefs.html.bdd6b713.js
    index b3242b1d..ccefe1ca 100644
    --- a/docs/assets/YukiHookModulePrefs.html.bfcdc380.js
    +++ b/docs/assets/YukiHookModulePrefs.html.bdd6b713.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.b0c3bf74.js";const r={},d=a(`

    Notice

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

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

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
    +import{_ as l,r as p,o as t,c,b as o,d as n,a,e as s}from"./app.99fcdd51.js";const r={},d=a(`

    Notice

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

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

    YukiHookModulePrefs - class

    class YukiHookModulePrefs private constructor(private var context: Context?)
     

    Change Records

    v1.0 first

    Function Illustrate

    \u5B9E\u73B0 Xposed \u6A21\u5757\u7684\u6570\u636E\u5B58\u53D6\uFF0C\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences\u3002

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

    Pay Attention

    \u6B64\u529F\u80FD\u4E3A\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u4EC5\u5728 LSPosed \u73AF\u5883\u6D4B\u8BD5\u901A\u8FC7\uFF0CEdXposed \u7406\u8BBA\u4E5F\u53EF\u4EE5\u4F7F\u7528\u4F46\u4E0D\u518D\u63A8\u8350\u3002

    \u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5728 AndroidManifests.xml \u4E2D\u5C06 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\u3002

    `,10),i=s("\u8BE6\u89C1 "),y={href:"https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences#for-the-module",target:"_blank",rel:"noopener noreferrer"},u=s("New XSharedPreferences"),g=s("\u3002"),h=o("p",null,[s("\u82E5\u4F60\u5728\u6309\u7167\u89C4\u5B9A\u914D\u7F6E\u540E\u4F9D\u7136\u65E0\u6CD5\u4F7F\u7528\u6216\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u53EF\u4EE5\u53C2\u8003 "),o("a",{href:"../../../YukiHookAPI#isenablehooksharedpreferences-field"},"isEnableHookSharedPreferences"),s("\u3002")],-1),A=o("p",null,[s("\u672A\u4F7F\u7528 LSPosed \u73AF\u5883\u8BF7\u5C06\u4F60\u7684\u6A21\u5757 "),o("code",null,"API"),s(" \u964D\u81F3 "),o("code",null,"26"),s(" \u4EE5\u4E0B\uFF0C"),o("code",null,"YukiHookAPI"),s(" \u5C06\u4F1A\u5C1D\u8BD5\u4F7F\u7528 "),o("code",null,"makeWorldReadable"),s(" \u4F46\u4ECD\u6709\u53EF\u80FD\u4E0D\u6210\u529F\u3002")],-1),F=s("\u592A\u6781\u8BF7\u53C2\u9605 "),B={href:"https://taichi.cool/zh/doc/for-xposed-dev.html#%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90-%E9%85%8D%E7%BD%AE-xsharedpreference",target:"_blank",rel:"noopener noreferrer"},C=s("\u6587\u4EF6\u6743\u9650/\u914D\u7F6E/XSharedPreference"),D=s("\u3002"),k=a('

    Pay Attention

    \u5F53\u4F60\u5728 Xposed \u6A21\u5757\u4E2D\u5B58\u53D6\u6570\u636E\u7684\u65F6\u5019 context \u5FC5\u987B\u4E0D\u80FD\u662F\u7A7A\u7684\u3002

    \u82E5\u4F60\u6B63\u5728\u4F7F\u7528 PreferenceFragmentCompat\uFF0C\u8BF7\u8FC1\u79FB\u5230 ModulePreferenceFragment \u4EE5\u9002\u914D\u4E0A\u8FF0\u529F\u80FD\u7279\u6027\u3002

    \u53EF\u9009\u914D\u7F6E

    \u82E5\u4F60\u4E0D\u60F3\u5C06\u4F60\u7684\u6A21\u5757\u7684 xposedminversion \u6700\u4F4E\u8BBE\u7F6E\u4E3A 93\uFF0C\u4F60\u53EF\u4EE5\u5728 AndroidManifest.xml \u4E2D\u6DFB\u52A0 xposedsharedprefs \u6765\u5B9E\u73B0\u652F\u6301\u3002

    ',4),m=s("\u8BE6\u89C1 "),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=a(`

    The following example

    <meta-data
         android:name="xposedsharedprefs"
         android:value="true"/>
    diff --git a/docs/assets/YukiMemberHookCreator.html.e4d7af24.js b/docs/assets/YukiMemberHookCreator.html.148a1429.js
    similarity index 99%
    rename from docs/assets/YukiMemberHookCreator.html.e4d7af24.js
    rename to docs/assets/YukiMemberHookCreator.html.148a1429.js
    index 9ce8a5ff..bfadeb0f 100644
    --- a/docs/assets/YukiMemberHookCreator.html.e4d7af24.js
    +++ b/docs/assets/YukiMemberHookCreator.html.148a1429.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as n,a as e}from"./app.b0c3bf74.js";const a={},l=e(`

    YukiMemberHookCreator - class

    class YukiMemberHookCreator(internal val packageParam: PackageParam, internal val hookClass: HookClass)
    +import{_ as s,o,c as n,a as e}from"./app.99fcdd51.js";const a={},l=e(`

    YukiMemberHookCreator - class

    class YukiMemberHookCreator(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

    \u529F\u80FD\u63CF\u8FF0

    YukiHookAPI \u7684 Member \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    PRIORITY_DEFAULT - field

    val PRIORITY_DEFAULT: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u9ED8\u8BA4 Hook \u56DE\u8C03\u4F18\u5148\u7EA7\u3002

    PRIORITY_LOWEST - field

    val PRIORITY_LOWEST: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5EF6\u8FDF\u56DE\u8C03 Hook \u65B9\u6CD5\u7ED3\u679C\u3002

    PRIORITY_HIGHEST - field

    val PRIORITY_HIGHEST: Int
    diff --git a/docs/assets/YukiMemberHookCreator.html.32154e89.js b/docs/assets/YukiMemberHookCreator.html.b90d4528.js
    similarity index 99%
    rename from docs/assets/YukiMemberHookCreator.html.32154e89.js
    rename to docs/assets/YukiMemberHookCreator.html.b90d4528.js
    index 30f3fd3c..f66ab66e 100644
    --- a/docs/assets/YukiMemberHookCreator.html.32154e89.js
    +++ b/docs/assets/YukiMemberHookCreator.html.b90d4528.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as e,a as n}from"./app.b0c3bf74.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.

    YukiMemberHookCreator - class

    class YukiMemberHookCreator(internal val packageParam: PackageParam, internal val hookClass: HookClass)
    +import{_ as s,o,c as e,a as n}from"./app.99fcdd51.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.

    YukiMemberHookCreator - class

    class YukiMemberHookCreator(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

    Function Illustrate

    YukiHookAPI \u7684 Member \u6838\u5FC3 Hook \u5B9E\u73B0\u7C7B\u3002

    PRIORITY_DEFAULT - field

    val PRIORITY_DEFAULT: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u9ED8\u8BA4 Hook \u56DE\u8C03\u4F18\u5148\u7EA7\u3002

    PRIORITY_LOWEST - field

    val PRIORITY_LOWEST: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5EF6\u8FDF\u56DE\u8C03 Hook \u65B9\u6CD5\u7ED3\u679C\u3002

    PRIORITY_HIGHEST - field

    val PRIORITY_HIGHEST: Int
    diff --git a/docs/assets/YukiModuleResources.html.74158b0c.js b/docs/assets/YukiModuleResources.html.10f2c38d.js
    similarity index 97%
    rename from docs/assets/YukiModuleResources.html.74158b0c.js
    rename to docs/assets/YukiModuleResources.html.10f2c38d.js
    index 476bda61..1eda7e43 100644
    --- a/docs/assets/YukiModuleResources.html.74158b0c.js
    +++ b/docs/assets/YukiModuleResources.html.10f2c38d.js
    @@ -1,3 +1,3 @@
    -import{_ as s,o,c as e,a}from"./app.b0c3bf74.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.99fcdd51.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/YukiModuleResources.html.b28e8497.js b/docs/assets/YukiModuleResources.html.f47310a8.js similarity index 97% rename from docs/assets/YukiModuleResources.html.b28e8497.js rename to docs/assets/YukiModuleResources.html.f47310a8.js index d7c01763..6bf44a00 100644 --- a/docs/assets/YukiModuleResources.html.b28e8497.js +++ b/docs/assets/YukiModuleResources.html.f47310a8.js @@ -1,3 +1,3 @@ -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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/YukiResForwarder.html.9ec9ec24.js b/docs/assets/YukiResForwarder.html.234358d5.js similarity index 98% rename from docs/assets/YukiResForwarder.html.9ec9ec24.js rename to docs/assets/YukiResForwarder.html.234358d5.js index dfc3a2e8..42775764 100644 --- a/docs/assets/YukiResForwarder.html.9ec9ec24.js +++ b/docs/assets/YukiResForwarder.html.234358d5.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},c=a(`

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XResForwarder \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    instance - field

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    v1.1.0 \u4F5C\u5E9F

    \u4E0D\u518D\u5BF9\u5916\u516C\u5F00 instance \u53C2\u6570

    id - field

    val id: Int
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources Id\u3002

    resources - field

    val resources: Resources
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources\u3002

    `,23),l=[c];function r(p,t){return e(),o("div",null,l)}const i=s(n,[["render",r],["__file","YukiResForwarder.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiResForwarder.html.da0ff88b.js b/docs/assets/YukiResForwarder.html.62d9bea1.js similarity index 98% rename from docs/assets/YukiResForwarder.html.da0ff88b.js rename to docs/assets/YukiResForwarder.html.62d9bea1.js index c677225a..d3839ca4 100644 --- a/docs/assets/YukiResForwarder.html.da0ff88b.js +++ b/docs/assets/YukiResForwarder.html.62d9bea1.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.js";const n={},r=a(`

    Notice

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

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

    YukiResForwarder - class

    class YukiResForwarder private constructor(private val baseInstance: XResForwarder)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XResForwarder \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    instance - field

    Change Records

    v1.0.80 added

    v1.1.0 deprecated

    \u4E0D\u518D\u5BF9\u5916\u516C\u5F00 instance \u53C2\u6570

    id - field

    val id: Int
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources Id\u3002

    resources - field

    val resources: Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u5F97\u5F53\u524D APP \u7684 Resources\u3002

    `,24),c=[r];function l(t,p){return e(),o("div",null,c)}const i=s(n,[["render",l],["__file","YukiResForwarder.html.vue"]]);export{i as default}; diff --git a/docs/assets/YukiResources.html.ed34f5c7.js b/docs/assets/YukiResources.html.8651ca84.js similarity index 99% rename from docs/assets/YukiResources.html.ed34f5c7.js rename to docs/assets/YukiResources.html.8651ca84.js index 4beb44b1..cf0cc709 100644 --- a/docs/assets/YukiResources.html.ed34f5c7.js +++ b/docs/assets/YukiResources.html.8651ca84.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as o,a as n}from"./app.b0c3bf74.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.99fcdd51.js";const e={},l=n(`

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u5BF9\u63A5 XResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    LayoutInflatedParam - class

    class LayoutInflatedParam(internal val baseParam: XC_LayoutInflated.LayoutInflatedParam)
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u88C5\u8F7D Hook APP \u7684\u76EE\u6807\u5E03\u5C40 Resources \u5B9E\u73B0\u7C7B\u3002

    variantName - field

    val variantName: String
     

    \u53D8\u66F4\u8BB0\u5F55

    v1.0.80 \u65B0\u589E

    \u529F\u80FD\u63CF\u8FF0

    \u83B7\u53D6\u5F53\u524D\u88AB Hook \u7684\u5E03\u5C40\u88C5\u8F7D\u76EE\u5F55\u540D\u79F0\u3002

    \u4F8B\u5982\uFF1Alayout\u3001layout-land\u3001layout-sw600dp\u3002

    currentView - field

    val currentView: View
    diff --git a/docs/assets/YukiResources.html.7d842109.js b/docs/assets/YukiResources.html.8cdff557.js
    similarity index 99%
    rename from docs/assets/YukiResources.html.7d842109.js
    rename to docs/assets/YukiResources.html.8cdff557.js
    index a223732a..af991f93 100644
    --- a/docs/assets/YukiResources.html.7d842109.js
    +++ b/docs/assets/YukiResources.html.8cdff557.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as a,c as n,a as o}from"./app.b0c3bf74.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.99fcdd51.js";const e={},l=o(`

    Notice

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

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

    YukiResources - class

    class YukiResources private constructor(private val baseInstance: XResources) : Resources
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u5BF9\u63A5 XResources \u7684\u4E2D\u95F4\u5C42\u5B9E\u4F8B\u3002

    LayoutInflatedParam - class

    class LayoutInflatedParam(internal val baseParam: XC_LayoutInflated.LayoutInflatedParam)
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u88C5\u8F7D Hook APP \u7684\u76EE\u6807\u5E03\u5C40 Resources \u5B9E\u73B0\u7C7B\u3002

    variantName - field

    val variantName: String
     

    Change Records

    v1.0.80 added

    Function Illustrate

    \u83B7\u53D6\u5F53\u524D\u88AB Hook \u7684\u5E03\u5C40\u88C5\u8F7D\u76EE\u5F55\u540D\u79F0\u3002

    \u4F8B\u5982\uFF1Alayout\u3001layout-land\u3001layout-sw600dp\u3002

    currentView - field

    val currentView: View
    diff --git a/docs/assets/YukiResourcesHookCreator.html.7a3865c6.js b/docs/assets/YukiResourcesHookCreator.html.0a994d9e.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.7a3865c6.js
    rename to docs/assets/YukiResourcesHookCreator.html.0a994d9e.js
    index 8b04325e..0c079125 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.7a3865c6.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.0a994d9e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as o}from"./app.b0c3bf74.js";const e={},l=o(`

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator(internal val packageParam: PackageParam, internal val hookResources: HookResources)
    +import{_ as s,o as n,c as a,a as o}from"./app.99fcdd51.js";const e={},l=o(`

    YukiResourcesHookCreator - class

    class YukiResourcesHookCreator(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

    \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/YukiResourcesHookCreator.html.fbd8ab68.js b/docs/assets/YukiResourcesHookCreator.html.4985f81e.js
    similarity index 99%
    rename from docs/assets/YukiResourcesHookCreator.html.fbd8ab68.js
    rename to docs/assets/YukiResourcesHookCreator.html.4985f81e.js
    index bfecaa00..db465971 100644
    --- a/docs/assets/YukiResourcesHookCreator.html.fbd8ab68.js
    +++ b/docs/assets/YukiResourcesHookCreator.html.4985f81e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.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 val packageParam: PackageParam, internal val hookResources: HookResources)
    +import{_ as s,o as n,c as e,a}from"./app.99fcdd51.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 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

    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/YukiXposedEvent.html.15069044.js b/docs/assets/YukiXposedEvent.html.04a50775.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.15069044.js
    rename to docs/assets/YukiXposedEvent.html.04a50775.js
    index 1723187c..e53ea477 100644
    --- a/docs/assets/YukiXposedEvent.html.15069044.js
    +++ b/docs/assets/YukiXposedEvent.html.04a50775.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    YukiXposedEvent - object

    object YukiXposedEvent
    +import{_ as s,o,c as a,a as e}from"./app.99fcdd51.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.bc400f56.js b/docs/assets/YukiXposedEvent.html.5f49c197.js
    similarity index 98%
    rename from docs/assets/YukiXposedEvent.html.bc400f56.js
    rename to docs/assets/YukiXposedEvent.html.5f49c197.js
    index 776e4637..912f6cf8 100644
    --- a/docs/assets/YukiXposedEvent.html.bc400f56.js
    +++ b/docs/assets/YukiXposedEvent.html.5f49c197.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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.f6271e7c.js b/docs/assets/about.html.31fb9bcd.js
    similarity index 98%
    rename from docs/assets/about.html.f6271e7c.js
    rename to docs/assets/about.html.31fb9bcd.js
    index e4452285..dccd4315 100644
    --- a/docs/assets/about.html.f6271e7c.js
    +++ b/docs/assets/about.html.31fb9bcd.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.b0c3bf74.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.99fcdd51.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-2022 HighCapable
     
    diff --git a/docs/assets/about.html.a6bc94b3.js b/docs/assets/about.html.d844c71e.js
    similarity index 98%
    rename from docs/assets/about.html.a6bc94b3.js
    rename to docs/assets/about.html.d844c71e.js
    index 6fa44cda..6e645833 100644
    --- a/docs/assets/about.html.a6bc94b3.js
    +++ b/docs/assets/about.html.d844c71e.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.b0c3bf74.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.99fcdd51.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-2022 HighCapable
     
    diff --git a/docs/assets/api-example.html.23507b21.js b/docs/assets/api-example.html.0f0dfccf.js
    similarity index 99%
    rename from docs/assets/api-example.html.23507b21.js
    rename to docs/assets/api-example.html.0f0dfccf.js
    index 470c4fac..d1be1d8d 100644
    --- a/docs/assets/api-example.html.23507b21.js
    +++ b/docs/assets/api-example.html.0f0dfccf.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.b0c3bf74.js";const o={},e=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.99fcdd51.js";const o={},e=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-example.html.0422de55.js b/docs/assets/api-example.html.7a4a6adf.js
    similarity index 99%
    rename from docs/assets/api-example.html.0422de55.js
    rename to docs/assets/api-example.html.7a4a6adf.js
    index 7dc4c738..5fe71562 100644
    --- a/docs/assets/api-example.html.0422de55.js
    +++ b/docs/assets/api-example.html.7a4a6adf.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as e}from"./app.b0c3bf74.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.99fcdd51.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-exception.html.487a5b72.js b/docs/assets/api-exception.html.066f0dc6.js
    similarity index 96%
    rename from docs/assets/api-exception.html.487a5b72.js
    rename to docs/assets/api-exception.html.066f0dc6.js
    index 68a490db..5f6760e7 100644
    --- a/docs/assets/api-exception.html.487a5b72.js
    +++ b/docs/assets/api-exception.html.066f0dc6.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.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 XposedBridge in current space! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D XposedBridge\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

    class HookEntry : IYukiHookXposedInit {
    +import{_ as s,o as n,c as e,a}from"./app.99fcdd51.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 XposedBridge in current space! Aborted

    \u5F02\u5E38\u539F\u56E0

    \u4F60\u7684 Hook Framework \u672A\u5728\u5DE5\u4F5C\u6216\u5E76\u672A\u6210\u529F\u88C5\u8F7D XposedBridge\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

    class HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             // \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5
    @@ -228,18 +228,26 @@ import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const o={},l=a(`

    modulePrefs.getBoolean("test_data") } } -

    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    \u5F02\u5E38\u539F\u56E0

    \u5728\u4F7F\u7528 YukiHookModulePrefs \u7684 get \u6216 put \u65B9\u6CD5\u6216 YukiHookDataChannel \u7684 wait \u6216 put \u65B9\u6CD5\u65F6\u4F20\u5165\u4E86\u4E0D\u652F\u6301\u7684\u5B58\u50A8\u7C7B\u578B\u3002

    \u89E3\u51B3\u65B9\u6848

    YukiHookModulePrefs \u652F\u6301\u7684\u7C7B\u578B\u53EA\u6709 String\u3001Set<String>\u3001Int\u3001Float\u3001Long\u3001Boolean\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002

    YukiHookDataChannel \u652F\u6301\u7684\u7C7B\u578B\u4E3A Intent.putExtra \u9650\u5236\u7684\u7C7B\u578B\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002

    exception

    IllegalStateException

    YukiHookDataChannel cannot used in zygote

    \u5F02\u5E38\u539F\u56E0

    \u5728 loadZygote \u4E2D\u4F7F\u7528\u4E86 YukiHookDataChannel\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadZygote {
    +
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    \u5F02\u5E38\u539F\u56E0

    \u5728\u4F7F\u7528 YukiHookModulePrefs \u7684 get \u6216 put \u65B9\u6CD5\u6216 YukiHookDataChannel \u7684 wait \u6216 put \u65B9\u6CD5\u65F6\u4F20\u5165\u4E86\u4E0D\u652F\u6301\u7684\u5B58\u50A8\u7C7B\u578B\u3002

    \u89E3\u51B3\u65B9\u6848

    YukiHookModulePrefs \u652F\u6301\u7684\u7C7B\u578B\u53EA\u6709 String\u3001Set<String>\u3001Int\u3001Float\u3001Long\u3001Boolean\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002

    YukiHookDataChannel \u652F\u6301\u7684\u7C7B\u578B\u4E3A Intent.putExtra \u9650\u5236\u7684\u7C7B\u578B\uFF0C\u8BF7\u4F20\u5165\u652F\u6301\u7684\u7C7B\u578B\u3002

    exception

    IllegalStateException

    loadApp/loadZygote/loadSystem/withProcess method need a "NAME" param

    \u5F02\u5E38\u539F\u56E0

    \u5728 loadApp\u3001loadZygote\u3001loadSystem\u3001withProcess \u4E2D\u7F3A\u5C11\u4E86\u9700\u8981\u586B\u5199\u7684\u53EF\u53D8\u6570\u7EC4\u53D8\u91CF\u53C2\u6570\u3002

    \u793A\u4F8B\u5982\u4E0B

    // <\u60C5\u666F 1>
    +loadApp()
    +// <\u60C5\u666F 2> 
    +loadZygote()
    +// <\u60C5\u666F 3>
    +loadSystem()
    +// <\u60C5\u666F 4>
    +withProcess()
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u67E5\u770B PackageParam \u4E2D\u7684\u7528\u6CD5\u6B63\u786E\u5730\u4F7F\u7528\u6B64\u529F\u80FD\u3002

    exception

    IllegalStateException

    YukiHookDataChannel cannot used in zygote

    \u5F02\u5E38\u539F\u56E0

    \u5728 loadZygote \u4E2D\u4F7F\u7528\u4E86 YukiHookDataChannel\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadZygote {
         // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
         dataChannel...
     }
    -

    \u89E3\u51B3\u65B9\u6848

    YukiHookDataChannel \u53EA\u80FD\u5728 loadSystem\u3001loadApp \u4E2D\u4F7F\u7528\u3002

    exception

    IllegalStateException

    Custom Hooking Members is empty

    \u5F02\u5E38\u539F\u56E0

    \u5728 MemberHookCreator \u4E2D\u8C03\u7528 members() \u4F46\u662F\u672A\u8BBE\u7F6E\u9700\u8981 Hook \u7684 Member \u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    YukiHookDataChannel \u53EA\u80FD\u5728 loadSystem\u3001loadApp \u4E2D\u4F7F\u7528\u3002

    exception

    IllegalStateException

    Custom Hooking Members is empty

    \u5F02\u5E38\u539F\u56E0

    \u5728 MemberHookCreator \u4E2D\u8C03\u7528 members() \u4F46\u662F\u672A\u8BBE\u7F6E\u9700\u8981 Hook \u7684 Member \u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // \u62EC\u53F7\u91CC\u7684\u65B9\u6CD5\u53C2\u6570\u88AB\u7559\u7A7A\u4E86
         members()
         afterHook {
             // ...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u82E5\u8981\u4F7F\u7528 members() \u8BBE\u7F6E\u81EA\u5B9A\u4E49 Hook \u65B9\u6CD5\uFF0C\u4F60\u5FC5\u987B\u4FDD\u8BC1\u5176\u65B9\u6CD5\u53C2\u6570\u91CC\u7684 Member \u6570\u7EC4\u5BF9\u8C61\u4E0D\u80FD\u4E3A\u7A7A\u3002

    exception

    IllegalStateException

    HookParam Method args index must be >= 0

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 args().last() \u4F46\u662F\u76EE\u6807 param \u4E3A\u7A7A\u6216 args \u4E2D\u7684 index \u8BBE\u7F6E\u4E86\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u82E5\u8981\u4F7F\u7528 members() \u8BBE\u7F6E\u81EA\u5B9A\u4E49 Hook \u65B9\u6CD5\uFF0C\u4F60\u5FC5\u987B\u4FDD\u8BC1\u5176\u65B9\u6CD5\u53C2\u6570\u91CC\u7684 Member \u6570\u7EC4\u5BF9\u8C61\u4E0D\u80FD\u4E3A\u7A7A\u3002

    exception

    IllegalStateException

    HookParam Method args index must be >= 0

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 args().last() \u4F46\u662F\u76EE\u6807 param \u4E3A\u7A7A\u6216 args \u4E2D\u7684 index \u8BBE\u7F6E\u4E86\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u5047\u8BBE param \u662F\u7A7A\u7684
    @@ -248,7 +256,7 @@ import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const o={},l=a(`

    args(index = -5)... } } -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u4E14\u4E0D\u80FD\u5BF9 args \u7684\u4E0B\u6807\u8BBE\u7F6E\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002

    exception

    IllegalStateException

    HookParam instance got null! Is this a static member?

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 instance \u53D8\u91CF\u6216 instance \u65B9\u6CD5\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u4E14\u4E0D\u80FD\u5BF9 args \u7684\u4E0B\u6807\u8BBE\u7F6E\u5C0F\u4E8E 0 \u7684\u6570\u503C\u3002

    exception

    IllegalStateException

    HookParam instance got null! Is this a static member?

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 instance \u53D8\u91CF\u6216 instance \u65B9\u6CD5\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
    @@ -257,68 +265,68 @@ import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const o={},l=a(`

    instance<Any>()... } } -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u5426\u4E3A\u9759\u6001\u7C7B\u578B\uFF0C\u9759\u6001\u7C7B\u578B\u7684\u65B9\u6CD5\u6CA1\u6709\u5B9E\u4F8B\uFF0C\u4E0D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u82E5\u975E\u9759\u6001\u65B9\u6CD5\uFF0C\u8BF7\u68C0\u67E5\u5B9E\u4F8B\u662F\u5426\u5DF2\u7ECF\u9500\u6BC1\u3002

    exception

    IllegalStateException

    Current hooked Member args is null

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 args \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u53C2\u6570\u6570\u7EC4\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u5426\u4E3A\u9759\u6001\u7C7B\u578B\uFF0C\u9759\u6001\u7C7B\u578B\u7684\u65B9\u6CD5\u6CA1\u6709\u5B9E\u4F8B\uFF0C\u4E0D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u82E5\u975E\u9759\u6001\u65B9\u6CD5\uFF0C\u8BF7\u68C0\u67E5\u5B9E\u4F8B\u662F\u5426\u5DF2\u7ECF\u9500\u6BC1\u3002

    exception

    IllegalStateException

    Current hooked Member args is null

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 args \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u53C2\u6570\u6570\u7EC4\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
             args...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current hooked Member is null

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 member \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current hooked Member is null

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 member \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
             member...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current hooked Member is not a Method

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 method \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u95EE\u9898\u4E00\u822C\u4E0D\u4F1A\u53D1\u751F\uFF0C\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current hooked Member is not a Method

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 method \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
             method...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u6784\u9020\u65B9\u6CD5\u8FD8\u662F\u666E\u901A\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member \u6765\u83B7\u53D6\u3002

    exception

    IllegalStateException

    Current hooked Member is not a Constructor

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 constructor \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u6784\u9020\u65B9\u6CD5\u8FD8\u662F\u666E\u901A\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member \u6765\u83B7\u53D6\u3002

    exception

    IllegalStateException

    Current hooked Member is not a Constructor

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 constructor \u53D8\u91CF\u4F46\u83B7\u53D6\u4E0D\u5230\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
             constructor...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u666E\u901A\u65B9\u6CD5\u8FD8\u662F\u6784\u9020\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member \u6765\u83B7\u53D6\u3002

    exception

    IllegalStateException

    HookParam instance cannot cast to TYPE

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 instance \u65B9\u6CD5\u6307\u5B9A\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u65B9\u6CD5\u662F\u666E\u901A\u65B9\u6CD5\u8FD8\u662F\u6784\u9020\u65B9\u6CD5\u5E76\u4F7F\u7528\u5BF9\u5E94\u7C7B\u578B\u7684\u65B9\u6CD5\u83B7\u53D6\u6307\u5B9A\u7684\u5B9E\u4F8B\uFF0C\u82E5\u4E0D\u77E5\u9053\u5B57\u8282\u7801\u7684\u7C7B\u578B\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 member \u6765\u83B7\u53D6\u3002

    exception

    IllegalStateException

    HookParam instance cannot cast to TYPE

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 instance \u65B9\u6CD5\u6307\u5B9A\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u7C7B\u578B\u88AB cast \u4E3A Activity \u4F46\u5047\u8BBE\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u578B\u5E76\u975E\u6B64\u7C7B\u578B
             instance<Activity>()...
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u5F53\u524D Hook \u5B9E\u4F8B\u7684\u6B63\u786E\u7C7B\u578B\u5E76\u91CD\u65B0\u586B\u5199\u6CDB\u578B\u4E2D\u7684\u7C7B\u578B\uFF0C\u82E5\u4E0D\u80FD\u786E\u5B9A\u8BF7\u4F7F\u7528 Any \u6216\u76F4\u63A5\u4F7F\u7528 instance \u53D8\u91CF\u3002

    exception

    IllegalStateException

    HookParam Method args is empty, mabe not has args

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 ArgsModifyer.set \u65B9\u6CD5\u4F46\u662F\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u7EC4\u4E3A\u7A7A\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u5F53\u524D Hook \u5B9E\u4F8B\u7684\u6B63\u786E\u7C7B\u578B\u5E76\u91CD\u65B0\u586B\u5199\u6CDB\u578B\u4E2D\u7684\u7C7B\u578B\uFF0C\u82E5\u4E0D\u80FD\u786E\u5B9A\u8BF7\u4F7F\u7528 Any \u6216\u76F4\u63A5\u4F7F\u7528 instance \u53D8\u91CF\u3002

    exception

    IllegalStateException

    HookParam Method args is empty, mabe not has args

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 ArgsModifyer.set \u65B9\u6CD5\u4F46\u662F\u5F53\u524D\u5B9E\u4F8B\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u7EC4\u4E3A\u7A7A\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u8C03\u7528\u4E86\u6B64\u65B9\u6CD5
             args(...).set(...)
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u5426\u5219\u4F60\u65E0\u6CD5\u4F7F\u7528\u6B64\u529F\u80FD\u3002

    exception

    IllegalStateException

    HookParam Method args index out of bounds, max is NUMBER

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 ArgsModifyer.set \u65B9\u6CD5\u6307\u5B9A\u4E86\u8D85\u51FA\u65B9\u6CD5\u53C2\u6570\u4E0B\u6807\u7684\u6570\u7EC4\u5E8F\u53F7\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u6570\u91CF\u662F\u5426\u4E0D\u4E3A\u7A7A\uFF0C\u5426\u5219\u4F60\u65E0\u6CD5\u4F7F\u7528\u6B64\u529F\u80FD\u3002

    exception

    IllegalStateException

    HookParam Method args index out of bounds, max is NUMBER

    \u5F02\u5E38\u539F\u56E0

    \u5728 HookParam \u4E2D\u8C03\u7528 ArgsModifyer.set \u65B9\u6CD5\u6307\u5B9A\u4E86\u8D85\u51FA\u65B9\u6CD5\u53C2\u6570\u4E0B\u6807\u7684\u6570\u7EC4\u5E8F\u53F7\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectMember {
         // ...
         afterHook {
             // \u4E0B\u6807\u4ECE 0 \u5F00\u59CB\uFF0C\u5047\u8BBE\u539F\u59CB\u7684\u53C2\u6570\u4E0B\u6807\u662F 5 \u4E2A\uFF0C\u4F46\u662F\u8FD9\u91CC\u586B\u5199\u4E86 6
             args(index = 6).set(...)
         }
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u4E2A\u6570\uFF0C\u5E76\u91CD\u65B0\u8BBE\u7F6E\u6570\u7EC4\u4E0B\u6807\u3002

    exception

    IllegalStateException

    PackageParam got null ClassLoader

    \u5F02\u5E38\u539F\u56E0

    \u5728 PackageParam \u4E2D\u8C03\u7528\u4E86 appClassLoader \u53D8\u91CF\u4F46\u662F\u65E0\u6CD5\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8BF7\u786E\u8BA4\u4F60 Hook \u7684\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u7684\u65B9\u6CD5\u53C2\u6570\u4E2A\u6570\uFF0C\u5E76\u91CD\u65B0\u8BBE\u7F6E\u6570\u7EC4\u4E0B\u6807\u3002

    exception

    IllegalStateException

    PackageParam got null ClassLoader

    \u5F02\u5E38\u539F\u56E0

    \u5728 PackageParam \u4E2D\u8C03\u7528\u4E86 appClassLoader \u53D8\u91CF\u4F46\u662F\u65E0\u6CD5\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
         // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
         appClassLoader...
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u51E0\u4E4E\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u6A21\u5757\u88AB\u88C5\u8F7D\u7684\u5BBF\u4E3B\u6216\u76EE\u6807 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\uFF0C\u82E5\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current Hook Framework not support moduleAppResources

    \u5F02\u5E38\u539F\u56E0

    \u5728 PackageParam \u4E2D\u8C03\u7528\u4E86 moduleAppResources \u53D8\u91CF\u4F46\u662F\u65E0\u6CD5\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u51E0\u4E4E\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u6A21\u5757\u88AB\u88C5\u8F7D\u7684\u5BBF\u4E3B\u6216\u76EE\u6807 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\uFF0C\u82E5\u771F\u7684\u53D1\u751F\u4E86\u6B64\u95EE\u9898\uFF0C\u8BF7\u643A\u5E26\u8BE6\u7EC6\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    Current Hook Framework not support moduleAppResources

    \u5F02\u5E38\u539F\u56E0

    \u5728 PackageParam \u4E2D\u8C03\u7528\u4E86 moduleAppResources \u53D8\u91CF\u4F46\u662F\u65E0\u6CD5\u83B7\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    encase {
         // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
         moduleAppResources...
     }
    -

    \u89E3\u51B3\u65B9\u6848

    moduleAppResources \u9700\u8981\u5F53\u524D Hook Framework \u652F\u6301 initZygote \u529F\u80FD\uFF0C\u8BF7\u68C0\u67E5\u540E\u518D\u8BD5\u4E00\u6B21\u3002

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    \u5F02\u5E38\u539F\u56E0

    \u5728\u4F7F\u7528 VariousClass \u521B\u5EFA\u4E0D\u786E\u5B9A\u7684 Class \u5BF9\u8C61\u65F6\u5168\u90E8\u7684 Class \u90FD\u6CA1\u6709\u88AB\u627E\u5230\u3002

    \u89E3\u51B3\u65B9\u6848

    \u68C0\u67E5\u5F53\u524D Hook \u7684\u5BBF\u4E3B\u5185\u662F\u5426\u5B58\u5728\u5176\u4E2D\u80FD\u591F\u5339\u914D\u7684 Class \u540E\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002

    exception

    IllegalStateException

    Cannot get hook class "NAME" cause THROWABLE

    \u5F02\u5E38\u539F\u56E0

    \u5728 hook \u65B9\u6CD5\u4F53\u975E onPrepareHook \u65B9\u6CD5\u5185\u8C03\u7528\u4E86 instanceClass \u53D8\u91CF\u4E14\u5F53\u524D Hook \u7684 Class \u4E0D\u5B58\u5728\u3002

    \u793A\u4F8B\u5982\u4E0B

    TargetClass.hook {
    +

    \u89E3\u51B3\u65B9\u6848

    moduleAppResources \u9700\u8981\u5F53\u524D Hook Framework \u652F\u6301 initZygote \u529F\u80FD\uFF0C\u8BF7\u68C0\u67E5\u540E\u518D\u8BD5\u4E00\u6B21\u3002

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    \u5F02\u5E38\u539F\u56E0

    \u5728\u4F7F\u7528 VariousClass \u521B\u5EFA\u4E0D\u786E\u5B9A\u7684 Class \u5BF9\u8C61\u65F6\u5168\u90E8\u7684 Class \u90FD\u6CA1\u6709\u88AB\u627E\u5230\u3002

    \u89E3\u51B3\u65B9\u6848

    \u68C0\u67E5\u5F53\u524D Hook \u7684\u5BBF\u4E3B\u5185\u662F\u5426\u5B58\u5728\u5176\u4E2D\u80FD\u591F\u5339\u914D\u7684 Class \u540E\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002

    exception

    IllegalStateException

    Cannot get hook class "NAME" cause THROWABLE

    \u5F02\u5E38\u539F\u56E0

    \u5728 hook \u65B9\u6CD5\u4F53\u975E onPrepareHook \u65B9\u6CD5\u5185\u8C03\u7528\u4E86 instanceClass \u53D8\u91CF\u4E14\u5F53\u524D Hook \u7684 Class \u4E0D\u5B58\u5728\u3002

    \u793A\u4F8B\u5982\u4E0B

    TargetClass.hook {
         // \u53EF\u80FD\u7684\u60C5\u51B5\u4E3A\u5728\u975E onPrepareHook \u65B9\u6CD5\u4F53\u5185\u8C03\u7528\u4E86 instanceClass \u53D8\u91CF\u7528\u4E8E\u6253\u5370\u65E5\u5FD7
         loggerD(msg = "$instanceClass hook start")
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u5728 hook \u5185\u76F4\u63A5\u4F7F\u7528 instanceClass \u662F\u5F88\u5371\u9669\u7684\uFF0C\u82E5 Class \u4E0D\u5B58\u5728\u5219\u4F1A\u76F4\u63A5\u5BFC\u81F4 Hook \u8FDB\u7A0B\u201C\u6B7B\u6389\u201D\u3002

    \u8BE6\u60C5\u8BF7\u53C2\u8003 \u72B6\u6001\u76D1\u542C\u3002

    exception

    IllegalStateException

    LayoutInflatedParam View instance got null

    \u5F02\u5E38\u539F\u56E0

    \u5728\u5E03\u5C40 Hook \u56DE\u8C03\u4E2D\u8C03\u7528\u4E86 currentView \u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectResource {
    +

    \u89E3\u51B3\u65B9\u6848

    \u5728 hook \u5185\u76F4\u63A5\u4F7F\u7528 instanceClass \u662F\u5F88\u5371\u9669\u7684\uFF0C\u82E5 Class \u4E0D\u5B58\u5728\u5219\u4F1A\u76F4\u63A5\u5BFC\u81F4 Hook \u8FDB\u7A0B\u201C\u6B7B\u6389\u201D\u3002

    \u8BE6\u60C5\u8BF7\u53C2\u8003 \u72B6\u6001\u76D1\u542C\u3002

    exception

    IllegalStateException

    LayoutInflatedParam View instance got null

    \u5F02\u5E38\u539F\u56E0

    \u5728\u5E03\u5C40 Hook \u56DE\u8C03\u4E2D\u8C03\u7528\u4E86 currentView \u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    injectResource {
         conditions {
             name = "activity_main"
             layout()
    @@ -328,9 +336,9 @@ import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const o={},l=a(`

    currentView... } } -

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u88AB Hook \u7684\u5BBF\u4E3B\u5F53\u524D Activity \u5DF2\u7ECF\u9500\u6BC1\u6216 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002

    exception

    IllegalStateException

    XResForwarder is invalid

    \u5F02\u5E38\u539F\u56E0

    \u5728 YukiResForwarder \u4E2D\u8C03\u7528\u4E86 resources \u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
    +

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u88AB Hook \u7684\u5BBF\u4E3B\u5F53\u524D Activity \u5DF2\u7ECF\u9500\u6BC1\u6216 Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002

    exception

    IllegalStateException

    XResForwarder is invalid

    \u5F02\u5E38\u539F\u56E0

    \u5728 YukiResForwarder \u4E2D\u8C03\u7528\u4E86 resources \u4F46\u6CA1\u53D6\u5230\u5B9E\u4F8B\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u8C03\u7528\u4E86\u6B64\u53D8\u91CF
     moduleAppResources.fwd(...).resources
    -

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    \u5F02\u5E38\u539F\u56E0

    \u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u4FDD\u7559\u4E86\u7A7A\u7684 param \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    method {
    +

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u9664\u975E Hook Framework \u81EA\u8EAB\u5B58\u5728\u95EE\u9898\u3002

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    \u5F02\u5E38\u539F\u56E0

    \u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u4FDD\u7559\u4E86\u7A7A\u7684 param \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    method {
         name = "test"
         // \u62EC\u53F7\u5185\u6CA1\u6709\u586B\u5199\u4EFB\u4F55\u53C2\u6570
         param()
    @@ -343,12 +351,12 @@ import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const o={},l=a(`

    name = "test" paramCount = 0 } -

    exception

    IllegalStateException

    Invalid YukiHookCallback type

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u7684\u6838\u5FC3 Hook \u529F\u80FD\u53D1\u751F\u6545\u969C\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u82E5\u53D1\u751F\u4E0A\u8FF0\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    ModuleContextThemeWrapper already loaded

    \u5F02\u5E38\u539F\u56E0

    \u5728 Context \u4E2D\u4F7F\u7528 applyModuleTheme \u65B9\u6CD5\u65F6\u91CD\u590D\u8FDB\u884C\u8C03\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D\u7684 Context \u5BF9\u8C61
    +
    exception

    IllegalStateException

    Invalid YukiHookCallback type

    \u5F02\u5E38\u539F\u56E0

    YukiHookAPI \u7684\u6838\u5FC3 Hook \u529F\u80FD\u53D1\u751F\u6545\u969C\u3002

    \u89E3\u51B3\u65B9\u6848

    \u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0A\u4E0D\u5B58\u5728\uFF0C\u82E5\u53D1\u751F\u4E0A\u8FF0\u95EE\u9898\uFF0C\u786E\u5B9A\u5E76\u975E\u81EA\u5DF1\u7684\u4EE3\u7801\u53D1\u751F\u7684\u95EE\u9898\u540E\uFF0C\u53EF\u63D0\u4EA4\u65E5\u5FD7\u8FDB\u884C\u53CD\u9988\u3002

    exception

    IllegalStateException

    ModuleContextThemeWrapper already loaded

    \u5F02\u5E38\u539F\u56E0

    \u5728 Context \u4E2D\u4F7F\u7528 applyModuleTheme \u65B9\u6CD5\u65F6\u91CD\u590D\u8FDB\u884C\u8C03\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D\u7684 Context \u5BF9\u8C61
     context.applyModuleTheme(R.style.Theme_AppCompat).applyModuleTheme(R.style.Theme_AppCompat)
    -

    \u89E3\u51B3\u65B9\u6848

    \u5728 Context \u4E2D\u53EA\u80FD\u521B\u5EFA\u4E00\u6B21 ModuleContextThemeWrapper\uFF0C\u8BF7\u68C0\u67E5\u4EE3\u7801\u662F\u5426\u6709\u5FAA\u73AF\u8C03\u7528\u95EE\u9898\u3002

    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    \u5F02\u5E38\u539F\u56E0

    \u5728\u7CFB\u7EDF\u6846\u67B6 (android) \u5BBF\u4E3B\u4F7F\u7528\u4E86 DexClassFinder \u7684\u7F13\u5B58\u529F\u80FD searchClass(name = ...)\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadSystem {
    +

    \u89E3\u51B3\u65B9\u6848

    \u5728 Context \u4E2D\u53EA\u80FD\u521B\u5EFA\u4E00\u6B21 ModuleContextThemeWrapper\uFF0C\u8BF7\u68C0\u67E5\u4EE3\u7801\u662F\u5426\u6709\u5FAA\u73AF\u8C03\u7528\u95EE\u9898\u3002

    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    \u5F02\u5E38\u539F\u56E0

    \u5728\u7CFB\u7EDF\u6846\u67B6 (android) \u5BBF\u4E3B\u4F7F\u7528\u4E86 DexClassFinder \u7684\u7F13\u5B58\u529F\u80FD searchClass(name = ...)\u3002

    \u793A\u4F8B\u5982\u4E0B

    loadSystem {
         searchClass(name = "test") {
             from(...)
             // ...
         }.get()
     }
    -

    \u89E3\u51B3\u65B9\u6848

    \u7531\u4E8E\u7F13\u5B58\u4F1A\u5C06\u627E\u5230\u7684 Class \u540D\u79F0\u5B58\u5165 SharedPreferences\uFF0C\u4F46\u662F\u7CFB\u7EDF\u6846\u67B6\u4E0D\u5B58\u5728 data \u76EE\u5F55\uFF0C\u6240\u4EE5\u8BF7\u4E0D\u8981\u5728\u7CFB\u7EDF\u6846\u67B6\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

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

    \u89E3\u51B3\u65B9\u6848

    \u7531\u4E8E\u7F13\u5B58\u4F1A\u5C06\u627E\u5230\u7684 Class \u540D\u79F0\u5B58\u5165 SharedPreferences\uFF0C\u4F46\u662F\u7CFB\u7EDF\u6846\u67B6\u4E0D\u5B58\u5728 data \u76EE\u5F55\uFF0C\u6240\u4EE5\u8BF7\u4E0D\u8981\u5728\u7CFB\u7EDF\u6846\u67B6\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

    `,542),p=[l];function c(i,t){return n(),e("div",null,p)}const d=s(o,[["render",c],["__file","api-exception.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-exception.html.72ebad13.js b/docs/assets/api-exception.html.7f0c42da.js similarity index 79% rename from docs/assets/api-exception.html.72ebad13.js rename to docs/assets/api-exception.html.7f0c42da.js index b675f687..add44ebc 100644 --- a/docs/assets/api-exception.html.72ebad13.js +++ b/docs/assets/api-exception.html.7f0c42da.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-72c12b7d","path":"/en/config/api-exception.html","title":"API Exception Handling","lang":"en-US","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"Non-Blocking Exceptions","slug":"non-blocking-exceptions","link":"#non-blocking-exceptions","children":[]},{"level":2,"title":"Blocking Exceptions","slug":"blocking-exceptions","link":"#blocking-exceptions","children":[]}],"git":{"updatedTime":1664013512000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/config/api-exception.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-72c12b7d","path":"/en/config/api-exception.html","title":"API Exception Handling","lang":"en-US","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"Non-Blocking Exceptions","slug":"non-blocking-exceptions","link":"#non-blocking-exceptions","children":[]},{"level":2,"title":"Blocking Exceptions","slug":"blocking-exceptions","link":"#blocking-exceptions","children":[]}],"git":{"updatedTime":1664837213000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"en/config/api-exception.md"}');export{e as data}; diff --git a/docs/assets/api-exception.html.9ef206a4.js b/docs/assets/api-exception.html.cd46328b.js similarity index 97% rename from docs/assets/api-exception.html.9ef206a4.js rename to docs/assets/api-exception.html.cd46328b.js index cf3c6a6d..20e0ea08 100644 --- a/docs/assets/api-exception.html.9ef206a4.js +++ b/docs/assets/api-exception.html.cd46328b.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.js";const o={},l=a(`

    API Exception Handling

    Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiHookAPI and how to deal with them.

    The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

    Non-Blocking Exceptions

    These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

    exception

    loggerE

    Could not found XposedBridge in current space! Aborted

    Abnormal

    Your Hook Framework is not working or XposedBridge has not been successfully loaded.

    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

    class HookEntry : IYukiHookXposedInit {
    +import{_ as s,o as e,c as n,a}from"./app.99fcdd51.js";const o={},l=a(`

    API Exception Handling

    Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiHookAPI and how to deal with them.

    The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

    Non-Blocking Exceptions

    These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

    exception

    loggerE

    Could not found XposedBridge in current space! Aborted

    Abnormal

    Your Hook Framework is not working or XposedBridge has not been successfully loaded.

    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

    class HookEntry : IYukiHookXposedInit {
     
         override fun onInit() {
             // \u2757 Wrong usage
    @@ -230,7 +230,15 @@ import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.js";const o={},l=a(`

    modulePrefs.getBoolean("test_data") } } -

    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    Abnormal

    An unsupported storage type was passed in when using the get or put methods of YukiHookModulePrefs or the wait or put methods of YukiHookDataChannel.

    Solution

    The supported types of YukiHookModulePrefs are only String, Set<String>, Int, Float, Long, Boolean, please pass in the supported types.

    The supported types of YukiHookDataChannel are the types restricted by Intent.putExtra, please pass in the supported types.

    exception

    IllegalStateException

    YukiHookDataChannel cannot be used in zygote

    Abnormal

    YukiHookDataChannel is used in loadZygote.

    The following example

    loadZygote {
    +
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    Abnormal

    An unsupported storage type was passed in when using the get or put methods of YukiHookModulePrefs or the wait or put methods of YukiHookDataChannel.

    Solution

    The supported types of YukiHookModulePrefs are only String, Set<String>, Int, Float, Long, Boolean, please pass in the supported types.

    The supported types of YukiHookDataChannel are the types restricted by Intent.putExtra, please pass in the supported types.

    IllegalStateException

    loadApp/loadZygote/loadSystem/withProcess method need a "NAME" param

    Abnormal

    The variable array variable parameter that needs to be filled is missing in loadApp, loadZygote, loadSystem, withProcess.

    The following example

    // <Scenario 1>
    +loadApp()
    +// <Scenario 2>
    +loadZygote()
    +// <Scenario 3>
    +loadSystem()
    +// <Scenario 4>
    +withProcess()
    +

    Solution

    Please see the usage in PackageParam to use this function correctly.

    exception

    IllegalStateException

    YukiHookDataChannel cannot be used in zygote

    Abnormal

    YukiHookDataChannel is used in loadZygote.

    The following example

    loadZygote {
         // This variable is called
         dataChannel...
     }
    @@ -356,4 +364,4 @@ import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.js";const o={},l=a(`

    // ... }.get() } -

    Solution

    Since the cache will store the found Class name in SharedPreferences, but the data directory does not exist in the System Framework, so please do not use this function in the System Framework.

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

    Solution

    Since the cache will store the found Class name in SharedPreferences, but the data directory does not exist in the System Framework, so please do not use this function in the System Framework.

    `,568),t=[l];function i(p,c){return e(),n("div",null,t)}const d=s(o,[["render",i],["__file","api-exception.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-exception.html.ac2a5859.js b/docs/assets/api-exception.html.f33af1c3.js similarity index 81% rename from docs/assets/api-exception.html.ac2a5859.js rename to docs/assets/api-exception.html.f33af1c3.js index 8125853b..54e880ba 100644 --- a/docs/assets/api-exception.html.ac2a5859.js +++ b/docs/assets/api-exception.html.f33af1c3.js @@ -1 +1 @@ -const e=JSON.parse('{"key":"v-5b43296c","path":"/zh-cn/config/api-exception.html","title":"API \u5F02\u5E38\u5904\u7406","lang":"zh-CN","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"\u975E\u963B\u65AD\u5F02\u5E38","slug":"\u975E\u963B\u65AD\u5F02\u5E38","link":"#\u975E\u963B\u65AD\u5F02\u5E38","children":[]},{"level":2,"title":"\u963B\u65AD\u5F02\u5E38","slug":"\u963B\u65AD\u5F02\u5E38","link":"#\u963B\u65AD\u5F02\u5E38","children":[]}],"git":{"updatedTime":1664013437000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"zh-cn/config/api-exception.md"}');export{e as data}; +const e=JSON.parse('{"key":"v-5b43296c","path":"/zh-cn/config/api-exception.html","title":"API \u5F02\u5E38\u5904\u7406","lang":"zh-CN","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"\u975E\u963B\u65AD\u5F02\u5E38","slug":"\u975E\u963B\u65AD\u5F02\u5E38","link":"#\u975E\u963B\u65AD\u5F02\u5E38","children":[]},{"level":2,"title":"\u963B\u65AD\u5F02\u5E38","slug":"\u963B\u65AD\u5F02\u5E38","link":"#\u963B\u65AD\u5F02\u5E38","children":[]}],"git":{"updatedTime":1664837213000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":8}]},"filePathRelative":"zh-cn/config/api-exception.md"}');export{e as data}; diff --git a/docs/assets/api-using.html.f6be396a.js b/docs/assets/api-using.html.52d29a3e.js similarity index 99% rename from docs/assets/api-using.html.f6be396a.js rename to docs/assets/api-using.html.52d29a3e.js index 8e70eefa..ca649b17 100644 --- a/docs/assets/api-using.html.f6be396a.js +++ b/docs/assets/api-using.html.52d29a3e.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.b0c3bf74.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.99fcdd51.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/api-using.html.1c4a5d47.js b/docs/assets/api-using.html.61ecfdd2.js
    similarity index 99%
    rename from docs/assets/api-using.html.1c4a5d47.js
    rename to docs/assets/api-using.html.61ecfdd2.js
    index a03a74ab..f4aa2c5a 100644
    --- a/docs/assets/api-using.html.1c4a5d47.js
    +++ b/docs/assets/api-using.html.61ecfdd2.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.b0c3bf74.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.99fcdd51.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/app.99fcdd51.js b/docs/assets/app.99fcdd51.js
    new file mode 100644
    index 00000000..393a2e6b
    --- /dev/null
    +++ b/docs/assets/app.99fcdd51.js
    @@ -0,0 +1,10 @@
    +const Zr="modulepreload",Jr=function(e){return"/YukiHookAPI/"+e},Xo={},d=function(t,l,i){return!l||l.length===0?t():Promise.all(l.map(o=>{if(o=Jr(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":Zr,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.1b76ac9e.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>d(()=>import("./index.html.872aa7a1.js"),[]).then(({data:e})=>e),"v-c0c85b84":()=>d(()=>import("./index.html.6cc32291.js"),[]).then(({data:e})=>e),"v-7a15fe3b":()=>d(()=>import("./about.html.7638d3a2.js"),[]).then(({data:e})=>e),"v-3f851d14":()=>d(()=>import("./changelog.html.88d98aec.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.94bd226b.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-9cfea7fc":()=>d(()=>import("./api-example.html.47c311e0.js"),[]).then(({data:e})=>e),"v-72c12b7d":()=>d(()=>import("./api-exception.html.7f0c42da.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.cd65195d.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.a036bda1.js"),[]).then(({data:e})=>e),"v-efb45d4c":()=>d(()=>import("./home.html.f6f658d0.js"),[]).then(({data:e})=>e),"v-277b35ca":()=>d(()=>import("./knowledge.html.7104405e.js"),[]).then(({data:e})=>e),"v-77d752a2":()=>d(()=>import("./move-to-new-api.html.78f39fa5.js"),[]).then(({data:e})=>e),"v-72889797":()=>d(()=>import("./quick-start.html.e309979a.js"),[]).then(({data:e})=>e),"v-55c11626":()=>d(()=>import("./yukihookapi-projectbuilder.html.ed4fa356.js"),[]).then(({data:e})=>e),"v-41967128":()=>d(()=>import("./about.html.c0115524.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>d(()=>import("./changelog.html.858036fa.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.2cf8d6de.js"),[]).then(({data:e})=>e),"v-c8deafb2":()=>d(()=>import("./home.html.cad3998c.js"),[]).then(({data:e})=>e),"v-c6114c9e":()=>d(()=>import("./api-example.html.f5361b1b.js"),[]).then(({data:e})=>e),"v-5b43296c":()=>d(()=>import("./api-exception.html.f33af1c3.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.557dcdf1.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.13ac887a.js"),[]).then(({data:e})=>e),"v-6a609e09":()=>d(()=>import("./home.html.4d8cac8a.js"),[]).then(({data:e})=>e),"v-b4f1a468":()=>d(()=>import("./knowledge.html.1352f5de.js"),[]).then(({data:e})=>e),"v-c0d5dada":()=>d(()=>import("./move-to-new-api.html.508c5312.js"),[]).then(({data:e})=>e),"v-24840ff0":()=>d(()=>import("./quick-start.html.eacb83f2.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.412bbdd6.js"),[]).then(({data:e})=>e),"v-33c1dc26":()=>d(()=>import("./logger.html.f841b55d.js"),[]).then(({data:e})=>e),"v-581ddb9c":()=>d(()=>import("./reflection.html.ff24950f.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.96712a39.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.c35a7041.js"),[]).then(({data:e})=>e),"v-6ac5be8e":()=>d(()=>import("./host-inject.html.77802245.js"),[]).then(({data:e})=>e),"v-357a8d49":()=>d(()=>import("./host-lifecycle.html.09c0b222.js"),[]).then(({data:e})=>e),"v-1f0f591e":()=>d(()=>import("./logger.html.c841577b.js"),[]).then(({data:e})=>e),"v-001858e3":()=>d(()=>import("./reflection.html.2e612549.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.b798a8f8.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.5fd9a913.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.77b2a461.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.476693ca.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.7b666428.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.bd237fa4.js"),[]).then(({data:e})=>e),"v-71147891":()=>d(()=>import("./YukiMemberHookCreator.html.d3b181da.js"),[]).then(({data:e})=>e),"v-5ed1ceee":()=>d(()=>import("./YukiResourcesHookCreator.html.8aaa9934.js"),[]).then(({data:e})=>e),"v-e288ce96":()=>d(()=>import("./YukiBaseHooker.html.99eec744.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.7c031771.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.61db5860.js"),[]).then(({data:e})=>e),"v-36aec5ad":()=>d(()=>import("./LoggerFactory.html.5acb1c04.js"),[]).then(({data:e})=>e),"v-30f3ba1e":()=>d(()=>import("./InjectYukiHookWithXposed.html.cf9b500d.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.b19d4ad2.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.5e695f66.js"),[]).then(({data:e})=>e),"v-6e47300f":()=>d(()=>import("./CurrentClass.html.641fcd58.js"),[]).then(({data:e})=>e),"v-69c1c226":()=>d(()=>import("./GenericClass.html.3a0e1ac6.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.7c81aa10.js"),[]).then(({data:e})=>e),"v-3ac40680":()=>d(()=>import("./YukiMemberHookCreator.html.37dcaec4.js"),[]).then(({data:e})=>e),"v-5e81af42":()=>d(()=>import("./YukiResourcesHookCreator.html.46168b72.js"),[]).then(({data:e})=>e),"v-516df326":()=>d(()=>import("./YukiBaseHooker.html.b68236f9.js"),[]).then(({data:e})=>e),"v-213d88b3":()=>d(()=>import("./ReflectionFactory.html.a7379f4b.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.64f654a6.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.b8bfff32.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.f98d02d2.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.9385a8d2.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.5af05d7d.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.a3936b7c.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.7da3eef4.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.d4c9dbd1.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.6f5cc6e1.js"),[]).then(({data:e})=>e),"v-003862c2":()=>d(()=>import("./YukiHookModulePrefs.html.e0f278fe.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.0026a7b8.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bfb4e259.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.612b6202.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.550d3346.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.3b0eec14.js"),[]).then(({data:e})=>e),"v-5858709e":()=>d(()=>import("./YukiHookModulePrefs.html.5eb62ec3.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.0c13dc47.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.4410e26c.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.97f89f93.js"),[]).then(({data:e})=>e),"v-0f1e3594":()=>d(()=>import("./YukiModuleResources.html.e5c5fb30.js"),[]).then(({data:e})=>e),"v-35faec91":()=>d(()=>import("./YukiResForwarder.html.4e23df75.js"),[]).then(({data:e})=>e),"v-2c04b82a":()=>d(()=>import("./YukiResources.html.afb6fb92.js"),[]).then(({data:e})=>e),"v-19e7277e":()=>d(()=>import("./YukiXposedEvent.html.560fa41c.js"),[]).then(({data:e})=>e),"v-2f64a2d4":()=>d(()=>import("./ChannelData.html.f8f818f6.js"),[]).then(({data:e})=>e),"v-2d4e0da6":()=>d(()=>import("./ModuleClassLoader.html.2ddf88b6.js"),[]).then(({data:e})=>e),"v-58ed8298":()=>d(()=>import("./PrefsData.html.dfd7c23c.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.7de4f560.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.25713065.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.03ce70ab.js"),[]).then(({data:e})=>e),"v-3d943532":()=>d(()=>import("./YukiModuleResources.html.d8e27a7f.js"),[]).then(({data:e})=>e),"v-526c4200":()=>d(()=>import("./YukiResForwarder.html.0dadd8db.js"),[]).then(({data:e})=>e),"v-68541dca":()=>d(()=>import("./YukiResources.html.7b0a4824.js"),[]).then(({data:e})=>e),"v-0a4de82f":()=>d(()=>import("./YukiXposedEvent.html.a93ee4ef.js"),[]).then(({data:e})=>e),"v-493d37f6":()=>d(()=>import("./ChannelData.html.194718a1.js"),[]).then(({data:e})=>e),"v-4b468415":()=>d(()=>import("./ModuleClassLoader.html.0388bffd.js"),[]).then(({data:e})=>e),"v-d99f7f36":()=>d(()=>import("./PrefsData.html.d3cf97f9.js"),[]).then(({data:e})=>e),"v-53bcae06":()=>d(()=>import("./ModulePreferenceFragment.html.0c7dadc7.js"),[]).then(({data:e})=>e),"v-52995ef7":()=>d(()=>import("./CountRules.html.2d5ab94d.js"),[]).then(({data:e})=>e),"v-8d5ce71a":()=>d(()=>import("./ModifierRules.html.c36dff17.js"),[]).then(({data:e})=>e),"v-f5b1ffb2":()=>d(()=>import("./NameRules.html.00ac96fb.js"),[]).then(({data:e})=>e),"v-08b70f7f":()=>d(()=>import("./ConstructorRules.html.d62bae6c.js"),[]).then(({data:e})=>e),"v-21f64ebf":()=>d(()=>import("./FieldRules.html.9b04521f.js"),[]).then(({data:e})=>e),"v-77f11cf9":()=>d(()=>import("./MemberRules.html.a071b3c6.js"),[]).then(({data:e})=>e),"v-64827680":()=>d(()=>import("./MethodRules.html.c10f9770.js"),[]).then(({data:e})=>e),"v-2d5d16db":()=>d(()=>import("./ModuleAppActivity.html.90d3c4e6.js"),[]).then(({data:e})=>e),"v-cadbe48e":()=>d(()=>import("./ModuleAppCompatActivity.html.a20d9206.js"),[]).then(({data:e})=>e),"v-78731c50":()=>d(()=>import("./ModuleContextThemeWrapper.html.0879426b.js"),[]).then(({data:e})=>e),"v-1b2ad030":()=>d(()=>import("./CountRules.html.2639d392.js"),[]).then(({data:e})=>e),"v-547a3c3c":()=>d(()=>import("./ModifierRules.html.f7582dc2.js"),[]).then(({data:e})=>e),"v-58c26516":()=>d(()=>import("./NameRules.html.47e512e4.js"),[]).then(({data:e})=>e),"v-a42f54a4":()=>d(()=>import("./ConstructorRules.html.f8d7dd83.js"),[]).then(({data:e})=>e),"v-3e67a42e":()=>d(()=>import("./FieldRules.html.6858f0d6.js"),[]).then(({data:e})=>e),"v-2cab152c":()=>d(()=>import("./MemberRules.html.b3e5d297.js"),[]).then(({data:e})=>e),"v-5388621e":()=>d(()=>import("./MethodRules.html.146b27be.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,Zt=_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:La: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?Lo: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 Zo(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 Jo(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?Lo: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?Lo: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:Zo,set:Jo,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:Zo,set:Jo,delete:en,clear:tn,forEach:Gl(!1,!0)},l={get(n){return Xl(this,n,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!1)},i={get(n){return Xl(this,n,!0,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(n=>{e[n]=Ql(n,!1,!1),l[n]=Ql(n,!0,!1),t[n]=Ql(n,!1,!0),i[n]=Ql(n,!0,!0)}),[e,l,t,i]}const[Os,Fs,zs,Ds]=ws();function Eo(e,t){const l=t?e?Ds:zs:e?Fs:Os;return(i,o,n)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?i:Reflect.get(de(l,o)&&o in i?l:i,o,n)}const Ms={get:Eo(!1,!1)},Hs={get:Eo(!1,!0)},Ss={get:Eo(!0,!1)},Ca=new WeakMap,Ra=new WeakMap,La=new WeakMap,Vs=new WeakMap;function Ns(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function js(e){return e.__v_skip||!Object.isExtensible(e)?0:Ns(cs(e))}function gl(e){return Ol(e)?e:Ro(e,!1,Ea,Ms,Ca)}function $s(e){return Ro(e,!1,Is,Hs,Ra)}function Co(e){return Ro(e,!0,Ts,Ss,La)}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 Pa(e){return sl(e)||Ol(e)}function ke(e){const t=e&&e.__v_raw;return t?ke(t):e}function Aa(e){return ni(e,"__v_skip",!0),e}const Fl=e=>Oe(e)?gl(e):e,Lo=e=>Oe(e)?Co(e):e;function Ta(e){It&&nt&&(e=ke(e),_a(e.dep||(e.dep=bo())))}function Ia(e,t){e=ke(e),e.dep&&Ki(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function ye(e){return Oa(e,!1)}function wa(e){return Oa(e,!0)}function Oa(e,t){return De(e)?e:new Ys(e,t)}class Ys{constructor(t,l){this.__v_isShallow=l,this.dep=void 0,this.__v_isRef=!0,this._rawValue=l?t:ke(t),this._value=l?t:Fl(t)}get value(){return Ta(this),this._value}set value(t){t=this.__v_isShallow?t:ke(t),wl(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Fl(t),Ia(this))}}function O(e){return De(e)?e.value:e}const Bs={get:(e,t,l)=>O(Reflect.get(e,t,l)),set:(e,t,l,i)=>{const o=e[t];return De(o)&&!De(l)?(o.value=l,!0):Reflect.set(e,t,l,i)}};function Fa(e){return sl(e)?e:new Proxy(e,Bs)}function Ei(e){const t=te(e)?new Array(e.length):{};for(const l in e)t[l]=Ws(e,l);return t}class Us{constructor(t,l,i){this._object=t,this._key=l,this._defaultValue=i,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ws(e,t,l){const i=e[t];return De(i)?i:new Us(e,t,l)}class Xs{constructor(t,l,i,o){this._setter=l,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Ia(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=i}get value(){const t=ke(this);return Ta(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function qs(e,t,l=!1){let i,o;const n=ae(e);return n?(i=e,o=rt):(i=e.get,o=e.set),new Xs(i,o,n||!o,l)}function wt(e,t,l,i){let o;try{o=i?e(...i):e()}catch(n){Nl(n,t,l)}return o}function lt(e,t,l,i){if(ae(e)){const n=wt(e,t,l,i);return n&&pa(n)&&n.catch(a=>{Nl(a,t,l)}),n}const o=[];for(let n=0;n>>1;zl(qe[i])ft&&qe.splice(t,1)}function Ma(e,t,l,i){te(e)?l.push(...e):(!t||!t.includes(e,e.allowRecurse?i+1:i))&&l.push(e),Da()}function Zs(e){Ma(e,El,Rl,il)}function Js(e){Ma(e,Lt,Ll,ol)}function Ci(e,t=null){if(Rl.length){for(Zi=t,El=[...new Set(Rl)],Rl.length=0,il=0;ilzl(l)-zl(i)),ol=0;ole.id==null?1/0:e.id;function Ha(e){Qi=!1,ai=!0,Ci(e),qe.sort((l,i)=>zl(l)-zl(i));const t=rt;try{for(ft=0;ftg.trim())),p&&(o=l.map(ga))}let r,s=i[r=Oi(t)]||i[r=Oi(ut(t))];!s&&n&&(s=i[r=Oi(Zt(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,Zt(t))||de(e,t))}let Ve=null,Va=null;function si(e){const t=Ve;return Ve=e,Va=e&&e.type.__scopeId||null,t}function He(e,t=Ve,l){if(!t||e._n)return e;const i=(...o)=>{i._d&&pn(-1);const n=si(t),a=e(...o);return si(n),i._d&&pn(1),a};return i._n=!0,i._c=!0,i._d=!0,i}function zi(e){const{type:t,vnode:l,proxy:i,withProxy:o,props:n,propsOptions:[a],slots:r,attrs:s,emit:c,render:h,renderCache:p,data:m,setupState:g,ctx:x,inheritAttrs:L}=e;let E,k;const b=si(e);try{if(l.shapeFlag&4){const H=o||i;E=ot(h.call(H,H,p,n,g,m,x)),k=s}else{const H=t;E=ot(H.length>1?H(n,{attrs:s,slots:r,emit:c}):H(n,null)),k=t.props?s:tc(s)}}catch(H){Al.length=0,Nl(H,e,1),E=oe(Ge)}let P=E;if(k&&L!==!1){const H=Object.keys(k),{shapeFlag:U}=P;H.length&&U&7&&(a&&H.some(fo)&&(k=lc(k,a)),P=Dt(P,k))}return l.dirs&&(P=Dt(P),P.dirs=P.dirs?P.dirs.concat(l.dirs):l.dirs),l.transition&&(P.transition=l.transition),E=P,si(b),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):Js(e)}function Gt(e,t){if(Fe){let l=Fe.provides;const i=Fe.parent&&Fe.parent.provides;i===l&&(l=Fe.provides=Object.create(i)),l[e]=t}}function Me(e,t,l=!1){const i=Fe||Ve;if(i){const o=i.parent==null?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return l&&ae(t)?t.call(i.proxy):t}}const on={};function dt(e,t,l){return ja(e,t,l)}function ja(e,t,{immediate:l,deep:i,flush:o,onTrack:n,onTrigger:a}=Ce){const r=Fe;let s,c=!1,h=!1;if(De(e)?(s=()=>e.value,c=Gi(e)):sl(e)?(s=()=>e,i=!0):te(e)?(h=!0,c=e.some(k=>sl(k)||Gi(k)),s=()=>e.map(k=>{if(De(k))return k.value;if(sl(k))return qt(k);if(ae(k))return wt(k,r,2)})):ae(e)?t?s=()=>wt(e,r,2):s=()=>{if(!(r&&r.isUnmounted))return p&&p(),lt(e,r,3,[m])}:s=rt,t&&i){const k=s;s=()=>qt(k())}let p,m=k=>{p=E.onStop=()=>{wt(k,r,4)}};if(dl)return m=rt,t?l&<(t,r,3,[s(),h?[]:void 0,m]):s(),rt;let g=h?[]:on;const x=()=>{if(!!E.active)if(t){const k=E.run();(i||c||(h?k.some((b,P)=>wl(b,g[P])):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 L;o==="sync"?L=x:o==="post"?L=()=>Be(x,r&&r.suspense):L=()=>Zs(x);const E=new _o(s,L);return t?l?x():g=E.run():o==="post"?Be(E.run.bind(E),r&&r.suspense):E.run(),()=>{E.stop(),r&&r.scope&&go(r.scope.effects,E)}}function ac(e,t,l){const i=this.proxy,o=be(e)?e.includes(".")?$a(i,e):()=>i[e]:e.bind(i,i);let n;ae(t)?n=t:(n=t.handler,l=t);const a=Fe;hl(this);const r=ja(o,n.bind(i),l);return a?hl(a):Qt(),r}function $a(e,t){const l=t.split(".");return()=>{let i=e;for(let o=0;o{qt(l,t)});else if(fa(e))for(const l in e)qt(e[l],t);return e}function rc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ze(()=>{e.isMounted=!0}),Yl(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],sc={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},setup(e,{slots:t}){const l=wo(),i=rc();let o;return()=>{const n=t.default&&Ua(t.default(),!0);if(!n||!n.length)return;let a=n[0];if(n.length>1){for(const L of n)if(L.type!==Ge){a=L;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=Ji(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 L=x();o===void 0?o=L:L!==o&&(o=L,g=!0)}if(m&&m.type!==Ge&&(!Wt(c,m)||g)){const L=Ji(m,r,i,l);if(eo(m,L),s==="out-in")return i.isLeaving=!0,L.afterLeave=()=>{i.isLeaving=!1,l.update()},Di(a);s==="in-out"&&c.type!==Ge&&(L.delayLeave=(E,k,b)=>{const P=Ba(i,m);P[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=b})}return a}}},Ya=sc;function Ba(e,t){const{leavingVNodes:l}=e;let i=l.get(t.type);return i||(i=Object.create(null),l.set(t.type,i)),i}function Ji(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:L,onAppear:E,onAfterAppear:k,onAppearCancelled:b}=t,P=String(e.key),H=Ba(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const B=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&B():v.length<=1&&B()},w={mode:n,persisted:a,beforeEnter(v){let q=r;if(!l.isMounted)if(o)q=L||r;else return;v._leaveCb&&v._leaveCb(!0);const B=H[P];B&&Wt(e,B)&&B.el._leaveCb&&B.el._leaveCb(),U(q,[v])},enter(v){let q=s,B=c,G=h;if(!l.isMounted)if(o)q=E||s,B=k||c,G=b||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(B,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const B=String(e.key);if(v._enterCb&&v._enterCb(!0),l.isUnmounting)return q();U(p,[v]);let G=!1;const C=v._leaveCb=S=>{G||(G=!0,q(),S?U(x,[v]):U(g,[v]),v._leaveCb=void 0,H[B]===e&&delete H[B])};H[B]=e,m?ee(m,[v,C]):C()},clone(v){return Ji(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 _(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((L,E)=>{r(x,()=>L(p()),()=>E(x),h+1)});throw x}).then(x=>g!==s&&s?s:(x&&(x.__esModule||x[Symbol.toStringTag]==="Module")&&(x=x.default),c=x,x)))};return ue({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return c},setup(){const g=Fe;if(c)return()=>Mi(c,g);const x=b=>{s=null,Nl(b,g,13,!i)};if(a&&g.suspense||dl)return m().then(b=>()=>Mi(b,g)).catch(b=>(x(b),()=>i?oe(i,{error:b}):null));const L=ye(!1),E=ye(),k=ye(!!o);return o&&setTimeout(()=>{k.value=!1},o),n!=null&&setTimeout(()=>{if(!L.value&&!E.value){const b=new Error(`Async component timed out after ${n}ms.`);x(b),E.value=b}},n),m().then(()=>{L.value=!0,g.parent&&$l(g.parent.vnode)&&Ao(g.parent.update)}).catch(b=>{x(b),E.value=b}),()=>{if(L.value&&c)return Mi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Mi(e,{vnode:{ref:t,props:l,children:i,shapeFlag:o},parent:n}){const a=oe(e,l,i);return a.ref=t,a}const $l=e=>e.type.__isKeepAlive;function cc(e,t){Wa(e,"a",t)}function hc(e,t){Wa(e,"da",t)}function Wa(e,t,l=Fe){const i=e.__wdc||(e.__wdc=()=>{let o=l;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Li(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=Li(t,e,i,!0);Pi(()=>{go(i[t],o)},l)}function Li(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")&&Li(e,t,l),Xa=yt("bm"),Ze=yt("m"),uc=yt("bu"),pc=yt("u"),Yl=yt("bum"),Pi=yt("um"),mc=yt("sp"),fc=yt("rtg"),gc=yt("rtc");function kc(e,t=Fe){Li("ec",e,t)}function ci(e,t){const l=Ve;if(l===null)return e;const i=Ti(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===Le&&!Ka(t.children)):!0)?e:null}const to=e=>e?rr(e)?Ti(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=()=>Ao(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:L,deactivated:E,beforeDestroy:k,beforeUnmount:b,destroyed:P,unmounted:H,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:B,inheritAttrs:G,components:C,directives:S,filters:F}=t;if(c&&xc(c,i,null,e.appContext.config.unwrapInjectedRef),a)for(const le in a){const se=a[le];ae(se)&&(i[le]=se.bind(l))}if(o){const le=o.call(l,l);Oe(le)&&(e.data=gl(le))}if(lo=!0,n)for(const le in n){const se=n[le],Ie=ae(se)?se.bind(l,l):ae(se.get)?se.get.bind(l,l):rt,Ne=!ae(se)&&ae(se.set)?se.set.bind(l):rt,Ue=Y({get:Ie,set:Ne});Object.defineProperty(i,le,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Je=>Ue.value=Je})}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(Ze,m),j(uc,g),j(pc,x),j(cc,L),j(hc,E),j(kc,v),j(gc,ee),j(fc,w),j(Yl,b),j(Pi,H),j(mc,q),te(B))if(B.length){const le=e.exposed||(e.exposed={});B.forEach(se=>{Object.defineProperty(le,se,{get:()=>l[se],set:Ie=>l[se]=Ie})})}else e.exposed||(e.exposed={});U&&e.render===rt&&(e.render=U),G!=null&&(e.inheritAttrs=G),C&&(e.components=C),S&&(e.directives=S)}function xc(e,t,l=rt,i=!1){te(e)&&(e=io(e));for(const o in e){const n=e[o];let a;Oe(n)?"default"in n?a=Me(n.from||o,n.default,!0):a=Me(n.from||o):a=Me(n),De(a)&&i?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function rn(e,t,l){lt(te(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,l)}function Ga(e,t,l,i){const o=i.includes(".")?$a(l,i):()=>l[i];if(be(e)){const n=t[e];ae(n)&&dt(o,n)}else if(ae(e))dt(o,e.bind(l));else if(Oe(e))if(te(e))e.forEach(n=>Ga(n,t,l,i));else{const n=ae(e.handler)?e.handler.bind(l):t[e.handler];ae(n)&&dt(o,n,e)}}function Qa(e){const t=e.type,{mixins:l,extends:i}=t,{mixins:o,optionsCache:n,config:{optionMergeStrategies:a}}=e.appContext,r=n.get(t);let s;return r?s=r:!o.length&&!l&&!i?s=t:(s={},o.length&&o.forEach(c=>di(s,c,a,!0)),di(s,t,a)),n.set(t,s),s}function di(e,t,l,i=!1){const{mixins:o,extends:n}=t;n&&di(e,n,l,!0),o&&o.forEach(a=>di(e,a,l,!0));for(const a in t)if(!(i&&a==="expose")){const r=Ec[a]||l&&l[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Ec={data:sn,props:Yt,emits:Yt,methods:Yt,computed:Yt,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:Yt,directives:Yt,watch:Rc,provide:sn,inject:Cc};function sn(e,t){return t?e?function(){return Se(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Cc(e,t){return Yt(io(e),io(t))}function io(e){if(te(e)){const t={};for(let l=0;l0)&&!(a&16)){if(a&8){const h=e.vnode.dynamicProps;for(let p=0;p{s=!0;const[m,g]=Ja(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]=L<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",To=e=>te(e)?e.map(ot):[ot(e)],Ac=(e,t,l)=>{if(t._n)return t;const i=He((...o)=>To(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]=Ac(o,n,i);else if(n!=null){const a=To(n);t[o]=()=>a}}},lr=(e,t)=>{const l=To(t);e.slots.default=()=>l},Tc=(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,Ai,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,Ti(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?Ti(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 L=m?h[s]:s.value;o?te(L)&&go(L,n):te(L)?L.includes(n)||L.push(n):m?(h[s]=[n],de(p,s)&&(p[s]=h[s])):(s.value=[n],e.k&&(h[e.k]=s.value))}else m?(h[s]=a,de(p,s)&&(p[s]=a)):g&&(s.value=a,e.k&&(h[e.k]=a))};a?(x.id=-1,Be(x,l)):x()}}}let Et=!1;const Zl=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Jl=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,b)=>{if(!b.hasChildNodes()){l(null,k,b),ri(),b._vnode=k;return}Et=!1,p(b.firstChild,k,null,null,null),ri(),b._vnode=k,Et&&console.error("Hydration completed but contains mismatches.")},p=(k,b,P,H,U,ee=!1)=>{const w=Jl(k)&&k.data==="[",v=()=>L(k,b,P,H,U,w),{type:q,ref:B,shapeFlag:G,patchFlag:C}=b,S=k.nodeType;b.el=k,C===-2&&(ee=!1,b.dynamicChildren=null);let F=null;switch(q){case Dl:S!==3?b.children===""?(s(b.el=o(""),a(k),k),F=k):F=v():(k.data!==b.children&&(Et=!0,k.data=b.children),F=n(k));break;case Ge:S!==8||w?F=v():F=n(k);break;case Pl:if(S!==1&&S!==3)F=v();else{F=k;const re=!b.children.length;for(let j=0;j{ee=ee||!!b.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:B,dirs:G}=b,C=w==="input"&&G||w==="option";if(C||q!==-1){if(G&&ht(b,null,P,"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,P);else v.onClick&&i(k,"onClick",null,v.onClick,!1,void 0,P);let S;if((S=v&&v.onVnodeBeforeMount)&&tt(S,P,b),G&&ht(b,null,P,"beforeMount"),((S=v&&v.onVnodeMounted)||G)&&Na(()=>{S&&tt(S,P,b),G&&ht(b,null,P,"mounted")},H),B&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,b,k,P,H,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else B&8&&k.textContent!==b.children&&(Et=!0,k.textContent=b.children)}return k.nextSibling},g=(k,b,P,H,U,ee,w)=>{w=w||!!b.dynamicChildren;const v=b.children,q=v.length;for(let B=0;B{const{slotScopeIds:w}=b;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),b,v,P,H,U,ee);return q&&Jl(q)&&q.data==="]"?n(b.anchor=q):(Et=!0,s(b.anchor=c("]"),v,q),q)},L=(k,b,P,H,U,ee)=>{if(Et=!0,b.el=null,ee){const q=E(k);for(;;){const B=n(k);if(B&&B!==q)r(B);else break}}const w=n(k),v=a(k);return r(k),l(null,b,v,w,P,H,Zl(v),U),w},E=k=>{let b=0;for(;k;)if(k=n(k),k&&Jl(k)&&(k.data==="["&&b++,k.data==="]")){if(b===0)return n(k);b--}return k};return[h,p]}const Be=Na;function zc(e){return Dc(e,Fc)}function Dc(e,t){const l=us();l.__VUE__=!0;const{insert:i,remove:o,patchProp:n,createElement:a,createText:r,createComment:s,setText:c,setElementText:h,parentNode:p,nextSibling:m,setScopeId:g=rt,cloneNode:x,insertStaticContent:L}=e,E=(u,f,y,T=null,A=null,z=null,$=!1,D=null,V=!!f.dynamicChildren)=>{if(u===f)return;u&&!Wt(u,f)&&(T=X(u),Ye(u,A,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,T);break;case Ge:b(u,f,y,T);break;case Pl:u==null&&P(f,y,T,$);break;case Le:S(u,f,y,T,A,z,$,D,V);break;default:K&1?ee(u,f,y,T,A,z,$,D,V):K&6?F(u,f,y,T,A,z,$,D,V):(K&64||K&128)&&I.process(u,f,y,T,A,z,$,D,V,_e)}Q!=null&&A&&ui(Q,u&&u.ref,z,f||u,!f)},k=(u,f,y,T)=>{if(u==null)i(f.el=r(f.children),y,T);else{const A=f.el=u.el;f.children!==u.children&&c(A,f.children)}},b=(u,f,y,T)=>{u==null?i(f.el=s(f.children||""),y,T):f.el=u.el},P=(u,f,y,T)=>{[u.el,u.anchor]=L(u.children,f,y,T,u.el,u.anchor)},H=({el:u,anchor:f},y,T)=>{let A;for(;u&&u!==f;)A=m(u),i(u,y,T),u=A;i(f,y,T)},U=({el:u,anchor:f})=>{let y;for(;u&&u!==f;)y=m(u),o(u),u=y;o(f)},ee=(u,f,y,T,A,z,$,D,V)=>{$=$||f.type==="svg",u==null?w(f,y,T,A,z,$,D,V):B(u,f,A,z,$,D,V)},w=(u,f,y,T,A,z,$,D)=>{let V,I;const{type:Q,props:K,shapeFlag:Z,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),Z&8?h(V,u.children):Z&16&&q(u.children,V,null,T,A,z&&Q!=="foreignObject",$,D),xe&&ht(u,null,T,"created"),K){for(const Pe in K)Pe!=="value"&&!Cl(Pe)&&n(V,Pe,null,K[Pe],z,u.children,T,A,M);"value"in K&&n(V,"value",null,K.value),(I=K.onVnodeBeforeMount)&&tt(I,T,u)}v(V,u,u.scopeId,$,T)}xe&&ht(u,null,T,"beforeMount");const Ee=(!A||A&&!A.pendingBranch)&&ne&&!ne.persisted;Ee&&ne.beforeEnter(V),i(V,f,y),((I=K&&K.onVnodeMounted)||Ee||xe)&&Be(()=>{I&&tt(I,T,u),Ee&&ne.enter(V),xe&&ht(u,null,T,"mounted")},A)},v=(u,f,y,T,A)=>{if(y&&g(u,y),T)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,Z=f.props||Ce;let ne;y&&Nt(y,!1),(ne=Z.onVnodeBeforeUpdate)&&tt(ne,y,f,u),Q&&ht(f,u,y,"beforeUpdate"),y&&Nt(y,!0);const pe=A&&f.type!=="foreignObject";if(I?G(u.dynamicChildren,I,D,y,T,pe,z):$||Ie(u,f,D,null,y,T,pe,z,!1),V>0){if(V&16)C(D,f,K,Z,y,T,A);else if(V&2&&K.class!==Z.class&&n(D,"class",null,Z.class,A),V&4&&n(D,"style",K.style,Z.style,A),V&8){const xe=f.dynamicProps;for(let Ee=0;Ee{ne&&tt(ne,y,f,u),Q&&ht(f,u,y,"updated")},T)},G=(u,f,y,T,A,z,$)=>{for(let D=0;D{if(y!==T){for(const D in T){if(Cl(D))continue;const V=T[D],I=y[D];V!==I&&D!=="value"&&n(u,D,I,V,$,f.children,A,z,M)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in T)&&n(u,D,y[D],null,$,f.children,A,z,M);"value"in T&&n(u,"value",y.value,T.value)}},S=(u,f,y,T,A,z,$,D,V)=>{const I=f.el=u?u.el:r(""),Q=f.anchor=u?u.anchor:r("");let{patchFlag:K,dynamicChildren:Z,slotScopeIds:ne}=f;ne&&(D=D?D.concat(ne):ne),u==null?(i(I,y,T),i(Q,y,T),q(f.children,y,Q,A,z,$,D,V)):K>0&&K&64&&Z&&u.dynamicChildren?(G(u.dynamicChildren,Z,y,A,z,$,D),(f.key!=null||A&&f===A.subTree)&&or(u,f,!0)):Ie(u,f,y,Q,A,z,$,D,V)},F=(u,f,y,T,A,z,$,D,V)=>{f.slotScopeIds=D,u==null?f.shapeFlag&512?A.ctx.activate(f,y,T,$,V):re(f,y,T,A,z,$,V):j(u,f,V)},re=(u,f,y,T,A,z,$)=>{const D=u.component=Bc(u,T,A);if($l(u)&&(D.ctx.renderer=_e),Uc(D),D.asyncDep){if(A&&A.registerDep(D,le),!u.el){const V=D.subTree=oe(Ge);b(null,V,f,y)}return}le(D,u,f,y,A,z,$)},j=(u,f,y)=>{const T=f.component=u.component;if(ic(u,f,y))if(T.asyncDep&&!T.asyncResolved){se(T,f,y);return}else T.next=f,Qs(T.update),T.update();else f.el=u.el,T.vnode=f},le=(u,f,y,T,A,z,$)=>{const D=()=>{if(u.isMounted){let{next:Q,bu:K,u:Z,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 Pe=zi(u),it=u.subTree;u.subTree=Pe,E(it,Pe,p(it.el),X(it),u,A,z),Q.el=Pe.el,xe===null&&oc(u,Pe.el),Z&&Be(Z,A),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>tt(Ee,ne,Q,pe),A)}else{let Q;const{el:K,props:Z}=f,{bm:ne,m:pe,parent:xe}=u,Ee=cl(f);if(Nt(u,!1),ne&&Fi(ne),!Ee&&(Q=Z&&Z.onVnodeBeforeMount)&&tt(Q,xe,f),Nt(u,!0),K&&ie){const Pe=()=>{u.subTree=zi(u),ie(K,u.subTree,u,A,null)};Ee?f.type.__asyncLoader().then(()=>!u.isUnmounted&&Pe()):Pe()}else{const Pe=u.subTree=zi(u);E(null,Pe,y,T,u,A,z),f.el=Pe.el}if(pe&&Be(pe,A),!Ee&&(Q=Z&&Z.onVnodeMounted)){const Pe=f;Be(()=>tt(Q,xe,Pe),A)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Be(u.a,A),u.isMounted=!0,f=y=T=null}},V=u.effect=new _o(D,()=>Ao(I),u.scope),I=u.update=()=>V.run();I.id=u.uid,Nt(u,!0),I()},se=(u,f,y)=>{f.component=u;const T=u.vnode.props;u.vnode=f,u.next=null,Pc(u,f.props,T,y),Ic(u,f.children,y),ml(),Ci(void 0,u.update),fl()},Ie=(u,f,y,T,A,z,$,D,V=!1)=>{const I=u&&u.children,Q=u?u.shapeFlag:0,K=f.children,{patchFlag:Z,shapeFlag:ne}=f;if(Z>0){if(Z&128){Ue(I,K,y,T,A,z,$,D,V);return}else if(Z&256){Ne(I,K,y,T,A,z,$,D,V);return}}ne&8?(Q&16&&M(I,A,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,T,A,z,$,D,V):M(I,A,z,!0):(Q&8&&h(y,""),ne&16&&q(K,y,T,A,z,$,D,V))},Ne=(u,f,y,T,A,z,$,D,V)=>{u=u||al,f=f||al;const I=u.length,Q=f.length,K=Math.min(I,Q);let Z;for(Z=0;ZQ?M(u,A,z,!0,!1,K):q(f,y,T,A,z,$,D,V,K)},Ue=(u,f,y,T,A,z,$,D,V)=>{let I=0;const Q=f.length;let K=u.length-1,Z=Q-1;for(;I<=K&&I<=Z;){const ne=u[I],pe=f[I]=V?Pt(f[I]):ot(f[I]);if(Wt(ne,pe))E(ne,pe,y,null,A,z,$,D,V);else break;I++}for(;I<=K&&I<=Z;){const ne=u[K],pe=f[Z]=V?Pt(f[Z]):ot(f[Z]);if(Wt(ne,pe))E(ne,pe,y,null,A,z,$,D,V);else break;K--,Z--}if(I>K){if(I<=Z){const ne=Z+1,pe=neZ)for(;I<=K;)Ye(u[I],A,z,!0),I++;else{const ne=I,pe=I,xe=new Map;for(I=pe;I<=Z;I++){const We=f[I]=V?Pt(f[I]):ot(f[I]);We.key!=null&&xe.set(We.key,I)}let Ee,Pe=0;const it=Z-pe+1;let el=!1,Bo=0;const kl=new Array(it);for(I=0;I=it){Ye(We,A,z,!0);continue}let ct;if(We.key!=null)ct=xe.get(We.key);else for(Ee=pe;Ee<=Z;Ee++)if(kl[Ee-pe]===0&&Wt(We,f[Ee])){ct=Ee;break}ct===void 0?Ye(We,A,z,!0):(kl[ct-pe]=I+1,ct>=Bo?Bo=ct:el=!0,E(We,f[ct],y,null,A,z,$,D,V),Pe++)}const Uo=el?Mc(kl):al;for(Ee=Uo.length-1,I=it-1;I>=0;I--){const We=pe+I,ct=f[We],Wo=We+1{const{el:z,type:$,transition:D,children:V,shapeFlag:I}=u;if(I&6){Je(u.component.subTree,f,y,T);return}if(I&128){u.suspense.move(f,y,T);return}if(I&64){$.move(u,f,y,_e);return}if($===Le){i(z,f,y);for(let K=0;KD.enter(z),A);else{const{leave:K,delayLeave:Z,afterLeave:ne}=D,pe=()=>i(z,f,y),xe=()=>{K(z,()=>{pe(),ne&&ne()})};Z?Z(z,pe,xe):xe()}else i(z,f,y)},Ye=(u,f,y,T=!1,A=!1)=>{const{type:z,props:$,ref:D,children:V,dynamicChildren:I,shapeFlag:Q,patchFlag:K,dirs:Z}=u;if(D!=null&&ui(D,null,y,u,!0),Q&256){f.ctx.deactivate(u);return}const ne=Q&1&&Z,pe=!cl(u);let xe;if(pe&&(xe=$&&$.onVnodeBeforeUnmount)&&tt(xe,f,u),Q&6)W(u.component,y,T);else{if(Q&128){u.suspense.unmount(y,T);return}ne&&ht(u,null,f,"beforeUnmount"),Q&64?u.type.remove(u,f,y,A,_e,T):I&&(z!==Le||K>0&&K&64)?M(I,f,y,!1,!0):(z===Le&&K&384||!A&&Q&16)&&M(V,f,y),T&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Be(()=>{xe&&tt(xe,f,u),ne&&ht(u,null,f,"unmounted")},y)},Vt=u=>{const{type:f,el:y,anchor:T,transition:A}=u;if(f===Le){R(y,T);return}if(f===Pl){U(u);return}const z=()=>{o(y),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(u.shapeFlag&1&&A&&!A.persisted){const{leave:$,delayLeave:D}=A,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:T,scope:A,update:z,subTree:$,um:D}=u;T&&Fi(T),A.stop(),z&&(z.active=!1,Ye($,u,f,y)),D&&Be(D,f),Be(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},M=(u,f,y,T=!1,A=!1,z=0)=>{for(let $=z;$u.shapeFlag&6?X(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el),ge=(u,f,y)=>{u==null?f._vnode&&Ye(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Ye,m:Je,r:Vt,mt:re,mc:q,pc:Ie,pbc:G,n:X,o:e};let ce,ie;return t&&([ce,ie]=t(_e)),{render:ge,hydrate:ce,createApp:Oc(ge,ce)}}function Nt({effect:e,update:t},l){e.allowRecurse=t.allowRecurse=l}function or(e,t,l=!1){const i=e.children,o=t.children;if(te(i)&&te(o))for(let n=0;n>1,e[l[r]]0&&(t[i]=l[n-1]),l[n]=i)}}for(n=l.length,a=l[n-1];n-- >0;)l[n]=a,a=t[a];return l}const Hc=e=>e.__isTeleport,Le=Symbol(void 0),Dl=Symbol(void 0),Ge=Symbol(void 0),Pl=Symbol(void 0),Al=[];let at=null;function N(e=!1){Al.push(at=e?null:[])}function Sc(){Al.pop(),at=Al[Al.length-1]||null}let Ml=1;function pn(e){Ml+=e}function nr(e){return e.dynamicChildren=Ml>0?at||al:null,Sc(),Ml>0&&at&&at.push(e),e}function J(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 Ai="__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===Le?0:1,a=!1,r=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ar(t),ref:t&&li(t),scopeId:Va,slotScopeIds:null,children:l,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:n,patchFlag:i,dynamicProps:o,dynamicChildren:null,appContext:null};return r?(Io(s,l),n&128&&e.normalize(s)):l&&(s.shapeFlag|=be(l)?8:16),Ml>0&&!a&&at&&(s.patchFlag>0||n&6)&&s.patchFlag!==32&&at.push(s),s}const oe=Vc;function Vc(e,t=null,l=null,i=0,o=null,n=!1){if((!e||e===vc)&&(e=Ge),pi(e)){const r=Dt(e,t,!0);return l&&Io(r,l),Ml>0&&!n&&at&&(r.shapeFlag&6?at[at.indexOf(e)]=r:at.push(r)),r.patchFlag|=-2,r}if(Gc(e)&&(e=e.__vccOpts),t){t=Nc(t);let{class:r,style:s}=t;r&&!be(r)&&(t.class=Ke(r)),Oe(s)&&(Pa(s)&&!te(s)&&(s=Se({},s)),t.style=Sl(s))}const a=be(e)?1:nc(e)?128:Hc(e)?64:Oe(e)?4:ae(e)?2:0;return fe(e,t,l,i,o,a,n,!0)}function Nc(e){return e?Pa(e)||Ai 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!==Le?n===-1?16:n|16:n,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Dt(e.ssContent),ssFallback:e.ssFallback&&Dt(e.ssFallback),el:e.el,anchor:e.anchor}}function Mt(e=" ",t=0){return oe(Dl,null,e,t)}function jc(e,t){const l=oe(Pl,null,e);return l.staticCount=t,l}function Te(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(Le,null,e.slice()):typeof e=="object"?Pt(e):oe(Dl,null,String(e))}function Pt(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&&!(Ai in t)?t._ctx=Ve:o===3&&Ve&&(Ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ve},l=32):(t=String(t),i&64?(l=16,t=[Mt(t)]):l=8);e.children=t,e.shapeFlag|=l}function no(...e){const t={};for(let l=0;lFe||Ve,hl=e=>{Fe=e,e.scope.on()},Qt=()=>{Fe&&Fe.scope.off(),Fe=null};function rr(e){return e.vnode.shapeFlag&4}let dl=!1;function Uc(e,t=!1){dl=t;const{props:l,children:i}=e.vnode,o=rr(e);Lc(e,l,o,t),Tc(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=Aa(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 Ti(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Fa(Aa(e.exposed)),{get(t,l){if(l in t)return t[l];if(l in hi)return hi[l](e)}}))}function Kc(e,t=!0){return ae(e)?e.displayName||e.name:e.name||t&&e.__name}function Gc(e){return ae(e)&&"__vccOpts"in e}const Y=(e,t)=>qs(e,t,dl);function he(e,t,l){const i=arguments.length;return i===2?Oe(t)&&!te(t)?pi(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(i>3?l=Array.prototype.slice.call(arguments,2):i===3&&pi(l)&&(l=[l]),oe(e,t,l))}const Qc="3.2.37",Zc="http://www.w3.org/2000/svg",Xt=typeof document<"u"?document:null,gn=Xt&&Xt.createElement("template"),Jc={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(Zc,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(Zt(i),l.replace(kn,""),"important"):e[i]=l}}const vn=["Webkit","Moz","ms"],Hi={};function lh(e,t){const l=Hi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Hi[t]=i;i=yi(i);for(let o=0;o{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const l=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(l&&Number(l[1])<=53)}return[e,t]})();let ro=0;const ah=Promise.resolve(),rh=()=>{ro=0},sh=()=>ro||(ah.then(rh),ro=cr());function ch(e,t,l,i){e.addEventListener(t,l,i)}function hh(e,t,l,i){e.removeEventListener(t,l,i)}function dh(e,t,l,i,o=null){const n=e._vei||(e._vei={}),a=n[t];if(i&&a)a.value=i;else{const[r,s]=uh(t);if(i){const c=n[t]=ph(i,o);ch(e,r,c,s)}else a&&(hh(e,r,a,s),n[t]=void 0)}}const _n=/(?:Once|Passive|Capture)$/;function uh(e){let t;if(_n.test(e)){t={};let l;for(;l=e.match(_n);)e=e.slice(0,e.length-l[0].length),t[l[0].toLowerCase()]=!0}return[Zt(e.slice(2)),t]}function ph(e,t){const l=i=>{const o=i.timeStamp||cr();(nh||o>=l.attached-1)&<(mh(i,l.value),t,5,[i])};return l.value=e,l.attached=sh(),l}function mh(e,t){if(te(t)){const l=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{l.call(e),e._stopped=!0},t.map(i=>o=>!o._stopped&&i&&i(o))}else return t}const yn=/^on[a-z]/,fh=(e,t,l,i,o=!1,n,a,r,s)=>{t==="class"?eh(e,i,o):t==="style"?th(e,l,i):Vl(t)?fo(t)||dh(e,t,l,i,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gh(e,t,i,o))?oh(e,t,i,n,a,r,s):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),ih(e,t,i,o))};function gh(e,t,l,i){return i?!!(t==="innerHTML"||t==="textContent"||t in e&&yn.test(t)&&ae(l)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||yn.test(t)&&be(l)?!1:t in e}const Ct="transition",vl="animation",Bl=(e,{slots:t})=>he(Ya,kh(e),t);Bl.displayName="Transition";const hr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Bl.props=Se({},Ya.props,hr);const jt=(e,t=[])=>{te(e)?e.forEach(l=>l(...t)):e&&e(...t)},xn=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function kh(e){const t={};for(const C in e)C in hr||(t[C]=e[C]);if(e.css===!1)return t;const{name:l="v",type:i,duration:o,enterFromClass:n=`${l}-enter-from`,enterActiveClass:a=`${l}-enter-active`,enterToClass:r=`${l}-enter-to`,appearFromClass:s=n,appearActiveClass:c=a,appearToClass:h=r,leaveFromClass:p=`${l}-leave-from`,leaveActiveClass:m=`${l}-leave-active`,leaveToClass:g=`${l}-leave-to`}=e,x=vh(o),L=x&&x[0],E=x&&x[1],{onBeforeEnter:k,onEnter:b,onEnterCancelled:P,onLeave:H,onLeaveCancelled:U,onBeforeAppear:ee=k,onAppear:w=b,onAppearCancelled:v=P}=t,q=(C,S,F)=>{$t(C,S?h:r),$t(C,S?c:a),F&&F()},B=(C,S)=>{C._isLeaving=!1,$t(C,p),$t(C,g),$t(C,m),S&&S()},G=C=>(S,F)=>{const re=C?w:b,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,L,j)})};return Se(t,{onBeforeEnter(C){jt(k,[C]),Rt(C,n),Rt(C,a)},onBeforeAppear(C){jt(ee,[C]),Rt(C,s),Rt(C,c)},onEnter:G(!1),onAppear:G(!0),onLeave(C,S){C._isLeaving=!0;const F=()=>B(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(H)||Cn(C,i,E,F))}),jt(H,[C,F])},onEnterCancelled(C){q(C,!1),jt(P,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){B(C),jt(U,[C])}})}function vh(e){if(e==null)return null;if(Oe(e))return[Si(e.enter),Si(e.leave)];{const t=Si(e);return[t,t]}}function Si(e){return ga(e)}function Rt(e,t){t.split(/\s+/).forEach(l=>l&&e.classList.add(l)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const{_vtc:l}=e;l&&(l.delete(t),l.size||(e._vtc=void 0))}function En(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let bh=0;function Cn(e,t,l,i){const o=e._endId=++bh,n=()=>{o===e._endId&&i()};if(l)return setTimeout(n,l);const{type:a,timeout:r,propCount:s}=_h(e,t);if(!a)return i();const c=a+"end";let h=0;const p=()=>{e.removeEventListener(c,m),n()},m=g=>{g.target===e&&++h>=s&&p()};setTimeout(()=>{h(l[x]||"").split(", "),o=i(Ct+"Delay"),n=i(Ct+"Duration"),a=Rn(o,n),r=i(vl+"Delay"),s=i(vl+"Duration"),c=Rn(r,s);let h=null,p=0,m=0;t===Ct?a>0&&(h=Ct,p=a,m=n.length):t===vl?c>0&&(h=vl,p=c,m=s.length):(p=Math.max(a,c),h=p>0?a>c?Ct:vl:null,m=h?h===Ct?n.length:s.length:0);const g=h===Ct&&/\b(transform|all)(,|$)/.test(l[Ct+"Property"]);return{type:h,timeout:p,propCount:m,hasTransform:g}}function Rn(e,t){for(;e.lengthLn(l)+Ln(e[i])))}function Ln(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=Zt(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},Jc);let Vi,Pn=!1;function Rh(){return Vi=Pn?Vi:zc(Ch),Pn=!0,Vi}const Lh=(...e)=>{const t=Rh().createApp(...e),{mount:l}=t;return t.mount=i=>{const o=Ph(i);if(o)return l(o,!0,o instanceof SVGElement)},t};function Ph(e){return be(e)?document.querySelector(e):e}const Ah=JSON.parse('{"base":"/YukiHookAPI/","lang":"en-US","title":"Yuki Hook API","description":"An efficient Kotlin version of the Xposed Hook API","head":[["link",{"rel":"icon","href":"/YukiHookAPI/images/logo.png"}]],"locales":{"/en/":{"lang":"en-US","description":"An efficient Kotlin version of the Xposed Hook API"},"/zh-cn/":{"lang":"zh-CN","description":"\u4E00\u4E2A\u4F7F\u7528 Kotlin \u91CD\u6784\u7684\u8F7B\u91CF\u3001\u9AD8\u6548\u3001\u7A33\u5B9A\u7684 Xposed Hook API"}}}');var Th=([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=Th(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":_(()=>d(()=>import("./index.html.e1a0a108.js"),[])),"v-2d0a870d":_(()=>d(()=>import("./index.html.2ea35cea.js"),[])),"v-c0c85b84":_(()=>d(()=>import("./index.html.0e1e0a04.js"),[])),"v-7a15fe3b":_(()=>d(()=>import("./about.html.31fb9bcd.js"),[])),"v-3f851d14":_(()=>d(()=>import("./changelog.html.f7e20a5d.js"),[])),"v-193cf592":_(()=>d(()=>import("./contacts.html.3d7caa0e.js"),[])),"v-ae7b83f2":_(()=>d(()=>import("./future.html.373b372f.js"),[])),"v-64fc7bb8":_(()=>d(()=>import("./home.html.6ee3debd.js"),[])),"v-9cfea7fc":_(()=>d(()=>import("./api-example.html.7a4a6adf.js"),[])),"v-72c12b7d":_(()=>d(()=>import("./api-exception.html.cd46328b.js"),[])),"v-793879e8":_(()=>d(()=>import("./api-using.html.52d29a3e.js"),[])),"v-29d6c1ba":_(()=>d(()=>import("./r8-proguard.html.3e207302.js"),[])),"v-24e71de7":_(()=>d(()=>import("./xposed-using.html.59211920.js"),[])),"v-7b22efaf":_(()=>d(()=>import("./example.html.27a92a09.js"),[])),"v-efb45d4c":_(()=>d(()=>import("./home.html.63ebf7b8.js"),[])),"v-277b35ca":_(()=>d(()=>import("./knowledge.html.50976213.js"),[])),"v-77d752a2":_(()=>d(()=>import("./move-to-new-api.html.45e76cd4.js"),[])),"v-72889797":_(()=>d(()=>import("./quick-start.html.b66f71d7.js"),[])),"v-55c11626":_(()=>d(()=>import("./yukihookapi-projectbuilder.html.0e3e500d.js"),[])),"v-41967128":_(()=>d(()=>import("./about.html.d844c71e.js"),[])),"v-0e6c3476":_(()=>d(()=>import("./changelog.html.379566e7.js"),[])),"v-6cf86266":_(()=>d(()=>import("./contacts.html.0c1be9b2.js"),[])),"v-3106ca14":_(()=>d(()=>import("./future.html.1187acab.js"),[])),"v-c8deafb2":_(()=>d(()=>import("./home.html.f11cb486.js"),[])),"v-c6114c9e":_(()=>d(()=>import("./api-example.html.0f0dfccf.js"),[])),"v-5b43296c":_(()=>d(()=>import("./api-exception.html.066f0dc6.js"),[])),"v-2ee67152":_(()=>d(()=>import("./api-using.html.61ecfdd2.js"),[])),"v-154d6f69":_(()=>d(()=>import("./r8-proguard.html.6013d73f.js"),[])),"v-af73b3d0":_(()=>d(()=>import("./xposed-using.html.873df271.js"),[])),"v-13b430a0":_(()=>d(()=>import("./example.html.f72f0f04.js"),[])),"v-6a609e09":_(()=>d(()=>import("./home.html.bf707b4b.js"),[])),"v-b4f1a468":_(()=>d(()=>import("./knowledge.html.7539105b.js"),[])),"v-c0d5dada":_(()=>d(()=>import("./move-to-new-api.html.99d85464.js"),[])),"v-24840ff0":_(()=>d(()=>import("./quick-start.html.1d7f6624.js"),[])),"v-a2fab4d6":_(()=>d(()=>import("./yukihookapi-projectbuilder.html.6785eea5.js"),[])),"v-12042f1f":_(()=>d(()=>import("./host-inject.html.9e3097f8.js"),[])),"v-deaff1d0":_(()=>d(()=>import("./host-lifecycle.html.fe173b3e.js"),[])),"v-33c1dc26":_(()=>d(()=>import("./logger.html.6370ce77.js"),[])),"v-581ddb9c":_(()=>d(()=>import("./reflection.html.31159190.js"),[])),"v-2e6ad66c":_(()=>d(()=>import("./xposed-channel.html.4864ff1b.js"),[])),"v-68bebbf4":_(()=>d(()=>import("./xposed-storage.html.f78666ac.js"),[])),"v-6ac5be8e":_(()=>d(()=>import("./host-inject.html.5ae0aeb9.js"),[])),"v-357a8d49":_(()=>d(()=>import("./host-lifecycle.html.ed922d2c.js"),[])),"v-1f0f591e":_(()=>d(()=>import("./logger.html.9fbe7076.js"),[])),"v-001858e3":_(()=>d(()=>import("./reflection.html.4d705ea1.js"),[])),"v-598546c6":_(()=>d(()=>import("./xposed-channel.html.e26f5994.js"),[])),"v-0d914225":_(()=>d(()=>import("./xposed-storage.html.3cad78fc.js"),[])),"v-053599a5":_(()=>d(()=>import("./YukiHookAPI.html.423ff5d5.js"),[])),"v-6931cb54":_(()=>d(()=>import("./YukiHookAPI.html.52aa5899.js"),[])),"v-818b3ca6":_(()=>d(()=>import("./InjectYukiHookWithXposed.html.7e7e596c.js"),[])),"v-b6a815c4":_(()=>d(()=>import("./CurrentClass.html.8b40838c.js"),[])),"v-0183e3fc":_(()=>d(()=>import("./GenericClass.html.81e862b7.js"),[])),"v-57506200":_(()=>d(()=>import("./HookClass.html.e17b98a3.js"),[])),"v-9af56c1a":_(()=>d(()=>import("./HookResources.html.78582f9b.js"),[])),"v-032b1710":_(()=>d(()=>import("./VariousClass.html.40fd0a28.js"),[])),"v-71147891":_(()=>d(()=>import("./YukiMemberHookCreator.html.b90d4528.js"),[])),"v-5ed1ceee":_(()=>d(()=>import("./YukiResourcesHookCreator.html.4985f81e.js"),[])),"v-e288ce96":_(()=>d(()=>import("./YukiBaseHooker.html.ade84104.js"),[])),"v-0d0fcec2":_(()=>d(()=>import("./ReflectionFactory.html.0b0fdaba.js"),[])),"v-65091354":_(()=>d(()=>import("./YukiHookFactory.html.233ed606.js"),[])),"v-36aec5ad":_(()=>d(()=>import("./LoggerFactory.html.b69954d3.js"),[])),"v-30f3ba1e":_(()=>d(()=>import("./InjectYukiHookWithXposed.html.50a0e9ff.js"),[])),"v-60cbe1b4":_(()=>d(()=>import("./HookParam.html.b72403ea.js"),[])),"v-b381a126":_(()=>d(()=>import("./PackageParam.html.f4ec4919.js"),[])),"v-6e47300f":_(()=>d(()=>import("./CurrentClass.html.7154b0ad.js"),[])),"v-69c1c226":_(()=>d(()=>import("./GenericClass.html.d5c74ff7.js"),[])),"v-735374af":_(()=>d(()=>import("./HookClass.html.8c45a8ee.js"),[])),"v-1c516d22":_(()=>d(()=>import("./HookResources.html.505eac26.js"),[])),"v-66735bfe":_(()=>d(()=>import("./VariousClass.html.26df03a1.js"),[])),"v-3ac40680":_(()=>d(()=>import("./YukiMemberHookCreator.html.148a1429.js"),[])),"v-5e81af42":_(()=>d(()=>import("./YukiResourcesHookCreator.html.0a994d9e.js"),[])),"v-516df326":_(()=>d(()=>import("./YukiBaseHooker.html.d407e53d.js"),[])),"v-213d88b3":_(()=>d(()=>import("./ReflectionFactory.html.b1a986a7.js"),[])),"v-448e9585":_(()=>d(()=>import("./YukiHookFactory.html.b68c21d1.js"),[])),"v-004a009e":_(()=>d(()=>import("./LoggerFactory.html.c27c8365.js"),[])),"v-75a9b636":_(()=>d(()=>import("./HookParam.html.0ea0d120.js"),[])),"v-100b529c":_(()=>d(()=>import("./PackageParam.html.8c9c140e.js"),[])),"v-8293d958":_(()=>d(()=>import("./ComponentTypeFactory.html.0c913ae3.js"),[])),"v-7b0abf86":_(()=>d(()=>import("./GraphicsTypeFactory.html.c87070a1.js"),[])),"v-5309e4a0":_(()=>d(()=>import("./ViewTypeFactory.html.b429be07.js"),[])),"v-a2615d0c":_(()=>d(()=>import("./DefinedTypeFactory.html.d1c53dd5.js"),[])),"v-ba01a600":_(()=>d(()=>import("./VariableTypeFactory.html.9fceba3f.js"),[])),"v-7fec5836":_(()=>d(()=>import("./ModuleApplication.html.b6666040.js"),[])),"v-7414265a":_(()=>d(()=>import("./YukiHookDataChannel.html.edaeb594.js"),[])),"v-003862c2":_(()=>d(()=>import("./YukiHookModulePrefs.html.bdd6b713.js"),[])),"v-1d680acc":_(()=>d(()=>import("./IYukiHookXposedInit.html.ceb84101.js"),[])),"v-5e874c45":_(()=>d(()=>import("./ComponentTypeFactory.html.7e04a8b3.js"),[])),"v-4ea62475":_(()=>d(()=>import("./GraphicsTypeFactory.html.7de8d5a4.js"),[])),"v-ef79cde2":_(()=>d(()=>import("./ViewTypeFactory.html.52d860fb.js"),[])),"v-5acc12ab":_(()=>d(()=>import("./DefinedTypeFactory.html.3ff07e63.js"),[])),"v-14ec8671":_(()=>d(()=>import("./VariableTypeFactory.html.b28309cb.js"),[])),"v-4709ad58":_(()=>d(()=>import("./ModuleApplication.html.0947d2e6.js"),[])),"v-632be8ee":_(()=>d(()=>import("./YukiHookDataChannel.html.3db91b76.js"),[])),"v-5858709e":_(()=>d(()=>import("./YukiHookModulePrefs.html.aad74b54.js"),[])),"v-763140ee":_(()=>d(()=>import("./IYukiHookXposedInit.html.c8afa33e.js"),[])),"v-4fca92c0":_(()=>d(()=>import("./BaseFinder.html.ad905538.js"),[])),"v-2a898c66":_(()=>d(()=>import("./DexClassFinder.html.db21690b.js"),[])),"v-a71937aa":_(()=>d(()=>import("./ConstructorFinder.html.2c738cf8.js"),[])),"v-42e0f0ab":_(()=>d(()=>import("./FieldFinder.html.9d8f7b17.js"),[])),"v-a4aa4d00":_(()=>d(()=>import("./MethodFinder.html.417d29b0.js"),[])),"v-0f1e3594":_(()=>d(()=>import("./YukiModuleResources.html.f47310a8.js"),[])),"v-35faec91":_(()=>d(()=>import("./YukiResForwarder.html.62d9bea1.js"),[])),"v-2c04b82a":_(()=>d(()=>import("./YukiResources.html.8cdff557.js"),[])),"v-19e7277e":_(()=>d(()=>import("./YukiXposedEvent.html.5f49c197.js"),[])),"v-2f64a2d4":_(()=>d(()=>import("./ChannelData.html.35215702.js"),[])),"v-2d4e0da6":_(()=>d(()=>import("./ModuleClassLoader.html.7b5cc225.js"),[])),"v-58ed8298":_(()=>d(()=>import("./PrefsData.html.ca16253d.js"),[])),"v-23e1a817":_(()=>d(()=>import("./ModulePreferenceFragment.html.f7ecd440.js"),[])),"v-0f719471":_(()=>d(()=>import("./BaseFinder.html.e92b3674.js"),[])),"v-45111efc":_(()=>d(()=>import("./DexClassFinder.html.d84667d3.js"),[])),"v-1e2cbc9c":_(()=>d(()=>import("./ConstructorFinder.html.73258725.js"),[])),"v-22449c48":_(()=>d(()=>import("./FieldFinder.html.7b0651b9.js"),[])),"v-fd738322":_(()=>d(()=>import("./MethodFinder.html.0e730b7b.js"),[])),"v-3d943532":_(()=>d(()=>import("./YukiModuleResources.html.10f2c38d.js"),[])),"v-526c4200":_(()=>d(()=>import("./YukiResForwarder.html.234358d5.js"),[])),"v-68541dca":_(()=>d(()=>import("./YukiResources.html.8651ca84.js"),[])),"v-0a4de82f":_(()=>d(()=>import("./YukiXposedEvent.html.04a50775.js"),[])),"v-493d37f6":_(()=>d(()=>import("./ChannelData.html.2e6c6569.js"),[])),"v-4b468415":_(()=>d(()=>import("./ModuleClassLoader.html.dd180fc9.js"),[])),"v-d99f7f36":_(()=>d(()=>import("./PrefsData.html.fc0793be.js"),[])),"v-53bcae06":_(()=>d(()=>import("./ModulePreferenceFragment.html.03eaf777.js"),[])),"v-52995ef7":_(()=>d(()=>import("./CountRules.html.3361aff7.js"),[])),"v-8d5ce71a":_(()=>d(()=>import("./ModifierRules.html.a23f860d.js"),[])),"v-f5b1ffb2":_(()=>d(()=>import("./NameRules.html.1ac92120.js"),[])),"v-08b70f7f":_(()=>d(()=>import("./ConstructorRules.html.89ac6cea.js"),[])),"v-21f64ebf":_(()=>d(()=>import("./FieldRules.html.d12c9b1b.js"),[])),"v-77f11cf9":_(()=>d(()=>import("./MemberRules.html.bfe09c90.js"),[])),"v-64827680":_(()=>d(()=>import("./MethodRules.html.181e5e4f.js"),[])),"v-2d5d16db":_(()=>d(()=>import("./ModuleAppActivity.html.31db2b27.js"),[])),"v-cadbe48e":_(()=>d(()=>import("./ModuleAppCompatActivity.html.d6ea50a2.js"),[])),"v-78731c50":_(()=>d(()=>import("./ModuleContextThemeWrapper.html.5f49ff05.js"),[])),"v-1b2ad030":_(()=>d(()=>import("./CountRules.html.64b9467a.js"),[])),"v-547a3c3c":_(()=>d(()=>import("./ModifierRules.html.5e136d47.js"),[])),"v-58c26516":_(()=>d(()=>import("./NameRules.html.eb726c41.js"),[])),"v-a42f54a4":_(()=>d(()=>import("./ConstructorRules.html.8f57ac81.js"),[])),"v-3e67a42e":_(()=>d(()=>import("./FieldRules.html.0cbc7d43.js"),[])),"v-2cab152c":_(()=>d(()=>import("./MemberRules.html.a94d7ce4.js"),[])),"v-5388621e":_(()=>d(()=>import("./MethodRules.html.3a185a29.js"),[])),"v-1446bdca":_(()=>d(()=>import("./ModuleAppActivity.html.f8671049.js"),[])),"v-c7cef530":_(()=>d(()=>import("./ModuleAppCompatActivity.html.6fd72462.js"),[])),"v-44efb702":_(()=>d(()=>import("./ModuleContextThemeWrapper.html.5e67972f.js"),[])),"v-5e375d98":_(()=>d(()=>import("./MemberRulesResult.html.2769b569.js"),[])),"v-b8000f3a":_(()=>d(()=>import("./MemberRulesResult.html.c69c4756.js"),[])),"v-3706649a":_(()=>d(()=>import("./404.html.4241c760.js"),[]))};var Ht=(e={})=>e;function fr(e,t,l){var i,o,n;t===void 0&&(t=50),l===void 0&&(l={});var a=(i=l.isImmediate)!=null&&i,r=(o=l.callback)!=null&&o,s=l.maxWait,c=Date.now(),h=[];function p(){if(s!==void 0){var g=Date.now()-c;if(g+t>=s)return s-g}return t}var m=function(){var g=[].slice.call(arguments),x=this;return new Promise(function(L,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 P=e.apply(x,g);r&&r(P),h.forEach(function(H){return(0,H.resolve)(P)}),h=[]}},p()),k){var b=e.apply(x,g);return r&&r(b),L(b)}h.push({resolve:L,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 Tl=()=>{},st=Array.isArray,zh=/\/$/,Dh=e=>e.replace(zh,"");function ji(e,t,l="/"){let i,o={},n="",a="";const r=t.indexOf("#");let s=t.indexOf("?");return r=0&&(s=-1),s>-1&&(i=t.slice(0,s),n=t.slice(s+1,r>-1?r:t.length),o=e(n)),r>-1&&(i=i||t.slice(0,r),a=t.slice(r,t.length)),i=Vh(i!=null?i:t,l),{fullPath:i+(n&&"?")+n+a,path:i,query:o,hash:a}}function Mh(e,t){const l=t.query?e(t.query):"";return t.path+(l&&"?")+l+(t.hash||"")}function An(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Hh(e,t,l){const i=t.matched.length-1,o=l.matched.length-1;return i>-1&&i===o&&ul(t.matched[i],l.matched[o])&&gr(t.params,l.params)&&e(t.query)===e(l.query)&&t.hash===l.hash}function ul(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const l in e)if(!Sh(e[l],t[l]))return!1;return!0}function Sh(e,t){return st(e)?Tn(e,t):st(t)?Tn(t,e):e===t}function Tn(e,t){return st(t)?e.length===t.length&&e.every((l,i)=>l===t[i]):e.length===1&&e[0]===t}function Vh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const l=t.split("/"),i=e.split("/");let o=l.length-1,n,a;for(n=0;n1&&o--;else break;return l.slice(0,o).join("/")+"/"+i.slice(n-(n===i.length?1:0)).join("/")}var Hl;(function(e){e.pop="pop",e.push="push"})(Hl||(Hl={}));var Il;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Il||(Il={}));function Nh(e){if(!e)if(nl){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Dh(e)}const jh=/^[^#]+#/;function $h(e,t){return e.replace(jh,"#")+t}function Yh(e,t){const l=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-l.left-(t.left||0),top:i.top-l.top-(t.top||0)}}const Ii=()=>({left:window.pageXOffset,top:window.pageYOffset});function Bh(e){let t;if("el"in e){const l=e.el,i=typeof l=="string"&&l.startsWith("#"),o=typeof l=="string"?i?document.getElementById(l.slice(1)):document.querySelector(l):l;if(!o)return;t=Yh(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function In(e,t){return(history.state?history.state.position-t:-1)+e}const so=new Map;function Uh(e,t){so.set(e,t)}function Wh(e){const t=so.get(e);return so.delete(e),t}let Xh=()=>location.protocol+"//"+location.host;function kr(e,t){const{pathname:l,search:i,hash:o}=t,n=e.indexOf("#");if(n>-1){let r=o.includes(e.slice(n))?e.slice(n).length:1,s=o.slice(r);return s[0]!=="/"&&(s="/"+s),An(s,"")}return An(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,L=t.value;let E=0;if(m){if(l.value=g,t.value=m,a&&a===x){a=null;return}E=L?m.position-L.position:0}else i(g);o.forEach(k=>{k(l.value,x,{delta:E,type:Hl.pop,direction:E?E>0?Il.forward:Il.back:Il.unknown})})};function s(){a=l.value}function c(m){o.push(m);const g=()=>{const x=o.indexOf(m);x>-1&&o.splice(x,1)};return n.push(g),g}function h(){const{history:m}=window;!m.state||m.replaceState(ve({},m.state,{scroll:Ii()}),"")}function p(){for(const m of n)m();n=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",h)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",h),{pauseListeners:s,listen:c,destroy:p}}function wn(e,t,l,i=!1,o=!1){return{back:e,current:t,forward:l,replaced:i,position:window.history.length,scroll:o?Ii():null}}function Kh(e){const{history:t,location:l}=window,i={value:kr(e,l)},o={value:t.state};o.value||n(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function n(s,c,h){const p=e.indexOf("#"),m=p>-1?(l.host&&document.querySelector("base")?e:e.slice(p))+s:Xh()+e+s;try{t[h?"replaceState":"pushState"](c,"",m),o.value=c}catch(g){console.error(g),l[h?"replace":"assign"](m)}}function a(s,c){const h=ve({},t.state,wn(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});n(s,h,!0),i.value=s}function r(s,c){const h=ve({},o.value,t.state,{forward:s,scroll:Ii()});n(h.current,h,!0);const p=ve({},wn(i.value,s,null),{position:h.position+1},c);n(s,p,!1),i.value=s}return{location:i,state:o,push:r,replace:a}}function Gh(e){e=Nh(e);const t=Kh(e),l=qh(e,t.state,t.location,t.replace);function i(n,a=!0){a||l.pauseListeners(),history.go(n)}const o=ve({location:"",base:e,go:i,createHref:$h.bind(null,e)},t,l);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Qh(e){return typeof e=="string"||e&&typeof e=="object"}function vr(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},br=Symbol("");var On;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(On||(On={}));function pl(e,t){return ve(new Error,{type:e,[br]:!0},t)}function pt(e,t){return e instanceof Error&&br in e&&(t==null||!!(e.type&t))}const Fn="[^/]+?",Zh={sensitive:!1,strict:!1,start:!0,end:!0},Jh=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const l=ve({},Zh,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(b)}:Tl}function a(h){if(vr(h)){const p=i.get(h);p&&(i.delete(h),l.splice(l.indexOf(p),1),p.children.forEach(a),p.alias.forEach(a))}else{const p=l.indexOf(h);p>-1&&(l.splice(p,1),h.record.name&&i.delete(h.record.name),h.children.forEach(a),h.alias.forEach(a))}}function r(){return l}function s(h){let p=0;for(;p=0&&(h.record.path!==l[p].record.path||!_r(h,l[p]));)p++;l.splice(p,0,h),h.record.name&&!Mn(h)&&i.set(h.record.name,h)}function c(h,p){let m,g={},x,L;if("name"in h&&h.name){if(m=i.get(h.name),!m)throw pl(1,{location:h});L=m.record.name,g=ve(Dn(p.params,m.keys.filter(b=>!b.optional).map(b=>b.name)),h.params&&Dn(h.params,m.keys.map(b=>b.name))),x=m.stringify(g)}else if("path"in h)x=h.path,m=l.find(b=>b.re.test(x)),m&&(g=m.parse(x),L=m.record.name);else{if(m=p.name?i.get(p.name):l.find(b=>b.re.test(p.path)),!m)throw pl(1,{location:h,currentLocation:p});L=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:L,path:x,params:g,matched:E,meta:hd(E)}}return e.forEach(h=>n(h)),{addRoute:n,resolve:c,removeRoute:a,getRoutes:r,getRecordMatcher:o}}function Dn(e,t){const l={};for(const i of t)i in e&&(l[i]=e[i]);return l}function sd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cd(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const i in e.components)t[i]=typeof l=="boolean"?l:l[i];return t}function Mn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hd(e){return e.reduce((t,l)=>ve(t,l.meta),{})}function Hn(e,t){const l={};for(const i in e)l[i]=i in t?t[i]:e[i];return l}function _r(e,t){return t.children.some(l=>l===e||_r(e,l))}const yr=/#/g,dd=/&/g,ud=/\//g,pd=/=/g,md=/\?/g,xr=/\+/g,fd=/%5B/g,gd=/%5D/g,Er=/%5E/g,kd=/%60/g,Cr=/%7B/g,vd=/%7C/g,Rr=/%7D/g,bd=/%20/g;function Fo(e){return encodeURI(""+e).replace(vd,"|").replace(fd,"[").replace(gd,"]")}function _d(e){return Fo(e).replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function co(e){return Fo(e).replace(xr,"%2B").replace(bd,"+").replace(yr,"%23").replace(dd,"%26").replace(kd,"`").replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function yd(e){return co(e).replace(pd,"%3D")}function xd(e){return Fo(e).replace(yr,"%23").replace(md,"%3F")}function Ed(e){return e==null?"":xd(e).replace(ud,"%2F")}function fi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Cd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;on&&co(n)):[i&&co(i)]).forEach(n=>{n!==void 0&&(t+=(t.length?"&":"")+l,n!=null&&(t+="="+n))})}return t}function Rd(e){const t={};for(const l in e){const i=e[l];i!==void 0&&(t[l]=st(i)?i.map(o=>o==null?null:""+o):i==null?i:""+i)}return t}const Ld=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 At(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(Pd(r)){const c=(r.__vccOpts||r)[t];c&&o.push(At(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&&At(m,l,i,n,a)()}))}}return o}function Pd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Nn(e){const t=Me(wi),l=Me(zo),i=Y(()=>t.resolve(O(e.to))),o=Y(()=>{const{matched:s}=i.value,{length:c}=s,h=s[c-1],p=l.matched;if(!h||!p.length)return-1;const m=p.findIndex(ul.bind(null,h));if(m>-1)return m;const g=jn(s[c-2]);return c>1&&jn(h)===g&&p[p.length-1].path!==g?p.findIndex(ul.bind(null,s[c-2])):m}),n=Y(()=>o.value>-1&&wd(l.params,i.value.params)),a=Y(()=>o.value>-1&&o.value===l.matched.length-1&&gr(l.params,i.value.params));function r(s={}){return Id(s)?t[O(e.replace)?"replace":"push"](O(e.to)).catch(Tl):Promise.resolve()}return{route:i,href:Y(()=>i.value.href),isActive:n,isExactActive:a,navigate:r}}const Ad=ue({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Nn,setup(e,{slots:t}){const l=gl(Nn(e)),{options:i}=Me(wi),o=Y(()=>({[$n(e.activeClass,i.linkActiveClass,"router-link-active")]:l.isActive,[$n(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const n=t.default&&t.default(l);return e.custom?n:he("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:o.value},n)}}}),Td=Ad;function Id(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function wd(e,t){for(const l in t){const i=t[l],o=e[l];if(typeof i=="string"){if(i!==o)return!1}else if(!st(o)||o.length!==i.length||i.some((n,a)=>n!==o[a]))return!1}return!0}function jn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const $n=(e,t,l)=>e!=null?e:t!=null?t:l,Od=ue({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const i=Me(ho),o=Y(()=>e.route||i.value),n=Me(Vn,0),a=Y(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=Y(()=>o.value.matched[a.value]);Gt(Vn,Y(()=>a.value+1)),Gt(Ld,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(L=>L(c))},{flush:"post"}),()=>{const c=o.value,h=e.name,p=r.value,m=p&&p.components[h];if(!m)return Yn(l.default,{Component:m,route:c});const g=p.props[h],x=g?g===!0?c.params:typeof g=="function"?g(c):g:null,E=he(m,ve({},x,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(p.instances[h]=null)},ref:s}));return Yn(l.default,{Component:E,route:c})||E}}});function Yn(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const Lr=Od;function Fd(e){const t=rd(e.routes,e),l=e.parseQuery||Cd,i=e.stringifyQuery||Sn,o=e.history,n=_l(),a=_l(),r=_l(),s=wa(mt);let c=mt;nl&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const h=Ni.bind(null,R=>""+R),p=Ni.bind(null,Ed),m=Ni.bind(null,fi);function g(R,W){let M,X;return vr(R)?(M=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,M)}function x(R){const W=t.getRecordMatcher(R);W&&t.removeRoute(W)}function L(){return t.getRoutes().map(R=>R.record)}function E(R){return!!t.getRecordMatcher(R)}function k(R,W){if(W=ve({},W||s.value),typeof R=="string"){const ie=ji(l,R,W.path),u=t.resolve({path:ie.path},W),f=o.createHref(ie.fullPath);return ve(ie,u,{params:m(u.params),hash:fi(ie.hash),redirectedFrom:void 0,href:f})}let M;if("path"in R)M=ve({},R,{path:ji(l,R.path,W.path).path});else{const ie=ve({},R.params);for(const u in ie)ie[u]==null&&delete ie[u];M=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(M,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Mh(i,ve({},R,{hash:_d(ge),path:X.path})),ce=o.createHref(_e);return ve({fullPath:_e,hash:ge,query:i===Sn?Rd(R.query):R.query||{}},X,{redirectedFrom:void 0,href:ce})}function b(R){return typeof R=="string"?ji(l,R,s.value.path):ve({},R)}function P(R,W){if(c!==R)return pl(8,{from:W,to:R})}function H(R){return w(R)}function U(R){return H(ve(b(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:M}=W;let X=typeof M=="function"?M(R):M;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=b(X):{path:X},X.params={}),ve({query:R.query,hash:R.hash,params:"path"in X?{}:R.params},X)}}function w(R,W){const M=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(M);if(ie)return w(ve(b(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||M);const u=M;u.redirectedFrom=W;let f;return!_e&&Hh(i,X,M)&&(f=pl(16,{to:u,from:X}),Ne(X,X,!0,!1)),(f?Promise.resolve(f):q(u,X)).catch(y=>pt(y)?pt(y,2)?y:Ie(y):le(y,u,X)).then(y=>{if(y){if(pt(y,2))return w(ve({replace:ce},b(y.to),{state:typeof y.to=="object"?ve({},ge,y.to.state):ge,force:_e}),W||u)}else y=G(u,X,!0,ce,ge);return B(u,X,y),y})}function v(R,W){const M=P(R,W);return M?Promise.reject(M):Promise.resolve()}function q(R,W){let M;const[X,ge,_e]=zd(R,W);M=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{M.push(At(u,R,W))});const ce=v.bind(null,R,W);return M.push(ce),tl(M).then(()=>{M=[];for(const ie of n.list())M.push(At(ie,R,W));return M.push(ce),tl(M)}).then(()=>{M=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{M.push(At(u,R,W))});return M.push(ce),tl(M)}).then(()=>{M=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)M.push(At(u,R,W));else M.push(At(ie.beforeEnter,R,W));return M.push(ce),tl(M)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),M=$i(_e,"beforeRouteEnter",R,W),M.push(ce),tl(M))).then(()=>{M=[];for(const ie of a.list())M.push(At(ie,R,W));return M.push(ce),tl(M)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function B(R,W,M){for(const X of r.list())X(R,W,M)}function G(R,W,M,X,ge){const _e=P(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};M&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,M,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,M)=>{if(!Vt.listening)return;const X=k(R),ge=ee(X);if(ge){w(ve(ge,{replace:!0}),X).catch(Tl);return}c=X;const _e=s.value;nl&&Uh(In(_e.fullPath,M.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!M.delta&&M.type===Hl.pop&&o.go(-1,!1)}).catch(Tl),Promise.reject()):(M.delta&&o.go(-M.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(M.delta&&!pt(ce,8)?o.go(-M.delta,!1):M.type===Hl.pop&&pt(ce,20)&&o.go(-1,!1)),B(X,_e,ce)}).catch(Tl)}))}let F=_l(),re=_l(),j;function le(R,W,M){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,M)):console.error(R),Promise.reject(R)}function se(){return j&&s.value!==mt?Promise.resolve():new Promise((R,W)=>{F.add([R,W])})}function Ie(R){return j||(j=!R,S(),F.list().forEach(([W,M])=>R?M(R):W()),F.reset()),R}function Ne(R,W,M,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!M&&Wh(In(R.fullPath,0))||(X||!M)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Bh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Je;const Ye=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:L,resolve:k,options:e,push:H,replace:U,go:Ue,back:()=>Ue(-1),forward:()=>Ue(1),beforeEach:n.add,beforeResolve:a.add,afterEach:r.add,onError:re.add,isReady:se,install(R){const W=this;R.component("RouterLink",Td),R.component("RouterView",Lr),R.config.globalProperties.$router=W,Object.defineProperty(R.config.globalProperties,"$route",{enumerable:!0,get:()=>O(s)}),nl&&!Je&&s.value===mt&&(Je=!0,H(o.location).catch(ge=>{}));const M={};for(const ge in mt)M[ge]=Y(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(M)),R.provide(ho,s);const X=R.unmount;Ye.add(R),R.unmount=function(){Ye.delete(R),Ye.size<1&&(c=mt,C&&C(),C=null,s.value=mt,Je=!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 Jt(){return Me(wi)}function St(){return Me(zo)}const Dd=({headerLinkSelector:e,headerAnchorSelector:t,delay:l,offset:i=5})=>{const o=Jt(),a=fr(()=>{var L,E,k,b;const r=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(r-0)m.some(H=>H.hash===P.hash));for(let P=0;P=((E=(L=H.parentElement)==null?void 0:L.offsetTop)!=null?E:0)-i,w=!U||r<((b=(k=U.parentElement)==null?void 0:k.offsetTop)!=null?b:0)-i;if(!(ee&&w))continue;const q=decodeURIComponent(o.currentRoute.value.hash),B=decodeURIComponent(H.hash);if(q===B)return;if(p){for(let G=P+1;G{window.addEventListener("scroll",a)}),Yl(()=>{window.removeEventListener("scroll",a)})},Bn=async(e,t)=>{const{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=l)},Md="a.sidebar-item",Hd=".header-anchor",Sd=300,Vd=5,Nd=Ht({setup(){Dd({headerLinkSelector:Md,headerAnchorSelector:Hd,delay:Sd,offset:Vd})}}),Un=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,jd=()=>window.scrollTo({top:0,behavior:"smooth"});const $d=ue({name:"BackToTop",setup(){const e=ye(0),t=Y(()=>e.value>300),l=fr(()=>{e.value=Un()},100);Ze(()=>{e.value=Un(),window.addEventListener("scroll",()=>l())});const i=he("div",{class:"back-to-top",onClick:jd});return()=>he(Bl,{name:"back-to-top"},()=>t.value?i:null)}}),Yd=Ht({rootComponents:[$d]});const Bd=he("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[he("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),he("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Ud=ue({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Wl(),l=Y(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Bd,he("span",{class:"external-link-icon-sr-only"},l.value.openInNewWindow)])}}),Wd={"/en/":{openInNewWindow:"open in new window"},"/zh-cn/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00"},"/":{openInNewWindow:"open in new window"}},Xd=Ht({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Bt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function S(){}C(S,S)},o=function(C){var S=C.target;if(S===q){x();return}P.indexOf(S)!==-1&&L({target:S})},n=function(){if(!(U||!v.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(ee-C)>w.scrollOffset&&setTimeout(x,150)}},a=function(C){var S=C.key||C.keyCode;(S==="Escape"||S==="Esc"||S===27)&&x()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C;if(C.background&&(q.style.background=C.background),C.container&&C.container instanceof Object&&(S.container=Bt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Bt({},w,S),P.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Bt({},w,C))},c=function(){for(var C=arguments.length,S=Array(C),F=0;F0?S.reduce(function(j,le){return[].concat(j,Xn(le))},[]):P;return re.forEach(function(j){j.classList.remove("medium-zoom-image"),j.dispatchEvent(ll("medium-zoom:detach",{detail:{zoom:B}}))}),P=P.filter(function(j){return re.indexOf(j)===-1}),B},p=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(re){re.addEventListener("medium-zoom:"+C,S,F)}),H.push({type:"medium-zoom:"+C,listener:S,options:F}),B},m=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(re){re.removeEventListener("medium-zoom:"+C,S,F)}),H=H.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),B},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target,F=function(){var j={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},le=void 0,se=void 0;if(w.container)if(w.container instanceof Object)j=Bt({},j,w.container),le=j.width-j.left-j.right-w.margin*2,se=j.height-j.top-j.bottom-w.margin*2;else{var Ie=ii(w.container)?w.container:document.querySelector(w.container),Ne=Ie.getBoundingClientRect(),Ue=Ne.width,Je=Ne.height,Ye=Ne.left,Vt=Ne.top;j=Bt({},j,{width:Ue,height:Je,left:Ye,top:Vt})}le=le||j.width-w.margin*2,se=se||j.height-w.margin*2;var R=v.zoomedHd||v.original,W=Wn(R)?le:R.naturalWidth||le,M=Wn(R)?se:R.naturalHeight||se,X=R.getBoundingClientRect(),ge=X.top,_e=X.left,ce=X.width,ie=X.height,u=Math.min(W,le)/ce,f=Math.min(M,se)/ie,y=Math.min(u,f),T=(-_e+(le-ce)/2+w.margin+j.left)/y,A=(-ge+(se-ie)/2+w.margin+j.top)/y,z="scale("+y+") translate3d("+T+"px, "+A+"px, 0)";v.zoomed.style.transform=z,v.zoomedHd&&(v.zoomedHd.style.transform=z)};return new i(function(re){if(S&&P.indexOf(S)===-1){re(B);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:B}})),re(B)};if(v.zoomed){re(B);return}if(S)v.original=S;else if(P.length>0){var le=P;v.original=le[0]}else{re(B);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:B}})),ee=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,U=!0,v.zoomed=Gd(v.original),document.body.appendChild(q),w.template){var se=ii(w.template)?w.template:document.querySelector(w.template);v.template=document.createElement("div"),v.template.appendChild(se.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",x),v.zoomed.addEventListener("transitionend",j),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(Ie),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,F()};var Ie=setInterval(function(){v.zoomedHd.complete&&(clearInterval(Ie),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Ne=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Ne),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F()})}else F()})},x=function(){return new i(function(C){if(U||!v.original){C(B);return}var S=function F(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(q),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),U=!1,v.zoomed.removeEventListener("transitionend",F),v.original.dispatchEvent(ll("medium-zoom:closed",{detail:{zoom:B}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(B)};U=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(ll("medium-zoom:close",{detail:{zoom:B}})),v.zoomed.addEventListener("transitionend",S)})},L=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 P},b=function(){return v.original},P=[],H=[],U=!1,ee=0,w=l,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?w=t:(t||typeof t=="string")&&c(t),w=Bt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},w);var q=Kd(w.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",n),window.addEventListener("resize",x);var B={open:g,close:x,toggle:L,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:b};return B};function Zd(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 Jd=".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}";Zd(Jd);const eu=Qd,tu=Symbol("mediumZoom");const lu=".theme-default-content > img, .theme-default-content :not(a) > img",iu={},ou=300,nu=Ht({enhance({app:e,router:t}){const l=eu(iu);l.refresh=(i=lu)=>{l.detach(),l.attach(i)},e.provide(tu,l),t.afterEach(()=>{setTimeout(()=>l.refresh(),ou)})}});/**
    + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
    + * @license MIT
    + */const me={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
    '},status:null,set:e=>{const t=me.isStarted();e=Yi(e,me.settings.minimum,1),me.status=e===1?null:e;const l=me.render(!t),i=l.querySelector(me.settings.barSelector),o=me.settings.speed,n=me.settings.easing;return l.offsetWidth,au(a=>{ti(i,{transform:"translate3d("+qn(e)+"%,0,0)",transition:"all "+o+"ms "+n}),e===1?(ti(l,{transition:"none",opacity:"1"}),l.offsetWidth,setTimeout(function(){ti(l,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){me.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),me},isStarted:()=>typeof me.status=="number",start:()=>{me.status||me.set(0);const e=()=>{setTimeout(()=>{!me.status||(me.trickle(),e())},me.settings.trickleSpeed)};return me.settings.trickle&&e(),me},done:e=>!e&&!me.status?me:me.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=me.status;return t?(typeof e!="number"&&(e=(1-t)*Yi(Math.random()*t,.1,.95)),t=Yi(t+e,0,.994),me.set(t)):me.start()},trickle:()=>me.inc(Math.random()*me.settings.trickleRate),render:e=>{if(me.isRendered())return document.getElementById("nprogress");Kn(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=me.settings.template;const l=t.querySelector(me.settings.barSelector),i=e?"-100":qn(me.status||0),o=document.querySelector(me.settings.parent);return ti(l,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),o!==document.body&&Kn(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Gn(document.documentElement,"nprogress-busy"),Gn(document.querySelector(me.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&ru(e)},isRendered:()=>!!document.getElementById("nprogress")},Yi=(e,t,l)=>el?l:e,qn=e=>(-1+e)*100,au=function(){const e=[];function t(){const l=e.shift();l&&l(t)}return function(l){e.push(l),e.length===1&&t()}}(),ti=function(){const e=["Webkit","O","Moz","ms"],t={};function l(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(r,s){return s.toUpperCase()})}function i(a){const r=document.body.style;if(a in r)return a;let s=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let h;for(;s--;)if(h=e[s]+c,h in r)return h;return a}function o(a){return a=l(a),t[a]||(t[a]=i(a))}function n(a,r,s){r=o(r),a.style[r]=s}return function(a,r){for(const s in r){const c=r[s];c!==void 0&&Object.prototype.hasOwnProperty.call(r,s)&&n(a,s,c)}}}(),Pr=(e,t)=>(typeof e=="string"?e:Do(e)).indexOf(" "+t+" ")>=0,Kn=(e,t)=>{const l=Do(e),i=l+t;Pr(l,t)||(e.className=i.substring(1))},Gn=(e,t)=>{const l=Do(e);if(!Pr(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=()=>{Ze(()=>{const e=Jt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(l=>{t.has(l.path)||me.start()}),e.afterEach(l=>{t.add(l.path),me.done()})})},cu=Ht({setup(){su()}}),hu=JSON.parse(`{"logo":"/images/logo.png","repo":"https://github.com/fankes/YukiHookAPI","docsRepo":"https://github.com/fankes/YukiHookAPI","docsBranch":"master","docsDir":"docs-source/src","editLinkPattern":":repo/edit/:branch/:path","sidebar":{"/en/":[{"text":"Get Started","collapsible":true,"children":["/en/guide/home","/en/guide/knowledge","/en/guide/quick-start","/en/guide/example","/en/guide/move-to-new-api"]},{"text":"Configs","collapsible":true,"children":["/en/config/api-example","/en/config/api-exception","/en/config/xposed-using","/en/config/api-using","/en/config/r8-proguard"]},{"text":"Tools","collapsible":true,"children":["/en/tools/yukihookapi-projectbuilder"]},{"text":"API Document","collapsible":true,"children":["/en/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/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/dummy/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"Special Features\xA0","collapsible":true,"children":["/en/api/special-features/reflection","/en/api/special-features/logger","/en/api/special-features/xposed-storage","/en/api/special-features/xposed-channel","/en/api/special-features/host-lifecycle","/en/api/special-features/host-inject"]}]},{"text":"About","collapsible":true,"children":["/en/about/changelog","/en/about/future","/en/about/contacts","/en/about/about"]}],"/zh-cn/":[{"text":"\u5165\u95E8","collapsible":true,"children":["/zh-cn/guide/home","/zh-cn/guide/knowledge","/zh-cn/guide/quick-start","/zh-cn/guide/example","/zh-cn/guide/move-to-new-api"]},{"text":"\u914D\u7F6E","collapsible":true,"children":["/zh-cn/config/api-example","/zh-cn/config/api-exception","/zh-cn/config/xposed-using","/zh-cn/config/api-using","/zh-cn/config/r8-proguard"]},{"text":"\u5DE5\u5177","collapsible":true,"children":["/zh-cn/tools/yukihookapi-projectbuilder"]},{"text":"API \u6587\u6863","collapsible":true,"children":["/zh-cn/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/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/dummy/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/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"}`),Ar=ye(hu),du=()=>Ar;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Ar.value=e});const Tr=Symbol(""),uu=()=>{const e=Me(Tr);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},pu=(e,t)=>{var l;return{...e,...(l=e.locales)==null?void 0:l[t]}},mu=Ht({enhance({app:e}){const t=du(),l=e._context.provides[No],i=Y(()=>pu(t.value,l.value));e.provide(Tr,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(),J("span",{class:Ke(["badge",e.type]),style:Sl({verticalAlign:e.vertical})},[Re(t.$slots,"default",{},()=>[Mt(ze(e.text),1)])],6))}}),Ae=(e,t)=>{const l=e.__vccOpts||e;for(const[i,o]of t)l[i]=o;return l},gu=Ae(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(),J("div",{class:Ke(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Re(t.$slots,"default")],10,vu))}}),yu=Ae(_u,[["__file","CodeGroupItem.vue"]]);var Qn;const Ir=typeof window<"u",xu=e=>typeof e=="function",Eu=e=>typeof e=="string",Bi=()=>{};Ir&&((Qn=window==null?void 0:window.navigator)==null?void 0:Qn.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function gi(e){return typeof e=="function"?e():O(e)}function Cu(e,t){function l(...i){e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})}return l}const wr=e=>e();function Ru(e=wr){const t=ye(!0);function l(){t.value=!1}function i(){t.value=!0}return{isActive:t,pause:l,resume:i,eventFilter:(...n)=>{t.value&&e(...n)}}}function Lu(e){return e}function Or(e){return fs()?(gs(e),!0):!1}function Pu(e,t=!0){wo()?Xa(e):t?e():jl(e)}function Au(e,t=!0){wo()?Ze(e):t?e():jl(e)}function Tu(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 Zn=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&&Zn)for(var i of Zn(e))t.indexOf(i)<0&&wu.call(e,i)&&(l[i]=e[i]);return l};function Fu(e,t,l={}){const i=l,{eventFilter:o=wr}=i,n=Ou(i,["eventFilter"]);return dt(e,Cu(o,t),n)}var zu=Object.defineProperty,Du=Object.defineProperties,Mu=Object.getOwnPropertyDescriptors,ki=Object.getOwnPropertySymbols,Fr=Object.prototype.hasOwnProperty,zr=Object.prototype.propertyIsEnumerable,Jn=(e,t,l)=>t in e?zu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,Hu=(e,t)=>{for(var l in t||(t={}))Fr.call(t,l)&&Jn(e,l,t[l]);if(ki)for(var l of ki(t))zr.call(t,l)&&Jn(e,l,t[l]);return e},Su=(e,t)=>Du(e,Mu(t)),Vu=(e,t)=>{var l={};for(var i in e)Fr.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&ki)for(var i of ki(e))t.indexOf(i)<0&&zr.call(e,i)&&(l[i]=e[i]);return l};function Nu(e,t,l={}){const i=l,{eventFilter:o}=i,n=Vu(i,["eventFilter"]),{eventFilter:a,pause:r,resume:s,isActive:c}=Ru(o);return{stop:Fu(e,t,Su(Hu({},n),{eventFilter:a})),pause:r,resume:s,isActive:c}}function ju(e){var t;const l=gi(e);return(t=l==null?void 0:l.$el)!=null?t:l}const vi=Ir?window:void 0;function $u(...e){let t,l,i,o;if(Eu(e[0])?([l,i,o]=e,t=vi):[t,l,i,o]=e,!t)return Bi;let n=Bi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Bi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Yu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Au(i,t),l}function Bu(e,t={}){const{window:l=vi}=t,i=Yu(()=>l&&"matchMedia"in l&&typeof l.matchMedia=="function");let o;const n=ye(!1),a=()=>{!i.value||(o||(o=l.matchMedia(e)),n.value=o.matches)};return Pu(()=>{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 Zu(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 L=gi(t),E=Xu(L),k=(o=i.serializer)!=null?o:Qu[E],{pause:b,resume:P}=Nu(x,()=>H(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function H(w){try{w==null?l.removeItem(e):l.setItem(e,k.write(w))}catch(v){g(v)}}function U(w){if(!(w&&w.key!==e)){b();try{const v=w?w.newValue:l.getItem(e);if(v==null)return s&&L!==null&&l.setItem(e,k.write(L)),L;if(!w&&c){const q=k.read(v);return xu(c)?c(q,L):E==="object"&&!Array.isArray(q)?la(la({},L),q):q}else return typeof v!="string"?v:k.read(v)}catch(v){g(v)}finally{P()}}}function ee(w){w&&w.key!==e||(x.value=U(w))}}function Ju(e){return Bu("(prefers-color-scheme: dark)",e)}var ia;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ia||(ia={}));var ep=Object.defineProperty,oa=Object.getOwnPropertySymbols,tp=Object.prototype.hasOwnProperty,lp=Object.prototype.propertyIsEnumerable,na=(e,t,l)=>t in e?ep(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,ip=(e,t)=>{for(var l in t||(t={}))tp.call(t,l)&&na(e,l,t[l]);if(oa)for(var l of oa(t))lp.call(t,l)&&na(e,l,t[l]);return e};const op={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};ip({linear:Lu},op);const $e=()=>uu(),Dr=Symbol(""),Mo=()=>{const e=Me(Dr);if(!e)throw new Error("useDarkMode() is called without provider.");return e},np=()=>{const e=$e(),t=Ju(),l=Zu("vuepress-color-scheme",e.value.colorMode),i=Y({get(){return e.value.colorModeSwitch?l.value==="auto"?t.value:l.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?l.value="auto":l.value=o?"dark":"light"}});Gt(Dr,i),ap(i)},ap=e=>{const t=(l=e.value)=>{const i=window==null?void 0:window.document.querySelector("html");i==null||i.classList.toggle("dark",l)};Ze(()=>{dt(e,t,{immediate:!0})}),Pi(()=>t())},Mr=(...e)=>{const l=Jt().resolve(...e),i=l.matched[l.matched.length-1];if(!(i!=null&&i.redirect))return l;const{redirect:o}=i,n=ae(o)?o(l):o,a=be(n)?{path:n}:n;return Mr({hash:l.hash,query:l.query,params:l.params,...a})},Ho=e=>{const t=Mr(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Ui=null,yl=null;const rp={wait:()=>Ui,pending:()=>{Ui=new Promise(e=>yl=e)},resolve:()=>{yl==null||yl(),Ui=null,yl=null}},Hr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=Me(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=Y(()=>cp(t.value,e.value));Gt(Sr,l)},cp=(e,t)=>{var o,n,a,r;const l=(n=(o=e.sidebar)!=null?o:t.sidebar)!=null?n:"auto",i=(r=(a=e.sidebarDepth)!=null?a:t.sidebarDepth)!=null?r:2;return e.home||l===!1?[]:l==="auto"?dp(i):te(l)?Vr(l,i):Oo(l)?up(l,i):[]},hp=(e,t)=>({text:e.title,link:e.link,children:Vo(e.children,t)}),Vo=(e,t)=>t>0?e.map(l=>hp(l,t-1)):[],dp=e=>{const t=Ot();return[{text:t.value.title,children:Vo(t.value.headers,e)}]},Vr=(e,t)=>{const l=St(),i=Ot(),o=n=>{var r;let a;if(be(n)?a=Ho(n):a=n,a.children)return{...a,children:a.children.map(s=>o(s))};if(a.link===l.path){const s=((r=i.value.headers[0])==null?void 0:r.level)===1?i.value.headers[0].children:i.value.headers;return{...a,children:Vo(s,t)}}return a};return e.map(n=>o(n))},up=(e,t)=>{var n;const l=St(),i=pr(e,l.path),o=(n=e[i])!=null?n:[];return Vr(o,t)},pp={},mp={class:"theme-default-content"};function fp(e,t){const l=_t("Content");return N(),J("div",mp,[oe(l)])}const gp=Ae(pp,[["render",fp],["__file","HomeContent.vue"]]),kp={key:0,class:"features"},vp=ue({__name:"HomeFeatures",setup(e){const t=vt(),l=Y(()=>te(t.value.features)?t.value.features:[]);return(i,o)=>O(l).length?(N(),J("div",kp,[(N(!0),J(Le,null,zt(O(l),n=>(N(),J("div",{key:n.title,class:"feature"},[fe("h2",null,ze(n.title),1),fe("p",null,ze(n.details),1)]))),128))])):Te("v-if",!0)}}),bp=Ae(vp,[["__file","HomeFeatures.vue"]]),_p=["innerHTML"],yp=["textContent"],xp=ue({__name:"HomeFooter",setup(e){const t=vt(),l=Y(()=>t.value.footer),i=Y(()=>t.value.footerHtml);return(o,n)=>O(l)?(N(),J(Le,{key:0},[Te(" eslint-disable-next-line vue/no-v-html "),O(i)?(N(),J("div",{key:0,class:"footer",innerHTML:O(l)},null,8,_p)):(N(),J("div",{key:1,class:"footer",textContent:ze(O(l))},null,8,yp))],64)):Te("v-if",!0)}}),Ep=Ae(xp,[["__file","HomeFooter.vue"]]),Cp=["href","rel","target","aria-label"],Rp=ue({inheritAttrs:!1}),Lp=ue({...Rp,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,l=St(),i=Gr(),{item:o}=Ei(t),n=Y(()=>Ul(o.value.link)),a=Y(()=>wh(o.value.link)||Oh(o.value.link)),r=Y(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=Y(()=>r.value==="_blank"),c=Y(()=>!n.value&&!a.value&&!s.value),h=Y(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=Y(()=>o.value.ariaLabel||o.value.text),m=Y(()=>{const L=Object.keys(i.value.locales);return L.length?!L.some(E=>E===o.value.link):o.value.link!=="/"}),g=Y(()=>m.value?l.path.startsWith(o.value.link):!1),x=Y(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(l.path):g.value:!1);return(L,E)=>{const k=_t("RouterLink"),b=_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)},L.$attrs),{default:He(()=>[Re(L.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),Re(L.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),J("a",no({key:1,class:"external-link",href:O(o).link,rel:O(h),target:O(r),"aria-label":O(p)},L.$attrs),[Re(L.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),O(s)?(N(),we(b,{key:0})):Te("v-if",!0),Re(L.$slots,"after")],16,Cp))}}}),kt=Ae(Lp,[["__file","AutoLink.vue"]]),Pp={class:"hero"},Ap={key:0,id:"main-title"},Tp={key:1,class:"description"},Ip={key:2,class:"actions"},wp=ue({__name:"HomeHero",setup(e){const t=vt(),l=jo(),i=Mo(),o=Y(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=Y(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=Y(()=>t.value.heroAlt||n.value||"hero"),r=Y(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=Y(()=>te(t.value.actions)?t.value.actions.map(({text:h,link:p,type:m="primary"})=>({text:h,link:p,type:m})):[]),c=()=>{if(!o.value)return null;const h=he("img",{src:Yo(o.value),alt:a.value});return t.value.heroImageDark===void 0?h:he($o,()=>h)};return(h,p)=>(N(),J("header",Pp,[oe(c),O(n)?(N(),J("h1",Ap,ze(O(n)),1)):Te("v-if",!0),O(r)?(N(),J("p",Tp,ze(O(r)),1)):Te("v-if",!0),O(s).length?(N(),J("p",Ip,[(N(!0),J(Le,null,zt(O(s),m=>(N(),we(kt,{key:m.text,class:Ke(["action-button",[m.type]]),item:m},null,8,["class","item"]))),128))])):Te("v-if",!0)]))}}),Op=Ae(wp,[["__file","HomeHero.vue"]]),Fp={class:"home"},zp=ue({__name:"Home",setup(e){return(t,l)=>(N(),J("main",Fp,[oe(Op),oe(bp),oe(gp),oe(Ep)]))}}),Dp=Ae(zp,[["__file","Home.vue"]]),Mp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Mo(),n=Y(()=>i.value.home||t.value),a=Y(()=>l.value.title),r=Y(()=>o.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!r.value)return null;const c=he("img",{class:"logo",src:Yo(r.value),alt:a.value});return i.value.logoDark===void 0?c:he($o,()=>c)};return(c,h)=>{const p=_t("RouterLink");return N(),we(p,{to:O(n)},{default:He(()=>[oe(s),O(a)?(N(),J("span",{key:0,class:Ke(["site-name",{"can-hide":O(r)}])},ze(O(a)),3)):Te("v-if",!0)]),_:1},8,["to"])}}}),Hp=Ae(Mp,[["__file","NavbarBrand.vue"]]),Sp=ue({__name:"DropdownTransition",setup(e){const t=i=>{i.style.height=i.scrollHeight+"px"},l=i=>{i.style.height=""};return(i,o)=>(N(),we(Bl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:He(()=>[Re(i.$slots,"default")]),_:3}))}}),Nr=Ae(Sp,[["__file","DropdownTransition.vue"]]),Vp=["aria-label"],Np={class:"title"},jp=fe("span",{class:"arrow down"},null,-1),$p=["aria-label"],Yp={class:"title"},Bp={class:"navbar-dropdown"},Up={class:"navbar-dropdown-subtitle"},Wp={key:1},Xp={class:"navbar-dropdown-subitem-wrapper"},qp=ue({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:l}=Ei(t),i=Y(()=>l.value.ariaLabel||l.value.text),o=ye(!1),n=St();dt(()=>n.path,()=>{o.value=!1});const a=s=>{s.detail===0?o.value=!o.value:o.value=!1},r=(s,c)=>c[c.length-1]===s;return(s,c)=>(N(),J("div",{class:Ke(["navbar-dropdown-wrapper",{open:o.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":O(i),onClick:a},[fe("span",Np,ze(O(l).text),1),jp],8,Vp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":O(i),onClick:c[0]||(c[0]=h=>o.value=!o.value)},[fe("span",Yp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:He(()=>[ci(fe("ul",Bp,[(N(!0),J(Le,null,zt(O(l).children,h=>(N(),J("li",{key:h.text,class:"navbar-dropdown-item"},[h.children?(N(),J(Le,{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(),J("span",Wp,ze(h.text),1))]),fe("ul",Xp,[(N(!0),J(Le,null,zt(h.children,p=>(N(),J("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=Ae(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"},Zp=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const l=$r(e);return l!==null?Qp[l]:null},Jp=({docsRepo:e,docsBranch:t,docsDir:l,filePathRelative:i,editLinkPattern:o})=>{if(!i)return null;const n=Zp({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=Jt(),h=Wl(),p=jo(),m=$e();return Y(()=>{var b,P,H;const g=Object.keys(p.value.locales);if(g.length<2)return[];const x=c.currentRoute.value.path,L=c.currentRoute.value.fullPath,E=c.currentRoute.value.hash;return[{text:(b=m.value.selectLanguageText)!=null?b:"unknown language",ariaLabel:(H=(P=m.value.selectLanguageAriaLabel)!=null?P:m.value.selectLanguageText)!=null?H:"unknown language",children:g.map(U=>{var G,C,S,F,re,j;const ee=(C=(G=p.value.locales)==null?void 0:G[U])!=null?C:{},w=(F=(S=m.value.locales)==null?void 0:S[U])!=null?F:{},v=`${ee.lang}`,q=(re=w.selectLanguageName)!=null?re:v;let B;if(v===p.value.lang)B=L;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?B=`${le}${E}`:B=(j=w.home)!=null?j:U}return{text:q,link:B}})}]})},l=()=>{const c=$e(),h=Y(()=>c.value.repo),p=Y(()=>h.value?$r(h.value):null),m=Y(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=Y(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return Y(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Ho(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return Y(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=Y(()=>[...n.value,...a.value,...r.value]);return(c,h)=>O(s).length?(N(),J("nav",em,[(N(!0),J(Le,null,zt(O(s),p=>(N(),J("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))])):Te("v-if",!0)}}),Yr=Ae(tm,[["__file","NavbarItems.vue"]]),lm=["title"],im={class:"icon",focusable:"false",viewBox:"0 0 32 32"},om=jc('',9),nm=[om],am={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rm=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),sm=[rm],cm=ue({__name:"ToggleColorModeButton",setup(e){const t=$e(),l=Mo(),i=()=>{l.value=!l.value};return(o,n)=>(N(),J("button",{class:"toggle-color-mode-button",title:O(t).toggleColorMode,onClick:i},[ci((N(),J("svg",im,nm,512)),[[mi,!O(l)]]),ci((N(),J("svg",am,sm,512)),[[mi,O(l)]])],8,lm))}}),hm=Ae(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(),J("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=Ae(mm,[["__file","ToggleSidebarButton.vue"]]),gm=ue({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=$e(),l=ye(null),i=ye(null),o=ye(0),n=Y(()=>o.value?{maxWidth:o.value+"px"}:{});Ze(()=>{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(),J("header",{ref_key:"navbar",ref:l,class:"navbar"},[oe(fm,{onToggle:s[0]||(s[0]=h=>r.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:i},[oe(Hp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Yr,{class:"can-hide"}),Re(r.$slots,"after"),O(t).colorModeSwitch?(N(),we(hm,{key:0})):Te("v-if",!0),oe(c)],4)],512)}}}),km=Ae(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"},Lm=["title"],Pm=Mt(", "),Am=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var b,P,H;if(!((P=(b=h.value.editLink)!=null?b:s.value.editLink)!=null?P:!0))return null;const{repo:m,docsRepo:g=m,docsBranch:x="main",docsDir:L="",editLinkText:E}=s.value;if(!g)return null;const k=Jp({docsRepo:g,docsBranch:x,docsDir:L,filePathRelative:c.value.filePathRelative,editLinkPattern:(H=h.value.editLinkPattern)!=null?H:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var g,x,L,E;return!((x=(g=h.value.lastUpdated)!=null?g:s.value.lastUpdated)!=null?x:!0)||!((L=c.value.git)!=null&&L.updatedTime)?null:new Date((E=c.value.git)==null?void 0:E.updatedTime).toLocaleString()})},i=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var m,g,x,L;return((g=(m=h.value.contributors)!=null?m:s.value.contributors)!=null?g:!0)&&(L=(x=c.value.git)==null?void 0:x.contributors)!=null?L:null})},o=$e(),n=t(),a=l(),r=i();return(s,c)=>{const h=_t("ClientOnly");return N(),J("footer",vm,[O(n)?(N(),J("div",bm,[oe(kt,{class:"meta-item-label",item:O(n)},null,8,["item"])])):Te("v-if",!0),O(a)?(N(),J("div",_m,[fe("span",ym,ze(O(o).lastUpdatedText)+": ",1),oe(h,null,{default:He(()=>[fe("span",xm,ze(O(a)),1)]),_:1})])):Te("v-if",!0),O(r)&&O(r).length?(N(),J("div",Em,[fe("span",Cm,ze(O(o).contributorsText)+": ",1),fe("span",Rm,[(N(!0),J(Le,null,zt(O(r),(p,m)=>(N(),J(Le,{key:m},[fe("span",{class:"contributor",title:`email: ${p.email}`},ze(p.name),9,Lm),m!==O(r).length-1?(N(),J(Le,{key:0},[Pm],64)):Te("v-if",!0)],64))),128))])])):Te("v-if",!0)])}}}),Tm=Ae(Am,[["__file","PageMeta.vue"]]),Im={key:0,class:"page-nav"},wm={class:"inner"},Om={key:0,class:"prev"},Fm={key:1,class:"next"},zm=ue({__name:"PageNav",setup(e){const t=s=>s===!1?null:be(s)?Ho(s):Oo(s)?s:!1,l=(s,c,h)=>{const p=s.findIndex(m=>m.link===c);if(p!==-1){const m=s[p+h];return m!=null&&m.link?m:null}for(const m of s)if(m.children){const g=l(m.children,c,h);if(g)return g}return null},i=vt(),o=So(),n=St(),a=Y(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=Y(()=>{const s=t(i.value.next);return s!==!1?s:l(o.value,n.path,1)});return(s,c)=>O(a)||O(r)?(N(),J("nav",Im,[fe("p",wm,[O(a)?(N(),J("span",Om,[oe(kt,{item:O(a)},null,8,["item"])])):Te("v-if",!0),O(r)?(N(),J("span",Fm,[oe(kt,{item:O(r)},null,8,["item"])])):Te("v-if",!0)])])):Te("v-if",!0)}}),Dm=Ae(zm,[["__file","PageNav.vue"]]),Mm={class:"page"},Hm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),J("main",Mm,[Re(t.$slots,"top"),fe("div",Hm,[Re(t.$slots,"content-top"),oe(i),Re(t.$slots,"content-bottom")]),oe(Tm),oe(Dm),Re(t.$slots,"bottom")])}}}),Vm=Ae(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=Jt(),a=Y(()=>jr(l.value,o)),r=Y(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=Y(()=>l.value.collapsible?a.value:!0),[c,h]=Tu(s.value),p=g=>{l.value.collapsible&&(g.preventDefault(),h())},m=n.afterEach(g=>{jl(()=>{c.value=s.value})});return Yl(()=>{m()}),(g,x)=>{var E;const L=_t("SidebarItem",!0);return N(),J("li",null,[O(l).link?(N(),we(kt,{key:0,class:Ke(O(r)),item:O(l)},null,8,["class","item"])):(N(),J("p",{key:1,tabindex:"0",class:Ke(O(r)),onClick:p,onKeydown:Eh(p,["enter"])},[Mt(ze(O(l).text)+" ",1),O(l).collapsible?(N(),J("span",{key:0,class:Ke(["arrow",O(c)?"down":"right"])},null,2)):Te("v-if",!0)],42,Nm)),(E=O(l).children)!=null&&E.length?(N(),we(Nr,{key:2},{default:He(()=>[ci(fe("ul",jm,[(N(!0),J(Le,null,zt(O(l).children,k=>(N(),we(L,{key:`${O(i)}${k.text}${k.link}`,item:k,depth:O(i)+1},null,8,["item","depth"]))),128))],512),[[mi,O(c)]])]),_:1})):Te("v-if",!0)])}}}),Ym=Ae($m,[["__file","SidebarItem.vue"]]),Bm={key:0,class:"sidebar-items"},Um=ue({__name:"SidebarItems",setup(e){const t=St(),l=So();return Ze(()=>{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(),J("ul",Bm,[(N(!0),J(Le,null,zt(O(l),n=>(N(),we(Ym,{key:`${n.text}${n.link}`,item:n},null,8,["item"]))),128))])):Te("v-if",!0)}}),Wm=Ae(Um,[["__file","SidebarItems.vue"]]),Xm={class:"sidebar"},qm=ue({__name:"Sidebar",setup(e){return(t,l)=>(N(),J("aside",Xm,[oe(Yr),Re(t.$slots,"top"),oe(Wm),Re(t.$slots,"bottom")]))}}),Km=Ae(qm,[["__file","Sidebar.vue"]]),Gm=ue({__name:"Layout",setup(e){const t=Ot(),l=vt(),i=$e(),o=Y(()=>l.value.navbar!==!1&&i.value.navbar!==!1),n=So(),a=ye(!1),r=E=>{a.value=typeof E=="boolean"?E:!a.value},s={x:0,y:0},c=E=>{s.x=E.changedTouches[0].clientX,s.y=E.changedTouches[0].clientY},h=E=>{const k=E.changedTouches[0].clientX-s.x,b=E.changedTouches[0].clientY-s.y;Math.abs(k)>Math.abs(b)&&Math.abs(k)>40&&(k>0&&s.x<=80?r(!0):r(!1))},p=Y(()=>[{"no-navbar":!o.value,"no-sidebar":!n.value.length,"sidebar-open":a.value},l.value.pageClass]);let m;Ze(()=>{m=Jt().afterEach(()=>{r(!1)})}),Pi(()=>{m()});const g=Hr(),x=g.resolve,L=g.pending;return(E,k)=>(N(),J("div",{class:Ke(["theme-container",O(p)]),onTouchstart:c,onTouchend:h},[Re(E.$slots,"navbar",{},()=>[O(o)?(N(),we(km,{key:0,onToggleSidebar:r},{before:He(()=>[Re(E.$slots,"navbar-before")]),after:He(()=>[Re(E.$slots,"navbar-after")]),_:3})):Te("v-if",!0)]),fe("div",{class:"sidebar-mask",onClick:k[0]||(k[0]=b=>r(!1))}),Re(E.$slots,"sidebar",{},()=>[oe(Km,null,{top:He(()=>[Re(E.$slots,"sidebar-top")]),bottom:He(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Bl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(L)},{default:He(()=>[(N(),we(Vm,{key:O(t).path},{top:He(()=>[Re(E.$slots,"page-top")]),"content-top":He(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":He(()=>[Re(E.$slots,"page-content-bottom")]),bottom:He(()=>[Re(E.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Qm=Ae(Gm,[["__file","Layout.vue"]]),Zm={class:"theme-container"},Jm={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(),J("div",Zm,[fe("main",Jm,[fe("div",ef,[tf,fe("blockquote",null,ze(o()),1),oe(m,{to:O(n)},{default:He(()=>[Mt(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Ae(lf,[["__file","NotFound.vue"]]);const nf=Ht({enhance({app:e,router:t}){e.component("Badge",gu),e.component("CodeGroup",ku),e.component("CodeGroupItem",yu),e.component("AutoLinkExternalIcon",()=>{const i=e.component("ExternalLinkIcon");return i?he(i):null}),e.component("NavbarSearch",()=>{const i=e.component("Docsearch")||e.component("SearchBox");return i?he(i):null});const l=t.options.scrollBehavior;t.options.scrollBehavior=async(...i)=>(await Hr().wait(),l(...i))},setup(){np(),sp()},layouts:{Layout:Qm,NotFound:of}}),af=(e,t)=>t.some(l=>{if(be(l))return l===e.key;const{key:i,ctrl:o=!1,shift:n=!1,alt:a=!1}=l;return i===e.key&&o===e.ctrlKey&&n===e.shiftKey&&a===e.altKey}),rf=/[^\x00-\x7F]/,sf=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ra=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),sa=(e,t)=>{const l=t.join(" "),i=sf(e);if(rf.test(e))return i.some(a=>l.toLowerCase().indexOf(a)>-1);const o=e.endsWith(" ");return new RegExp(i.map((a,r)=>i.length===r+1&&!o?`(?=.*\\b${ra(a)})`:`(?=.*\\b${ra(a)}\\b)`).join("")+".+","gi").test(l)},cf=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const l=i=>{!e.value||af(i,t.value)&&!e.value.contains(i.target)&&(i.preventDefault(),e.value.focus())};Ze(()=>{document.addEventListener("keydown",l)}),Yl(()=>{document.removeEventListener("keydown",l)})},hf=[{title:"Home",headers:[{level:3,title:"All Hook process in one step, everything is simplified",slug:"all-hook-process-in-one-step-everything-is-simplified",link:"#all-hook-process-in-one-step-everything-is-simplified",children:[]}],path:"/en/",pathLocale:"/en/",extraFields:[]},{title:"\u9996\u9875",headers:[{level:3,title:"\u6240\u6709 Hook \u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D\uFF0C\u62D2\u7EDD\u7E41\u7410",slug:"\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",link:"#\u6240\u6709-hook-\u6D41\u7A0B\u4E00\u6B65\u5230\u4F4D-\u62D2\u7EDD\u7E41\u7410",children:[]}],path:"/zh-cn/",pathLocale:"/zh-cn/",extraFields:[]},{title:"About this Document",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/en/about/about.html",pathLocale:"/en/",extraFields:[]},{title:"Changelog",headers:[{level:3,title:"1.1.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/en/about/changelog.html",pathLocale:"/en/",extraFields:[]},{title:"Contact Us",headers:[{level:2,title:"Help with Maintenance",slug:"help-with-maintenance",link:"#help-with-maintenance",children:[]}],path:"/en/about/contacts.html",pathLocale:"/en/",extraFields:[]},{title:"Looking for Future",headers:[{level:2,title:"Unresolved Issues",slug:"unresolved-issues",link:"#unresolved-issues",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"Future Plans",slug:"future-plans",link:"#future-plans",children:[{level:3,title:"Lite Version Supported for Standalone Use",slug:"lite-version-supported-for-standalone-use",link:"#lite-version-supported-for-standalone-use",children:[]},{level:3,title:"Support for More Hook Framework",slug:"support-for-more-hook-framework",link:"#support-for-more-hook-framework",children:[]}]}],path:"/en/about/future.html",pathLocale:"/en/",extraFields:[]},{title:"Document Introduce",headers:[{level:2,title:"Function Description",slug:"function-description",link:"#function-description",children:[]},{level:2,title:"Function Example Description",slug:"function-example-description",link:"#function-example-description",children:[]},{level:2,title:"Change Record Description",slug:"change-record-description",link:"#change-record-description",children:[]},{level:2,title:"Related Symbols Description",slug:"related-symbols-description",link:"#related-symbols-description",children:[]}],path:"/en/api/home.html",pathLocale:"/en/",extraFields:[]},{title:"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:"Usage Example",headers:[{level:2,title:"Structure Diagram",slug:"structure-diagram",link:"#structure-diagram",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"A Simple Hook Example",slug:"a-simple-hook-example",link:"#a-simple-hook-example",children:[{level:3,title:"Hook App",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook System Framework",slug:"hook-system-framework",link:"#hook-system-framework",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"Remove Hook",slug:"remove-hook",link:"#remove-hook",children:[]}]},{level:2,title:"Exception Handling",slug:"exception-handling",link:"#exception-handling",children:[{level:3,title:"Listen for Exceptions",slug:"listen-for-exceptions",link:"#listen-for-exceptions",children:[]},{level:3,title:"Throw an Exception",slug:"throw-an-exception",link:"#throw-an-exception",children:[]}]},{level:2,title:"Status Monitor",slug:"status-monitor",link:"#status-monitor",children:[]},{level:2,title:"Expansion Usage",slug:"expansion-usage",link:"#expansion-usage",children:[{level:3,title:"Multiple Hosts",slug:"multiple-hosts",link:"#multiple-hosts",children:[]},{level:3,title:"Multiple Processes",slug:"multiple-processes",link:"#multiple-processes",children:[]}]},{level:2,title:"Writing Optimization",slug:"writing-optimization",link:"#writing-optimization",children:[]},{level:2,title:"Xposed Module own Active State",slug:"xposed-module-own-active-state",link:"#xposed-module-own-active-state",children:[]}],path:"/en/guide/example.html",pathLocale:"/en/",extraFields:[]},{title:"Introduce",headers:[{level:2,title:"Background",slug:"background",link:"#background",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Language Requirement",slug:"language-requirement",link:"#language-requirement",children:[]},{level:2,title:"Source of Inspiration",slug:"source-of-inspiration",link:"#source-of-inspiration",children:[]},{level:2,title:"Suppored Hook Framework",slug:"suppored-hook-framework",link:"#suppored-hook-framework",children:[]}],path:"/en/guide/home.html",pathLocale:"/en/",extraFields:[]},{title:"Basic Knowledge",headers:[{level:2,title:"Related Introduction",slug:"related-introduction",link:"#related-introduction",children:[{level:3,title:"What is Xposed",slug:"what-is-xposed",link:"#what-is-xposed",children:[]},{level:3,title:"What can Xposed do",slug:"what-can-xposed-do",link:"#what-can-xposed-do",children:[]},{level:3,title:"Development Process",slug:"development-process",link:"#development-process",children:[]},{level:3,title:"Derivatives",slug:"derivatives",link:"#derivatives",children:[]},{level:3,title:"What YukiHookAPI does",slug:"what-yukihookapi-does",link:"#what-yukihookapi-does",children:[]}]},{level:2,title:"Let's Started",slug:"let-s-started",link:"#let-s-started",children:[]}],path:"/en/guide/knowledge.html",pathLocale:"/en/",extraFields:[]},{title:"Migrate from Xposed API",headers:[{level:2,title:"Migrate Hook Entry Point",slug:"migrate-hook-entry-point",link:"#migrate-hook-entry-point",children:[]},{level:2,title:"Migrate Hook Method Body",slug:"migrate-hook-method-body",link:"#migrate-hook-method-body",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"Migrate Other Features",slug:"migrate-other-features",link:"#migrate-other-features",children:[]}],path:"/en/guide/move-to-new-api.html",pathLocale:"/en/",extraFields:[]},{title:"Quick Start",headers:[{level:2,title:"Environment Requirements",slug:"environment-requirements",link:"#environment-requirements",children:[]},{level:2,title:"Automatically Build Project",slug:"automatically-build-project",link:"#automatically-build-project",children:[]},{level:2,title:"Manually Configure Project",slug:"manually-configure-project",link:"#manually-configure-project",children:[{level:3,title:"Create Project",slug:"create-project",link:"#create-project",children:[]},{level:3,title:"Integration Dependencies",slug:"integration-dependencies",link:"#integration-dependencies",children:[]},{level:3,title:"Use as Xposed Module",slug:"use-as-xposed-module",link:"#use-as-xposed-module",children:[]},{level:3,title:"Use as Hook API",slug:"use-as-hook-api",link:"#use-as-hook-api",children:[]}]}],path:"/en/guide/quick-start.html",pathLocale:"/en/",extraFields:[]},{title:"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.4 | 2022.10.04",slug:"_1-1-4-2022-10-04",link:"#_1-1-4-2022-10-04",children:[]},{level:3,title:"1.1.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/zh-cn/about/changelog.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8054\u7CFB\u6211\u4EEC",headers:[{level:2,title:"\u52A9\u529B\u7EF4\u62A4",slug:"\u52A9\u529B\u7EF4\u62A4",link:"#\u52A9\u529B\u7EF4\u62A4",children:[]}],path:"/zh-cn/about/contacts.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5C55\u671B\u672A\u6765",headers:[{level:2,title:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",slug:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",link:"#\u672A\u89E3\u51B3\u7684\u95EE\u9898",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"\u672A\u6765\u7684\u8BA1\u5212",slug:"\u672A\u6765\u7684\u8BA1\u5212",link:"#\u672A\u6765\u7684\u8BA1\u5212",children:[{level:3,title:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C",slug:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",link:"#\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",children:[]},{level:3,title:"\u652F\u6301\u66F4\u591A Hook Framework",slug:"\u652F\u6301\u66F4\u591A-hook-framework",link:"#\u652F\u6301\u66F4\u591A-hook-framework",children:[]}]}],path:"/zh-cn/about/future.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u6587\u6863\u4ECB\u7ECD",headers:[{level:2,title:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",slug:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",link:"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",children:[]},{level:2,title:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",slug:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",link:"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",children:[]},{level:2,title:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",slug:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",link:"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",children:[]},{level:2,title:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",slug:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",link:"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",children:[]}],path:"/zh-cn/api/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u57FA\u672C\u914D\u7F6E",headers:[{level:2,title:"\u529F\u80FD\u914D\u7F6E",slug:"\u529F\u80FD\u914D\u7F6E",link:"#\u529F\u80FD\u914D\u7F6E",children:[{level:3,title:"configs \u65B9\u6CD5",slug:"configs-\u65B9\u6CD5",link:"#configs-\u65B9\u6CD5",children:[]}]},{level:2,title:"Hooker \u914D\u7F6E",slug:"hooker-\u914D\u7F6E",link:"#hooker-\u914D\u7F6E",children:[{level:3,title:"\u901A\u8FC7 lambda \u521B\u5EFA",slug:"\u901A\u8FC7-lambda-\u521B\u5EFA",link:"#\u901A\u8FC7-lambda-\u521B\u5EFA",children:[]},{level:3,title:"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA",slug:"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",link:"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",children:[]},{level:3,title:"\u6269\u5C55\u7279\u6027",slug:"\u6269\u5C55\u7279\u6027",link:"#\u6269\u5C55\u7279\u6027",children:[]},{level:3,title:"\u6CE8\u610F\u4E8B\u9879",slug:"\u6CE8\u610F\u4E8B\u9879",link:"#\u6CE8\u610F\u4E8B\u9879",children:[]}]},{level:2,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",children:[]}],path:"/zh-cn/config/api-example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u5F02\u5E38\u5904\u7406",headers:[{level:2,title:"\u975E\u963B\u65AD\u5F02\u5E38",slug:"\u975E\u963B\u65AD\u5F02\u5E38",link:"#\u975E\u963B\u65AD\u5F02\u5E38",children:[]},{level:2,title:"\u963B\u65AD\u5F02\u5E38",slug:"\u963B\u65AD\u5F02\u5E38",link:"#\u963B\u65AD\u5F02\u5E38",children:[]}],path:"/zh-cn/config/api-exception.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u5165\u53E3\u914D\u7F6E",slug:"\u5165\u53E3\u914D\u7F6E",link:"#\u5165\u53E3\u914D\u7F6E",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/zh-cn/config/api-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"R8 \u4E0E Proguard \u6DF7\u6DC6",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/zh-cn/config/r8-proguard.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",slug:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",link:"#\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",children:[{level:3,title:"InjectYukiHookWithXposed \u6CE8\u89E3",slug:"injectyukihookwithxposed-\u6CE8\u89E3",link:"#injectyukihookwithxposed-\u6CE8\u89E3",children:[]},{level:3,title:"IYukiHookXposedInit \u63A5\u53E3",slug:"iyukihookxposedinit-\u63A5\u53E3",link:"#iyukihookxposedinit-\u63A5\u53E3",children:[]}]},{level:2,title:"\u539F\u751F Xposed API \u4E8B\u4EF6",slug:"\u539F\u751F-xposed-api-\u4E8B\u4EF6",link:"#\u539F\u751F-xposed-api-\u4E8B\u4EF6",children:[]}],path:"/zh-cn/config/xposed-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u7528\u6CD5\u793A\u4F8B",headers:[{level:2,title:"\u7ED3\u6784\u56FE\u89E3",slug:"\u7ED3\u6784\u56FE\u89E3",link:"#\u7ED3\u6784\u56FE\u89E3",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"\u4E00\u4E2A\u7B80\u5355\u7684 Hook \u4F8B\u5B50",slug:"\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",link:"#\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",children:[{level:3,title:"Hook APP",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook \u7CFB\u7EDF\u6846\u67B6",slug:"hook-\u7CFB\u7EDF\u6846\u67B6",link:"#hook-\u7CFB\u7EDF\u6846\u67B6",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"\u89E3\u9664 Hook",slug:"\u89E3\u9664-hook",link:"#\u89E3\u9664-hook",children:[]}]},{level:2,title:"\u5F02\u5E38\u5904\u7406",slug:"\u5F02\u5E38\u5904\u7406",link:"#\u5F02\u5E38\u5904\u7406",children:[{level:3,title:"\u76D1\u542C\u5F02\u5E38",slug:"\u76D1\u542C\u5F02\u5E38",link:"#\u76D1\u542C\u5F02\u5E38",children:[]},{level:3,title:"\u629B\u51FA\u5F02\u5E38",slug:"\u629B\u51FA\u5F02\u5E38",link:"#\u629B\u51FA\u5F02\u5E38",children:[]}]},{level:2,title:"\u72B6\u6001\u76D1\u542C",slug:"\u72B6\u6001\u76D1\u542C",link:"#\u72B6\u6001\u76D1\u542C",children:[]},{level:2,title:"\u6269\u5C55\u7528\u6CD5",slug:"\u6269\u5C55\u7528\u6CD5",link:"#\u6269\u5C55\u7528\u6CD5",children:[{level:3,title:"\u591A\u4E2A\u5BBF\u4E3B",slug:"\u591A\u4E2A\u5BBF\u4E3B",link:"#\u591A\u4E2A\u5BBF\u4E3B",children:[]},{level:3,title:"\u591A\u4E2A\u8FDB\u7A0B",slug:"\u591A\u4E2A\u8FDB\u7A0B",link:"#\u591A\u4E2A\u8FDB\u7A0B",children:[]}]},{level:2,title:"\u5199\u6CD5\u4F18\u5316",slug:"\u5199\u6CD5\u4F18\u5316",link:"#\u5199\u6CD5\u4F18\u5316",children:[]},{level:2,title:"Xposed \u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]}],path:"/zh-cn/guide/example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECB\u7ECD",headers:[{level:2,title:"\u80CC\u666F",slug:"\u80CC\u666F",link:"#\u80CC\u666F",children:[]},{level:2,title:"\u7528\u9014",slug:"\u7528\u9014",link:"#\u7528\u9014",children:[]},{level:2,title:"\u8BED\u8A00\u8981\u6C42",slug:"\u8BED\u8A00\u8981\u6C42",link:"#\u8BED\u8A00\u8981\u6C42",children:[]},{level:2,title:"\u7075\u611F\u6765\u6E90",slug:"\u7075\u611F\u6765\u6E90",link:"#\u7075\u611F\u6765\u6E90",children:[]},{level:2,title:"\u652F\u6301\u7684 Hook \u6846\u67B6",slug:"\u652F\u6301\u7684-hook-\u6846\u67B6",link:"#\u652F\u6301\u7684-hook-\u6846\u67B6",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:"Monitor Lifecycle",slug:"monitor-lifecycle",link:"#monitor-lifecycle",children:[]},{level:2,title:"Register System Broadcast",slug:"register-system-broadcast",link:"#register-system-broadcast",children:[]}],path:"/en/api/special-features/host-lifecycle.html",pathLocale:"/en/",extraFields:[]},{title:"Debug Logs",headers:[{level:2,title:"Normal Logs",slug:"normal-logs",link:"#normal-logs",children:[]},{level:2,title:"Error Logs",slug:"error-logs",link:"#error-logs",children:[]},{level:2,title:"Save Logs and Custom Elements",slug:"save-logs-and-custom-elements",link:"#save-logs-and-custom-elements",children:[]}],path:"/en/api/special-features/logger.html",pathLocale:"/en/",extraFields:[]},{title:"Reflection Extensions",headers:[{level:2,title:"Class Extensions",slug:"class-extensions",link:"#class-extensions",children:[{level:3,title:"Object Conversion",slug:"object-conversion",link:"#object-conversion",children:[]},{level:3,title:"Existential Judgment",slug:"existential-judgment",link:"#existential-judgment",children:[]},{level:3,title:"Vague Search",slug:"vague-search",link:"#vague-search",children:[]}]},{level:2,title:"Member Extensions",slug:"member-extensions",link:"#member-extensions",children:[{level:3,title:"Find and Reflection",slug:"find-and-reflection",link:"#find-and-reflection",children:[]},{level:3,title:"Optional Find Conditions",slug:"optional-find-conditions",link:"#optional-find-conditions",children:[]},{level:3,title:"Find in Super Class",slug:"find-in-super-class",link:"#find-in-super-class",children:[]},{level:3,title:"Vague Find",slug:"vague-find",link:"#vague-find",children:[]},{level:3,title:"Multiple Find",slug:"multiple-find",link:"#multiple-find",children:[]},{level:3,title:"Static Bytecode",slug:"static-bytecode",link:"#static-bytecode",children:[]},{level:3,title:"Obfuscated Bytecode",slug:"obfuscated-bytecode",link:"#obfuscated-bytecode",children:[]},{level:3,title:"Directly Called",slug:"directly-called",link:"#directly-called",children:[]},{level:3,title:"Original Called",slug:"original-called",link:"#original-called",children:[]},{level:3,title:"Find Again",slug:"find-again",link:"#find-again",children:[]},{level:3,title:"Relative Matching",slug:"relative-matching",link:"#relative-matching",children:[]},{level:3,title:"Calling Generics",slug:"calling-generics",link:"#calling-generics",children:[]},{level:3,title:"Pay Attention of Trap",slug:"pay-attention-of-trap",link:"#pay-attention-of-trap",children:[]}]},{level:2,title:"Common Type Extensions",slug:"common-type-extensions",link:"#common-type-extensions",children:[]}],path:"/en/api/special-features/reflection.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module and Host Channel",headers:[{level:2,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:2,title:"Determine Module App and Host App Version Match",slug:"determine-module-app-and-host-app-version-match",link:"#determine-module-app-and-host-app-version-match",children:[]},{level:2,title:"Rules for Callback Event Response",slug:"rules-for-callback-event-response",link:"#rules-for-callback-event-response",children:[]},{level:2,title:"Security Instructions",slug:"security-instructions",link:"#security-instructions",children:[]}],path:"/en/api/special-features/xposed-channel.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module Data Storage",headers:[{level:2,title:"Use in Activity",slug:"use-in-activity",link:"#use-in-activity",children:[]},{level:2,title:"Use in PreferenceFragment",slug:"use-in-preferencefragment",link:"#use-in-preferencefragment",children:[]}],path:"/en/api/special-features/xposed-storage.html",pathLocale:"/en/",extraFields:[]},{title:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55",headers:[{level:2,title:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90 (Resources)",slug:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",link:"#\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",children:[]},{level:2,title:"\u6CE8\u518C\u6A21\u5757 Activity",slug:"\u6CE8\u518C\u6A21\u5757-activity",link:"#\u6CE8\u518C\u6A21\u5757-activity",children:[]},{level:2,title:"\u521B\u5EFA ContextThemeWrapper \u4EE3\u7406",slug:"\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",link:"#\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",children:[]},{level:2,title:"ClassLoader \u51B2\u7A81\u95EE\u9898",slug:"classloader-\u51B2\u7A81\u95EE\u9898",link:"#classloader-\u51B2\u7A81\u95EE\u9898",children:[]}],path:"/zh-cn/api/special-features/host-inject.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55",headers:[{level:2,title:"\u76D1\u542C\u751F\u547D\u5468\u671F",slug:"\u76D1\u542C\u751F\u547D\u5468\u671F",link:"#\u76D1\u542C\u751F\u547D\u5468\u671F",children:[]},{level:2,title:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",slug:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",link:"#\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",children:[]}],path:"/zh-cn/api/special-features/host-lifecycle.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8C03\u8BD5\u65E5\u5FD7",headers:[{level:2,title:"\u666E\u901A\u65E5\u5FD7",slug:"\u666E\u901A\u65E5\u5FD7",link:"#\u666E\u901A\u65E5\u5FD7",children:[]},{level:2,title:"\u9519\u8BEF\u65E5\u5FD7",slug:"\u9519\u8BEF\u65E5\u5FD7",link:"#\u9519\u8BEF\u65E5\u5FD7",children:[]},{level:2,title:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",slug:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",link:"#\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",children:[]}],path:"/zh-cn/api/special-features/logger.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",headers:[{level:2,title:"Class \u6269\u5C55",slug:"class-\u6269\u5C55",link:"#class-\u6269\u5C55",children:[{level:3,title:"\u5BF9\u8C61\u8F6C\u6362",slug:"\u5BF9\u8C61\u8F6C\u6362",link:"#\u5BF9\u8C61\u8F6C\u6362",children:[]},{level:3,title:"\u5B58\u5728\u5224\u65AD",slug:"\u5B58\u5728\u5224\u65AD",link:"#\u5B58\u5728\u5224\u65AD",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E",link:"#\u6A21\u7CCA\u67E5\u627E",children:[]}]},{level:2,title:"Member \u6269\u5C55",slug:"member-\u6269\u5C55",link:"#member-\u6269\u5C55",children:[{level:3,title:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",slug:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",link:"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",children:[]},{level:3,title:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",slug:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",link:"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",children:[]},{level:3,title:"\u5728\u7236\u7C7B\u67E5\u627E",slug:"\u5728\u7236\u7C7B\u67E5\u627E",link:"#\u5728\u7236\u7C7B\u67E5\u627E",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E-1",link:"#\u6A21\u7CCA\u67E5\u627E-1",children:[]},{level:3,title:"\u591A\u91CD\u67E5\u627E",slug:"\u591A\u91CD\u67E5\u627E-1",link:"#\u591A\u91CD\u67E5\u627E-1",children:[]},{level:3,title:"\u9759\u6001\u5B57\u8282\u7801",slug:"\u9759\u6001\u5B57\u8282\u7801",link:"#\u9759\u6001\u5B57\u8282\u7801",children:[]},{level:3,title:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",slug:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",link:"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",children:[]},{level:3,title:"\u76F4\u63A5\u8C03\u7528",slug:"\u76F4\u63A5\u8C03\u7528",link:"#\u76F4\u63A5\u8C03\u7528",children:[]},{level:3,title:"\u539F\u59CB\u8C03\u7528",slug:"\u539F\u59CB\u8C03\u7528",link:"#\u539F\u59CB\u8C03\u7528",children:[]},{level:3,title:"\u518D\u6B21\u67E5\u627E",slug:"\u518D\u6B21\u67E5\u627E",link:"#\u518D\u6B21\u67E5\u627E",children:[]},{level:3,title:"\u76F8\u5BF9\u5339\u914D",slug:"\u76F8\u5BF9\u5339\u914D",link:"#\u76F8\u5BF9\u5339\u914D",children:[]},{level:3,title:"\u8C03\u7528\u6CDB\u578B",slug:"\u8C03\u7528\u6CDB\u578B",link:"#\u8C03\u7528\u6CDB\u578B",children:[]},{level:3,title:"\u6CE8\u610F\u8BEF\u533A",slug:"\u6CE8\u610F\u8BEF\u533A",link:"#\u6CE8\u610F\u8BEF\u533A",children:[]}]},{level:2,title:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",slug:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",link:"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55",children:[]}],path:"/zh-cn/api/special-features/reflection.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865",headers:[{level:2,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:2,title:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",slug:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",link:"#\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",children:[]},{level:2,title:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",slug:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",link:"#\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",children:[]},{level:2,title:"\u5B89\u5168\u6027\u8BF4\u660E",slug:"\u5B89\u5168\u6027\u8BF4\u660E",link:"#\u5B89\u5168\u6027\u8BF4\u660E",children:[]}],path:"/zh-cn/api/special-features/xposed-channel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8",headers:[{level:2,title:"\u5728 Activity \u4E2D\u4F7F\u7528",slug:"\u5728-activity-\u4E2D\u4F7F\u7528",link:"#\u5728-activity-\u4E2D\u4F7F\u7528",children:[]},{level:2,title:"\u5728 PreferenceFragment \u4E2D\u4F7F\u7528",slug:"\u5728-preferencefragment-\u4E2D\u4F7F\u7528",link:"#\u5728-preferencefragment-\u4E2D\u4F7F\u7528",children:[]}],path:"/zh-cn/api/special-features/xposed-storage.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"executorName - field",slug:"executorname-field",link:"#executorname-field",children:[]},{level:3,title:"executorVersion - field",slug:"executorversion-field",link:"#executorversion-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:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookAPI - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Status - object",slug:"status-object",link:"#status-object",children:[{level:3,title:"compiledTimestamp - field",slug:"compiledtimestamp-field",link:"#compiledtimestamp-field",children:[]},{level:3,title:"isXposedEnvironment - field",slug:"isxposedenvironment-field",link:"#isxposedenvironment-field",children:[]},{level:3,title:"executorName - field",slug:"executorname-field",link:"#executorname-field",children:[]},{level:3,title:"executorVersion - field",slug:"executorversion-field",link:"#executorversion-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:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/en/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",pathLocale:"/en/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookClass - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",pathLocale:"/en/",extraFields:[]},{title:"HookResources - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",pathLocale:"/en/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",pathLocale:"/en/",extraFields:[]},{title:"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:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/en/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSEDBRIDGE - enum",slug:"xposedbridge-enum",link:"#xposedbridge-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:"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:"InjectYukiHookWithXposed - annotation",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/en/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/en/",extraFields:[]},{title:"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:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSEDBRIDGE - enum",slug:"xposedbridge-enum",link:"#xposedbridge-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:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isXSharePrefsReadable - field",slug:"isxshareprefsreadable-field",link:"#isxshareprefsreadable-field",children:[]},{level:2,title:"isRunInNewXShareMode - field",slug:"isruninnewxsharemode-field",link:"#isruninnewxsharemode-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/en/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/en/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleApplication - class",headers:[{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookDataChannel - class",headers:[{level:2,title:"NameSpace - class",slug:"namespace-class",link:"#namespace-class",children:[{level:3,title:"with - method",slug:"with-method",link:"#with-method",children:[]},{level:3,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:3,title:"put - method",slug:"put-method-1",link:"#put-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"wait - method",slug:"wait-method-1",link:"#wait-method-1",children:[]},{level:3,title:"checkingVersionEquals - method",slug:"checkingversionequals-method",link:"#checkingversionequals-method",children:[]},{level:3,title:"obtainLoggerInMemoryData - method",slug:"obtainloggerinmemorydata-method",link:"#obtainloggerinmemorydata-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookModulePrefs - class",headers:[{level:2,title:"isXSharePrefsReadable - field",slug:"isxshareprefsreadable-field",link:"#isxshareprefsreadable-field",children:[]},{level:2,title:"isRunInNewXShareMode - field",slug:"isruninnewxsharemode-field",link:"#isruninnewxsharemode-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"IYukiHookXposedInit - interface",headers:[{level:2,title:"onInit - method",slug:"oninit-method",link:"#oninit-method",children:[]},{level:2,title:"onHook - method",slug:"onhook-method",link:"#onhook-method",children:[]},{level:2,title:"onXposedEvent - method",slug:"onxposedevent-method",link:"#onxposedevent-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",pathLocale:"/en/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"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:"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:"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:"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/dummy/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/dummy/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/dummy/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:"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:"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:"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:"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:"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:"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/dummy/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/dummy/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/dummy/YukiResources.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:"ChannelData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.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:"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:"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:[]}],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:"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:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/en/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/en/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"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:"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:[]}],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:"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:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppActivity - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleAppCompatActivity - class",headers:[{level:2,title:"moduleTheme - field",slug:"moduletheme-field",link:"#moduletheme-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModuleContextThemeWrapper - class",headers:[{level:2,title:"applyConfiguration - method",slug:"applyconfiguration-method",link:"#applyconfiguration-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Br=ye(hf),df=()=>Br;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Br.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=Y(()=>e.value.filter(n=>n.pathLocale===t.value));return Y(()=>{const n=l.value.trim().toLowerCase();if(!n)return[];const a=[],r=(s,c)=>{sa(n,[c.title])&&a.push({link:`${s.path}#${c.slug}`,title:s.title,header:c.title});for(const h of c.children){if(a.length>=i.value)return;r(s,h)}};for(const s of o.value){if(a.length>=i.value)break;if(sa(n,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const c of s.headers){if(a.length>=i.value)break;r(s,c)}}return a})},pf=e=>{const t=ye(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},mf=ue({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:l,maxSuggestions:i}=Ei(e),o=Jt(),n=Wl(),a=df(),r=ye(null),s=ye(!1),c=ye(""),h=Y(()=>{var P;return(P=t.value[n.value])!=null?P:{}}),p=uf({searchIndex:a,routeLocale:n,query:c,maxSuggestions:i}),{focusIndex:m,focusNext:g,focusPrev:x}=pf(p);cf({input:r,hotKeys:l});const L=Y(()=>s.value&&!!p.value.length),E=()=>{!L.value||x()},k=()=>{!L.value||g()},b=P=>{if(!L.value)return;const H=p.value[P];!H||o.push(H.link).then(()=>{c.value="",m.value=0})};return()=>he("form",{class:"search-box",role:"search"},[he("input",{ref:r,type:"search",placeholder:h.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:P=>c.value=P.target.value,onKeydown:P=>{switch(P.key){case"ArrowUp":{E();break}case"ArrowDown":{k();break}case"Enter":{P.preventDefault(),b(m.value);break}}}}),L.value&&he("ul",{class:"suggestions",onMouseleave:()=>m.value=-1},p.value.map(({link:P,title:H,header:U},ee)=>he("li",{class:["suggestion",{focus:m.value===ee}],onMouseenter:()=>m.value=ee,onMousedown:()=>b(ee)},he("a",{href:P,onClick:w=>w.preventDefault()},[he("span",{class:"page-title"},H),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Ht({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Yd,Xd,nu,cu,mu,nf,vf];var Ur=ye(es),Wr=Co({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),gt=ye(Wr),Ot=()=>gt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{Ur.value[e.key]=()=>Promise.resolve(e),e.key===gt.value.key&&(gt.value=e)});var Xr=Symbol(""),vt=()=>{const e=Me(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=Me(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=Me(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=Me(No);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Tt=ye(Ah),Gr=()=>Tt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Tt.value=e});var Qr=Symbol(""),jo=()=>{const e=Me(Qr);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},xf=Symbol(""),Ut=gl({resolvePageData:async e=>{const t=Ur.value[e],l=await(t==null?void 0:t());return l!=null?l:Wr},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,l)=>{const i=be(t.description)?t.description:l.description,o=[...te(t.head)?t.head:[],...l.head,["title",{},e],["meta",{name:"description",content:i}]];return Ih(o)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>pr(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),$o=ue({name:"ClientOnly",setup(e,t){const l=ye(!1);return Ze(()=>{l.value=!0}),()=>{var i,o;return l.value?(o=(i=t.slots).default)==null?void 0:o.call(i):null}}}),Ef=ue({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Ot(),l=Y(()=>mr[e.pageKey||t.value.key]);return()=>l.value?he(l.value):he("div","404 Not Found")}}),Cf="Layout",Rf="NotFound",Lf=oi.reduce((e,t)=>({...e,...t.layouts}),{}),ca=ue({name:"Vuepress",setup(){const e=Ot(),t=Y(()=>{let l;if(e.value.path){const i=e.value.frontmatter.layout;be(i)?l=i:l=Cf}else l=Rf;return Lf[l]});return()=>he(t.value)}}),Yo=e=>Ul(e)?e:`${Gr().value.base}${ur(e)}`;const Pf=[["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-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-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-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-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-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-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-6e47300f","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.html",{title:"CurrentClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass.md"]],["v-69c1c226","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.html",{title:"GenericClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass.md"]],["v-735374af","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.html",{title:"HookClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookClass.md"]],["v-1c516d22","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.html",{title:"HookResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/HookResources.md"]],["v-66735bfe","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.html",{title:"VariousClass - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass.md"]],["v-3ac40680","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5e81af42","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-516df326","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.html",{title:"YukiBaseHooker - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.md"]],["v-213d88b3","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md"]],["v-448e9585","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",{title:"YukiHookFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.md"]],["v-004a009e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",{title:"LoggerFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.md"]],["v-75a9b636","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-100b529c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-8293d958","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-7b0abf86","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-5309e4a0","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-a2615d0c","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-ba01a600","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-7fec5836","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-7414265a","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-003862c2","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-1d680acc","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-5e874c45","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.md"]],["v-4ea62475","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.md"]],["v-ef79cde2","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.md"]],["v-5acc12ab","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.md"]],["v-14ec8671","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.md"]],["v-4709ad58","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html",{title:"ModuleApplication - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.md"]],["v-632be8ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html",{title:"YukiHookDataChannel - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md"]],["v-5858709e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-763140ee","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.html",{title:"IYukiHookXposedInit - interface"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit.md"]],["v-4fca92c0","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.md"]],["v-2a898c66","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.md"]],["v-a71937aa","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder.md"]],["v-42e0f0ab","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder.md"]],["v-a4aa4d00","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder.md"]],["v-0f1e3594","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.md"]],["v-35faec91","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.md"]],["v-2c04b82a","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html",{title:"YukiResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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-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-3d943532","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.md"]],["v-526c4200","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.md"]],["v-68541dca","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html",{title:"YukiResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.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-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-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-08b70f7f","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules.md"]],["v-21f64ebf","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules.md"]],["v-77f11cf9","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules.md"]],["v-64827680","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.md"]],["v-2d5d16db","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html",{title:"ModuleAppActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.md"]],["v-cadbe48e","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html",{title:"ModuleAppCompatActivity - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.md"]],["v-78731c50","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html",{title:"ModuleContextThemeWrapper - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper","/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.md"]],["v-1b2ad030","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules.md"]],["v-547a3c3c","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules.md"]],["v-58c26516","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules.md"]],["v-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 Af=()=>Pf.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}]),Tf=Gh,If=()=>{const e=Fd({history:Tf(dr(Tt.value.base)),routes:Af(),scrollBehavior:(t,l,i)=>i||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,l)=>{var i;(t.path!==l.path||l===mt)&&([gt.value]=await Promise.all([Ut.resolvePageData(t.name),(i=mr[t.name])==null?void 0:i.__asyncLoader()]))}),e},wf=e=>{e.component("ClientOnly",$o),e.component("Content",Ef)},Of=(e,t)=>{const l=Y(()=>Ut.resolveRouteLocale(Tt.value.locales,t.currentRoute.value.path)),i=Y(()=>Ut.resolveSiteLocaleData(Tt.value,l.value)),o=Y(()=>Ut.resolvePageFrontmatter(gt.value)),n=Y(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=Y(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=Y(()=>Ut.resolvePageLang(gt.value));return e.provide(No,l),e.provide(Qr,i),e.provide(Xr,o),e.provide(_f,n),e.provide(qr,a),e.provide(Kr,r),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>o.value},$head:{get:()=>a.value},$headTitle:{get:()=>n.value},$lang:{get:()=>r.value},$page:{get:()=>gt.value},$routeLocale:{get:()=>l.value},$site:{get:()=>Tt.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>Yo}}),{pageData:gt,pageFrontmatter:o,pageHead:a,pageHeadTitle:n,pageLang:r,routeLocale:l,siteData:Tt,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),Ze(()=>{o(),n(),dt(()=>e.path,()=>n())})},zf=([e,t,l=""])=>{const i=Object.entries(t).map(([r,s])=>be(s)?`[${r}="${s}"]`:s===!0?`[${r}]`:"").join(""),o=`head > ${e}${i}`;return Array.from(document.querySelectorAll(o)).find(r=>r.innerText===l)||null},Df=([e,t,l])=>{if(!be(e))return null;const i=document.createElement(e);return Oo(t)&&Object.entries(t).forEach(([o,n])=>{be(n)?i.setAttribute(o,n):n===!0&&i.setAttribute(o,"")}),be(l)&&i.appendChild(document.createTextNode(l)),i},Mf=Lh,Hf=async()=>{var l;const e=Mf({name:"VuepressApp",setup(){var i;Ff();for(const o of oi)(i=o.setup)==null||i.call(o);return()=>[he(Lr),...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:Tt}));return e.use(t),{app:e,router:t}};Hf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ae as _,jc as a,fe as b,J as c,Hf as createVueApp,oe as d,Mt as e,N as o,_t as r,He as w}; diff --git a/docs/assets/app.b0c3bf74.js b/docs/assets/app.b0c3bf74.js deleted file mode 100644 index ee0459b0..00000000 --- a/docs/assets/app.b0c3bf74.js +++ /dev/null @@ -1,10 +0,0 @@ -const Zr="modulepreload",Jr=function(e){return"/YukiHookAPI/"+e},Xo={},d=function(t,l,i){return!l||l.length===0?t():Promise.all(l.map(o=>{if(o=Jr(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":Zr,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.1b76ac9e.js"),[]).then(({data:e})=>e),"v-c0c85b84":()=>d(()=>import("./index.html.6cc32291.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>d(()=>import("./index.html.872aa7a1.js"),[]).then(({data:e})=>e),"v-13b430a0":()=>d(()=>import("./example.html.13ac887a.js"),[]).then(({data:e})=>e),"v-6a609e09":()=>d(()=>import("./home.html.4d8cac8a.js"),[]).then(({data:e})=>e),"v-b4f1a468":()=>d(()=>import("./knowledge.html.1352f5de.js"),[]).then(({data:e})=>e),"v-c0d5dada":()=>d(()=>import("./move-to-new-api.html.508c5312.js"),[]).then(({data:e})=>e),"v-24840ff0":()=>d(()=>import("./quick-start.html.eacb83f2.js"),[]).then(({data:e})=>e),"v-a2fab4d6":()=>d(()=>import("./yukihookapi-projectbuilder.html.d499d226.js"),[]).then(({data:e})=>e),"v-41967128":()=>d(()=>import("./about.html.c0115524.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>d(()=>import("./changelog.html.55546508.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>d(()=>import("./contacts.html.3df7cacf.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>d(()=>import("./future.html.2cf8d6de.js"),[]).then(({data:e})=>e),"v-c8deafb2":()=>d(()=>import("./home.html.cad3998c.js"),[]).then(({data:e})=>e),"v-c6114c9e":()=>d(()=>import("./api-example.html.f5361b1b.js"),[]).then(({data:e})=>e),"v-5b43296c":()=>d(()=>import("./api-exception.html.ac2a5859.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.557dcdf1.js"),[]).then(({data:e})=>e),"v-7b22efaf":()=>d(()=>import("./example.html.a036bda1.js"),[]).then(({data:e})=>e),"v-efb45d4c":()=>d(()=>import("./home.html.f6f658d0.js"),[]).then(({data:e})=>e),"v-277b35ca":()=>d(()=>import("./knowledge.html.7104405e.js"),[]).then(({data:e})=>e),"v-77d752a2":()=>d(()=>import("./move-to-new-api.html.78f39fa5.js"),[]).then(({data:e})=>e),"v-72889797":()=>d(()=>import("./quick-start.html.e309979a.js"),[]).then(({data:e})=>e),"v-7a15fe3b":()=>d(()=>import("./about.html.7638d3a2.js"),[]).then(({data:e})=>e),"v-3f851d14":()=>d(()=>import("./changelog.html.368d515d.js"),[]).then(({data:e})=>e),"v-193cf592":()=>d(()=>import("./contacts.html.5dc8225c.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>d(()=>import("./future.html.94bd226b.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>d(()=>import("./home.html.f6b9c2a4.js"),[]).then(({data:e})=>e),"v-9cfea7fc":()=>d(()=>import("./api-example.html.47c311e0.js"),[]).then(({data:e})=>e),"v-72c12b7d":()=>d(()=>import("./api-exception.html.72ebad13.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.cd65195d.js"),[]).then(({data:e})=>e),"v-55c11626":()=>d(()=>import("./yukihookapi-projectbuilder.html.ed4fa356.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.09c0b222.js"),[]).then(({data:e})=>e),"v-1f0f591e":()=>d(()=>import("./logger.html.0fee6876.js"),[]).then(({data:e})=>e),"v-001858e3":()=>d(()=>import("./reflection.html.2e612549.js"),[]).then(({data:e})=>e),"v-598546c6":()=>d(()=>import("./xposed-channel.html.b798a8f8.js"),[]).then(({data:e})=>e),"v-0d914225":()=>d(()=>import("./xposed-storage.html.5fd9a913.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.412bbdd6.js"),[]).then(({data:e})=>e),"v-33c1dc26":()=>d(()=>import("./logger.html.1cedacb2.js"),[]).then(({data:e})=>e),"v-581ddb9c":()=>d(()=>import("./reflection.html.ff24950f.js"),[]).then(({data:e})=>e),"v-2e6ad66c":()=>d(()=>import("./xposed-channel.html.96712a39.js"),[]).then(({data:e})=>e),"v-68bebbf4":()=>d(()=>import("./xposed-storage.html.c35a7041.js"),[]).then(({data:e})=>e),"v-6931cb54":()=>d(()=>import("./YukiHookAPI.html.476693ca.js"),[]).then(({data:e})=>e),"v-30f3ba1e":()=>d(()=>import("./InjectYukiHookWithXposed.html.cf9b500d.js"),[]).then(({data:e})=>e),"v-3ac40680":()=>d(()=>import("./YukiMemberHookCreator.html.37dcaec4.js"),[]).then(({data:e})=>e),"v-5e81af42":()=>d(()=>import("./YukiResourcesHookCreator.html.46168b72.js"),[]).then(({data:e})=>e),"v-6e47300f":()=>d(()=>import("./CurrentClass.html.641fcd58.js"),[]).then(({data:e})=>e),"v-69c1c226":()=>d(()=>import("./GenericClass.html.3a0e1ac6.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.7c81aa10.js"),[]).then(({data:e})=>e),"v-516df326":()=>d(()=>import("./YukiBaseHooker.html.b68236f9.js"),[]).then(({data:e})=>e),"v-213d88b3":()=>d(()=>import("./ReflectionFactory.html.a7379f4b.js"),[]).then(({data:e})=>e),"v-448e9585":()=>d(()=>import("./YukiHookFactory.html.64f654a6.js"),[]).then(({data:e})=>e),"v-004a009e":()=>d(()=>import("./LoggerFactory.html.348193ab.js"),[]).then(({data:e})=>e),"v-75a9b636":()=>d(()=>import("./HookParam.html.f98d02d2.js"),[]).then(({data:e})=>e),"v-100b529c":()=>d(()=>import("./PackageParam.html.37aae471.js"),[]).then(({data:e})=>e),"v-4709ad58":()=>d(()=>import("./ModuleApplication.html.a386b8db.js"),[]).then(({data:e})=>e),"v-632be8ee":()=>d(()=>import("./YukiHookDataChannel.html.74e08a45.js"),[]).then(({data:e})=>e),"v-763140ee":()=>d(()=>import("./IYukiHookXposedInit.html.78a55860.js"),[]).then(({data:e})=>e),"v-5858709e":()=>d(()=>import("./YukiHookModulePrefs.html.5eb62ec3.js"),[]).then(({data:e})=>e),"v-5e874c45":()=>d(()=>import("./ComponentTypeFactory.html.0026a7b8.js"),[]).then(({data:e})=>e),"v-4ea62475":()=>d(()=>import("./GraphicsTypeFactory.html.bfb4e259.js"),[]).then(({data:e})=>e),"v-ef79cde2":()=>d(()=>import("./ViewTypeFactory.html.612b6202.js"),[]).then(({data:e})=>e),"v-5acc12ab":()=>d(()=>import("./DefinedTypeFactory.html.ba3bdd0b.js"),[]).then(({data:e})=>e),"v-14ec8671":()=>d(()=>import("./VariableTypeFactory.html.550d3346.js"),[]).then(({data:e})=>e),"v-0f719471":()=>d(()=>import("./BaseFinder.html.8f275c85.js"),[]).then(({data:e})=>e),"v-1e2cbc9c":()=>d(()=>import("./ConstructorFinder.html.7de4f560.js"),[]).then(({data:e})=>e),"v-22449c48":()=>d(()=>import("./FieldFinder.html.25713065.js"),[]).then(({data:e})=>e),"v-fd738322":()=>d(()=>import("./MethodFinder.html.03ce70ab.js"),[]).then(({data:e})=>e),"v-3d943532":()=>d(()=>import("./YukiModuleResources.html.d8e27a7f.js"),[]).then(({data:e})=>e),"v-526c4200":()=>d(()=>import("./YukiResForwarder.html.0dadd8db.js"),[]).then(({data:e})=>e),"v-68541dca":()=>d(()=>import("./YukiResources.html.7b0a4824.js"),[]).then(({data:e})=>e),"v-0a4de82f":()=>d(()=>import("./YukiXposedEvent.html.a93ee4ef.js"),[]).then(({data:e})=>e),"v-493d37f6":()=>d(()=>import("./ChannelData.html.194718a1.js"),[]).then(({data:e})=>e),"v-d99f7f36":()=>d(()=>import("./PrefsData.html.d3cf97f9.js"),[]).then(({data:e})=>e),"v-53bcae06":()=>d(()=>import("./ModulePreferenceFragment.html.0c7dadc7.js"),[]).then(({data:e})=>e),"v-053599a5":()=>d(()=>import("./YukiHookAPI.html.77b2a461.js"),[]).then(({data:e})=>e),"v-1b2ad030":()=>d(()=>import("./CountRules.html.2639d392.js"),[]).then(({data:e})=>e),"v-547a3c3c":()=>d(()=>import("./ModifierRules.html.f7582dc2.js"),[]).then(({data:e})=>e),"v-58c26516":()=>d(()=>import("./NameRules.html.47e512e4.js"),[]).then(({data:e})=>e),"v-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-4b468415":()=>d(()=>import("./ModuleClassLoader.html.0388bffd.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.7b666428.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.bd237fa4.js"),[]).then(({data:e})=>e),"v-0d0fcec2":()=>d(()=>import("./ReflectionFactory.html.7c031771.js"),[]).then(({data:e})=>e),"v-65091354":()=>d(()=>import("./YukiHookFactory.html.61db5860.js"),[]).then(({data:e})=>e),"v-36aec5ad":()=>d(()=>import("./LoggerFactory.html.b830497c.js"),[]).then(({data:e})=>e),"v-45111efc":()=>d(()=>import("./DexClassFinder.html.78c5f805.js"),[]).then(({data:e})=>e),"v-60cbe1b4":()=>d(()=>import("./HookParam.html.b19d4ad2.js"),[]).then(({data:e})=>e),"v-b381a126":()=>d(()=>import("./PackageParam.html.7a64d58c.js"),[]).then(({data:e})=>e),"v-71147891":()=>d(()=>import("./YukiMemberHookCreator.html.d3b181da.js"),[]).then(({data:e})=>e),"v-5ed1ceee":()=>d(()=>import("./YukiResourcesHookCreator.html.8aaa9934.js"),[]).then(({data:e})=>e),"v-e288ce96":()=>d(()=>import("./YukiBaseHooker.html.99eec744.js"),[]).then(({data:e})=>e),"v-8293d958":()=>d(()=>import("./ComponentTypeFactory.html.5af05d7d.js"),[]).then(({data:e})=>e),"v-7b0abf86":()=>d(()=>import("./GraphicsTypeFactory.html.a3936b7c.js"),[]).then(({data:e})=>e),"v-5309e4a0":()=>d(()=>import("./ViewTypeFactory.html.7da3eef4.js"),[]).then(({data:e})=>e),"v-a2615d0c":()=>d(()=>import("./DefinedTypeFactory.html.8137c32c.js"),[]).then(({data:e})=>e),"v-ba01a600":()=>d(()=>import("./VariableTypeFactory.html.d4c9dbd1.js"),[]).then(({data:e})=>e),"v-7fec5836":()=>d(()=>import("./ModuleApplication.html.57573770.js"),[]).then(({data:e})=>e),"v-7414265a":()=>d(()=>import("./YukiHookDataChannel.html.75c012dd.js"),[]).then(({data:e})=>e),"v-1d680acc":()=>d(()=>import("./IYukiHookXposedInit.html.b37a852b.js"),[]).then(({data:e})=>e),"v-003862c2":()=>d(()=>import("./YukiHookModulePrefs.html.e0f278fe.js"),[]).then(({data:e})=>e),"v-0f1e3594":()=>d(()=>import("./YukiModuleResources.html.e5c5fb30.js"),[]).then(({data:e})=>e),"v-35faec91":()=>d(()=>import("./YukiResForwarder.html.4e23df75.js"),[]).then(({data:e})=>e),"v-2c04b82a":()=>d(()=>import("./YukiResources.html.afb6fb92.js"),[]).then(({data:e})=>e),"v-19e7277e":()=>d(()=>import("./YukiXposedEvent.html.560fa41c.js"),[]).then(({data:e})=>e),"v-2f64a2d4":()=>d(()=>import("./ChannelData.html.f8f818f6.js"),[]).then(({data:e})=>e),"v-58ed8298":()=>d(()=>import("./PrefsData.html.dfd7c23c.js"),[]).then(({data:e})=>e),"v-23e1a817":()=>d(()=>import("./ModulePreferenceFragment.html.764fecc3.js"),[]).then(({data:e})=>e),"v-2a898c66":()=>d(()=>import("./DexClassFinder.html.5d8e12f0.js"),[]).then(({data:e})=>e),"v-4fca92c0":()=>d(()=>import("./BaseFinder.html.a5dbb7a7.js"),[]).then(({data:e})=>e),"v-a71937aa":()=>d(()=>import("./ConstructorFinder.html.0c13dc47.js"),[]).then(({data:e})=>e),"v-42e0f0ab":()=>d(()=>import("./FieldFinder.html.4410e26c.js"),[]).then(({data:e})=>e),"v-a4aa4d00":()=>d(()=>import("./MethodFinder.html.97f89f93.js"),[]).then(({data:e})=>e),"v-08b70f7f":()=>d(()=>import("./ConstructorRules.html.d62bae6c.js"),[]).then(({data:e})=>e),"v-21f64ebf":()=>d(()=>import("./FieldRules.html.9b04521f.js"),[]).then(({data:e})=>e),"v-77f11cf9":()=>d(()=>import("./MemberRules.html.a071b3c6.js"),[]).then(({data:e})=>e),"v-64827680":()=>d(()=>import("./MethodRules.html.c10f9770.js"),[]).then(({data:e})=>e),"v-52995ef7":()=>d(()=>import("./CountRules.html.2d5ab94d.js"),[]).then(({data:e})=>e),"v-8d5ce71a":()=>d(()=>import("./ModifierRules.html.c36dff17.js"),[]).then(({data:e})=>e),"v-f5b1ffb2":()=>d(()=>import("./NameRules.html.00ac96fb.js"),[]).then(({data:e})=>e),"v-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-2d4e0da6":()=>d(()=>import("./ModuleClassLoader.html.2ddf88b6.js"),[]).then(({data:e})=>e),"v-5e375d98":()=>d(()=>import("./MemberRulesResult.html.e79843c3.js"),[]).then(({data:e})=>e),"v-a42f54a4":()=>d(()=>import("./ConstructorRules.html.f8d7dd83.js"),[]).then(({data:e})=>e),"v-3e67a42e":()=>d(()=>import("./FieldRules.html.6858f0d6.js"),[]).then(({data:e})=>e),"v-2cab152c":()=>d(()=>import("./MemberRules.html.b3e5d297.js"),[]).then(({data:e})=>e),"v-5388621e":()=>d(()=>import("./MethodRules.html.146b27be.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,Zt=_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 Zo(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 Jo(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:Zo,set:Jo,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:Zo,set:Jo,delete:en,clear:tn,forEach:Gl(!1,!0)},l={get(n){return Xl(this,n,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!1)},i={get(n){return Xl(this,n,!0,!0)},get size(){return Kl(this,!0)},has(n){return ql.call(this,n,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Gl(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(n=>{e[n]=Ql(n,!1,!1),l[n]=Ql(n,!0,!1),t[n]=Ql(n,!1,!0),i[n]=Ql(n,!0,!0)}),[e,l,t,i]}const[Os,Fs,zs,Ds]=ws();function Eo(e,t){const l=t?e?Ds:zs:e?Fs:Os;return(i,o,n)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?i:Reflect.get(de(l,o)&&o in i?l:i,o,n)}const Ms={get:Eo(!1,!1)},Hs={get:Eo(!1,!0)},Ss={get:Eo(!0,!1)},Ca=new WeakMap,Ra=new WeakMap,Pa=new WeakMap,Vs=new WeakMap;function Ns(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function js(e){return e.__v_skip||!Object.isExtensible(e)?0:Ns(cs(e))}function gl(e){return Ol(e)?e:Ro(e,!1,Ea,Ms,Ca)}function $s(e){return Ro(e,!1,Is,Hs,Ra)}function Co(e){return Ro(e,!0,Ts,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 Aa(e){return ni(e,"__v_skip",!0),e}const Fl=e=>Oe(e)?gl(e):e,Po=e=>Oe(e)?Co(e):e;function Ta(e){It&&nt&&(e=ke(e),_a(e.dep||(e.dep=bo())))}function Ia(e,t){e=ke(e),e.dep&&Ki(e.dep)}function De(e){return!!(e&&e.__v_isRef===!0)}function ye(e){return Oa(e,!1)}function wa(e){return Oa(e,!0)}function Oa(e,t){return De(e)?e:new Ys(e,t)}class Ys{constructor(t,l){this.__v_isShallow=l,this.dep=void 0,this.__v_isRef=!0,this._rawValue=l?t:ke(t),this._value=l?t:Fl(t)}get value(){return Ta(this),this._value}set value(t){t=this.__v_isShallow?t:ke(t),wl(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Fl(t),Ia(this))}}function O(e){return De(e)?e.value:e}const Bs={get:(e,t,l)=>O(Reflect.get(e,t,l)),set:(e,t,l,i)=>{const o=e[t];return De(o)&&!De(l)?(o.value=l,!0):Reflect.set(e,t,l,i)}};function Fa(e){return sl(e)?e:new Proxy(e,Bs)}function Ei(e){const t=te(e)?new Array(e.length):{};for(const l in e)t[l]=Ws(e,l);return t}class Us{constructor(t,l,i){this._object=t,this._key=l,this._defaultValue=i,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ws(e,t,l){const i=e[t];return De(i)?i:new Us(e,t,l)}class Xs{constructor(t,l,i,o){this._setter=l,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Ia(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=i}get value(){const t=ke(this);return Ta(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function qs(e,t,l=!1){let i,o;const n=ae(e);return n?(i=e,o=rt):(i=e.get,o=e.set),new Xs(i,o,n||!o,l)}function wt(e,t,l,i){let o;try{o=i?e(...i):e()}catch(n){Nl(n,t,l)}return o}function lt(e,t,l,i){if(ae(e)){const n=wt(e,t,l,i);return n&&pa(n)&&n.catch(a=>{Nl(a,t,l)}),n}const o=[];for(let n=0;n>>1;zl(qe[i])ft&&qe.splice(t,1)}function Ma(e,t,l,i){te(e)?l.push(...e):(!t||!t.includes(e,e.allowRecurse?i+1:i))&&l.push(e),Da()}function Zs(e){Ma(e,El,Rl,il)}function Js(e){Ma(e,Pt,Pl,ol)}function Ci(e,t=null){if(Rl.length){for(Zi=t,El=[...new Set(Rl)],Rl.length=0,il=0;ilzl(l)-zl(i)),ol=0;ole.id==null?1/0:e.id;function Ha(e){Qi=!1,ai=!0,Ci(e),qe.sort((l,i)=>zl(l)-zl(i));const t=rt;try{for(ft=0;ftg.trim())),p&&(o=l.map(ga))}let r,s=i[r=Oi(t)]||i[r=Oi(ut(t))];!s&&n&&(s=i[r=Oi(Zt(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,Zt(t))||de(e,t))}let Ve=null,Va=null;function si(e){const t=Ve;return Ve=e,Va=e&&e.type.__scopeId||null,t}function He(e,t=Ve,l){if(!t||e._n)return e;const i=(...o)=>{i._d&&pn(-1);const n=si(t),a=e(...o);return si(n),i._d&&pn(1),a};return i._n=!0,i._c=!0,i._d=!0,i}function zi(e){const{type:t,vnode:l,proxy:i,withProxy:o,props:n,propsOptions:[a],slots:r,attrs:s,emit:c,render:h,renderCache:p,data:m,setupState:g,ctx:x,inheritAttrs:P}=e;let E,k;const b=si(e);try{if(l.shapeFlag&4){const H=o||i;E=ot(h.call(H,H,p,n,g,m,x)),k=s}else{const H=t;E=ot(H.length>1?H(n,{attrs:s,slots:r,emit:c}):H(n,null)),k=t.props?s:tc(s)}}catch(H){Al.length=0,Nl(H,e,1),E=oe(Ge)}let L=E;if(k&&P!==!1){const H=Object.keys(k),{shapeFlag:U}=L;H.length&&U&7&&(a&&H.some(fo)&&(k=lc(k,a)),L=Dt(L,k))}return l.dirs&&(L=Dt(L),L.dirs=L.dirs?L.dirs.concat(l.dirs):l.dirs),l.transition&&(L.transition=l.transition),E=L,si(b),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):Js(e)}function Gt(e,t){if(Fe){let l=Fe.provides;const i=Fe.parent&&Fe.parent.provides;i===l&&(l=Fe.provides=Object.create(i)),l[e]=t}}function Me(e,t,l=!1){const i=Fe||Ve;if(i){const o=i.parent==null?i.vnode.appContext&&i.vnode.appContext.provides:i.parent.provides;if(o&&e in o)return o[e];if(arguments.length>1)return l&&ae(t)?t.call(i.proxy):t}}const on={};function dt(e,t,l){return ja(e,t,l)}function ja(e,t,{immediate:l,deep:i,flush:o,onTrack:n,onTrigger:a}=Ce){const r=Fe;let s,c=!1,h=!1;if(De(e)?(s=()=>e.value,c=Gi(e)):sl(e)?(s=()=>e,i=!0):te(e)?(h=!0,c=e.some(k=>sl(k)||Gi(k)),s=()=>e.map(k=>{if(De(k))return k.value;if(sl(k))return qt(k);if(ae(k))return wt(k,r,2)})):ae(e)?t?s=()=>wt(e,r,2):s=()=>{if(!(r&&r.isUnmounted))return p&&p(),lt(e,r,3,[m])}:s=rt,t&&i){const k=s;s=()=>qt(k())}let p,m=k=>{p=E.onStop=()=>{wt(k,r,4)}};if(dl)return m=rt,t?l&<(t,r,3,[s(),h?[]:void 0,m]):s(),rt;let g=h?[]:on;const x=()=>{if(!!E.active)if(t){const k=E.run();(i||c||(h?k.some((b,L)=>wl(b,g[L])):wl(k,g)))&&(p&&p(),lt(t,r,3,[k,g===on?void 0:g,m]),g=k)}else E.run()};x.allowRecurse=!!t;let P;o==="sync"?P=x:o==="post"?P=()=>Be(x,r&&r.suspense):P=()=>Zs(x);const E=new _o(s,P);return t?l?x():g=E.run():o==="post"?Be(E.run.bind(E),r&&r.suspense):E.run(),()=>{E.stop(),r&&r.scope&&go(r.scope.effects,E)}}function ac(e,t,l){const i=this.proxy,o=be(e)?e.includes(".")?$a(i,e):()=>i[e]:e.bind(i,i);let n;ae(t)?n=t:(n=t.handler,l=t);const a=Fe;hl(this);const r=ja(o,n.bind(i),l);return a?hl(a):Qt(),r}function $a(e,t){const l=t.split(".");return()=>{let i=e;for(let o=0;o{qt(l,t)});else if(fa(e))for(const l in e)qt(e[l],t);return e}function rc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ze(()=>{e.isMounted=!0}),Yl(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],sc={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},setup(e,{slots:t}){const l=wo(),i=rc();let o;return()=>{const n=t.default&&Ua(t.default(),!0);if(!n||!n.length)return;let a=n[0];if(n.length>1){for(const P of n)if(P.type!==Ge){a=P;break}}const r=ke(e),{mode:s}=r;if(i.isLeaving)return Di(a);const c=nn(a);if(!c)return Di(a);const h=Ji(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=Ji(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,b)=>{const L=Ba(i,m);L[String(m.key)]=m,E._leaveCb=()=>{k(),E._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=b})}return a}}},Ya=sc;function Ba(e,t){const{leavingVNodes:l}=e;let i=l.get(t.type);return i||(i=Object.create(null),l.set(t.type,i)),i}function Ji(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:b}=t,L=String(e.key),H=Ba(l,e),U=(v,q)=>{v&<(v,i,9,q)},ee=(v,q)=>{const B=q[1];U(v,q),te(v)?v.every(G=>G.length<=1)&&B():v.length<=1&&B()},w={mode:n,persisted:a,beforeEnter(v){let q=r;if(!l.isMounted)if(o)q=P||r;else return;v._leaveCb&&v._leaveCb(!0);const B=H[L];B&&Wt(e,B)&&B.el._leaveCb&&B.el._leaveCb(),U(q,[v])},enter(v){let q=s,B=c,G=h;if(!l.isMounted)if(o)q=E||s,B=k||c,G=b||h;else return;let C=!1;const S=v._enterCb=F=>{C||(C=!0,F?U(G,[v]):U(B,[v]),w.delayedLeave&&w.delayedLeave(),v._enterCb=void 0)};q?ee(q,[v,S]):S()},leave(v,q){const B=String(e.key);if(v._enterCb&&v._enterCb(!0),l.isUnmounting)return q();U(p,[v]);let G=!1;const C=v._leaveCb=S=>{G||(G=!0,q(),S?U(x,[v]):U(g,[v]),v._leaveCb=void 0,H[B]===e&&delete H[B])};H[B]=e,m?ee(m,[v,C]):C()},clone(v){return Ji(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 _(e){ae(e)&&(e={loader:e});const{loader:t,loadingComponent:l,errorComponent:i,delay:o=200,timeout:n,suspensible:a=!0,onError:r}=e;let s=null,c,h=0;const p=()=>(h++,s=null,m()),m=()=>{let g;return s||(g=s=t().catch(x=>{if(x=x instanceof Error?x:new Error(String(x)),r)return new Promise((P,E)=>{r(x,()=>P(p()),()=>E(x),h+1)});throw x}).then(x=>g!==s&&s?s:(x&&(x.__esModule||x[Symbol.toStringTag]==="Module")&&(x=x.default),c=x,x)))};return ue({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return c},setup(){const g=Fe;if(c)return()=>Mi(c,g);const x=b=>{s=null,Nl(b,g,13,!i)};if(a&&g.suspense||dl)return m().then(b=>()=>Mi(b,g)).catch(b=>(x(b),()=>i?oe(i,{error:b}):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 b=new Error(`Async component timed out after ${n}ms.`);x(b),E.value=b}},n),m().then(()=>{P.value=!0,g.parent&&$l(g.parent.vnode)&&Ao(g.parent.update)}).catch(b=>{x(b),E.value=b}),()=>{if(P.value&&c)return Mi(c,g);if(E.value&&i)return oe(i,{error:E.value});if(l&&!k.value)return oe(l)}}})}function Mi(e,{vnode:{ref:t,props:l,children:i,shapeFlag:o},parent:n}){const a=oe(e,l,i);return a.ref=t,a}const $l=e=>e.type.__isKeepAlive;function cc(e,t){Wa(e,"a",t)}function hc(e,t){Wa(e,"da",t)}function Wa(e,t,l=Fe){const i=e.__wdc||(e.__wdc=()=>{let o=l;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Pi(t,i,l),l){let o=l.parent;for(;o&&o.parent;)$l(o.parent.vnode)&&dc(i,t,l,o),o=o.parent}}function dc(e,t,l,i){const o=Pi(t,e,i,!0);Li(()=>{go(i[t],o)},l)}function Pi(e,t,l=Fe,i=!1){if(l){const o=l[e]||(l[e]=[]),n=t.__weh||(t.__weh=(...a)=>{if(l.isUnmounted)return;ml(),hl(l);const r=lt(t,l,e,a);return Qt(),fl(),r});return i?o.unshift(n):o.push(n),n}}const yt=e=>(t,l=Fe)=>(!dl||e==="sp")&&Pi(e,t,l),Xa=yt("bm"),Ze=yt("m"),uc=yt("bu"),pc=yt("u"),Yl=yt("bum"),Li=yt("um"),mc=yt("sp"),fc=yt("rtg"),gc=yt("rtc");function kc(e,t=Fe){Pi("ec",e,t)}function ci(e,t){const l=Ve;if(l===null)return e;const i=Ti(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)?Ti(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=()=>Ao(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:b,destroyed:L,unmounted:H,render:U,renderTracked:ee,renderTriggered:w,errorCaptured:v,serverPrefetch:q,expose:B,inheritAttrs:G,components:C,directives:S,filters:F}=t;if(c&&xc(c,i,null,e.appContext.config.unwrapInjectedRef),a)for(const le in a){const se=a[le];ae(se)&&(i[le]=se.bind(l))}if(o){const le=o.call(l,l);Oe(le)&&(e.data=gl(le))}if(lo=!0,n)for(const le in n){const se=n[le],Ie=ae(se)?se.bind(l,l):ae(se.get)?se.get.bind(l,l):rt,Ne=!ae(se)&&ae(se.set)?se.set.bind(l):rt,Ue=Y({get:Ie,set:Ne});Object.defineProperty(i,le,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:Je=>Ue.value=Je})}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(Ze,m),j(uc,g),j(pc,x),j(cc,P),j(hc,E),j(kc,v),j(gc,ee),j(fc,w),j(Yl,b),j(Li,H),j(mc,q),te(B))if(B.length){const le=e.exposed||(e.exposed={});B.forEach(se=>{Object.defineProperty(le,se,{get:()=>l[se],set:Ie=>l[se]=Ie})})}else e.exposed||(e.exposed={});U&&e.render===rt&&(e.render=U),G!=null&&(e.inheritAttrs=G),C&&(e.components=C),S&&(e.directives=S)}function xc(e,t,l=rt,i=!1){te(e)&&(e=io(e));for(const o in e){const n=e[o];let a;Oe(n)?"default"in n?a=Me(n.from||o,n.default,!0):a=Me(n.from||o):a=Me(n),De(a)&&i?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function rn(e,t,l){lt(te(e)?e.map(i=>i.bind(t.proxy)):e.bind(t.proxy),t,l)}function Ga(e,t,l,i){const o=i.includes(".")?$a(l,i):()=>l[i];if(be(e)){const n=t[e];ae(n)&&dt(o,n)}else if(ae(e))dt(o,e.bind(l));else if(Oe(e))if(te(e))e.forEach(n=>Ga(n,t,l,i));else{const n=ae(e.handler)?e.handler.bind(l):t[e.handler];ae(n)&&dt(o,n,e)}}function Qa(e){const t=e.type,{mixins:l,extends:i}=t,{mixins:o,optionsCache:n,config:{optionMergeStrategies:a}}=e.appContext,r=n.get(t);let s;return r?s=r:!o.length&&!l&&!i?s=t:(s={},o.length&&o.forEach(c=>di(s,c,a,!0)),di(s,t,a)),n.set(t,s),s}function di(e,t,l,i=!1){const{mixins:o,extends:n}=t;n&&di(e,n,l,!0),o&&o.forEach(a=>di(e,a,l,!0));for(const a in t)if(!(i&&a==="expose")){const r=Ec[a]||l&&l[a];e[a]=r?r(e[a],t[a]):t[a]}return e}const Ec={data:sn,props:Yt,emits:Yt,methods:Yt,computed:Yt,beforeCreate:je,created:je,beforeMount:je,mounted:je,beforeUpdate:je,updated:je,beforeDestroy:je,beforeUnmount:je,destroyed:je,unmounted:je,activated:je,deactivated:je,errorCaptured:je,serverPrefetch:je,components:Yt,directives:Yt,watch:Rc,provide:sn,inject:Cc};function sn(e,t){return t?e?function(){return Se(ae(e)?e.call(this,this):e,ae(t)?t.call(this,this):t)}:t:e}function Cc(e,t){return Yt(io(e),io(t))}function io(e){if(te(e)){const t={};for(let l=0;l0)&&!(a&16)){if(a&8){const h=e.vnode.dynamicProps;for(let p=0;p{s=!0;const[m,g]=Ja(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",To=e=>te(e)?e.map(ot):[ot(e)],Ac=(e,t,l)=>{if(t._n)return t;const i=He((...o)=>To(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]=Ac(o,n,i);else if(n!=null){const a=To(n);t[o]=()=>a}}},lr=(e,t)=>{const l=To(t);e.slots.default=()=>l},Tc=(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,Ai,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,Ti(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?Ti(i.component)||i.component.proxy:i.el,a=o?null:n,{i:r,r:s}=e,c=t&&t.r,h=r.refs===Ce?r.refs={}:r.refs,p=r.setupState;if(c!=null&&c!==s&&(be(c)?(h[c]=null,de(p,c)&&(p[c]=null)):De(c)&&(c.value=null)),ae(s))wt(s,r,12,[a,h]);else{const m=be(s),g=De(s);if(m||g){const x=()=>{if(e.f){const P=m?h[s]:s.value;o?te(P)&&go(P,n):te(P)?P.includes(n)||P.push(n):m?(h[s]=[n],de(p,s)&&(p[s]=h[s])):(s.value=[n],e.k&&(h[e.k]=s.value))}else m?(h[s]=a,de(p,s)&&(p[s]=a)):g&&(s.value=a,e.k&&(h[e.k]=a))};a?(x.id=-1,Be(x,l)):x()}}}let Et=!1;const Zl=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Jl=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,b)=>{if(!b.hasChildNodes()){l(null,k,b),ri(),b._vnode=k;return}Et=!1,p(b.firstChild,k,null,null,null),ri(),b._vnode=k,Et&&console.error("Hydration completed but contains mismatches.")},p=(k,b,L,H,U,ee=!1)=>{const w=Jl(k)&&k.data==="[",v=()=>P(k,b,L,H,U,w),{type:q,ref:B,shapeFlag:G,patchFlag:C}=b,S=k.nodeType;b.el=k,C===-2&&(ee=!1,b.dynamicChildren=null);let F=null;switch(q){case Dl:S!==3?b.children===""?(s(b.el=o(""),a(k),k),F=k):F=v():(k.data!==b.children&&(Et=!0,k.data=b.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=!b.children.length;for(let j=0;j{ee=ee||!!b.dynamicChildren;const{type:w,props:v,patchFlag:q,shapeFlag:B,dirs:G}=b,C=w==="input"&&G||w==="option";if(C||q!==-1){if(G&&ht(b,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,b),G&&ht(b,null,L,"beforeMount"),((S=v&&v.onVnodeMounted)||G)&&Na(()=>{S&&tt(S,L,b),G&&ht(b,null,L,"mounted")},H),B&16&&!(v&&(v.innerHTML||v.textContent))){let F=g(k.firstChild,b,k,L,H,U,ee);for(;F;){Et=!0;const re=F;F=F.nextSibling,r(re)}}else B&8&&k.textContent!==b.children&&(Et=!0,k.textContent=b.children)}return k.nextSibling},g=(k,b,L,H,U,ee,w)=>{w=w||!!b.dynamicChildren;const v=b.children,q=v.length;for(let B=0;B{const{slotScopeIds:w}=b;w&&(U=U?U.concat(w):w);const v=a(k),q=g(n(k),b,v,L,H,U,ee);return q&&Jl(q)&&q.data==="]"?n(b.anchor=q):(Et=!0,s(b.anchor=c("]"),v,q),q)},P=(k,b,L,H,U,ee)=>{if(Et=!0,b.el=null,ee){const q=E(k);for(;;){const B=n(k);if(B&&B!==q)r(B);else break}}const w=n(k),v=a(k);return r(k),l(null,b,v,w,L,H,Zl(v),U),w},E=k=>{let b=0;for(;k;)if(k=n(k),k&&Jl(k)&&(k.data==="["&&b++,k.data==="]")){if(b===0)return n(k);b--}return k};return[h,p]}const Be=Na;function zc(e){return Dc(e,Fc)}function Dc(e,t){const l=us();l.__VUE__=!0;const{insert:i,remove:o,patchProp:n,createElement:a,createText:r,createComment:s,setText:c,setElementText:h,parentNode:p,nextSibling:m,setScopeId:g=rt,cloneNode:x,insertStaticContent:P}=e,E=(u,f,y,T=null,A=null,z=null,$=!1,D=null,V=!!f.dynamicChildren)=>{if(u===f)return;u&&!Wt(u,f)&&(T=X(u),Ye(u,A,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,T);break;case Ge:b(u,f,y,T);break;case Ll:u==null&&L(f,y,T,$);break;case Pe:S(u,f,y,T,A,z,$,D,V);break;default:K&1?ee(u,f,y,T,A,z,$,D,V):K&6?F(u,f,y,T,A,z,$,D,V):(K&64||K&128)&&I.process(u,f,y,T,A,z,$,D,V,_e)}Q!=null&&A&&ui(Q,u&&u.ref,z,f||u,!f)},k=(u,f,y,T)=>{if(u==null)i(f.el=r(f.children),y,T);else{const A=f.el=u.el;f.children!==u.children&&c(A,f.children)}},b=(u,f,y,T)=>{u==null?i(f.el=s(f.children||""),y,T):f.el=u.el},L=(u,f,y,T)=>{[u.el,u.anchor]=P(u.children,f,y,T,u.el,u.anchor)},H=({el:u,anchor:f},y,T)=>{let A;for(;u&&u!==f;)A=m(u),i(u,y,T),u=A;i(f,y,T)},U=({el:u,anchor:f})=>{let y;for(;u&&u!==f;)y=m(u),o(u),u=y;o(f)},ee=(u,f,y,T,A,z,$,D,V)=>{$=$||f.type==="svg",u==null?w(f,y,T,A,z,$,D,V):B(u,f,A,z,$,D,V)},w=(u,f,y,T,A,z,$,D)=>{let V,I;const{type:Q,props:K,shapeFlag:Z,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),Z&8?h(V,u.children):Z&16&&q(u.children,V,null,T,A,z&&Q!=="foreignObject",$,D),xe&&ht(u,null,T,"created"),K){for(const Le in K)Le!=="value"&&!Cl(Le)&&n(V,Le,null,K[Le],z,u.children,T,A,M);"value"in K&&n(V,"value",null,K.value),(I=K.onVnodeBeforeMount)&&tt(I,T,u)}v(V,u,u.scopeId,$,T)}xe&&ht(u,null,T,"beforeMount");const Ee=(!A||A&&!A.pendingBranch)&&ne&&!ne.persisted;Ee&&ne.beforeEnter(V),i(V,f,y),((I=K&&K.onVnodeMounted)||Ee||xe)&&Be(()=>{I&&tt(I,T,u),Ee&&ne.enter(V),xe&&ht(u,null,T,"mounted")},A)},v=(u,f,y,T,A)=>{if(y&&g(u,y),T)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,Z=f.props||Ce;let ne;y&&Nt(y,!1),(ne=Z.onVnodeBeforeUpdate)&&tt(ne,y,f,u),Q&&ht(f,u,y,"beforeUpdate"),y&&Nt(y,!0);const pe=A&&f.type!=="foreignObject";if(I?G(u.dynamicChildren,I,D,y,T,pe,z):$||Ie(u,f,D,null,y,T,pe,z,!1),V>0){if(V&16)C(D,f,K,Z,y,T,A);else if(V&2&&K.class!==Z.class&&n(D,"class",null,Z.class,A),V&4&&n(D,"style",K.style,Z.style,A),V&8){const xe=f.dynamicProps;for(let Ee=0;Ee{ne&&tt(ne,y,f,u),Q&&ht(f,u,y,"updated")},T)},G=(u,f,y,T,A,z,$)=>{for(let D=0;D{if(y!==T){for(const D in T){if(Cl(D))continue;const V=T[D],I=y[D];V!==I&&D!=="value"&&n(u,D,I,V,$,f.children,A,z,M)}if(y!==Ce)for(const D in y)!Cl(D)&&!(D in T)&&n(u,D,y[D],null,$,f.children,A,z,M);"value"in T&&n(u,"value",y.value,T.value)}},S=(u,f,y,T,A,z,$,D,V)=>{const I=f.el=u?u.el:r(""),Q=f.anchor=u?u.anchor:r("");let{patchFlag:K,dynamicChildren:Z,slotScopeIds:ne}=f;ne&&(D=D?D.concat(ne):ne),u==null?(i(I,y,T),i(Q,y,T),q(f.children,y,Q,A,z,$,D,V)):K>0&&K&64&&Z&&u.dynamicChildren?(G(u.dynamicChildren,Z,y,A,z,$,D),(f.key!=null||A&&f===A.subTree)&&or(u,f,!0)):Ie(u,f,y,Q,A,z,$,D,V)},F=(u,f,y,T,A,z,$,D,V)=>{f.slotScopeIds=D,u==null?f.shapeFlag&512?A.ctx.activate(f,y,T,$,V):re(f,y,T,A,z,$,V):j(u,f,V)},re=(u,f,y,T,A,z,$)=>{const D=u.component=Bc(u,T,A);if($l(u)&&(D.ctx.renderer=_e),Uc(D),D.asyncDep){if(A&&A.registerDep(D,le),!u.el){const V=D.subTree=oe(Ge);b(null,V,f,y)}return}le(D,u,f,y,A,z,$)},j=(u,f,y)=>{const T=f.component=u.component;if(ic(u,f,y))if(T.asyncDep&&!T.asyncResolved){se(T,f,y);return}else T.next=f,Qs(T.update),T.update();else f.el=u.el,T.vnode=f},le=(u,f,y,T,A,z,$)=>{const D=()=>{if(u.isMounted){let{next:Q,bu:K,u:Z,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,A,z),Q.el=Le.el,xe===null&&oc(u,Le.el),Z&&Be(Z,A),(Ee=Q.props&&Q.props.onVnodeUpdated)&&Be(()=>tt(Ee,ne,Q,pe),A)}else{let Q;const{el:K,props:Z}=f,{bm:ne,m:pe,parent:xe}=u,Ee=cl(f);if(Nt(u,!1),ne&&Fi(ne),!Ee&&(Q=Z&&Z.onVnodeBeforeMount)&&tt(Q,xe,f),Nt(u,!0),K&&ie){const Le=()=>{u.subTree=zi(u),ie(K,u.subTree,u,A,null)};Ee?f.type.__asyncLoader().then(()=>!u.isUnmounted&&Le()):Le()}else{const Le=u.subTree=zi(u);E(null,Le,y,T,u,A,z),f.el=Le.el}if(pe&&Be(pe,A),!Ee&&(Q=Z&&Z.onVnodeMounted)){const Le=f;Be(()=>tt(Q,xe,Le),A)}(f.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&u.a&&Be(u.a,A),u.isMounted=!0,f=y=T=null}},V=u.effect=new _o(D,()=>Ao(I),u.scope),I=u.update=()=>V.run();I.id=u.uid,Nt(u,!0),I()},se=(u,f,y)=>{f.component=u;const T=u.vnode.props;u.vnode=f,u.next=null,Lc(u,f.props,T,y),Ic(u,f.children,y),ml(),Ci(void 0,u.update),fl()},Ie=(u,f,y,T,A,z,$,D,V=!1)=>{const I=u&&u.children,Q=u?u.shapeFlag:0,K=f.children,{patchFlag:Z,shapeFlag:ne}=f;if(Z>0){if(Z&128){Ue(I,K,y,T,A,z,$,D,V);return}else if(Z&256){Ne(I,K,y,T,A,z,$,D,V);return}}ne&8?(Q&16&&M(I,A,z),K!==I&&h(y,K)):Q&16?ne&16?Ue(I,K,y,T,A,z,$,D,V):M(I,A,z,!0):(Q&8&&h(y,""),ne&16&&q(K,y,T,A,z,$,D,V))},Ne=(u,f,y,T,A,z,$,D,V)=>{u=u||al,f=f||al;const I=u.length,Q=f.length,K=Math.min(I,Q);let Z;for(Z=0;ZQ?M(u,A,z,!0,!1,K):q(f,y,T,A,z,$,D,V,K)},Ue=(u,f,y,T,A,z,$,D,V)=>{let I=0;const Q=f.length;let K=u.length-1,Z=Q-1;for(;I<=K&&I<=Z;){const ne=u[I],pe=f[I]=V?Lt(f[I]):ot(f[I]);if(Wt(ne,pe))E(ne,pe,y,null,A,z,$,D,V);else break;I++}for(;I<=K&&I<=Z;){const ne=u[K],pe=f[Z]=V?Lt(f[Z]):ot(f[Z]);if(Wt(ne,pe))E(ne,pe,y,null,A,z,$,D,V);else break;K--,Z--}if(I>K){if(I<=Z){const ne=Z+1,pe=neZ)for(;I<=K;)Ye(u[I],A,z,!0),I++;else{const ne=I,pe=I,xe=new Map;for(I=pe;I<=Z;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=Z-pe+1;let el=!1,Bo=0;const kl=new Array(it);for(I=0;I=it){Ye(We,A,z,!0);continue}let ct;if(We.key!=null)ct=xe.get(We.key);else for(Ee=pe;Ee<=Z;Ee++)if(kl[Ee-pe]===0&&Wt(We,f[Ee])){ct=Ee;break}ct===void 0?Ye(We,A,z,!0):(kl[ct-pe]=I+1,ct>=Bo?Bo=ct:el=!0,E(We,f[ct],y,null,A,z,$,D,V),Le++)}const Uo=el?Mc(kl):al;for(Ee=Uo.length-1,I=it-1;I>=0;I--){const We=pe+I,ct=f[We],Wo=We+1{const{el:z,type:$,transition:D,children:V,shapeFlag:I}=u;if(I&6){Je(u.component.subTree,f,y,T);return}if(I&128){u.suspense.move(f,y,T);return}if(I&64){$.move(u,f,y,_e);return}if($===Pe){i(z,f,y);for(let K=0;KD.enter(z),A);else{const{leave:K,delayLeave:Z,afterLeave:ne}=D,pe=()=>i(z,f,y),xe=()=>{K(z,()=>{pe(),ne&&ne()})};Z?Z(z,pe,xe):xe()}else i(z,f,y)},Ye=(u,f,y,T=!1,A=!1)=>{const{type:z,props:$,ref:D,children:V,dynamicChildren:I,shapeFlag:Q,patchFlag:K,dirs:Z}=u;if(D!=null&&ui(D,null,y,u,!0),Q&256){f.ctx.deactivate(u);return}const ne=Q&1&&Z,pe=!cl(u);let xe;if(pe&&(xe=$&&$.onVnodeBeforeUnmount)&&tt(xe,f,u),Q&6)W(u.component,y,T);else{if(Q&128){u.suspense.unmount(y,T);return}ne&&ht(u,null,f,"beforeUnmount"),Q&64?u.type.remove(u,f,y,A,_e,T):I&&(z!==Pe||K>0&&K&64)?M(I,f,y,!1,!0):(z===Pe&&K&384||!A&&Q&16)&&M(V,f,y),T&&Vt(u)}(pe&&(xe=$&&$.onVnodeUnmounted)||ne)&&Be(()=>{xe&&tt(xe,f,u),ne&&ht(u,null,f,"unmounted")},y)},Vt=u=>{const{type:f,el:y,anchor:T,transition:A}=u;if(f===Pe){R(y,T);return}if(f===Ll){U(u);return}const z=()=>{o(y),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(u.shapeFlag&1&&A&&!A.persisted){const{leave:$,delayLeave:D}=A,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:T,scope:A,update:z,subTree:$,um:D}=u;T&&Fi(T),A.stop(),z&&(z.active=!1,Ye($,u,f,y)),D&&Be(D,f),Be(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},M=(u,f,y,T=!1,A=!1,z=0)=>{for(let $=z;$u.shapeFlag&6?X(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el),ge=(u,f,y)=>{u==null?f._vnode&&Ye(f._vnode,null,null,!0):E(f._vnode||null,u,f,null,null,null,y),ri(),f._vnode=u},_e={p:E,um:Ye,m:Je,r:Vt,mt:re,mc:q,pc:Ie,pbc:G,n:X,o:e};let ce,ie;return t&&([ce,ie]=t(_e)),{render:ge,hydrate:ce,createApp:Oc(ge,ce)}}function Nt({effect:e,update:t},l){e.allowRecurse=t.allowRecurse=l}function or(e,t,l=!1){const i=e.children,o=t.children;if(te(i)&&te(o))for(let n=0;n>1,e[l[r]]0&&(t[i]=l[n-1]),l[n]=i)}}for(n=l.length,a=l[n-1];n-- >0;)l[n]=a,a=t[a];return l}const Hc=e=>e.__isTeleport,Pe=Symbol(void 0),Dl=Symbol(void 0),Ge=Symbol(void 0),Ll=Symbol(void 0),Al=[];let at=null;function N(e=!1){Al.push(at=e?null:[])}function Sc(){Al.pop(),at=Al[Al.length-1]||null}let Ml=1;function pn(e){Ml+=e}function nr(e){return e.dynamicChildren=Ml>0?at||al:null,Sc(),Ml>0&&at&&at.push(e),e}function J(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 Ai="__vInternal",ar=({key:e})=>e!=null?e:null,li=({ref:e,ref_key:t,ref_for:l})=>e!=null?be(e)||De(e)||ae(e)?{i:Ve,r:e,k:t,f:!!l}:e:null;function fe(e,t=null,l=null,i=0,o=null,n=e===Pe?0:1,a=!1,r=!1){const s={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ar(t),ref:t&&li(t),scopeId:Va,slotScopeIds:null,children:l,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:n,patchFlag:i,dynamicProps:o,dynamicChildren:null,appContext:null};return r?(Io(s,l),n&128&&e.normalize(s)):l&&(s.shapeFlag|=be(l)?8:16),Ml>0&&!a&&at&&(s.patchFlag>0||n&6)&&s.patchFlag!==32&&at.push(s),s}const oe=Vc;function Vc(e,t=null,l=null,i=0,o=null,n=!1){if((!e||e===vc)&&(e=Ge),pi(e)){const r=Dt(e,t,!0);return l&&Io(r,l),Ml>0&&!n&&at&&(r.shapeFlag&6?at[at.indexOf(e)]=r:at.push(r)),r.patchFlag|=-2,r}if(Gc(e)&&(e=e.__vccOpts),t){t=Nc(t);let{class:r,style:s}=t;r&&!be(r)&&(t.class=Ke(r)),Oe(s)&&(La(s)&&!te(s)&&(s=Se({},s)),t.style=Sl(s))}const a=be(e)?1:nc(e)?128:Hc(e)?64:Oe(e)?4:ae(e)?2:0;return fe(e,t,l,i,o,a,n,!0)}function Nc(e){return e?La(e)||Ai in e?Se({},e):e:null}function Dt(e,t,l=!1){const{props:i,ref:o,patchFlag:n,children:a}=e,r=t?no(i||{},t):i;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:r,key:r&&ar(r),ref:t&&t.ref?l&&o?te(o)?o.concat(li(t)):[o,li(t)]:li(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Pe?n===-1?16:n|16:n,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Dt(e.ssContent),ssFallback:e.ssFallback&&Dt(e.ssFallback),el:e.el,anchor:e.anchor}}function Mt(e=" ",t=0){return oe(Dl,null,e,t)}function jc(e,t){const l=oe(Ll,null,e);return l.staticCount=t,l}function Te(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&&!(Ai in t)?t._ctx=Ve:o===3&&Ve&&(Ve.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ae(t)?(t={default:t,_ctx:Ve},l=32):(t=String(t),i&64?(l=16,t=[Mt(t)]):l=8);e.children=t,e.shapeFlag|=l}function no(...e){const t={};for(let l=0;lFe||Ve,hl=e=>{Fe=e,e.scope.on()},Qt=()=>{Fe&&Fe.scope.off(),Fe=null};function rr(e){return e.vnode.shapeFlag&4}let dl=!1;function Uc(e,t=!1){dl=t;const{props:l,children:i}=e.vnode,o=rr(e);Pc(e,l,o,t),Tc(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=Aa(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 Ti(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Fa(Aa(e.exposed)),{get(t,l){if(l in t)return t[l];if(l in hi)return hi[l](e)}}))}function Kc(e,t=!0){return ae(e)?e.displayName||e.name:e.name||t&&e.__name}function Gc(e){return ae(e)&&"__vccOpts"in e}const Y=(e,t)=>qs(e,t,dl);function he(e,t,l){const i=arguments.length;return i===2?Oe(t)&&!te(t)?pi(t)?oe(e,null,[t]):oe(e,t):oe(e,null,t):(i>3?l=Array.prototype.slice.call(arguments,2):i===3&&pi(l)&&(l=[l]),oe(e,t,l))}const Qc="3.2.37",Zc="http://www.w3.org/2000/svg",Xt=typeof document<"u"?document:null,gn=Xt&&Xt.createElement("template"),Jc={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(Zc,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(Zt(i),l.replace(kn,""),"important"):e[i]=l}}const vn=["Webkit","Moz","ms"],Hi={};function lh(e,t){const l=Hi[t];if(l)return l;let i=ut(t);if(i!=="filter"&&i in e)return Hi[t]=i;i=yi(i);for(let o=0;o{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const l=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(l&&Number(l[1])<=53)}return[e,t]})();let ro=0;const ah=Promise.resolve(),rh=()=>{ro=0},sh=()=>ro||(ah.then(rh),ro=cr());function ch(e,t,l,i){e.addEventListener(t,l,i)}function hh(e,t,l,i){e.removeEventListener(t,l,i)}function dh(e,t,l,i,o=null){const n=e._vei||(e._vei={}),a=n[t];if(i&&a)a.value=i;else{const[r,s]=uh(t);if(i){const c=n[t]=ph(i,o);ch(e,r,c,s)}else a&&(hh(e,r,a,s),n[t]=void 0)}}const _n=/(?:Once|Passive|Capture)$/;function uh(e){let t;if(_n.test(e)){t={};let l;for(;l=e.match(_n);)e=e.slice(0,e.length-l[0].length),t[l[0].toLowerCase()]=!0}return[Zt(e.slice(2)),t]}function ph(e,t){const l=i=>{const o=i.timeStamp||cr();(nh||o>=l.attached-1)&<(mh(i,l.value),t,5,[i])};return l.value=e,l.attached=sh(),l}function mh(e,t){if(te(t)){const l=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{l.call(e),e._stopped=!0},t.map(i=>o=>!o._stopped&&i&&i(o))}else return t}const yn=/^on[a-z]/,fh=(e,t,l,i,o=!1,n,a,r,s)=>{t==="class"?eh(e,i,o):t==="style"?th(e,l,i):Vl(t)?fo(t)||dh(e,t,l,i,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gh(e,t,i,o))?oh(e,t,i,n,a,r,s):(t==="true-value"?e._trueValue=i:t==="false-value"&&(e._falseValue=i),ih(e,t,i,o))};function gh(e,t,l,i){return i?!!(t==="innerHTML"||t==="textContent"||t in e&&yn.test(t)&&ae(l)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||yn.test(t)&&be(l)?!1:t in e}const Ct="transition",vl="animation",Bl=(e,{slots:t})=>he(Ya,kh(e),t);Bl.displayName="Transition";const hr={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Bl.props=Se({},Ya.props,hr);const jt=(e,t=[])=>{te(e)?e.forEach(l=>l(...t)):e&&e(...t)},xn=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function kh(e){const t={};for(const C in e)C in hr||(t[C]=e[C]);if(e.css===!1)return t;const{name:l="v",type:i,duration:o,enterFromClass:n=`${l}-enter-from`,enterActiveClass:a=`${l}-enter-active`,enterToClass:r=`${l}-enter-to`,appearFromClass:s=n,appearActiveClass:c=a,appearToClass:h=r,leaveFromClass:p=`${l}-leave-from`,leaveActiveClass:m=`${l}-leave-active`,leaveToClass:g=`${l}-leave-to`}=e,x=vh(o),P=x&&x[0],E=x&&x[1],{onBeforeEnter:k,onEnter:b,onEnterCancelled:L,onLeave:H,onLeaveCancelled:U,onBeforeAppear:ee=k,onAppear:w=b,onAppearCancelled:v=L}=t,q=(C,S,F)=>{$t(C,S?h:r),$t(C,S?c:a),F&&F()},B=(C,S)=>{C._isLeaving=!1,$t(C,p),$t(C,g),$t(C,m),S&&S()},G=C=>(S,F)=>{const re=C?w:b,j=()=>q(S,C,F);jt(re,[S,j]),En(()=>{$t(S,C?s:n),Rt(S,C?h:r),xn(re)||Cn(S,i,P,j)})};return Se(t,{onBeforeEnter(C){jt(k,[C]),Rt(C,n),Rt(C,a)},onBeforeAppear(C){jt(ee,[C]),Rt(C,s),Rt(C,c)},onEnter:G(!1),onAppear:G(!0),onLeave(C,S){C._isLeaving=!0;const F=()=>B(C,S);Rt(C,p),yh(),Rt(C,m),En(()=>{!C._isLeaving||($t(C,p),Rt(C,g),xn(H)||Cn(C,i,E,F))}),jt(H,[C,F])},onEnterCancelled(C){q(C,!1),jt(L,[C])},onAppearCancelled(C){q(C,!0),jt(v,[C])},onLeaveCancelled(C){B(C),jt(U,[C])}})}function vh(e){if(e==null)return null;if(Oe(e))return[Si(e.enter),Si(e.leave)];{const t=Si(e);return[t,t]}}function Si(e){return ga(e)}function Rt(e,t){t.split(/\s+/).forEach(l=>l&&e.classList.add(l)),(e._vtc||(e._vtc=new Set)).add(t)}function $t(e,t){t.split(/\s+/).forEach(i=>i&&e.classList.remove(i));const{_vtc:l}=e;l&&(l.delete(t),l.size||(e._vtc=void 0))}function En(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let bh=0;function Cn(e,t,l,i){const o=e._endId=++bh,n=()=>{o===e._endId&&i()};if(l)return setTimeout(n,l);const{type:a,timeout:r,propCount:s}=_h(e,t);if(!a)return i();const c=a+"end";let h=0;const p=()=>{e.removeEventListener(c,m),n()},m=g=>{g.target===e&&++h>=s&&p()};setTimeout(()=>{h(l[x]||"").split(", "),o=i(Ct+"Delay"),n=i(Ct+"Duration"),a=Rn(o,n),r=i(vl+"Delay"),s=i(vl+"Duration"),c=Rn(r,s);let h=null,p=0,m=0;t===Ct?a>0&&(h=Ct,p=a,m=n.length):t===vl?c>0&&(h=vl,p=c,m=s.length):(p=Math.max(a,c),h=p>0?a>c?Ct:vl:null,m=h?h===Ct?n.length:s.length:0);const g=h===Ct&&/\b(transform|all)(,|$)/.test(l[Ct+"Property"]);return{type:h,timeout:p,propCount:m,hasTransform:g}}function Rn(e,t){for(;e.lengthPn(l)+Pn(e[i])))}function Pn(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function yh(){return document.body.offsetHeight}const xh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Eh=(e,t)=>l=>{if(!("key"in l))return;const i=Zt(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},Jc);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 Ah=JSON.parse('{"base":"/YukiHookAPI/","lang":"en-US","title":"Yuki Hook API","description":"An efficient Kotlin version of the Xposed Hook API","head":[["link",{"rel":"icon","href":"/YukiHookAPI/images/logo.png"}]],"locales":{"/en/":{"lang":"en-US","description":"An efficient Kotlin version of the Xposed Hook API"},"/zh-cn/":{"lang":"zh-CN","description":"\u4E00\u4E2A\u4F7F\u7528 Kotlin \u91CD\u6784\u7684\u8F7B\u91CF\u3001\u9AD8\u6548\u3001\u7A33\u5B9A\u7684 Xposed Hook API"}}}');var Th=([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=Th(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":_(()=>d(()=>import("./index.html.1624fa4e.js"),[])),"v-c0c85b84":_(()=>d(()=>import("./index.html.ff71767b.js"),[])),"v-2d0a870d":_(()=>d(()=>import("./index.html.ae6b8bb7.js"),[])),"v-13b430a0":_(()=>d(()=>import("./example.html.f9dd7429.js"),[])),"v-6a609e09":_(()=>d(()=>import("./home.html.4331e424.js"),[])),"v-b4f1a468":_(()=>d(()=>import("./knowledge.html.41a63e9f.js"),[])),"v-c0d5dada":_(()=>d(()=>import("./move-to-new-api.html.40a99cb4.js"),[])),"v-24840ff0":_(()=>d(()=>import("./quick-start.html.1db5f7e1.js"),[])),"v-a2fab4d6":_(()=>d(()=>import("./yukihookapi-projectbuilder.html.51a98dc8.js"),[])),"v-41967128":_(()=>d(()=>import("./about.html.a6bc94b3.js"),[])),"v-0e6c3476":_(()=>d(()=>import("./changelog.html.0f19712c.js"),[])),"v-6cf86266":_(()=>d(()=>import("./contacts.html.9f3c0025.js"),[])),"v-3106ca14":_(()=>d(()=>import("./future.html.a63589de.js"),[])),"v-c8deafb2":_(()=>d(()=>import("./home.html.51cf628f.js"),[])),"v-c6114c9e":_(()=>d(()=>import("./api-example.html.23507b21.js"),[])),"v-5b43296c":_(()=>d(()=>import("./api-exception.html.487a5b72.js"),[])),"v-2ee67152":_(()=>d(()=>import("./api-using.html.1c4a5d47.js"),[])),"v-154d6f69":_(()=>d(()=>import("./r8-proguard.html.66f29d39.js"),[])),"v-af73b3d0":_(()=>d(()=>import("./xposed-using.html.68fb179d.js"),[])),"v-7b22efaf":_(()=>d(()=>import("./example.html.ff3cdf38.js"),[])),"v-efb45d4c":_(()=>d(()=>import("./home.html.8b5b4f42.js"),[])),"v-277b35ca":_(()=>d(()=>import("./knowledge.html.bd978abe.js"),[])),"v-77d752a2":_(()=>d(()=>import("./move-to-new-api.html.01ff3d47.js"),[])),"v-72889797":_(()=>d(()=>import("./quick-start.html.d89bcd22.js"),[])),"v-7a15fe3b":_(()=>d(()=>import("./about.html.f6271e7c.js"),[])),"v-3f851d14":_(()=>d(()=>import("./changelog.html.6b6ac23b.js"),[])),"v-193cf592":_(()=>d(()=>import("./contacts.html.3a3de7e7.js"),[])),"v-ae7b83f2":_(()=>d(()=>import("./future.html.221ddd5c.js"),[])),"v-64fc7bb8":_(()=>d(()=>import("./home.html.8834bf0c.js"),[])),"v-9cfea7fc":_(()=>d(()=>import("./api-example.html.0422de55.js"),[])),"v-72c12b7d":_(()=>d(()=>import("./api-exception.html.9ef206a4.js"),[])),"v-793879e8":_(()=>d(()=>import("./api-using.html.f6be396a.js"),[])),"v-29d6c1ba":_(()=>d(()=>import("./r8-proguard.html.bad8ca81.js"),[])),"v-24e71de7":_(()=>d(()=>import("./xposed-using.html.313fe8ce.js"),[])),"v-55c11626":_(()=>d(()=>import("./yukihookapi-projectbuilder.html.547d751c.js"),[])),"v-6ac5be8e":_(()=>d(()=>import("./host-inject.html.5890a899.js"),[])),"v-357a8d49":_(()=>d(()=>import("./host-lifecycle.html.b91276fb.js"),[])),"v-1f0f591e":_(()=>d(()=>import("./logger.html.f1a6f984.js"),[])),"v-001858e3":_(()=>d(()=>import("./reflection.html.2352eb66.js"),[])),"v-598546c6":_(()=>d(()=>import("./xposed-channel.html.db5aa0b9.js"),[])),"v-0d914225":_(()=>d(()=>import("./xposed-storage.html.ae972879.js"),[])),"v-12042f1f":_(()=>d(()=>import("./host-inject.html.4b98e6f3.js"),[])),"v-deaff1d0":_(()=>d(()=>import("./host-lifecycle.html.fb60eab5.js"),[])),"v-33c1dc26":_(()=>d(()=>import("./logger.html.26841e5b.js"),[])),"v-581ddb9c":_(()=>d(()=>import("./reflection.html.11857a65.js"),[])),"v-2e6ad66c":_(()=>d(()=>import("./xposed-channel.html.fcf7cdd5.js"),[])),"v-68bebbf4":_(()=>d(()=>import("./xposed-storage.html.b021133f.js"),[])),"v-6931cb54":_(()=>d(()=>import("./YukiHookAPI.html.1fa29a43.js"),[])),"v-30f3ba1e":_(()=>d(()=>import("./InjectYukiHookWithXposed.html.f98bfb29.js"),[])),"v-3ac40680":_(()=>d(()=>import("./YukiMemberHookCreator.html.e4d7af24.js"),[])),"v-5e81af42":_(()=>d(()=>import("./YukiResourcesHookCreator.html.7a3865c6.js"),[])),"v-6e47300f":_(()=>d(()=>import("./CurrentClass.html.8e06ec8e.js"),[])),"v-69c1c226":_(()=>d(()=>import("./GenericClass.html.906476af.js"),[])),"v-735374af":_(()=>d(()=>import("./HookClass.html.a8204777.js"),[])),"v-1c516d22":_(()=>d(()=>import("./HookResources.html.74ebe2d5.js"),[])),"v-66735bfe":_(()=>d(()=>import("./VariousClass.html.e0239041.js"),[])),"v-516df326":_(()=>d(()=>import("./YukiBaseHooker.html.a77f957c.js"),[])),"v-213d88b3":_(()=>d(()=>import("./ReflectionFactory.html.f8ba7ee0.js"),[])),"v-448e9585":_(()=>d(()=>import("./YukiHookFactory.html.5003d00d.js"),[])),"v-004a009e":_(()=>d(()=>import("./LoggerFactory.html.afda4d7c.js"),[])),"v-75a9b636":_(()=>d(()=>import("./HookParam.html.ac648aa9.js"),[])),"v-100b529c":_(()=>d(()=>import("./PackageParam.html.2efa079c.js"),[])),"v-4709ad58":_(()=>d(()=>import("./ModuleApplication.html.73c30ddc.js"),[])),"v-632be8ee":_(()=>d(()=>import("./YukiHookDataChannel.html.7c119fab.js"),[])),"v-763140ee":_(()=>d(()=>import("./IYukiHookXposedInit.html.9a2742f6.js"),[])),"v-5858709e":_(()=>d(()=>import("./YukiHookModulePrefs.html.4dc1695f.js"),[])),"v-5e874c45":_(()=>d(()=>import("./ComponentTypeFactory.html.cf5d5250.js"),[])),"v-4ea62475":_(()=>d(()=>import("./GraphicsTypeFactory.html.212a219e.js"),[])),"v-ef79cde2":_(()=>d(()=>import("./ViewTypeFactory.html.c3404bdb.js"),[])),"v-5acc12ab":_(()=>d(()=>import("./DefinedTypeFactory.html.5efcadc8.js"),[])),"v-14ec8671":_(()=>d(()=>import("./VariableTypeFactory.html.3326723f.js"),[])),"v-0f719471":_(()=>d(()=>import("./BaseFinder.html.d36635ff.js"),[])),"v-1e2cbc9c":_(()=>d(()=>import("./ConstructorFinder.html.e01a5106.js"),[])),"v-22449c48":_(()=>d(()=>import("./FieldFinder.html.7bf8878e.js"),[])),"v-fd738322":_(()=>d(()=>import("./MethodFinder.html.bb3a8ed8.js"),[])),"v-3d943532":_(()=>d(()=>import("./YukiModuleResources.html.74158b0c.js"),[])),"v-526c4200":_(()=>d(()=>import("./YukiResForwarder.html.9ec9ec24.js"),[])),"v-68541dca":_(()=>d(()=>import("./YukiResources.html.ed34f5c7.js"),[])),"v-0a4de82f":_(()=>d(()=>import("./YukiXposedEvent.html.15069044.js"),[])),"v-493d37f6":_(()=>d(()=>import("./ChannelData.html.a6594b7c.js"),[])),"v-d99f7f36":_(()=>d(()=>import("./PrefsData.html.ff4818af.js"),[])),"v-53bcae06":_(()=>d(()=>import("./ModulePreferenceFragment.html.3e077a4d.js"),[])),"v-053599a5":_(()=>d(()=>import("./YukiHookAPI.html.f533d3b1.js"),[])),"v-1b2ad030":_(()=>d(()=>import("./CountRules.html.66082c4b.js"),[])),"v-547a3c3c":_(()=>d(()=>import("./ModifierRules.html.0edf97e0.js"),[])),"v-58c26516":_(()=>d(()=>import("./NameRules.html.d6097c6b.js"),[])),"v-1446bdca":_(()=>d(()=>import("./ModuleAppActivity.html.aa34a817.js"),[])),"v-c7cef530":_(()=>d(()=>import("./ModuleAppCompatActivity.html.c7c45ba2.js"),[])),"v-44efb702":_(()=>d(()=>import("./ModuleContextThemeWrapper.html.10294a35.js"),[])),"v-4b468415":_(()=>d(()=>import("./ModuleClassLoader.html.2d39b360.js"),[])),"v-818b3ca6":_(()=>d(()=>import("./InjectYukiHookWithXposed.html.20c5fe08.js"),[])),"v-b6a815c4":_(()=>d(()=>import("./CurrentClass.html.86fa9f30.js"),[])),"v-0183e3fc":_(()=>d(()=>import("./GenericClass.html.ee1f07d7.js"),[])),"v-57506200":_(()=>d(()=>import("./HookClass.html.35dc7066.js"),[])),"v-9af56c1a":_(()=>d(()=>import("./HookResources.html.05daf277.js"),[])),"v-032b1710":_(()=>d(()=>import("./VariousClass.html.083eb230.js"),[])),"v-0d0fcec2":_(()=>d(()=>import("./ReflectionFactory.html.631c97c4.js"),[])),"v-65091354":_(()=>d(()=>import("./YukiHookFactory.html.af2c8a4b.js"),[])),"v-36aec5ad":_(()=>d(()=>import("./LoggerFactory.html.b964404b.js"),[])),"v-45111efc":_(()=>d(()=>import("./DexClassFinder.html.e2733806.js"),[])),"v-60cbe1b4":_(()=>d(()=>import("./HookParam.html.4691cd4c.js"),[])),"v-b381a126":_(()=>d(()=>import("./PackageParam.html.31b391fa.js"),[])),"v-71147891":_(()=>d(()=>import("./YukiMemberHookCreator.html.32154e89.js"),[])),"v-5ed1ceee":_(()=>d(()=>import("./YukiResourcesHookCreator.html.fbd8ab68.js"),[])),"v-e288ce96":_(()=>d(()=>import("./YukiBaseHooker.html.11e0c1ee.js"),[])),"v-8293d958":_(()=>d(()=>import("./ComponentTypeFactory.html.da9b8c9c.js"),[])),"v-7b0abf86":_(()=>d(()=>import("./GraphicsTypeFactory.html.c4d1e55d.js"),[])),"v-5309e4a0":_(()=>d(()=>import("./ViewTypeFactory.html.69d3b402.js"),[])),"v-a2615d0c":_(()=>d(()=>import("./DefinedTypeFactory.html.2ea6dbab.js"),[])),"v-ba01a600":_(()=>d(()=>import("./VariableTypeFactory.html.6b3e75ef.js"),[])),"v-7fec5836":_(()=>d(()=>import("./ModuleApplication.html.c524f410.js"),[])),"v-7414265a":_(()=>d(()=>import("./YukiHookDataChannel.html.88bf0ce2.js"),[])),"v-1d680acc":_(()=>d(()=>import("./IYukiHookXposedInit.html.7e3e4d06.js"),[])),"v-003862c2":_(()=>d(()=>import("./YukiHookModulePrefs.html.bfcdc380.js"),[])),"v-0f1e3594":_(()=>d(()=>import("./YukiModuleResources.html.b28e8497.js"),[])),"v-35faec91":_(()=>d(()=>import("./YukiResForwarder.html.da0ff88b.js"),[])),"v-2c04b82a":_(()=>d(()=>import("./YukiResources.html.7d842109.js"),[])),"v-19e7277e":_(()=>d(()=>import("./YukiXposedEvent.html.bc400f56.js"),[])),"v-2f64a2d4":_(()=>d(()=>import("./ChannelData.html.eeec7743.js"),[])),"v-58ed8298":_(()=>d(()=>import("./PrefsData.html.78eabdcb.js"),[])),"v-23e1a817":_(()=>d(()=>import("./ModulePreferenceFragment.html.1ddb5a30.js"),[])),"v-2a898c66":_(()=>d(()=>import("./DexClassFinder.html.0ca80b25.js"),[])),"v-4fca92c0":_(()=>d(()=>import("./BaseFinder.html.68495a55.js"),[])),"v-a71937aa":_(()=>d(()=>import("./ConstructorFinder.html.1ec30008.js"),[])),"v-42e0f0ab":_(()=>d(()=>import("./FieldFinder.html.f89903c2.js"),[])),"v-a4aa4d00":_(()=>d(()=>import("./MethodFinder.html.97933c3d.js"),[])),"v-08b70f7f":_(()=>d(()=>import("./ConstructorRules.html.a20e5321.js"),[])),"v-21f64ebf":_(()=>d(()=>import("./FieldRules.html.bb621298.js"),[])),"v-77f11cf9":_(()=>d(()=>import("./MemberRules.html.9fa4cbe3.js"),[])),"v-64827680":_(()=>d(()=>import("./MethodRules.html.f5989f03.js"),[])),"v-52995ef7":_(()=>d(()=>import("./CountRules.html.95e4f390.js"),[])),"v-8d5ce71a":_(()=>d(()=>import("./ModifierRules.html.ccf48294.js"),[])),"v-f5b1ffb2":_(()=>d(()=>import("./NameRules.html.eb17d2fc.js"),[])),"v-2d5d16db":_(()=>d(()=>import("./ModuleAppActivity.html.ead779c0.js"),[])),"v-cadbe48e":_(()=>d(()=>import("./ModuleAppCompatActivity.html.8e681c35.js"),[])),"v-78731c50":_(()=>d(()=>import("./ModuleContextThemeWrapper.html.cf03da52.js"),[])),"v-2d4e0da6":_(()=>d(()=>import("./ModuleClassLoader.html.ecfdc324.js"),[])),"v-5e375d98":_(()=>d(()=>import("./MemberRulesResult.html.32168f65.js"),[])),"v-a42f54a4":_(()=>d(()=>import("./ConstructorRules.html.38bd707d.js"),[])),"v-3e67a42e":_(()=>d(()=>import("./FieldRules.html.c2cff299.js"),[])),"v-2cab152c":_(()=>d(()=>import("./MemberRules.html.24752192.js"),[])),"v-5388621e":_(()=>d(()=>import("./MethodRules.html.84dd33bb.js"),[])),"v-b8000f3a":_(()=>d(()=>import("./MemberRulesResult.html.c94d1804.js"),[])),"v-3706649a":_(()=>d(()=>import("./404.html.000669bd.js"),[]))};var Ht=(e={})=>e;function fr(e,t,l){var i,o,n;t===void 0&&(t=50),l===void 0&&(l={});var a=(i=l.isImmediate)!=null&&i,r=(o=l.callback)!=null&&o,s=l.maxWait,c=Date.now(),h=[];function p(){if(s!==void 0){var g=Date.now()-c;if(g+t>=s)return s-g}return t}var m=function(){var g=[].slice.call(arguments),x=this;return new Promise(function(P,E){var k=a&&n===void 0;if(n!==void 0&&clearTimeout(n),n=setTimeout(function(){if(n=void 0,c=Date.now(),!a){var L=e.apply(x,g);r&&r(L),h.forEach(function(H){return(0,H.resolve)(L)}),h=[]}},p()),k){var b=e.apply(x,g);return r&&r(b),P(b)}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 Tl=()=>{},st=Array.isArray,zh=/\/$/,Dh=e=>e.replace(zh,"");function ji(e,t,l="/"){let i,o={},n="",a="";const r=t.indexOf("#");let s=t.indexOf("?");return r=0&&(s=-1),s>-1&&(i=t.slice(0,s),n=t.slice(s+1,r>-1?r:t.length),o=e(n)),r>-1&&(i=i||t.slice(0,r),a=t.slice(r,t.length)),i=Vh(i!=null?i:t,l),{fullPath:i+(n&&"?")+n+a,path:i,query:o,hash:a}}function Mh(e,t){const l=t.query?e(t.query):"";return t.path+(l&&"?")+l+(t.hash||"")}function An(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Hh(e,t,l){const i=t.matched.length-1,o=l.matched.length-1;return i>-1&&i===o&&ul(t.matched[i],l.matched[o])&&gr(t.params,l.params)&&e(t.query)===e(l.query)&&t.hash===l.hash}function ul(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const l in e)if(!Sh(e[l],t[l]))return!1;return!0}function Sh(e,t){return st(e)?Tn(e,t):st(t)?Tn(t,e):e===t}function Tn(e,t){return st(t)?e.length===t.length&&e.every((l,i)=>l===t[i]):e.length===1&&e[0]===t}function Vh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const l=t.split("/"),i=e.split("/");let o=l.length-1,n,a;for(n=0;n1&&o--;else break;return l.slice(0,o).join("/")+"/"+i.slice(n-(n===i.length?1:0)).join("/")}var Hl;(function(e){e.pop="pop",e.push="push"})(Hl||(Hl={}));var Il;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Il||(Il={}));function Nh(e){if(!e)if(nl){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Dh(e)}const jh=/^[^#]+#/;function $h(e,t){return e.replace(jh,"#")+t}function Yh(e,t){const l=document.documentElement.getBoundingClientRect(),i=e.getBoundingClientRect();return{behavior:t.behavior,left:i.left-l.left-(t.left||0),top:i.top-l.top-(t.top||0)}}const Ii=()=>({left:window.pageXOffset,top:window.pageYOffset});function Bh(e){let t;if("el"in e){const l=e.el,i=typeof l=="string"&&l.startsWith("#"),o=typeof l=="string"?i?document.getElementById(l.slice(1)):document.querySelector(l):l;if(!o)return;t=Yh(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function In(e,t){return(history.state?history.state.position-t:-1)+e}const so=new Map;function Uh(e,t){so.set(e,t)}function Wh(e){const t=so.get(e);return so.delete(e),t}let Xh=()=>location.protocol+"//"+location.host;function kr(e,t){const{pathname:l,search:i,hash:o}=t,n=e.indexOf("#");if(n>-1){let r=o.includes(e.slice(n))?e.slice(n).length:1,s=o.slice(r);return s[0]!=="/"&&(s="/"+s),An(s,"")}return An(l,e)+i+o}function qh(e,t,l,i){let o=[],n=[],a=null;const r=({state:m})=>{const g=kr(e,location),x=l.value,P=t.value;let E=0;if(m){if(l.value=g,t.value=m,a&&a===x){a=null;return}E=P?m.position-P.position:0}else i(g);o.forEach(k=>{k(l.value,x,{delta:E,type:Hl.pop,direction:E?E>0?Il.forward:Il.back:Il.unknown})})};function s(){a=l.value}function c(m){o.push(m);const g=()=>{const x=o.indexOf(m);x>-1&&o.splice(x,1)};return n.push(g),g}function h(){const{history:m}=window;!m.state||m.replaceState(ve({},m.state,{scroll:Ii()}),"")}function p(){for(const m of n)m();n=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",h)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",h),{pauseListeners:s,listen:c,destroy:p}}function wn(e,t,l,i=!1,o=!1){return{back:e,current:t,forward:l,replaced:i,position:window.history.length,scroll:o?Ii():null}}function Kh(e){const{history:t,location:l}=window,i={value:kr(e,l)},o={value:t.state};o.value||n(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function n(s,c,h){const p=e.indexOf("#"),m=p>-1?(l.host&&document.querySelector("base")?e:e.slice(p))+s:Xh()+e+s;try{t[h?"replaceState":"pushState"](c,"",m),o.value=c}catch(g){console.error(g),l[h?"replace":"assign"](m)}}function a(s,c){const h=ve({},t.state,wn(o.value.back,s,o.value.forward,!0),c,{position:o.value.position});n(s,h,!0),i.value=s}function r(s,c){const h=ve({},o.value,t.state,{forward:s,scroll:Ii()});n(h.current,h,!0);const p=ve({},wn(i.value,s,null),{position:h.position+1},c);n(s,p,!1),i.value=s}return{location:i,state:o,push:r,replace:a}}function Gh(e){e=Nh(e);const t=Kh(e),l=qh(e,t.state,t.location,t.replace);function i(n,a=!0){a||l.pauseListeners(),history.go(n)}const o=ve({location:"",base:e,go:i,createHref:$h.bind(null,e)},t,l);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function Qh(e){return typeof e=="string"||e&&typeof e=="object"}function vr(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},br=Symbol("");var On;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(On||(On={}));function pl(e,t){return ve(new Error,{type:e,[br]:!0},t)}function pt(e,t){return e instanceof Error&&br in e&&(t==null||!!(e.type&t))}const Fn="[^/]+?",Zh={sensitive:!1,strict:!1,start:!0,end:!0},Jh=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const l=ve({},Zh,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(b)}:Tl}function a(h){if(vr(h)){const p=i.get(h);p&&(i.delete(h),l.splice(l.indexOf(p),1),p.children.forEach(a),p.alias.forEach(a))}else{const p=l.indexOf(h);p>-1&&(l.splice(p,1),h.record.name&&i.delete(h.record.name),h.children.forEach(a),h.alias.forEach(a))}}function r(){return l}function s(h){let p=0;for(;p=0&&(h.record.path!==l[p].record.path||!_r(h,l[p]));)p++;l.splice(p,0,h),h.record.name&&!Mn(h)&&i.set(h.record.name,h)}function c(h,p){let m,g={},x,P;if("name"in h&&h.name){if(m=i.get(h.name),!m)throw pl(1,{location:h});P=m.record.name,g=ve(Dn(p.params,m.keys.filter(b=>!b.optional).map(b=>b.name)),h.params&&Dn(h.params,m.keys.map(b=>b.name))),x=m.stringify(g)}else if("path"in h)x=h.path,m=l.find(b=>b.re.test(x)),m&&(g=m.parse(x),P=m.record.name);else{if(m=p.name?i.get(p.name):l.find(b=>b.re.test(p.path)),!m)throw pl(1,{location:h,currentLocation:p});P=m.record.name,g=ve({},p.params,h.params),x=m.stringify(g)}const E=[];let k=m;for(;k;)E.unshift(k.record),k=k.parent;return{name:P,path:x,params:g,matched:E,meta:hd(E)}}return e.forEach(h=>n(h)),{addRoute:n,resolve:c,removeRoute:a,getRoutes:r,getRecordMatcher:o}}function Dn(e,t){const l={};for(const i of t)i in e&&(l[i]=e[i]);return l}function sd(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cd(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const i in e.components)t[i]=typeof l=="boolean"?l:l[i];return t}function Mn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function hd(e){return e.reduce((t,l)=>ve(t,l.meta),{})}function Hn(e,t){const l={};for(const i in e)l[i]=i in t?t[i]:e[i];return l}function _r(e,t){return t.children.some(l=>l===e||_r(e,l))}const yr=/#/g,dd=/&/g,ud=/\//g,pd=/=/g,md=/\?/g,xr=/\+/g,fd=/%5B/g,gd=/%5D/g,Er=/%5E/g,kd=/%60/g,Cr=/%7B/g,vd=/%7C/g,Rr=/%7D/g,bd=/%20/g;function Fo(e){return encodeURI(""+e).replace(vd,"|").replace(fd,"[").replace(gd,"]")}function _d(e){return Fo(e).replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function co(e){return Fo(e).replace(xr,"%2B").replace(bd,"+").replace(yr,"%23").replace(dd,"%26").replace(kd,"`").replace(Cr,"{").replace(Rr,"}").replace(Er,"^")}function yd(e){return co(e).replace(pd,"%3D")}function xd(e){return Fo(e).replace(yr,"%23").replace(md,"%3F")}function Ed(e){return e==null?"":xd(e).replace(ud,"%2F")}function fi(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Cd(e){const t={};if(e===""||e==="?")return t;const i=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;on&&co(n)):[i&&co(i)]).forEach(n=>{n!==void 0&&(t+=(t.length?"&":"")+l,n!=null&&(t+="="+n))})}return t}function Rd(e){const t={};for(const l in e){const i=e[l];i!==void 0&&(t[l]=st(i)?i.map(o=>o==null?null:""+o):i==null?i:""+i)}return t}const Pd=Symbol(""),Vn=Symbol(""),wi=Symbol(""),zo=Symbol(""),ho=Symbol("");function _l(){let e=[];function t(i){return e.push(i),()=>{const o=e.indexOf(i);o>-1&&e.splice(o,1)}}function l(){e=[]}return{add:t,list:()=>e,reset:l}}function At(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(At(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&&At(m,l,i,n,a)()}))}}return o}function Ld(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Nn(e){const t=Me(wi),l=Me(zo),i=Y(()=>t.resolve(O(e.to))),o=Y(()=>{const{matched:s}=i.value,{length:c}=s,h=s[c-1],p=l.matched;if(!h||!p.length)return-1;const m=p.findIndex(ul.bind(null,h));if(m>-1)return m;const g=jn(s[c-2]);return c>1&&jn(h)===g&&p[p.length-1].path!==g?p.findIndex(ul.bind(null,s[c-2])):m}),n=Y(()=>o.value>-1&&wd(l.params,i.value.params)),a=Y(()=>o.value>-1&&o.value===l.matched.length-1&&gr(l.params,i.value.params));function r(s={}){return Id(s)?t[O(e.replace)?"replace":"push"](O(e.to)).catch(Tl):Promise.resolve()}return{route:i,href:Y(()=>i.value.href),isActive:n,isExactActive:a,navigate:r}}const Ad=ue({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Nn,setup(e,{slots:t}){const l=gl(Nn(e)),{options:i}=Me(wi),o=Y(()=>({[$n(e.activeClass,i.linkActiveClass,"router-link-active")]:l.isActive,[$n(e.exactActiveClass,i.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const n=t.default&&t.default(l);return e.custom?n:he("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:o.value},n)}}}),Td=Ad;function Id(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function wd(e,t){for(const l in t){const i=t[l],o=e[l];if(typeof i=="string"){if(i!==o)return!1}else if(!st(o)||o.length!==i.length||i.some((n,a)=>n!==o[a]))return!1}return!0}function jn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const $n=(e,t,l)=>e!=null?e:t!=null?t:l,Od=ue({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const i=Me(ho),o=Y(()=>e.route||i.value),n=Me(Vn,0),a=Y(()=>{let c=O(n);const{matched:h}=o.value;let p;for(;(p=h[c])&&!p.components;)c++;return c}),r=Y(()=>o.value.matched[a.value]);Gt(Vn,Y(()=>a.value+1)),Gt(Pd,r),Gt(ho,o);const s=ye();return dt(()=>[s.value,r.value,e.name],([c,h,p],[m,g,x])=>{h&&(h.instances[p]=c,g&&g!==h&&c&&c===m&&(h.leaveGuards.size||(h.leaveGuards=g.leaveGuards),h.updateGuards.size||(h.updateGuards=g.updateGuards))),c&&h&&(!g||!ul(h,g)||!m)&&(h.enterCallbacks[p]||[]).forEach(P=>P(c))},{flush:"post"}),()=>{const c=o.value,h=e.name,p=r.value,m=p&&p.components[h];if(!m)return Yn(l.default,{Component:m,route:c});const g=p.props[h],x=g?g===!0?c.params:typeof g=="function"?g(c):g:null,E=he(m,ve({},x,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(p.instances[h]=null)},ref:s}));return Yn(l.default,{Component:E,route:c})||E}}});function Yn(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const Pr=Od;function Fd(e){const t=rd(e.routes,e),l=e.parseQuery||Cd,i=e.stringifyQuery||Sn,o=e.history,n=_l(),a=_l(),r=_l(),s=wa(mt);let c=mt;nl&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const h=Ni.bind(null,R=>""+R),p=Ni.bind(null,Ed),m=Ni.bind(null,fi);function g(R,W){let M,X;return vr(R)?(M=t.getRecordMatcher(R),X=W):X=R,t.addRoute(X,M)}function x(R){const W=t.getRecordMatcher(R);W&&t.removeRoute(W)}function P(){return t.getRoutes().map(R=>R.record)}function E(R){return!!t.getRecordMatcher(R)}function k(R,W){if(W=ve({},W||s.value),typeof R=="string"){const ie=ji(l,R,W.path),u=t.resolve({path:ie.path},W),f=o.createHref(ie.fullPath);return ve(ie,u,{params:m(u.params),hash:fi(ie.hash),redirectedFrom:void 0,href:f})}let M;if("path"in R)M=ve({},R,{path:ji(l,R.path,W.path).path});else{const ie=ve({},R.params);for(const u in ie)ie[u]==null&&delete ie[u];M=ve({},R,{params:p(R.params)}),W.params=p(W.params)}const X=t.resolve(M,W),ge=R.hash||"";X.params=h(m(X.params));const _e=Mh(i,ve({},R,{hash:_d(ge),path:X.path})),ce=o.createHref(_e);return ve({fullPath:_e,hash:ge,query:i===Sn?Rd(R.query):R.query||{}},X,{redirectedFrom:void 0,href:ce})}function b(R){return typeof R=="string"?ji(l,R,s.value.path):ve({},R)}function L(R,W){if(c!==R)return pl(8,{from:W,to:R})}function H(R){return w(R)}function U(R){return H(ve(b(R),{replace:!0}))}function ee(R){const W=R.matched[R.matched.length-1];if(W&&W.redirect){const{redirect:M}=W;let X=typeof M=="function"?M(R):M;return typeof X=="string"&&(X=X.includes("?")||X.includes("#")?X=b(X):{path:X},X.params={}),ve({query:R.query,hash:R.hash,params:"path"in X?{}:R.params},X)}}function w(R,W){const M=c=k(R),X=s.value,ge=R.state,_e=R.force,ce=R.replace===!0,ie=ee(M);if(ie)return w(ve(b(ie),{state:typeof ie=="object"?ve({},ge,ie.state):ge,force:_e,replace:ce}),W||M);const u=M;u.redirectedFrom=W;let f;return!_e&&Hh(i,X,M)&&(f=pl(16,{to:u,from:X}),Ne(X,X,!0,!1)),(f?Promise.resolve(f):q(u,X)).catch(y=>pt(y)?pt(y,2)?y:Ie(y):le(y,u,X)).then(y=>{if(y){if(pt(y,2))return w(ve({replace:ce},b(y.to),{state:typeof y.to=="object"?ve({},ge,y.to.state):ge,force:_e}),W||u)}else y=G(u,X,!0,ce,ge);return B(u,X,y),y})}function v(R,W){const M=L(R,W);return M?Promise.reject(M):Promise.resolve()}function q(R,W){let M;const[X,ge,_e]=zd(R,W);M=$i(X.reverse(),"beforeRouteLeave",R,W);for(const ie of X)ie.leaveGuards.forEach(u=>{M.push(At(u,R,W))});const ce=v.bind(null,R,W);return M.push(ce),tl(M).then(()=>{M=[];for(const ie of n.list())M.push(At(ie,R,W));return M.push(ce),tl(M)}).then(()=>{M=$i(ge,"beforeRouteUpdate",R,W);for(const ie of ge)ie.updateGuards.forEach(u=>{M.push(At(u,R,W))});return M.push(ce),tl(M)}).then(()=>{M=[];for(const ie of R.matched)if(ie.beforeEnter&&!W.matched.includes(ie))if(st(ie.beforeEnter))for(const u of ie.beforeEnter)M.push(At(u,R,W));else M.push(At(ie.beforeEnter,R,W));return M.push(ce),tl(M)}).then(()=>(R.matched.forEach(ie=>ie.enterCallbacks={}),M=$i(_e,"beforeRouteEnter",R,W),M.push(ce),tl(M))).then(()=>{M=[];for(const ie of a.list())M.push(At(ie,R,W));return M.push(ce),tl(M)}).catch(ie=>pt(ie,8)?ie:Promise.reject(ie))}function B(R,W,M){for(const X of r.list())X(R,W,M)}function G(R,W,M,X,ge){const _e=L(R,W);if(_e)return _e;const ce=W===mt,ie=nl?history.state:{};M&&(X||ce?o.replace(R.fullPath,ve({scroll:ce&&ie&&ie.scroll},ge)):o.push(R.fullPath,ge)),s.value=R,Ne(R,W,M,ce),Ie()}let C;function S(){C||(C=o.listen((R,W,M)=>{if(!Vt.listening)return;const X=k(R),ge=ee(X);if(ge){w(ve(ge,{replace:!0}),X).catch(Tl);return}c=X;const _e=s.value;nl&&Uh(In(_e.fullPath,M.delta),Ii()),q(X,_e).catch(ce=>pt(ce,12)?ce:pt(ce,2)?(w(ce.to,X).then(ie=>{pt(ie,20)&&!M.delta&&M.type===Hl.pop&&o.go(-1,!1)}).catch(Tl),Promise.reject()):(M.delta&&o.go(-M.delta,!1),le(ce,X,_e))).then(ce=>{ce=ce||G(X,_e,!1),ce&&(M.delta&&!pt(ce,8)?o.go(-M.delta,!1):M.type===Hl.pop&&pt(ce,20)&&o.go(-1,!1)),B(X,_e,ce)}).catch(Tl)}))}let F=_l(),re=_l(),j;function le(R,W,M){Ie(R);const X=re.list();return X.length?X.forEach(ge=>ge(R,W,M)):console.error(R),Promise.reject(R)}function se(){return j&&s.value!==mt?Promise.resolve():new Promise((R,W)=>{F.add([R,W])})}function Ie(R){return j||(j=!R,S(),F.list().forEach(([W,M])=>R?M(R):W()),F.reset()),R}function Ne(R,W,M,X){const{scrollBehavior:ge}=e;if(!nl||!ge)return Promise.resolve();const _e=!M&&Wh(In(R.fullPath,0))||(X||!M)&&history.state&&history.state.scroll||null;return jl().then(()=>ge(R,W,_e)).then(ce=>ce&&Bh(ce)).catch(ce=>le(ce,R,W))}const Ue=R=>o.go(R);let Je;const Ye=new Set,Vt={currentRoute:s,listening:!0,addRoute:g,removeRoute:x,hasRoute:E,getRoutes:P,resolve:k,options:e,push:H,replace:U,go:Ue,back:()=>Ue(-1),forward:()=>Ue(1),beforeEach:n.add,beforeResolve:a.add,afterEach:r.add,onError:re.add,isReady:se,install(R){const W=this;R.component("RouterLink",Td),R.component("RouterView",Pr),R.config.globalProperties.$router=W,Object.defineProperty(R.config.globalProperties,"$route",{enumerable:!0,get:()=>O(s)}),nl&&!Je&&s.value===mt&&(Je=!0,H(o.location).catch(ge=>{}));const M={};for(const ge in mt)M[ge]=Y(()=>s.value[ge]);R.provide(wi,W),R.provide(zo,gl(M)),R.provide(ho,s);const X=R.unmount;Ye.add(R),R.unmount=function(){Ye.delete(R),Ye.size<1&&(c=mt,C&&C(),C=null,s.value=mt,Je=!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 Jt(){return Me(wi)}function St(){return Me(zo)}const Dd=({headerLinkSelector:e,headerAnchorSelector:t,delay:l,offset:i=5})=>{const o=Jt(),a=fr(()=>{var P,E,k,b;const r=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(r-0)m.some(H=>H.hash===L.hash));for(let L=0;L=((E=(P=H.parentElement)==null?void 0:P.offsetTop)!=null?E:0)-i,w=!U||r<((b=(k=U.parentElement)==null?void 0:k.offsetTop)!=null?b:0)-i;if(!(ee&&w))continue;const q=decodeURIComponent(o.currentRoute.value.hash),B=decodeURIComponent(H.hash);if(q===B)return;if(p){for(let G=L+1;G{window.addEventListener("scroll",a)}),Yl(()=>{window.removeEventListener("scroll",a)})},Bn=async(e,t)=>{const{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=l)},Md="a.sidebar-item",Hd=".header-anchor",Sd=300,Vd=5,Nd=Ht({setup(){Dd({headerLinkSelector:Md,headerAnchorSelector:Hd,delay:Sd,offset:Vd})}}),Un=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,jd=()=>window.scrollTo({top:0,behavior:"smooth"});const $d=ue({name:"BackToTop",setup(){const e=ye(0),t=Y(()=>e.value>300),l=fr(()=>{e.value=Un()},100);Ze(()=>{e.value=Un(),window.addEventListener("scroll",()=>l())});const i=he("div",{class:"back-to-top",onClick:jd});return()=>he(Bl,{name:"back-to-top"},()=>t.value?i:null)}}),Yd=Ht({rootComponents:[$d]});const Bd=he("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[he("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),he("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Ud=ue({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Wl(),l=Y(()=>{var i;return(i=e.locales[t.value])!=null?i:{openInNewWindow:"open in new window"}});return()=>he("span",[Bd,he("span",{class:"external-link-icon-sr-only"},l.value.openInNewWindow)])}}),Wd={"/en/":{openInNewWindow:"open in new window"},"/zh-cn/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00"},"/":{openInNewWindow:"open in new window"}},Xd=Ht({enhance({app:e}){e.component("ExternalLinkIcon",he(Ud,{locales:Wd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Bt=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},i=window.Promise||function(C){function S(){}C(S,S)},o=function(C){var S=C.target;if(S===q){x();return}L.indexOf(S)!==-1&&P({target:S})},n=function(){if(!(U||!v.original)){var C=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(ee-C)>w.scrollOffset&&setTimeout(x,150)}},a=function(C){var S=C.key||C.keyCode;(S==="Escape"||S==="Esc"||S===27)&&x()},r=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C;if(C.background&&(q.style.background=C.background),C.container&&C.container instanceof Object&&(S.container=Bt({},w.container,C.container)),C.template){var F=ii(C.template)?C.template:document.querySelector(C.template);S.template=F}return w=Bt({},w,S),L.forEach(function(re){re.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:B}}))}),B},s=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Bt({},w,C))},c=function(){for(var C=arguments.length,S=Array(C),F=0;F0?S.reduce(function(j,le){return[].concat(j,Xn(le))},[]):L;return re.forEach(function(j){j.classList.remove("medium-zoom-image"),j.dispatchEvent(ll("medium-zoom:detach",{detail:{zoom:B}}))}),L=L.filter(function(j){return re.indexOf(j)===-1}),B},p=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.addEventListener("medium-zoom:"+C,S,F)}),H.push({type:"medium-zoom:"+C,listener:S,options:F}),B},m=function(C,S){var F=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return L.forEach(function(re){re.removeEventListener("medium-zoom:"+C,S,F)}),H=H.filter(function(re){return!(re.type==="medium-zoom:"+C&&re.listener.toString()===S.toString())}),B},g=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target,F=function(){var j={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},le=void 0,se=void 0;if(w.container)if(w.container instanceof Object)j=Bt({},j,w.container),le=j.width-j.left-j.right-w.margin*2,se=j.height-j.top-j.bottom-w.margin*2;else{var Ie=ii(w.container)?w.container:document.querySelector(w.container),Ne=Ie.getBoundingClientRect(),Ue=Ne.width,Je=Ne.height,Ye=Ne.left,Vt=Ne.top;j=Bt({},j,{width:Ue,height:Je,left:Ye,top:Vt})}le=le||j.width-w.margin*2,se=se||j.height-w.margin*2;var R=v.zoomedHd||v.original,W=Wn(R)?le:R.naturalWidth||le,M=Wn(R)?se:R.naturalHeight||se,X=R.getBoundingClientRect(),ge=X.top,_e=X.left,ce=X.width,ie=X.height,u=Math.min(W,le)/ce,f=Math.min(M,se)/ie,y=Math.min(u,f),T=(-_e+(le-ce)/2+w.margin+j.left)/y,A=(-ge+(se-ie)/2+w.margin+j.top)/y,z="scale("+y+") translate3d("+T+"px, "+A+"px, 0)";v.zoomed.style.transform=z,v.zoomedHd&&(v.zoomedHd.style.transform=z)};return new i(function(re){if(S&&L.indexOf(S)===-1){re(B);return}var j=function Ue(){U=!1,v.zoomed.removeEventListener("transitionend",Ue),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:B}})),re(B)};if(v.zoomed){re(B);return}if(S)v.original=S;else if(L.length>0){var le=L;v.original=le[0]}else{re(B);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:B}})),ee=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,U=!0,v.zoomed=Gd(v.original),document.body.appendChild(q),w.template){var se=ii(w.template)?w.template:document.querySelector(w.template);v.template=document.createElement("div"),v.template.appendChild(se.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",x),v.zoomed.addEventListener("transitionend",j),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(Ie),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,F()};var Ie=setInterval(function(){v.zoomedHd.complete&&(clearInterval(Ie),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Ne=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Ne),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",x),document.body.appendChild(v.zoomedHd),F()})}else F()})},x=function(){return new i(function(C){if(U||!v.original){C(B);return}var S=function F(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(q),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),U=!1,v.zoomed.removeEventListener("transitionend",F),v.original.dispatchEvent(ll("medium-zoom:closed",{detail:{zoom:B}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,C(B)};U=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(ll("medium-zoom:close",{detail:{zoom:B}})),v.zoomed.addEventListener("transitionend",S)})},P=function(){var C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},S=C.target;return v.original?x():g({target:S})},E=function(){return w},k=function(){return L},b=function(){return v.original},L=[],H=[],U=!1,ee=0,w=l,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?w=t:(t||typeof t=="string")&&c(t),w=Bt({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},w);var q=Kd(w.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",n),window.addEventListener("resize",x);var B={open:g,close:x,toggle:P,update:r,clone:s,attach:c,detach:h,on:p,off:m,getOptions:E,getImages:k,getZoomedImage:b};return B};function Zd(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 Jd=".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}";Zd(Jd);const eu=Qd,tu=Symbol("mediumZoom");const lu=".theme-default-content > img, .theme-default-content :not(a) > img",iu={},ou=300,nu=Ht({enhance({app:e,router:t}){const l=eu(iu);l.refresh=(i=lu)=>{l.detach(),l.attach(i)},e.provide(tu,l),t.afterEach(()=>{setTimeout(()=>l.refresh(),ou)})}});/** - * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT - */const me={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
    '},status:null,set:e=>{const t=me.isStarted();e=Yi(e,me.settings.minimum,1),me.status=e===1?null:e;const l=me.render(!t),i=l.querySelector(me.settings.barSelector),o=me.settings.speed,n=me.settings.easing;return l.offsetWidth,au(a=>{ti(i,{transform:"translate3d("+qn(e)+"%,0,0)",transition:"all "+o+"ms "+n}),e===1?(ti(l,{transition:"none",opacity:"1"}),l.offsetWidth,setTimeout(function(){ti(l,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){me.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),me},isStarted:()=>typeof me.status=="number",start:()=>{me.status||me.set(0);const e=()=>{setTimeout(()=>{!me.status||(me.trickle(),e())},me.settings.trickleSpeed)};return me.settings.trickle&&e(),me},done:e=>!e&&!me.status?me:me.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=me.status;return t?(typeof e!="number"&&(e=(1-t)*Yi(Math.random()*t,.1,.95)),t=Yi(t+e,0,.994),me.set(t)):me.start()},trickle:()=>me.inc(Math.random()*me.settings.trickleRate),render:e=>{if(me.isRendered())return document.getElementById("nprogress");Kn(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=me.settings.template;const l=t.querySelector(me.settings.barSelector),i=e?"-100":qn(me.status||0),o=document.querySelector(me.settings.parent);return ti(l,{transition:"all 0 linear",transform:"translate3d("+i+"%,0,0)"}),o!==document.body&&Kn(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Gn(document.documentElement,"nprogress-busy"),Gn(document.querySelector(me.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&ru(e)},isRendered:()=>!!document.getElementById("nprogress")},Yi=(e,t,l)=>el?l:e,qn=e=>(-1+e)*100,au=function(){const e=[];function t(){const l=e.shift();l&&l(t)}return function(l){e.push(l),e.length===1&&t()}}(),ti=function(){const e=["Webkit","O","Moz","ms"],t={};function l(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(r,s){return s.toUpperCase()})}function i(a){const r=document.body.style;if(a in r)return a;let s=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let h;for(;s--;)if(h=e[s]+c,h in r)return h;return a}function o(a){return a=l(a),t[a]||(t[a]=i(a))}function n(a,r,s){r=o(r),a.style[r]=s}return function(a,r){for(const s in r){const c=r[s];c!==void 0&&Object.prototype.hasOwnProperty.call(r,s)&&n(a,s,c)}}}(),Lr=(e,t)=>(typeof e=="string"?e:Do(e)).indexOf(" "+t+" ")>=0,Kn=(e,t)=>{const l=Do(e),i=l+t;Lr(l,t)||(e.className=i.substring(1))},Gn=(e,t)=>{const l=Do(e);if(!Lr(e,t))return;const i=l.replace(" "+t+" "," ");e.className=i.substring(1,i.length-1)},Do=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),ru=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const su=()=>{Ze(()=>{const e=Jt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(l=>{t.has(l.path)||me.start()}),e.afterEach(l=>{t.add(l.path),me.done()})})},cu=Ht({setup(){su()}}),hu=JSON.parse(`{"logo":"/images/logo.png","repo":"https://github.com/fankes/YukiHookAPI","docsRepo":"https://github.com/fankes/YukiHookAPI","docsBranch":"master","docsDir":"docs-source/src","editLinkPattern":":repo/edit/:branch/:path","sidebar":{"/en/":[{"text":"Get Started","collapsible":true,"children":["/en/guide/home","/en/guide/knowledge","/en/guide/quick-start","/en/guide/example","/en/guide/move-to-new-api"]},{"text":"Configs","collapsible":true,"children":["/en/config/api-example","/en/config/api-exception","/en/config/xposed-using","/en/config/api-using","/en/config/r8-proguard"]},{"text":"Tools","collapsible":true,"children":["/en/tools/yukihookapi-projectbuilder"]},{"text":"API Document","collapsible":true,"children":["/en/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/en/api/public/com/highcapable/yukihookapi/YukiHookAPI","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/en/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/en/api/public/com/highcapable/yukihookapi/hook/xposed/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/dummy/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/en/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/VariousClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/CurrentClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/GenericClass","/en/api/public/com/highcapable/yukihookapi/hook/bean/HookResources"]},{"text":"Special Features\xA0","collapsible":true,"children":["/en/api/special-features/reflection","/en/api/special-features/logger","/en/api/special-features/xposed-storage","/en/api/special-features/xposed-channel","/en/api/special-features/host-lifecycle","/en/api/special-features/host-inject"]}]},{"text":"About","collapsible":true,"children":["/en/about/changelog","/en/about/future","/en/about/contacts","/en/about/about"]}],"/zh-cn/":[{"text":"\u5165\u95E8","collapsible":true,"children":["/zh-cn/guide/home","/zh-cn/guide/knowledge","/zh-cn/guide/quick-start","/zh-cn/guide/example","/zh-cn/guide/move-to-new-api"]},{"text":"\u914D\u7F6E","collapsible":true,"children":["/zh-cn/config/api-example","/zh-cn/config/api-exception","/zh-cn/config/xposed-using","/zh-cn/config/api-using","/zh-cn/config/r8-proguard"]},{"text":"\u5DE5\u5177","collapsible":true,"children":["/zh-cn/tools/yukihookapi-projectbuilder"]},{"text":"API \u6587\u6863","collapsible":true,"children":["/zh-cn/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/proxy/IYukiHookXposedInit","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/ui/ModulePreferenceFragment","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/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/dummy/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory","/zh-cn/api/public/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukihookapi/hook/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"}`),Ar=ye(hu),du=()=>Ar;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Ar.value=e});const Tr=Symbol(""),uu=()=>{const e=Me(Tr);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},pu=(e,t)=>{var l;return{...e,...(l=e.locales)==null?void 0:l[t]}},mu=Ht({enhance({app:e}){const t=du(),l=e._context.provides[No],i=Y(()=>pu(t.value,l.value));e.provide(Tr,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(),J("span",{class:Ke(["badge",e.type]),style:Sl({verticalAlign:e.vertical})},[Re(t.$slots,"default",{},()=>[Mt(ze(e.text),1)])],6))}}),Ae=(e,t)=>{const l=e.__vccOpts||e;for(const[i,o]of t)l[i]=o;return l},gu=Ae(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(),J("div",{class:Ke(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Re(t.$slots,"default")],10,vu))}}),yu=Ae(_u,[["__file","CodeGroupItem.vue"]]);var Qn;const Ir=typeof window<"u",xu=e=>typeof e=="function",Eu=e=>typeof e=="string",Bi=()=>{};Ir&&((Qn=window==null?void 0:window.navigator)==null?void 0:Qn.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function gi(e){return typeof e=="function"?e():O(e)}function Cu(e,t){function l(...i){e(()=>t.apply(this,i),{fn:t,thisArg:this,args:i})}return l}const wr=e=>e();function Ru(e=wr){const t=ye(!0);function l(){t.value=!1}function i(){t.value=!0}return{isActive:t,pause:l,resume:i,eventFilter:(...n)=>{t.value&&e(...n)}}}function Pu(e){return e}function Or(e){return fs()?(gs(e),!0):!1}function Lu(e,t=!0){wo()?Xa(e):t?e():jl(e)}function Au(e,t=!0){wo()?Ze(e):t?e():jl(e)}function Tu(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 Zn=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&&Zn)for(var i of Zn(e))t.indexOf(i)<0&&wu.call(e,i)&&(l[i]=e[i]);return l};function Fu(e,t,l={}){const i=l,{eventFilter:o=wr}=i,n=Ou(i,["eventFilter"]);return dt(e,Cu(o,t),n)}var zu=Object.defineProperty,Du=Object.defineProperties,Mu=Object.getOwnPropertyDescriptors,ki=Object.getOwnPropertySymbols,Fr=Object.prototype.hasOwnProperty,zr=Object.prototype.propertyIsEnumerable,Jn=(e,t,l)=>t in e?zu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,Hu=(e,t)=>{for(var l in t||(t={}))Fr.call(t,l)&&Jn(e,l,t[l]);if(ki)for(var l of ki(t))zr.call(t,l)&&Jn(e,l,t[l]);return e},Su=(e,t)=>Du(e,Mu(t)),Vu=(e,t)=>{var l={};for(var i in e)Fr.call(e,i)&&t.indexOf(i)<0&&(l[i]=e[i]);if(e!=null&&ki)for(var i of ki(e))t.indexOf(i)<0&&zr.call(e,i)&&(l[i]=e[i]);return l};function Nu(e,t,l={}){const i=l,{eventFilter:o}=i,n=Vu(i,["eventFilter"]),{eventFilter:a,pause:r,resume:s,isActive:c}=Ru(o);return{stop:Fu(e,t,Su(Hu({},n),{eventFilter:a})),pause:r,resume:s,isActive:c}}function ju(e){var t;const l=gi(e);return(t=l==null?void 0:l.$el)!=null?t:l}const vi=Ir?window:void 0;function $u(...e){let t,l,i,o;if(Eu(e[0])?([l,i,o]=e,t=vi):[t,l,i,o]=e,!t)return Bi;let n=Bi;const a=dt(()=>ju(t),s=>{n(),s&&(s.addEventListener(l,i,o),n=()=>{s.removeEventListener(l,i,o),n=Bi})},{immediate:!0,flush:"post"}),r=()=>{a(),n()};return Or(r),r}function Yu(e,t=!1){const l=ye(),i=()=>l.value=Boolean(e());return i(),Au(i,t),l}function Bu(e,t={}){const{window:l=vi}=t,i=Yu(()=>l&&"matchMedia"in l&&typeof l.matchMedia=="function");let o;const n=ye(!1),a=()=>{!i.value||(o||(o=l.matchMedia(e)),n.value=o.matches)};return Lu(()=>{a(),o&&("addEventListener"in o?o.addEventListener("change",a):o.addListener(a),Or(()=>{"removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a)}))}),n}const uo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},po="__vueuse_ssr_handlers__";uo[po]=uo[po]||{};const Uu=uo[po];function Wu(e,t){return Uu[e]||t}function Xu(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var qu=Object.defineProperty,ea=Object.getOwnPropertySymbols,Ku=Object.prototype.hasOwnProperty,Gu=Object.prototype.propertyIsEnumerable,ta=(e,t,l)=>t in e?qu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,la=(e,t)=>{for(var l in t||(t={}))Ku.call(t,l)&&ta(e,l,t[l]);if(ea)for(var l of ea(t))Gu.call(t,l)&&ta(e,l,t[l]);return e};const Qu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Zu(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:b,resume:L}=Nu(x,()=>H(x.value),{flush:n,deep:a,eventFilter:m});return p&&r&&$u(p,"storage",ee),ee(),x;function H(w){try{w==null?l.removeItem(e):l.setItem(e,k.write(w))}catch(v){g(v)}}function U(w){if(!(w&&w.key!==e)){b();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 Ju(e){return Bu("(prefers-color-scheme: dark)",e)}var ia;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(ia||(ia={}));var ep=Object.defineProperty,oa=Object.getOwnPropertySymbols,tp=Object.prototype.hasOwnProperty,lp=Object.prototype.propertyIsEnumerable,na=(e,t,l)=>t in e?ep(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,ip=(e,t)=>{for(var l in t||(t={}))tp.call(t,l)&&na(e,l,t[l]);if(oa)for(var l of oa(t))lp.call(t,l)&&na(e,l,t[l]);return e};const op={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};ip({linear:Pu},op);const $e=()=>uu(),Dr=Symbol(""),Mo=()=>{const e=Me(Dr);if(!e)throw new Error("useDarkMode() is called without provider.");return e},np=()=>{const e=$e(),t=Ju(),l=Zu("vuepress-color-scheme",e.value.colorMode),i=Y({get(){return e.value.colorModeSwitch?l.value==="auto"?t.value:l.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?l.value="auto":l.value=o?"dark":"light"}});Gt(Dr,i),ap(i)},ap=e=>{const t=(l=e.value)=>{const i=window==null?void 0:window.document.querySelector("html");i==null||i.classList.toggle("dark",l)};Ze(()=>{dt(e,t,{immediate:!0})}),Li(()=>t())},Mr=(...e)=>{const l=Jt().resolve(...e),i=l.matched[l.matched.length-1];if(!(i!=null&&i.redirect))return l;const{redirect:o}=i,n=ae(o)?o(l):o,a=be(n)?{path:n}:n;return Mr({hash:l.hash,query:l.query,params:l.params,...a})},Ho=e=>{const t=Mr(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Ui=null,yl=null;const rp={wait:()=>Ui,pending:()=>{Ui=new Promise(e=>yl=e)},resolve:()=>{yl==null||yl(),Ui=null,yl=null}},Hr=()=>rp,Sr=Symbol("sidebarItems"),So=()=>{const e=Me(Sr);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sp=()=>{const e=$e(),t=vt(),l=Y(()=>cp(t.value,e.value));Gt(Sr,l)},cp=(e,t)=>{var o,n,a,r;const l=(n=(o=e.sidebar)!=null?o:t.sidebar)!=null?n:"auto",i=(r=(a=e.sidebarDepth)!=null?a:t.sidebarDepth)!=null?r:2;return e.home||l===!1?[]:l==="auto"?dp(i):te(l)?Vr(l,i):Oo(l)?up(l,i):[]},hp=(e,t)=>({text:e.title,link:e.link,children:Vo(e.children,t)}),Vo=(e,t)=>t>0?e.map(l=>hp(l,t-1)):[],dp=e=>{const t=Ot();return[{text:t.value.title,children:Vo(t.value.headers,e)}]},Vr=(e,t)=>{const l=St(),i=Ot(),o=n=>{var r;let a;if(be(n)?a=Ho(n):a=n,a.children)return{...a,children:a.children.map(s=>o(s))};if(a.link===l.path){const s=((r=i.value.headers[0])==null?void 0:r.level)===1?i.value.headers[0].children:i.value.headers;return{...a,children:Vo(s,t)}}return a};return e.map(n=>o(n))},up=(e,t)=>{var n;const l=St(),i=pr(e,l.path),o=(n=e[i])!=null?n:[];return Vr(o,t)},pp={},mp={class:"theme-default-content"};function fp(e,t){const l=_t("Content");return N(),J("div",mp,[oe(l)])}const gp=Ae(pp,[["render",fp],["__file","HomeContent.vue"]]),kp={key:0,class:"features"},vp=ue({__name:"HomeFeatures",setup(e){const t=vt(),l=Y(()=>te(t.value.features)?t.value.features:[]);return(i,o)=>O(l).length?(N(),J("div",kp,[(N(!0),J(Pe,null,zt(O(l),n=>(N(),J("div",{key:n.title,class:"feature"},[fe("h2",null,ze(n.title),1),fe("p",null,ze(n.details),1)]))),128))])):Te("v-if",!0)}}),bp=Ae(vp,[["__file","HomeFeatures.vue"]]),_p=["innerHTML"],yp=["textContent"],xp=ue({__name:"HomeFooter",setup(e){const t=vt(),l=Y(()=>t.value.footer),i=Y(()=>t.value.footerHtml);return(o,n)=>O(l)?(N(),J(Pe,{key:0},[Te(" eslint-disable-next-line vue/no-v-html "),O(i)?(N(),J("div",{key:0,class:"footer",innerHTML:O(l)},null,8,_p)):(N(),J("div",{key:1,class:"footer",textContent:ze(O(l))},null,8,yp))],64)):Te("v-if",!0)}}),Ep=Ae(xp,[["__file","HomeFooter.vue"]]),Cp=["href","rel","target","aria-label"],Rp=ue({inheritAttrs:!1}),Pp=ue({...Rp,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,l=St(),i=Gr(),{item:o}=Ei(t),n=Y(()=>Ul(o.value.link)),a=Y(()=>wh(o.value.link)||Oh(o.value.link)),r=Y(()=>{if(!a.value){if(o.value.target)return o.value.target;if(n.value)return"_blank"}}),s=Y(()=>r.value==="_blank"),c=Y(()=>!n.value&&!a.value&&!s.value),h=Y(()=>{if(!a.value){if(o.value.rel)return o.value.rel;if(s.value)return"noopener noreferrer"}}),p=Y(()=>o.value.ariaLabel||o.value.text),m=Y(()=>{const P=Object.keys(i.value.locales);return P.length?!P.some(E=>E===o.value.link):o.value.link!=="/"}),g=Y(()=>m.value?l.path.startsWith(o.value.link):!1),x=Y(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(l.path):g.value:!1);return(P,E)=>{const k=_t("RouterLink"),b=_t("AutoLinkExternalIcon");return O(c)?(N(),we(k,no({key:0,class:{"router-link-active":O(x)},to:O(o).link,"aria-label":O(p)},P.$attrs),{default:He(()=>[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),Re(P.$slots,"after")]),_:3},16,["class","to","aria-label"])):(N(),J("a",no({key:1,class:"external-link",href:O(o).link,rel:O(h),target:O(r),"aria-label":O(p)},P.$attrs),[Re(P.$slots,"before"),Mt(" "+ze(O(o).text)+" ",1),O(s)?(N(),we(b,{key:0})):Te("v-if",!0),Re(P.$slots,"after")],16,Cp))}}}),kt=Ae(Pp,[["__file","AutoLink.vue"]]),Lp={class:"hero"},Ap={key:0,id:"main-title"},Tp={key:1,class:"description"},Ip={key:2,class:"actions"},wp=ue({__name:"HomeHero",setup(e){const t=vt(),l=jo(),i=Mo(),o=Y(()=>i.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),n=Y(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),a=Y(()=>t.value.heroAlt||n.value||"hero"),r=Y(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),s=Y(()=>te(t.value.actions)?t.value.actions.map(({text:h,link:p,type:m="primary"})=>({text:h,link:p,type:m})):[]),c=()=>{if(!o.value)return null;const h=he("img",{src:Yo(o.value),alt:a.value});return t.value.heroImageDark===void 0?h:he($o,()=>h)};return(h,p)=>(N(),J("header",Lp,[oe(c),O(n)?(N(),J("h1",Ap,ze(O(n)),1)):Te("v-if",!0),O(r)?(N(),J("p",Tp,ze(O(r)),1)):Te("v-if",!0),O(s).length?(N(),J("p",Ip,[(N(!0),J(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))])):Te("v-if",!0)]))}}),Op=Ae(wp,[["__file","HomeHero.vue"]]),Fp={class:"home"},zp=ue({__name:"Home",setup(e){return(t,l)=>(N(),J("main",Fp,[oe(Op),oe(bp),oe(gp),oe(Ep)]))}}),Dp=Ae(zp,[["__file","Home.vue"]]),Mp=ue({__name:"NavbarBrand",setup(e){const t=Wl(),l=jo(),i=$e(),o=Mo(),n=Y(()=>i.value.home||t.value),a=Y(()=>l.value.title),r=Y(()=>o.value&&i.value.logoDark!==void 0?i.value.logoDark:i.value.logo),s=()=>{if(!r.value)return null;const c=he("img",{class:"logo",src:Yo(r.value),alt:a.value});return i.value.logoDark===void 0?c:he($o,()=>c)};return(c,h)=>{const p=_t("RouterLink");return N(),we(p,{to:O(n)},{default:He(()=>[oe(s),O(a)?(N(),J("span",{key:0,class:Ke(["site-name",{"can-hide":O(r)}])},ze(O(a)),3)):Te("v-if",!0)]),_:1},8,["to"])}}}),Hp=Ae(Mp,[["__file","NavbarBrand.vue"]]),Sp=ue({__name:"DropdownTransition",setup(e){const t=i=>{i.style.height=i.scrollHeight+"px"},l=i=>{i.style.height=""};return(i,o)=>(N(),we(Bl,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:He(()=>[Re(i.$slots,"default")]),_:3}))}}),Nr=Ae(Sp,[["__file","DropdownTransition.vue"]]),Vp=["aria-label"],Np={class:"title"},jp=fe("span",{class:"arrow down"},null,-1),$p=["aria-label"],Yp={class:"title"},Bp={class:"navbar-dropdown"},Up={class:"navbar-dropdown-subtitle"},Wp={key:1},Xp={class:"navbar-dropdown-subitem-wrapper"},qp=ue({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:l}=Ei(t),i=Y(()=>l.value.ariaLabel||l.value.text),o=ye(!1),n=St();dt(()=>n.path,()=>{o.value=!1});const a=s=>{s.detail===0?o.value=!o.value:o.value=!1},r=(s,c)=>c[c.length-1]===s;return(s,c)=>(N(),J("div",{class:Ke(["navbar-dropdown-wrapper",{open:o.value}])},[fe("button",{class:"navbar-dropdown-title",type:"button","aria-label":O(i),onClick:a},[fe("span",Np,ze(O(l).text),1),jp],8,Vp),fe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":O(i),onClick:c[0]||(c[0]=h=>o.value=!o.value)},[fe("span",Yp,ze(O(l).text),1),fe("span",{class:Ke(["arrow",o.value?"down":"right"])},null,2)],8,$p),oe(Nr,null,{default:He(()=>[ci(fe("ul",Bp,[(N(!0),J(Pe,null,zt(O(l).children,h=>(N(),J("li",{key:h.text,class:"navbar-dropdown-item"},[h.children?(N(),J(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(),J("span",Wp,ze(h.text),1))]),fe("ul",Xp,[(N(!0),J(Pe,null,zt(h.children,p=>(N(),J("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=Ae(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"},Zp=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const l=$r(e);return l!==null?Qp[l]:null},Jp=({docsRepo:e,docsBranch:t,docsDir:l,filePathRelative:i,editLinkPattern:o})=>{if(!i)return null;const n=Zp({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=Jt(),h=Wl(),p=jo(),m=$e();return Y(()=>{var b,L,H;const g=Object.keys(p.value.locales);if(g.length<2)return[];const x=c.currentRoute.value.path,P=c.currentRoute.value.fullPath,E=c.currentRoute.value.hash;return[{text:(b=m.value.selectLanguageText)!=null?b:"unknown language",ariaLabel:(H=(L=m.value.selectLanguageAriaLabel)!=null?L:m.value.selectLanguageText)!=null?H:"unknown language",children:g.map(U=>{var G,C,S,F,re,j;const ee=(C=(G=p.value.locales)==null?void 0:G[U])!=null?C:{},w=(F=(S=m.value.locales)==null?void 0:S[U])!=null?F:{},v=`${ee.lang}`,q=(re=w.selectLanguageName)!=null?re:v;let B;if(v===p.value.lang)B=P;else{const le=x.replace(h.value,U);c.getRoutes().some(se=>se.path===le)?B=`${le}${E}`:B=(j=w.home)!=null?j:U}return{text:q,link:B}})}]})},l=()=>{const c=$e(),h=Y(()=>c.value.repo),p=Y(()=>h.value?$r(h.value):null),m=Y(()=>h.value&&!Ul(h.value)?`https://github.com/${h.value}`:h.value),g=Y(()=>m.value?c.value.repoLabel?c.value.repoLabel:p.value===null?"Source":p.value:null);return Y(()=>!m.value||!g.value?[]:[{text:g.value,link:m.value}])},i=c=>be(c)?Ho(c):c.children?{...c,children:c.children.map(i)}:c,n=(()=>{const c=$e();return Y(()=>(c.value.navbar||[]).map(i))})(),a=t(),r=l(),s=Y(()=>[...n.value,...a.value,...r.value]);return(c,h)=>O(s).length?(N(),J("nav",em,[(N(!0),J(Pe,null,zt(O(s),p=>(N(),J("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))])):Te("v-if",!0)}}),Yr=Ae(tm,[["__file","NavbarItems.vue"]]),lm=["title"],im={class:"icon",focusable:"false",viewBox:"0 0 32 32"},om=jc('',9),nm=[om],am={class:"icon",focusable:"false",viewBox:"0 0 32 32"},rm=fe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),sm=[rm],cm=ue({__name:"ToggleColorModeButton",setup(e){const t=$e(),l=Mo(),i=()=>{l.value=!l.value};return(o,n)=>(N(),J("button",{class:"toggle-color-mode-button",title:O(t).toggleColorMode,onClick:i},[ci((N(),J("svg",im,nm,512)),[[mi,!O(l)]]),ci((N(),J("svg",am,sm,512)),[[mi,O(l)]])],8,lm))}}),hm=Ae(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(),J("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=Ae(mm,[["__file","ToggleSidebarButton.vue"]]),gm=ue({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=$e(),l=ye(null),i=ye(null),o=ye(0),n=Y(()=>o.value?{maxWidth:o.value+"px"}:{});Ze(()=>{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(),J("header",{ref_key:"navbar",ref:l,class:"navbar"},[oe(fm,{onToggle:s[0]||(s[0]=h=>r.$emit("toggle-sidebar"))}),fe("span",{ref_key:"navbarBrand",ref:i},[oe(Hp)],512),fe("div",{class:"navbar-items-wrapper",style:Sl(O(n))},[Re(r.$slots,"before"),oe(Yr,{class:"can-hide"}),Re(r.$slots,"after"),O(t).colorModeSwitch?(N(),we(hm,{key:0})):Te("v-if",!0),oe(c)],4)],512)}}}),km=Ae(gm,[["__file","Navbar.vue"]]),vm={class:"page-meta"},bm={key:0,class:"meta-item edit-link"},_m={key:1,class:"meta-item last-updated"},ym={class:"meta-item-label"},xm={class:"meta-item-info"},Em={key:2,class:"meta-item contributors"},Cm={class:"meta-item-label"},Rm={class:"meta-item-info"},Pm=["title"],Lm=Mt(", "),Am=ue({__name:"PageMeta",setup(e){const t=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var b,L,H;if(!((L=(b=h.value.editLink)!=null?b: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=Jp({docsRepo:g,docsBranch:x,docsDir:P,filePathRelative:c.value.filePathRelative,editLinkPattern:(H=h.value.editLinkPattern)!=null?H:s.value.editLinkPattern});return k?{text:E!=null?E:"Edit this page",link:k}:null})},l=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var g,x,P,E;return!((x=(g=h.value.lastUpdated)!=null?g:s.value.lastUpdated)!=null?x:!0)||!((P=c.value.git)!=null&&P.updatedTime)?null:new Date((E=c.value.git)==null?void 0:E.updatedTime).toLocaleString()})},i=()=>{const s=$e(),c=Ot(),h=vt();return Y(()=>{var m,g,x,P;return((g=(m=h.value.contributors)!=null?m:s.value.contributors)!=null?g:!0)&&(P=(x=c.value.git)==null?void 0:x.contributors)!=null?P:null})},o=$e(),n=t(),a=l(),r=i();return(s,c)=>{const h=_t("ClientOnly");return N(),J("footer",vm,[O(n)?(N(),J("div",bm,[oe(kt,{class:"meta-item-label",item:O(n)},null,8,["item"])])):Te("v-if",!0),O(a)?(N(),J("div",_m,[fe("span",ym,ze(O(o).lastUpdatedText)+": ",1),oe(h,null,{default:He(()=>[fe("span",xm,ze(O(a)),1)]),_:1})])):Te("v-if",!0),O(r)&&O(r).length?(N(),J("div",Em,[fe("span",Cm,ze(O(o).contributorsText)+": ",1),fe("span",Rm,[(N(!0),J(Pe,null,zt(O(r),(p,m)=>(N(),J(Pe,{key:m},[fe("span",{class:"contributor",title:`email: ${p.email}`},ze(p.name),9,Pm),m!==O(r).length-1?(N(),J(Pe,{key:0},[Lm],64)):Te("v-if",!0)],64))),128))])])):Te("v-if",!0)])}}}),Tm=Ae(Am,[["__file","PageMeta.vue"]]),Im={key:0,class:"page-nav"},wm={class:"inner"},Om={key:0,class:"prev"},Fm={key:1,class:"next"},zm=ue({__name:"PageNav",setup(e){const t=s=>s===!1?null:be(s)?Ho(s):Oo(s)?s:!1,l=(s,c,h)=>{const p=s.findIndex(m=>m.link===c);if(p!==-1){const m=s[p+h];return m!=null&&m.link?m:null}for(const m of s)if(m.children){const g=l(m.children,c,h);if(g)return g}return null},i=vt(),o=So(),n=St(),a=Y(()=>{const s=t(i.value.prev);return s!==!1?s:l(o.value,n.path,-1)}),r=Y(()=>{const s=t(i.value.next);return s!==!1?s:l(o.value,n.path,1)});return(s,c)=>O(a)||O(r)?(N(),J("nav",Im,[fe("p",wm,[O(a)?(N(),J("span",Om,[oe(kt,{item:O(a)},null,8,["item"])])):Te("v-if",!0),O(r)?(N(),J("span",Fm,[oe(kt,{item:O(r)},null,8,["item"])])):Te("v-if",!0)])])):Te("v-if",!0)}}),Dm=Ae(zm,[["__file","PageNav.vue"]]),Mm={class:"page"},Hm={class:"theme-default-content"},Sm=ue({__name:"Page",setup(e){return(t,l)=>{const i=_t("Content");return N(),J("main",Mm,[Re(t.$slots,"top"),fe("div",Hm,[Re(t.$slots,"content-top"),oe(i),Re(t.$slots,"content-bottom")]),oe(Tm),oe(Dm),Re(t.$slots,"bottom")])}}}),Vm=Ae(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=Jt(),a=Y(()=>jr(l.value,o)),r=Y(()=>({"sidebar-item":!0,"sidebar-heading":i.value===0,active:a.value,collapsible:l.value.collapsible})),s=Y(()=>l.value.collapsible?a.value:!0),[c,h]=Tu(s.value),p=g=>{l.value.collapsible&&(g.preventDefault(),h())},m=n.afterEach(g=>{jl(()=>{c.value=s.value})});return Yl(()=>{m()}),(g,x)=>{var E;const P=_t("SidebarItem",!0);return N(),J("li",null,[O(l).link?(N(),we(kt,{key:0,class:Ke(O(r)),item:O(l)},null,8,["class","item"])):(N(),J("p",{key:1,tabindex:"0",class:Ke(O(r)),onClick:p,onKeydown:Eh(p,["enter"])},[Mt(ze(O(l).text)+" ",1),O(l).collapsible?(N(),J("span",{key:0,class:Ke(["arrow",O(c)?"down":"right"])},null,2)):Te("v-if",!0)],42,Nm)),(E=O(l).children)!=null&&E.length?(N(),we(Nr,{key:2},{default:He(()=>[ci(fe("ul",jm,[(N(!0),J(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})):Te("v-if",!0)])}}}),Ym=Ae($m,[["__file","SidebarItem.vue"]]),Bm={key:0,class:"sidebar-items"},Um=ue({__name:"SidebarItems",setup(e){const t=St(),l=So();return Ze(()=>{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(),J("ul",Bm,[(N(!0),J(Pe,null,zt(O(l),n=>(N(),we(Ym,{key:`${n.text}${n.link}`,item:n},null,8,["item"]))),128))])):Te("v-if",!0)}}),Wm=Ae(Um,[["__file","SidebarItems.vue"]]),Xm={class:"sidebar"},qm=ue({__name:"Sidebar",setup(e){return(t,l)=>(N(),J("aside",Xm,[oe(Yr),Re(t.$slots,"top"),oe(Wm),Re(t.$slots,"bottom")]))}}),Km=Ae(qm,[["__file","Sidebar.vue"]]),Gm=ue({__name:"Layout",setup(e){const t=Ot(),l=vt(),i=$e(),o=Y(()=>l.value.navbar!==!1&&i.value.navbar!==!1),n=So(),a=ye(!1),r=E=>{a.value=typeof E=="boolean"?E:!a.value},s={x:0,y:0},c=E=>{s.x=E.changedTouches[0].clientX,s.y=E.changedTouches[0].clientY},h=E=>{const k=E.changedTouches[0].clientX-s.x,b=E.changedTouches[0].clientY-s.y;Math.abs(k)>Math.abs(b)&&Math.abs(k)>40&&(k>0&&s.x<=80?r(!0):r(!1))},p=Y(()=>[{"no-navbar":!o.value,"no-sidebar":!n.value.length,"sidebar-open":a.value},l.value.pageClass]);let m;Ze(()=>{m=Jt().afterEach(()=>{r(!1)})}),Li(()=>{m()});const g=Hr(),x=g.resolve,P=g.pending;return(E,k)=>(N(),J("div",{class:Ke(["theme-container",O(p)]),onTouchstart:c,onTouchend:h},[Re(E.$slots,"navbar",{},()=>[O(o)?(N(),we(km,{key:0,onToggleSidebar:r},{before:He(()=>[Re(E.$slots,"navbar-before")]),after:He(()=>[Re(E.$slots,"navbar-after")]),_:3})):Te("v-if",!0)]),fe("div",{class:"sidebar-mask",onClick:k[0]||(k[0]=b=>r(!1))}),Re(E.$slots,"sidebar",{},()=>[oe(Km,null,{top:He(()=>[Re(E.$slots,"sidebar-top")]),bottom:He(()=>[Re(E.$slots,"sidebar-bottom")]),_:3})]),Re(E.$slots,"page",{},()=>[O(l).home?(N(),we(Dp,{key:0})):(N(),we(Bl,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:O(x),onBeforeLeave:O(P)},{default:He(()=>[(N(),we(Vm,{key:O(t).path},{top:He(()=>[Re(E.$slots,"page-top")]),"content-top":He(()=>[Re(E.$slots,"page-content-top")]),"content-bottom":He(()=>[Re(E.$slots,"page-content-bottom")]),bottom:He(()=>[Re(E.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Qm=Ae(Gm,[["__file","Layout.vue"]]),Zm={class:"theme-container"},Jm={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(),J("div",Zm,[fe("main",Jm,[fe("div",ef,[tf,fe("blockquote",null,ze(o()),1),oe(m,{to:O(n)},{default:He(()=>[Mt(ze(O(a)),1)]),_:1},8,["to"])])])])}}}),of=Ae(lf,[["__file","NotFound.vue"]]);const nf=Ht({enhance({app:e,router:t}){e.component("Badge",gu),e.component("CodeGroup",ku),e.component("CodeGroupItem",yu),e.component("AutoLinkExternalIcon",()=>{const i=e.component("ExternalLinkIcon");return i?he(i):null}),e.component("NavbarSearch",()=>{const i=e.component("Docsearch")||e.component("SearchBox");return i?he(i):null});const l=t.options.scrollBehavior;t.options.scrollBehavior=async(...i)=>(await Hr().wait(),l(...i))},setup(){np(),sp()},layouts:{Layout:Qm,NotFound:of}}),af=(e,t)=>t.some(l=>{if(be(l))return l===e.key;const{key:i,ctrl:o=!1,shift:n=!1,alt:a=!1}=l;return i===e.key&&o===e.ctrlKey&&n===e.shiftKey&&a===e.altKey}),rf=/[^\x00-\x7F]/,sf=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),ra=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),sa=(e,t)=>{const l=t.join(" "),i=sf(e);if(rf.test(e))return i.some(a=>l.toLowerCase().indexOf(a)>-1);const o=e.endsWith(" ");return new RegExp(i.map((a,r)=>i.length===r+1&&!o?`(?=.*\\b${ra(a)})`:`(?=.*\\b${ra(a)}\\b)`).join("")+".+","gi").test(l)},cf=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const l=i=>{!e.value||af(i,t.value)&&!e.value.contains(i.target)&&(i.preventDefault(),e.value.focus())};Ze(()=>{document.addEventListener("keydown",l)}),Yl(()=>{document.removeEventListener("keydown",l)})},hf=[{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:"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:"\u7528\u6CD5\u793A\u4F8B",headers:[{level:2,title:"\u7ED3\u6784\u56FE\u89E3",slug:"\u7ED3\u6784\u56FE\u89E3",link:"#\u7ED3\u6784\u56FE\u89E3",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"\u4E00\u4E2A\u7B80\u5355\u7684 Hook \u4F8B\u5B50",slug:"\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",link:"#\u4E00\u4E2A\u7B80\u5355\u7684-hook-\u4F8B\u5B50",children:[{level:3,title:"Hook APP",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook \u7CFB\u7EDF\u6846\u67B6",slug:"hook-\u7CFB\u7EDF\u6846\u67B6",link:"#hook-\u7CFB\u7EDF\u6846\u67B6",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"\u89E3\u9664 Hook",slug:"\u89E3\u9664-hook",link:"#\u89E3\u9664-hook",children:[]}]},{level:2,title:"\u5F02\u5E38\u5904\u7406",slug:"\u5F02\u5E38\u5904\u7406",link:"#\u5F02\u5E38\u5904\u7406",children:[{level:3,title:"\u76D1\u542C\u5F02\u5E38",slug:"\u76D1\u542C\u5F02\u5E38",link:"#\u76D1\u542C\u5F02\u5E38",children:[]},{level:3,title:"\u629B\u51FA\u5F02\u5E38",slug:"\u629B\u51FA\u5F02\u5E38",link:"#\u629B\u51FA\u5F02\u5E38",children:[]}]},{level:2,title:"\u72B6\u6001\u76D1\u542C",slug:"\u72B6\u6001\u76D1\u542C",link:"#\u72B6\u6001\u76D1\u542C",children:[]},{level:2,title:"\u6269\u5C55\u7528\u6CD5",slug:"\u6269\u5C55\u7528\u6CD5",link:"#\u6269\u5C55\u7528\u6CD5",children:[{level:3,title:"\u591A\u4E2A\u5BBF\u4E3B",slug:"\u591A\u4E2A\u5BBF\u4E3B",link:"#\u591A\u4E2A\u5BBF\u4E3B",children:[]},{level:3,title:"\u591A\u4E2A\u8FDB\u7A0B",slug:"\u591A\u4E2A\u8FDB\u7A0B",link:"#\u591A\u4E2A\u8FDB\u7A0B",children:[]}]},{level:2,title:"\u5199\u6CD5\u4F18\u5316",slug:"\u5199\u6CD5\u4F18\u5316",link:"#\u5199\u6CD5\u4F18\u5316",children:[]},{level:2,title:"Xposed \u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",slug:"xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",link:"#xposed-\u6A21\u5757\u5224\u65AD\u81EA\u8EAB\u6FC0\u6D3B\u72B6\u6001",children:[]}],path:"/zh-cn/guide/example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECB\u7ECD",headers:[{level:2,title:"\u80CC\u666F",slug:"\u80CC\u666F",link:"#\u80CC\u666F",children:[]},{level:2,title:"\u7528\u9014",slug:"\u7528\u9014",link:"#\u7528\u9014",children:[]},{level:2,title:"\u8BED\u8A00\u8981\u6C42",slug:"\u8BED\u8A00\u8981\u6C42",link:"#\u8BED\u8A00\u8981\u6C42",children:[]},{level:2,title:"\u7075\u611F\u6765\u6E90",slug:"\u7075\u611F\u6765\u6E90",link:"#\u7075\u611F\u6765\u6E90",children:[]},{level:2,title:"\u652F\u6301\u7684 Hook \u6846\u67B6",slug:"\u652F\u6301\u7684-hook-\u6846\u67B6",link:"#\u652F\u6301\u7684-hook-\u6846\u67B6",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:"\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.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/zh-cn/about/changelog.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8054\u7CFB\u6211\u4EEC",headers:[{level:2,title:"\u52A9\u529B\u7EF4\u62A4",slug:"\u52A9\u529B\u7EF4\u62A4",link:"#\u52A9\u529B\u7EF4\u62A4",children:[]}],path:"/zh-cn/about/contacts.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5C55\u671B\u672A\u6765",headers:[{level:2,title:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",slug:"\u672A\u89E3\u51B3\u7684\u95EE\u9898",link:"#\u672A\u89E3\u51B3\u7684\u95EE\u9898",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"\u672A\u6765\u7684\u8BA1\u5212",slug:"\u672A\u6765\u7684\u8BA1\u5212",link:"#\u672A\u6765\u7684\u8BA1\u5212",children:[{level:3,title:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C",slug:"\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",link:"#\u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684-lite-\u7248\u672C",children:[]},{level:3,title:"\u652F\u6301\u66F4\u591A Hook Framework",slug:"\u652F\u6301\u66F4\u591A-hook-framework",link:"#\u652F\u6301\u66F4\u591A-hook-framework",children:[]}]}],path:"/zh-cn/about/future.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u6587\u6863\u4ECB\u7ECD",headers:[{level:2,title:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",slug:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",link:"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",children:[]},{level:2,title:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",slug:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",link:"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",children:[]},{level:2,title:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",slug:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",link:"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",children:[]},{level:2,title:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",slug:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",link:"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",children:[]}],path:"/zh-cn/api/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u57FA\u672C\u914D\u7F6E",headers:[{level:2,title:"\u529F\u80FD\u914D\u7F6E",slug:"\u529F\u80FD\u914D\u7F6E",link:"#\u529F\u80FD\u914D\u7F6E",children:[{level:3,title:"configs \u65B9\u6CD5",slug:"configs-\u65B9\u6CD5",link:"#configs-\u65B9\u6CD5",children:[]}]},{level:2,title:"Hooker \u914D\u7F6E",slug:"hooker-\u914D\u7F6E",link:"#hooker-\u914D\u7F6E",children:[{level:3,title:"\u901A\u8FC7 lambda \u521B\u5EFA",slug:"\u901A\u8FC7-lambda-\u521B\u5EFA",link:"#\u901A\u8FC7-lambda-\u521B\u5EFA",children:[]},{level:3,title:"\u901A\u8FC7\u81EA\u5B9A\u4E49 Hooker \u521B\u5EFA",slug:"\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",link:"#\u901A\u8FC7\u81EA\u5B9A\u4E49-hooker-\u521B\u5EFA",children:[]},{level:3,title:"\u6269\u5C55\u7279\u6027",slug:"\u6269\u5C55\u7279\u6027",link:"#\u6269\u5C55\u7279\u6027",children:[]},{level:3,title:"\u6CE8\u610F\u4E8B\u9879",slug:"\u6CE8\u610F\u4E8B\u9879",link:"#\u6CE8\u610F\u4E8B\u9879",children:[]}]},{level:2,title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",slug:"\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",link:"#\u4F5C\u4E3A-hook-api-\u4F7F\u7528\u9700\u8981\u6CE8\u610F\u7684\u5730\u65B9",children:[]}],path:"/zh-cn/config/api-example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u5F02\u5E38\u5904\u7406",headers:[{level:2,title:"\u975E\u963B\u65AD\u5F02\u5E38",slug:"\u975E\u963B\u65AD\u5F02\u5E38",link:"#\u975E\u963B\u65AD\u5F02\u5E38",children:[]},{level:2,title:"\u963B\u65AD\u5F02\u5E38",slug:"\u963B\u65AD\u5F02\u5E38",link:"#\u963B\u65AD\u5F02\u5E38",children:[]}],path:"/zh-cn/config/api-exception.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Hook API \u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u5165\u53E3\u914D\u7F6E",slug:"\u5165\u53E3\u914D\u7F6E",link:"#\u5165\u53E3\u914D\u7F6E",children:[]},{level:2,title:"Hook Framework",slug:"hook-framework",link:"#hook-framework",children:[{level:3,title:"Pine",slug:"pine",link:"#pine",children:[]},{level:3,title:"SandHook",slug:"sandhook",link:"#sandhook",children:[]},{level:3,title:"Whale",slug:"whale",link:"#whale",children:[]}]}],path:"/zh-cn/config/api-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"R8 \u4E0E Proguard \u6DF7\u6DC6",headers:[{level:2,title:"R8",slug:"r8",link:"#r8",children:[]},{level:2,title:"Proguard",slug:"proguard",link:"#proguard",children:[]}],path:"/zh-cn/config/r8-proguard.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E",headers:[{level:2,title:"\u4F9D\u8D56\u914D\u7F6E",slug:"\u4F9D\u8D56\u914D\u7F6E",link:"#\u4F9D\u8D56\u914D\u7F6E",children:[]},{level:2,title:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",slug:"\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",link:"#\u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F",children:[{level:3,title:"InjectYukiHookWithXposed \u6CE8\u89E3",slug:"injectyukihookwithxposed-\u6CE8\u89E3",link:"#injectyukihookwithxposed-\u6CE8\u89E3",children:[]},{level:3,title:"IYukiHookXposedInit \u63A5\u53E3",slug:"iyukihookxposedinit-\u63A5\u53E3",link:"#iyukihookxposedinit-\u63A5\u53E3",children:[]}]},{level:2,title:"\u539F\u751F Xposed API \u4E8B\u4EF6",slug:"\u539F\u751F-xposed-api-\u4E8B\u4EF6",link:"#\u539F\u751F-xposed-api-\u4E8B\u4EF6",children:[]}],path:"/zh-cn/config/xposed-using.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Usage Example",headers:[{level:2,title:"Structure Diagram",slug:"structure-diagram",link:"#structure-diagram",children:[]},{level:2,title:"Demo",slug:"demo",link:"#demo",children:[]},{level:2,title:"A Simple Hook Example",slug:"a-simple-hook-example",link:"#a-simple-hook-example",children:[{level:3,title:"Hook App",slug:"hook-app",link:"#hook-app",children:[]},{level:3,title:"Hook Zygote",slug:"hook-zygote",link:"#hook-zygote",children:[]},{level:3,title:"Hook System Framework",slug:"hook-system-framework",link:"#hook-system-framework",children:[]},{level:3,title:"Hook Resources",slug:"hook-resources",link:"#hook-resources",children:[]},{level:3,title:"Remove Hook",slug:"remove-hook",link:"#remove-hook",children:[]}]},{level:2,title:"Exception Handling",slug:"exception-handling",link:"#exception-handling",children:[{level:3,title:"Listen for Exceptions",slug:"listen-for-exceptions",link:"#listen-for-exceptions",children:[]},{level:3,title:"Throw an Exception",slug:"throw-an-exception",link:"#throw-an-exception",children:[]}]},{level:2,title:"Status Monitor",slug:"status-monitor",link:"#status-monitor",children:[]},{level:2,title:"Expansion Usage",slug:"expansion-usage",link:"#expansion-usage",children:[{level:3,title:"Multiple Hosts",slug:"multiple-hosts",link:"#multiple-hosts",children:[]},{level:3,title:"Multiple Processes",slug:"multiple-processes",link:"#multiple-processes",children:[]}]},{level:2,title:"Writing Optimization",slug:"writing-optimization",link:"#writing-optimization",children:[]},{level:2,title:"Xposed Module own Active State",slug:"xposed-module-own-active-state",link:"#xposed-module-own-active-state",children:[]}],path:"/en/guide/example.html",pathLocale:"/en/",extraFields:[]},{title:"Introduce",headers:[{level:2,title:"Background",slug:"background",link:"#background",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Language Requirement",slug:"language-requirement",link:"#language-requirement",children:[]},{level:2,title:"Source of Inspiration",slug:"source-of-inspiration",link:"#source-of-inspiration",children:[]},{level:2,title:"Suppored Hook Framework",slug:"suppored-hook-framework",link:"#suppored-hook-framework",children:[]}],path:"/en/guide/home.html",pathLocale:"/en/",extraFields:[]},{title:"Basic Knowledge",headers:[{level:2,title:"Related Introduction",slug:"related-introduction",link:"#related-introduction",children:[{level:3,title:"What is Xposed",slug:"what-is-xposed",link:"#what-is-xposed",children:[]},{level:3,title:"What can Xposed do",slug:"what-can-xposed-do",link:"#what-can-xposed-do",children:[]},{level:3,title:"Development Process",slug:"development-process",link:"#development-process",children:[]},{level:3,title:"Derivatives",slug:"derivatives",link:"#derivatives",children:[]},{level:3,title:"What YukiHookAPI does",slug:"what-yukihookapi-does",link:"#what-yukihookapi-does",children:[]}]},{level:2,title:"Let's Started",slug:"let-s-started",link:"#let-s-started",children:[]}],path:"/en/guide/knowledge.html",pathLocale:"/en/",extraFields:[]},{title:"Migrate from Xposed API",headers:[{level:2,title:"Migrate Hook Entry Point",slug:"migrate-hook-entry-point",link:"#migrate-hook-entry-point",children:[]},{level:2,title:"Migrate Hook Method Body",slug:"migrate-hook-method-body",link:"#migrate-hook-method-body",children:[{level:3,title:"Before/After Hook",slug:"before-after-hook",link:"#before-after-hook",children:[]},{level:3,title:"Replace Hook",slug:"replace-hook",link:"#replace-hook",children:[]}]},{level:2,title:"Migrate Other Features",slug:"migrate-other-features",link:"#migrate-other-features",children:[]}],path:"/en/guide/move-to-new-api.html",pathLocale:"/en/",extraFields:[]},{title:"Quick Start",headers:[{level:2,title:"Environment Requirements",slug:"environment-requirements",link:"#environment-requirements",children:[]},{level:2,title:"Automatically Build Project",slug:"automatically-build-project",link:"#automatically-build-project",children:[]},{level:2,title:"Manually Configure Project",slug:"manually-configure-project",link:"#manually-configure-project",children:[{level:3,title:"Create Project",slug:"create-project",link:"#create-project",children:[]},{level:3,title:"Integration Dependencies",slug:"integration-dependencies",link:"#integration-dependencies",children:[]},{level:3,title:"Use as Xposed Module",slug:"use-as-xposed-module",link:"#use-as-xposed-module",children:[]},{level:3,title:"Use as Hook API",slug:"use-as-hook-api",link:"#use-as-hook-api",children:[]}]}],path:"/en/guide/quick-start.html",pathLocale:"/en/",extraFields:[]},{title:"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.3 | 2022.09.30",slug:"_1-1-3-2022-09-30",link:"#_1-1-3-2022-09-30",children:[]},{level:3,title:"1.1.2 | 2022.09.30",slug:"_1-1-2-2022-09-30",link:"#_1-1-2-2022-09-30",children:[]},{level:3,title:"1.1.1 | 2022.09.28",slug:"_1-1-1-2022-09-28",link:"#_1-1-1-2022-09-28",children:[]},{level:3,title:"1.1.0 | 2022.09.28",slug:"_1-1-0-2022-09-28",link:"#_1-1-0-2022-09-28",children:[]},{level:3,title:"1.0.92 | 2022.05.31",slug:"_1-0-92-2022-05-31",link:"#_1-0-92-2022-05-31",children:[]},{level:3,title:"1.0.91 | 2022.05.29",slug:"_1-0-91-2022-05-29",link:"#_1-0-91-2022-05-29",children:[]},{level:3,title:"1.0.90 | 2022.05.27",slug:"_1-0-90-2022-05-27",link:"#_1-0-90-2022-05-27",children:[]},{level:3,title:"1.0.89 | 2022.05.26",slug:"_1-0-89-2022-05-26",link:"#_1-0-89-2022-05-26",children:[]},{level:3,title:"1.0.88 | 2022.05.25",slug:"_1-0-88-2022-05-25",link:"#_1-0-88-2022-05-25",children:[]},{level:3,title:"1.0.87 | 2022.05.10",slug:"_1-0-87-2022-05-10",link:"#_1-0-87-2022-05-10",children:[]},{level:3,title:"1.0.86 | 2022.05.06",slug:"_1-0-86-2022-05-06",link:"#_1-0-86-2022-05-06",children:[]},{level:3,title:"1.0.85 | 2022.05.04",slug:"_1-0-85-2022-05-04",link:"#_1-0-85-2022-05-04",children:[]},{level:3,title:"1.0.83 | 2022.05.04",slug:"_1-0-83-2022-05-04",link:"#_1-0-83-2022-05-04",children:[]},{level:3,title:"1.0.82 | 2022.05.04",slug:"_1-0-82-2022-05-04",link:"#_1-0-82-2022-05-04",children:[]},{level:3,title:"1.0.81 | 2022.05.04",slug:"_1-0-81-2022-05-04",link:"#_1-0-81-2022-05-04",children:[]},{level:3,title:"1.0.80 | 2022.05.01",slug:"_1-0-80-2022-05-01",link:"#_1-0-80-2022-05-01",children:[]},{level:3,title:"1.0.78 | 2022.04.18",slug:"_1-0-78-2022-04-18",link:"#_1-0-78-2022-04-18",children:[]},{level:3,title:"1.0.77 | 2022.04.15",slug:"_1-0-77-2022-04-15",link:"#_1-0-77-2022-04-15",children:[]},{level:3,title:"1.0.75 | 2022.04.13",slug:"_1-0-75-2022-04-13",link:"#_1-0-75-2022-04-13",children:[]},{level:3,title:"1.0.73 | 2022.04.10",slug:"_1-0-73-2022-04-10",link:"#_1-0-73-2022-04-10",children:[]},{level:3,title:"1.0.72 | 2022.04.09",slug:"_1-0-72-2022-04-09",link:"#_1-0-72-2022-04-09",children:[]},{level:3,title:"1.0.71 | 2022.04.04",slug:"_1-0-71-2022-04-04",link:"#_1-0-71-2022-04-04",children:[]},{level:3,title:"1.0.70 | 2022.04.04",slug:"_1-0-70-2022-04-04",link:"#_1-0-70-2022-04-04",children:[]},{level:3,title:"1.0.69 | 2022.03.30",slug:"_1-0-69-2022-03-30",link:"#_1-0-69-2022-03-30",children:[]},{level:3,title:"1.0.68 | 2022.03.29",slug:"_1-0-68-2022-03-29",link:"#_1-0-68-2022-03-29",children:[]},{level:3,title:"1.0.67 | 2022.03.27",slug:"_1-0-67-2022-03-27",link:"#_1-0-67-2022-03-27",children:[]},{level:3,title:"1.0.66 | 2022.03.25",slug:"_1-0-66-2022-03-25",link:"#_1-0-66-2022-03-25",children:[]},{level:3,title:"1.0.65 | 2022.03.25",slug:"_1-0-65-2022-03-25",link:"#_1-0-65-2022-03-25",children:[]},{level:3,title:"1.0.6 | 2022.03.20",slug:"_1-0-6-2022-03-20",link:"#_1-0-6-2022-03-20",children:[]},{level:3,title:"1.0.55 | 2022.03.18",slug:"_1-0-55-2022-03-18",link:"#_1-0-55-2022-03-18",children:[]},{level:3,title:"1.0.5 | 2022.03.18",slug:"_1-0-5-2022-03-18",link:"#_1-0-5-2022-03-18",children:[]},{level:3,title:"1.0.4 | 2022.03.06",slug:"_1-0-4-2022-03-06",link:"#_1-0-4-2022-03-06",children:[]},{level:3,title:"1.0.3 | 2022.03.02",slug:"_1-0-3-2022-03-02",link:"#_1-0-3-2022-03-02",children:[]},{level:3,title:"1.0.2 | 2022.02.18",slug:"_1-0-2-2022-02-18",link:"#_1-0-2-2022-02-18",children:[]},{level:3,title:"1.0.1 | 2022.02.15",slug:"_1-0-1-2022-02-15",link:"#_1-0-1-2022-02-15",children:[]},{level:3,title:"1.0 | 2022.02.14",slug:"_1-0-2022-02-14",link:"#_1-0-2022-02-14",children:[]}],path:"/en/about/changelog.html",pathLocale:"/en/",extraFields:[]},{title:"Contact Us",headers:[{level:2,title:"Help with Maintenance",slug:"help-with-maintenance",link:"#help-with-maintenance",children:[]}],path:"/en/about/contacts.html",pathLocale:"/en/",extraFields:[]},{title:"Looking for Future",headers:[{level:2,title:"Unresolved Issues",slug:"unresolved-issues",link:"#unresolved-issues",children:[{level:3,title:"YukiHookModulePrefs",slug:"yukihookmoduleprefs",link:"#yukihookmoduleprefs",children:[]}]},{level:2,title:"Future Plans",slug:"future-plans",link:"#future-plans",children:[{level:3,title:"Lite Version Supported for Standalone Use",slug:"lite-version-supported-for-standalone-use",link:"#lite-version-supported-for-standalone-use",children:[]},{level:3,title:"Support for More Hook Framework",slug:"support-for-more-hook-framework",link:"#support-for-more-hook-framework",children:[]}]}],path:"/en/about/future.html",pathLocale:"/en/",extraFields:[]},{title:"Document Introduce",headers:[{level:2,title:"Function Description",slug:"function-description",link:"#function-description",children:[]},{level:2,title:"Function Example Description",slug:"function-example-description",link:"#function-example-description",children:[]},{level:2,title:"Change Record Description",slug:"change-record-description",link:"#change-record-description",children:[]},{level:2,title:"Related Symbols Description",slug:"related-symbols-description",link:"#related-symbols-description",children:[]}],path:"/en/api/home.html",pathLocale:"/en/",extraFields:[]},{title:"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:"\u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55",headers:[{level:2,title:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90 (Resources)",slug:"\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",link:"#\u6CE8\u5165\u6A21\u5757\u8D44\u6E90-resources",children:[]},{level:2,title:"\u6CE8\u518C\u6A21\u5757 Activity",slug:"\u6CE8\u518C\u6A21\u5757-activity",link:"#\u6CE8\u518C\u6A21\u5757-activity",children:[]},{level:2,title:"\u521B\u5EFA ContextThemeWrapper \u4EE3\u7406",slug:"\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",link:"#\u521B\u5EFA-contextthemewrapper-\u4EE3\u7406",children:[]},{level:2,title:"ClassLoader \u51B2\u7A81\u95EE\u9898",slug:"classloader-\u51B2\u7A81\u95EE\u9898",link:"#classloader-\u51B2\u7A81\u95EE\u9898",children:[]}],path:"/zh-cn/api/special-features/host-inject.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5BBF\u4E3B\u751F\u547D\u5468\u671F\u6269\u5C55",headers:[{level:2,title:"\u76D1\u542C\u751F\u547D\u5468\u671F",slug:"\u76D1\u542C\u751F\u547D\u5468\u671F",link:"#\u76D1\u542C\u751F\u547D\u5468\u671F",children:[]},{level:2,title:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",slug:"\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",link:"#\u6CE8\u518C\u7CFB\u7EDF\u5E7F\u64AD",children:[]}],path:"/zh-cn/api/special-features/host-lifecycle.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8C03\u8BD5\u65E5\u5FD7",headers:[{level:2,title:"\u666E\u901A\u65E5\u5FD7",slug:"\u666E\u901A\u65E5\u5FD7",link:"#\u666E\u901A\u65E5\u5FD7",children:[]},{level:2,title:"\u9519\u8BEF\u65E5\u5FD7",slug:"\u9519\u8BEF\u65E5\u5FD7",link:"#\u9519\u8BEF\u65E5\u5FD7",children:[]},{level:2,title:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",slug:"\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",link:"#\u4FDD\u5B58\u65E5\u5FD7\u4E0E\u81EA\u5B9A\u4E49\u5143\u7D20",children:[]}],path:"/zh-cn/api/special-features/logger.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55",headers:[{level:2,title:"Class \u6269\u5C55",slug:"class-\u6269\u5C55",link:"#class-\u6269\u5C55",children:[{level:3,title:"\u5BF9\u8C61\u8F6C\u6362",slug:"\u5BF9\u8C61\u8F6C\u6362",link:"#\u5BF9\u8C61\u8F6C\u6362",children:[]},{level:3,title:"\u5B58\u5728\u5224\u65AD",slug:"\u5B58\u5728\u5224\u65AD",link:"#\u5B58\u5728\u5224\u65AD",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E",link:"#\u6A21\u7CCA\u67E5\u627E",children:[]}]},{level:2,title:"Member \u6269\u5C55",slug:"member-\u6269\u5C55",link:"#member-\u6269\u5C55",children:[{level:3,title:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",slug:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",link:"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",children:[]},{level:3,title:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",slug:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",link:"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",children:[]},{level:3,title:"\u5728\u7236\u7C7B\u67E5\u627E",slug:"\u5728\u7236\u7C7B\u67E5\u627E",link:"#\u5728\u7236\u7C7B\u67E5\u627E",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E-1",link:"#\u6A21\u7CCA\u67E5\u627E-1",children:[]},{level:3,title:"\u591A\u91CD\u67E5\u627E",slug:"\u591A\u91CD\u67E5\u627E-1",link:"#\u591A\u91CD\u67E5\u627E-1",children:[]},{level:3,title:"\u9759\u6001\u5B57\u8282\u7801",slug:"\u9759\u6001\u5B57\u8282\u7801",link:"#\u9759\u6001\u5B57\u8282\u7801",children:[]},{level:3,title:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",slug:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",link:"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",children:[]},{level:3,title:"\u76F4\u63A5\u8C03\u7528",slug:"\u76F4\u63A5\u8C03\u7528",link:"#\u76F4\u63A5\u8C03\u7528",children:[]},{level:3,title:"\u539F\u59CB\u8C03\u7528",slug:"\u539F\u59CB\u8C03\u7528",link:"#\u539F\u59CB\u8C03\u7528",children:[]},{level:3,title:"\u518D\u6B21\u67E5\u627E",slug:"\u518D\u6B21\u67E5\u627E",link:"#\u518D\u6B21\u67E5\u627E",children:[]},{level:3,title:"\u76F8\u5BF9\u5339\u914D",slug:"\u76F8\u5BF9\u5339\u914D",link:"#\u76F8\u5BF9\u5339\u914D",children:[]},{level:3,title:"\u8C03\u7528\u6CDB\u578B",slug:"\u8C03\u7528\u6CDB\u578B",link:"#\u8C03\u7528\u6CDB\u578B",children:[]},{level:3,title:"\u6CE8\u610F\u8BEF\u533A",slug:"\u6CE8\u610F\u8BEF\u533A",link:"#\u6CE8\u610F\u8BEF\u533A",children:[]}]},{level:2,title:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",slug:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",link:"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55",children:[]}],path:"/zh-cn/api/special-features/reflection.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865",headers:[{level:2,title:"\u57FA\u672C\u7528\u6CD5",slug:"\u57FA\u672C\u7528\u6CD5",link:"#\u57FA\u672C\u7528\u6CD5",children:[]},{level:2,title:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",slug:"\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",link:"#\u5224\u65AD\u6A21\u5757\u4E0E\u5BBF\u4E3B\u7248\u672C\u662F\u5426\u5339\u914D",children:[]},{level:2,title:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",slug:"\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",link:"#\u56DE\u8C03\u4E8B\u4EF6\u54CD\u5E94\u7684\u89C4\u5219",children:[]},{level:2,title:"\u5B89\u5168\u6027\u8BF4\u660E",slug:"\u5B89\u5168\u6027\u8BF4\u660E",link:"#\u5B89\u5168\u6027\u8BF4\u660E",children:[]}],path:"/zh-cn/api/special-features/xposed-channel.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8",headers:[{level:2,title:"\u5728 Activity \u4E2D\u4F7F\u7528",slug:"\u5728-activity-\u4E2D\u4F7F\u7528",link:"#\u5728-activity-\u4E2D\u4F7F\u7528",children:[]},{level:2,title:"\u5728 PreferenceFragment \u4E2D\u4F7F\u7528",slug:"\u5728-preferencefragment-\u4E2D\u4F7F\u7528",link:"#\u5728-preferencefragment-\u4E2D\u4F7F\u7528",children:[]}],path:"/zh-cn/api/special-features/xposed-storage.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"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:"Monitor Lifecycle",slug:"monitor-lifecycle",link:"#monitor-lifecycle",children:[]},{level:2,title:"Register System Broadcast",slug:"register-system-broadcast",link:"#register-system-broadcast",children:[]}],path:"/en/api/special-features/host-lifecycle.html",pathLocale:"/en/",extraFields:[]},{title:"Debug Logs",headers:[{level:2,title:"Normal Logs",slug:"normal-logs",link:"#normal-logs",children:[]},{level:2,title:"Error Logs",slug:"error-logs",link:"#error-logs",children:[]},{level:2,title:"Save Logs and Custom Elements",slug:"save-logs-and-custom-elements",link:"#save-logs-and-custom-elements",children:[]}],path:"/en/api/special-features/logger.html",pathLocale:"/en/",extraFields:[]},{title:"Reflection Extensions",headers:[{level:2,title:"Class Extensions",slug:"class-extensions",link:"#class-extensions",children:[{level:3,title:"Object Conversion",slug:"object-conversion",link:"#object-conversion",children:[]},{level:3,title:"Existential Judgment",slug:"existential-judgment",link:"#existential-judgment",children:[]},{level:3,title:"Vague Search",slug:"vague-search",link:"#vague-search",children:[]}]},{level:2,title:"Member Extensions",slug:"member-extensions",link:"#member-extensions",children:[{level:3,title:"Find and Reflection",slug:"find-and-reflection",link:"#find-and-reflection",children:[]},{level:3,title:"Optional Find Conditions",slug:"optional-find-conditions",link:"#optional-find-conditions",children:[]},{level:3,title:"Find in Super Class",slug:"find-in-super-class",link:"#find-in-super-class",children:[]},{level:3,title:"Vague Find",slug:"vague-find",link:"#vague-find",children:[]},{level:3,title:"Multiple Find",slug:"multiple-find",link:"#multiple-find",children:[]},{level:3,title:"Static Bytecode",slug:"static-bytecode",link:"#static-bytecode",children:[]},{level:3,title:"Obfuscated Bytecode",slug:"obfuscated-bytecode",link:"#obfuscated-bytecode",children:[]},{level:3,title:"Directly Called",slug:"directly-called",link:"#directly-called",children:[]},{level:3,title:"Original Called",slug:"original-called",link:"#original-called",children:[]},{level:3,title:"Find Again",slug:"find-again",link:"#find-again",children:[]},{level:3,title:"Relative Matching",slug:"relative-matching",link:"#relative-matching",children:[]},{level:3,title:"Calling Generics",slug:"calling-generics",link:"#calling-generics",children:[]},{level:3,title:"Pay Attention of Trap",slug:"pay-attention-of-trap",link:"#pay-attention-of-trap",children:[]}]},{level:2,title:"Common Type Extensions",slug:"common-type-extensions",link:"#common-type-extensions",children:[]}],path:"/en/api/special-features/reflection.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module and Host Channel",headers:[{level:2,title:"Basic Usage",slug:"basic-usage",link:"#basic-usage",children:[]},{level:2,title:"Determine Module App and Host App Version Match",slug:"determine-module-app-and-host-app-version-match",link:"#determine-module-app-and-host-app-version-match",children:[]},{level:2,title:"Rules for Callback Event Response",slug:"rules-for-callback-event-response",link:"#rules-for-callback-event-response",children:[]},{level:2,title:"Security Instructions",slug:"security-instructions",link:"#security-instructions",children:[]}],path:"/en/api/special-features/xposed-channel.html",pathLocale:"/en/",extraFields:[]},{title:"Xposed Module Data Storage",headers:[{level:2,title:"Use in Activity",slug:"use-in-activity",link:"#use-in-activity",children:[]},{level:2,title:"Use in PreferenceFragment",slug:"use-in-preferencefragment",link:"#use-in-preferencefragment",children:[]}],path:"/en/api/special-features/xposed-storage.html",pathLocale:"/en/",extraFields:[]},{title:"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:"executorName - field",slug:"executorname-field",link:"#executorname-field",children:[]},{level:3,title:"executorVersion - field",slug:"executorversion-field",link:"#executorversion-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:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"InjectYukiHookWithXposed - annotation",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.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:"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:"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:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSEDBRIDGE - enum",slug:"xposedbridge-enum",link:"#xposedbridge-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:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:3,title:"saveToFile - method",slug:"savetofile-method",link:"#savetofile-method",children:[]},{level:3,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[]}]},{level:2,title:"loggerD - method",slug:"loggerd-method",link:"#loggerd-method",children:[]},{level:2,title:"loggerI - method",slug:"loggeri-method",link:"#loggeri-method",children:[]},{level:2,title:"loggerW - method",slug:"loggerw-method",link:"#loggerw-method",children:[]},{level:2,title:"loggerE - method",slug:"loggere-method",link:"#loggere-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/log/LoggerFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"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:"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:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.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:"YukiHookModulePrefs - class",headers:[{level:2,title:"isXSharePrefsReadable - field",slug:"isxshareprefsreadable-field",link:"#isxshareprefsreadable-field",children:[]},{level:2,title:"isRunInNewXShareMode - field",slug:"isruninnewxsharemode-field",link:"#isruninnewxsharemode-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"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:"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:"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:"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:"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:"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:"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:"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/dummy/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/dummy/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/dummy/YukiResources.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:"ChannelData - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/data/ChannelData.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:"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:"executorName - field",slug:"executorname-field",link:"#executorname-field",children:[]},{level:3,title:"executorVersion - field",slug:"executorversion-field",link:"#executorversion-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:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugLog - method",slug:"debuglog-method",link:"#debuglog-method",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isEnableModulePrefsCache - field",slug:"isenablemoduleprefscache-field",link:"#isenablemoduleprefscache-field",children:[]},{level:3,title:"isEnableModuleAppResourcesCache - field",slug:"isenablemoduleappresourcescache-field",link:"#isenablemoduleappresourcescache-field",children:[]},{level:3,title:"isEnableHookModuleStatus - field",slug:"isenablehookmodulestatus-field",link:"#isenablehookmodulestatus-field",children:[]},{level:3,title:"isEnableHookSharedPreferences - field",slug:"isenablehooksharedpreferences-field",link:"#isenablehooksharedpreferences-field",children:[]},{level:3,title:"isEnableDataChannel - field",slug:"isenabledatachannel-field",link:"#isenabledatachannel-field",children:[]},{level:3,title:"isEnableMemberCache - field",slug:"isenablemembercache-field",link:"#isenablemembercache-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]},{level:2,title:"encase - method",slug:"encase-method",link:"#encase-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/YukiHookAPI.html",pathLocale:"/en/",extraFields:[]},{title:"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:"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:"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:"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:"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:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.html",pathLocale:"/en/",extraFields:[]},{title:"YukiHookFactory - kt",headers:[{level:2,title:"IYukiHookXposedInit.configs - ext-method",slug:"iyukihookxposedinit-configs-ext-method",link:"#iyukihookxposedinit-configs-ext-method",children:[]},{level:2,title:"IYukiHookXposedInit.encase - ext-method",slug:"iyukihookxposedinit-encase-ext-method",link:"#iyukihookxposedinit-encase-ext-method",children:[]},{level:2,title:"Context.modulePrefs - ext-field",slug:"context-moduleprefs-ext-field",link:"#context-moduleprefs-ext-field",children:[]},{level:2,title:"Context.modulePrefs - ext-method",slug:"context-moduleprefs-ext-method",link:"#context-moduleprefs-ext-method",children:[]},{level:2,title:"Context.dataChannel - ext-method",slug:"context-datachannel-ext-method",link:"#context-datachannel-ext-method",children:[]},{level:2,title:"Context.processName - ext-field",slug:"context-processname-ext-field",link:"#context-processname-ext-field",children:[]},{level:2,title:"Context+Resources.injectModuleAppResources - ext-method",slug:"context-resources-injectmoduleappresources-ext-method",link:"#context-resources-injectmoduleappresources-ext-method",children:[]},{level:2,title:"Context.registerModuleAppActivities - ext-method",slug:"context-registermoduleappactivities-ext-method",link:"#context-registermoduleappactivities-ext-method",children:[]},{level:2,title:"Context.applyModuleTheme - ext-method",slug:"context-applymoduletheme-ext-method",link:"#context-applymoduletheme-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html",pathLocale:"/en/",extraFields:[]},{title:"LoggerFactory - kt",headers:[{level:2,title:"LoggerType - class",slug:"loggertype-class",link:"#loggertype-class",children:[{level:3,title:"LOGD - enum",slug:"logd-enum",link:"#logd-enum",children:[]},{level:3,title:"XPOSEDBRIDGE - enum",slug:"xposedbridge-enum",link:"#xposedbridge-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:"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:"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:"HookParam - class",headers:[{level:2,title:"args - field",slug:"args-field",link:"#args-field",children:[]},{level:2,title:"instance - field",slug:"instance-field",link:"#instance-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"member - field",slug:"member-field",link:"#member-field",children:[]},{level:2,title:"method - field",slug:"method-field",link:"#method-field",children:[]},{level:2,title:"constructor - field",slug:"constructor-field",link:"#constructor-field",children:[]},{level:2,title:"result - field",slug:"result-field",link:"#result-field",children:[]},{level:2,title:"hasThrowable - field",slug:"hasthrowable-field",link:"#hasthrowable-field",children:[]},{level:2,title:"throwable - field",slug:"throwable-field",link:"#throwable-field",children:[]},{level:2,title:"Throwable.throwToApp - i-ext-method",slug:"throwable-throwtoapp-i-ext-method",link:"#throwable-throwtoapp-i-ext-method",children:[]},{level:2,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:2,title:"instance - method",slug:"instance-method",link:"#instance-method",children:[]},{level:2,title:"args - method",slug:"args-method",link:"#args-method",children:[]},{level:2,title:"args - method",slug:"args-method-1",link:"#args-method-1",children:[]},{level:2,title:"callOriginal - method",slug:"calloriginal-method",link:"#calloriginal-method",children:[]},{level:2,title:"invokeOriginal - method",slug:"invokeoriginal-method",link:"#invokeoriginal-method",children:[]},{level:2,title:"resultTrue - method",slug:"resulttrue-method",link:"#resulttrue-method",children:[]},{level:2,title:"resultFalse - method",slug:"resultfalse-method",link:"#resultfalse-method",children:[]},{level:2,title:"resultNull - method",slug:"resultnull-method",link:"#resultnull-method",children:[]},{level:2,title:"ArgsIndexCondition - class",slug:"argsindexcondition-class",link:"#argsindexcondition-class",children:[{level:3,title:"first - method",slug:"first-method",link:"#first-method",children:[]},{level:3,title:"last - method",slug:"last-method",link:"#last-method",children:[]}]},{level:2,title:"ArgsModifyer - class",slug:"argsmodifyer-class",link:"#argsmodifyer-class",children:[{level:3,title:"cast - method",slug:"cast-method",link:"#cast-method",children:[]},{level:3,title:"byte - method",slug:"byte-method",link:"#byte-method",children:[]},{level:3,title:"int - method",slug:"int-method",link:"#int-method",children:[]},{level:3,title:"long - method",slug:"long-method",link:"#long-method",children:[]},{level:3,title:"short - method",slug:"short-method",link:"#short-method",children:[]},{level:3,title:"double - method",slug:"double-method",link:"#double-method",children:[]},{level:3,title:"float - method",slug:"float-method",link:"#float-method",children:[]},{level:3,title:"string - method",slug:"string-method",link:"#string-method",children:[]},{level:3,title:"char - method",slug:"char-method",link:"#char-method",children:[]},{level:3,title:"boolean - method",slug:"boolean-method",link:"#boolean-method",children:[]},{level:3,title:"any - method",slug:"any-method",link:"#any-method",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]},{level:3,title:"set - method",slug:"set-method",link:"#set-method",children:[]},{level:3,title:"setNull - method",slug:"setnull-method",link:"#setnull-method",children:[]},{level:3,title:"setTrue - method",slug:"settrue-method",link:"#settrue-method",children:[]},{level:3,title:"setFalse - method",slug:"setfalse-method",link:"#setfalse-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",pathLocale:"/en/",extraFields:[]},{title:"PackageParam - class",headers:[{level:2,title:"appClassLoader - field",slug:"appclassloader-field",link:"#appclassloader-field",children:[]},{level:2,title:"appInfo - field",slug:"appinfo-field",link:"#appinfo-field",children:[]},{level:2,title:"appUserId - field",slug:"appuserid-field",link:"#appuserid-field",children:[]},{level:2,title:"appContext - field",slug:"appcontext-field",link:"#appcontext-field",children:[]},{level:2,title:"appResources - field",slug:"appresources-field",link:"#appresources-field",children:[]},{level:2,title:"systemContext - field",slug:"systemcontext-field",link:"#systemcontext-field",children:[]},{level:2,title:"processName - field",slug:"processname-field",link:"#processname-field",children:[]},{level:2,title:"packageName - field",slug:"packagename-field",link:"#packagename-field",children:[]},{level:2,title:"isFirstApplication - field",slug:"isfirstapplication-field",link:"#isfirstapplication-field",children:[]},{level:2,title:"mainProcessName - field",slug:"mainprocessname-field",link:"#mainprocessname-field",children:[]},{level:2,title:"moduleAppFilePath - field",slug:"moduleappfilepath-field",link:"#moduleappfilepath-field",children:[]},{level:2,title:"moduleAppResources - field",slug:"moduleappresources-field",link:"#moduleappresources-field",children:[]},{level:2,title:"prefs - field",slug:"prefs-field",link:"#prefs-field",children:[]},{level:2,title:"prefs - method",slug:"prefs-method",link:"#prefs-method",children:[]},{level:2,title:"dataChannel - field",slug:"datachannel-field",link:"#datachannel-field",children:[]},{level:2,title:"resources - method",slug:"resources-method",link:"#resources-method",children:[]},{level:2,title:"refreshModuleAppResources - method",slug:"refreshmoduleappresources-method",link:"#refreshmoduleappresources-method",children:[]},{level:2,title:"onAppLifecycle - method",slug:"onapplifecycle-method",link:"#onapplifecycle-method",children:[]},{level:2,title:"loadApp - method",slug:"loadapp-method",link:"#loadapp-method",children:[]},{level:2,title:"loadZygote - method",slug:"loadzygote-method",link:"#loadzygote-method",children:[]},{level:2,title:"loadSystem - method",slug:"loadsystem-method",link:"#loadsystem-method",children:[]},{level:2,title:"withProcess - method",slug:"withprocess-method",link:"#withprocess-method",children:[]},{level:2,title:"loadHooker - method",slug:"loadhooker-method",link:"#loadhooker-method",children:[]},{level:2,title:"searchClass - method",slug:"searchclass-method",link:"#searchclass-method",children:[]},{level:2,title:"String+VariousClass.toClass - i-ext-method",slug:"string-variousclass-toclass-i-ext-method",link:"#string-variousclass-toclass-i-ext-method",children:[]},{level:2,title:"String+VariousClass.toClassOrNull - i-ext-method",slug:"string-variousclass-toclassornull-i-ext-method",link:"#string-variousclass-toclassornull-i-ext-method",children:[]},{level:2,title:"String.hasClass - i-ext-method",slug:"string-hasclass-i-ext-method",link:"#string-hasclass-i-ext-method",children:[]},{level:2,title:"findClass - method",slug:"findclass-method",link:"#findclass-method",children:[]},{level:2,title:"String+Class+VariousClass+HookClass.hook - i-ext-method",slug:"string-class-variousclass-hookclass-hook-i-ext-method",link:"#string-class-variousclass-hookclass-hook-i-ext-method",children:[]},{level:2,title:"HookResources.hook - i-ext-method",slug:"hookresources-hook-i-ext-method",link:"#hookresources-hook-i-ext-method",children:[]},{level:2,title:"AppLifecycle - class",slug:"applifecycle-class",link:"#applifecycle-class",children:[{level:3,title:"attachBaseContext - method",slug:"attachbasecontext-method",link:"#attachbasecontext-method",children:[]},{level:3,title:"onCreate - method",slug:"oncreate-method",link:"#oncreate-method",children:[]},{level:3,title:"onTerminate - method",slug:"onterminate-method",link:"#onterminate-method",children:[]},{level:3,title:"onLowMemory - method",slug:"onlowmemory-method",link:"#onlowmemory-method",children:[]},{level:3,title:"onTrimMemory - method",slug:"ontrimmemory-method",link:"#ontrimmemory-method",children:[]},{level:3,title:"onConfigurationChanged - method",slug:"onconfigurationchanged-method",link:"#onconfigurationchanged-method",children:[]},{level:3,title:"registerReceiver - method",slug:"registerreceiver-method",link:"#registerreceiver-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",pathLocale:"/en/",extraFields:[]},{title:"YukiMemberHookCreator - class",headers:[{level:2,title:"PRIORITY_DEFAULT - field",slug:"priority-default-field",link:"#priority-default-field",children:[]},{level:2,title:"PRIORITY_LOWEST - field",slug:"priority-lowest-field",link:"#priority-lowest-field",children:[]},{level:2,title:"PRIORITY_HIGHEST - field",slug:"priority-highest-field",link:"#priority-highest-field",children:[]},{level:2,title:"instanceClass - field",slug:"instanceclass-field",link:"#instanceclass-field",children:[]},{level:2,title:"injectMember - method",slug:"injectmember-method",link:"#injectmember-method",children:[]},{level:2,title:"useDangerousOperation - method",slug:"usedangerousoperation-method",link:"#usedangerousoperation-method",children:[]},{level:2,title:"MemberHookCreator - class",slug:"memberhookcreator-class",link:"#memberhookcreator-class",children:[{level:3,title:"members - method",slug:"members-method",link:"#members-method",children:[]},{level:3,title:"allMembers - method",slug:"allmembers-method",link:"#allmembers-method",children:[]},{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"HookParam.field - i-ext-method",slug:"hookparam-field-i-ext-method",link:"#hookparam-field-i-ext-method",children:[]},{level:3,title:"HookParam.method - i-ext-method",slug:"hookparam-method-i-ext-method",link:"#hookparam-method-i-ext-method",children:[]},{level:3,title:"HookParam.constructor - i-ext-method",slug:"hookparam-constructor-i-ext-method",link:"#hookparam-constructor-i-ext-method",children:[]},{level:3,title:"HookParam.injectMember - i-ext-method",slug:"hookparam-injectmember-i-ext-method",link:"#hookparam-injectmember-i-ext-method",children:[]},{level:3,title:"beforeHook - method",slug:"beforehook-method",link:"#beforehook-method",children:[]},{level:3,title:"afterHook - method",slug:"afterhook-method",link:"#afterhook-method",children:[]},{level:3,title:"replaceAny - method",slug:"replaceany-method",link:"#replaceany-method",children:[]},{level:3,title:"replaceUnit - method",slug:"replaceunit-method",link:"#replaceunit-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"intercept - method",slug:"intercept-method",link:"#intercept-method",children:[]},{level:3,title:"removeSelf - method",slug:"removeself-method",link:"#removeself-method",children:[]},{level:3,title:"HookCallback - class",slug:"hookcallback-class",link:"#hookcallback-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method-1",link:"#result-method-1",children:[]},{level:3,title:"by - method",slug:"by-method-1",link:"#by-method-1",children:[]},{level:3,title:"onPrepareHook - method",slug:"onpreparehook-method",link:"#onpreparehook-method",children:[]},{level:3,title:"onHookClassNotFoundFailure - method",slug:"onhookclassnotfoundfailure-method",link:"#onhookclassnotfoundfailure-method",children:[]},{level:3,title:"ignoredHookClassNotFoundFailure - method",slug:"ignoredhookclassnotfoundfailure-method",link:"#ignoredhookclassnotfoundfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"YukiResourcesHookCreator - class",headers:[{level:2,title:"injectResource - method",slug:"injectresource-method",link:"#injectresource-method",children:[]},{level:2,title:"ResourcesHookCreator - class",slug:"resourceshookcreator-class",link:"#resourceshookcreator-class",children:[{level:3,title:"resourceId - field",slug:"resourceid-field",link:"#resourceid-field",children:[]},{level:3,title:"conditions - method",slug:"conditions-method",link:"#conditions-method",children:[]},{level:3,title:"replaceTo - method",slug:"replaceto-method",link:"#replaceto-method",children:[]},{level:3,title:"replaceToTrue - method",slug:"replacetotrue-method",link:"#replacetotrue-method",children:[]},{level:3,title:"replaceToFalse - method",slug:"replacetofalse-method",link:"#replacetofalse-method",children:[]},{level:3,title:"replaceToModuleResource - method",slug:"replacetomoduleresource-method",link:"#replacetomoduleresource-method",children:[]},{level:3,title:"injectAsLayout - method",slug:"injectaslayout-method",link:"#injectaslayout-method",children:[]},{level:3,title:"ConditionFinder - class",slug:"conditionfinder-class",link:"#conditionfinder-class",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]},{level:3,title:"onHookingFailure - method",slug:"onhookingfailure-method",link:"#onhookingfailure-method",children:[]},{level:3,title:"ignoredHookingFailure - method",slug:"ignoredhookingfailure-method",link:"#ignoredhookingfailure-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",pathLocale:"/en/",extraFields:[]},{title:"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:"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:"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:[]}]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.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:"YukiHookModulePrefs - class",headers:[{level:2,title:"isXSharePrefsReadable - field",slug:"isxshareprefsreadable-field",link:"#isxshareprefsreadable-field",children:[]},{level:2,title:"isRunInNewXShareMode - field",slug:"isruninnewxsharemode-field",link:"#isruninnewxsharemode-field",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"direct - method",slug:"direct-method",link:"#direct-method",children:[]},{level:2,title:"getString - method",slug:"getstring-method",link:"#getstring-method",children:[]},{level:2,title:"getStringSet - method",slug:"getstringset-method",link:"#getstringset-method",children:[]},{level:2,title:"getBoolean - method",slug:"getboolean-method",link:"#getboolean-method",children:[]},{level:2,title:"getInt - method",slug:"getint-method",link:"#getint-method",children:[]},{level:2,title:"getLong - method",slug:"getlong-method",link:"#getlong-method",children:[]},{level:2,title:"getFloat - method",slug:"getfloat-method",link:"#getfloat-method",children:[]},{level:2,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:2,title:"remove - method",slug:"remove-method",link:"#remove-method",children:[]},{level:2,title:"remove - method",slug:"remove-method-1",link:"#remove-method-1",children:[]},{level:2,title:"clear - method",slug:"clear-method",link:"#clear-method",children:[]},{level:2,title:"putString - method",slug:"putstring-method",link:"#putstring-method",children:[]},{level:2,title:"putStringSet - method",slug:"putstringset-method",link:"#putstringset-method",children:[]},{level:2,title:"putBoolean - method",slug:"putboolean-method",link:"#putboolean-method",children:[]},{level:2,title:"putInt - method",slug:"putint-method",link:"#putint-method",children:[]},{level:2,title:"putLong - method",slug:"putlong-method",link:"#putlong-method",children:[]},{level:2,title:"putFloat - method",slug:"putfloat-method",link:"#putfloat-method",children:[]},{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"put - method",slug:"put-method",link:"#put-method",children:[]},{level:2,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",pathLocale:"/en/",extraFields:[]},{title:"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/dummy/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/dummy/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/dummy/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:"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:"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:"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:"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:"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:"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:"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:"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:"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:"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:[]}],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:"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:[]}],path:"/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.html",pathLocale:"/en/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/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:"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:"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:"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:"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:"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:[]}],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:"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:[]}],path:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/MethodRules.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:"/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Br=ye(hf),df=()=>Br;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Br.value=e});const uf=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:i})=>{const o=Y(()=>e.value.filter(n=>n.pathLocale===t.value));return Y(()=>{const n=l.value.trim().toLowerCase();if(!n)return[];const a=[],r=(s,c)=>{sa(n,[c.title])&&a.push({link:`${s.path}#${c.slug}`,title:s.title,header:c.title});for(const h of c.children){if(a.length>=i.value)return;r(s,h)}};for(const s of o.value){if(a.length>=i.value)break;if(sa(n,[s.title,...s.extraFields])){a.push({link:s.path,title:s.title});continue}for(const c of s.headers){if(a.length>=i.value)break;r(s,c)}}return a})},pf=e=>{const t=ye(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},mf=ue({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:l,maxSuggestions:i}=Ei(e),o=Jt(),n=Wl(),a=df(),r=ye(null),s=ye(!1),c=ye(""),h=Y(()=>{var L;return(L=t.value[n.value])!=null?L:{}}),p=uf({searchIndex:a,routeLocale:n,query:c,maxSuggestions:i}),{focusIndex:m,focusNext:g,focusPrev:x}=pf(p);cf({input:r,hotKeys:l});const P=Y(()=>s.value&&!!p.value.length),E=()=>{!P.value||x()},k=()=>{!P.value||g()},b=L=>{if(!P.value)return;const H=p.value[L];!H||o.push(H.link).then(()=>{c.value="",m.value=0})};return()=>he("form",{class:"search-box",role:"search"},[he("input",{ref:r,type:"search",placeholder:h.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>s.value=!0,onBlur:()=>s.value=!1,onInput:L=>c.value=L.target.value,onKeydown:L=>{switch(L.key){case"ArrowUp":{E();break}case"ArrowDown":{k();break}case"Enter":{L.preventDefault(),b(m.value);break}}}}),P.value&&he("ul",{class:"suggestions",onMouseleave:()=>m.value=-1},p.value.map(({link:L,title:H,header:U},ee)=>he("li",{class:["suggestion",{focus:m.value===ee}],onMouseenter:()=>m.value=ee,onMousedown:()=>b(ee)},he("a",{href:L,onClick:w=>w.preventDefault()},[he("span",{class:"page-title"},H),U&&he("span",{class:"page-header"},`> ${U}`)]))))])}});const ff={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gf=["s","/"],kf=5,vf=Ht({enhance({app:e}){e.component("SearchBox",t=>he(mf,{locales:ff,hotKeys:gf,maxSuggestions:kf,...t}))}}),oi=[Nd,Yd,Xd,nu,cu,mu,nf,vf];var Ur=ye(es),Wr=Co({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),gt=ye(Wr),Ot=()=>gt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{Ur.value[e.key]=()=>Promise.resolve(e),e.key===gt.value.key&&(gt.value=e)});var Xr=Symbol(""),vt=()=>{const e=Me(Xr);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},qr=Symbol(""),bf=()=>{const e=Me(qr);if(!e)throw new Error("usePageHead() is called without provider.");return e},_f=Symbol(""),Kr=Symbol(""),yf=()=>{const e=Me(Kr);if(!e)throw new Error("usePageLang() is called without provider.");return e},No=Symbol(""),Wl=()=>{const e=Me(No);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Tt=ye(Ah),Gr=()=>Tt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Tt.value=e});var Qr=Symbol(""),jo=()=>{const e=Me(Qr);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},xf=Symbol(""),Ut=gl({resolvePageData:async e=>{const t=Ur.value[e],l=await(t==null?void 0:t());return l!=null?l:Wr},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,l)=>{const i=be(t.description)?t.description:l.description,o=[...te(t.head)?t.head:[],...l.head,["title",{},e],["meta",{name:"description",content:i}]];return Ih(o)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>pr(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),$o=ue({name:"ClientOnly",setup(e,t){const l=ye(!1);return Ze(()=>{l.value=!0}),()=>{var i,o;return l.value?(o=(i=t.slots).default)==null?void 0:o.call(i):null}}}),Ef=ue({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Ot(),l=Y(()=>mr[e.pageKey||t.value.key]);return()=>l.value?he(l.value):he("div","404 Not Found")}}),Cf="Layout",Rf="NotFound",Pf=oi.reduce((e,t)=>({...e,...t.layouts}),{}),ca=ue({name:"Vuepress",setup(){const e=Ot(),t=Y(()=>{let l;if(e.value.path){const i=e.value.frontmatter.layout;be(i)?l=i:l=Cf}else l=Rf;return Pf[l]});return()=>he(t.value)}}),Yo=e=>Ul(e)?e:`${Gr().value.base}${ur(e)}`;const Lf=[["v-8daa1a0e","/",{title:""},["/index.html","/index.md"]],["v-c0c85b84","/zh-cn/",{title:"\u9996\u9875"},["/zh-cn/index.html","/zh-cn/index.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/index.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-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-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-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-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-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-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-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-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-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-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-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-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-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-5858709e","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-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-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-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-3d943532","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.md"]],["v-526c4200","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.md"]],["v-68541dca","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html",{title:"YukiResources - class"},["/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.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-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-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-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-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-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-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-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-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-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-60cbe1b4","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.html",{title:"HookParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam","/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md"]],["v-b381a126","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.html",{title:"PackageParam - class"},["/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam","/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md"]],["v-71147891","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.html",{title:"YukiMemberHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.md"]],["v-5ed1ceee","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html",{title:"YukiResourcesHookCreator - class"},["/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator","/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.md"]],["v-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-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-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-003862c2","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html",{title:"YukiHookModulePrefs - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs","/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.md"]],["v-0f1e3594","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html",{title:"YukiModuleResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.md"]],["v-35faec91","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html",{title:"YukiResForwarder - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.md"]],["v-2c04b82a","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html",{title:"YukiResources - class"},["/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources","/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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-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-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-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-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-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-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-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-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-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-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-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 Af=()=>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}]),Tf=Gh,If=()=>{const e=Fd({history:Tf(dr(Tt.value.base)),routes:Af(),scrollBehavior:(t,l,i)=>i||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,l)=>{var i;(t.path!==l.path||l===mt)&&([gt.value]=await Promise.all([Ut.resolvePageData(t.name),(i=mr[t.name])==null?void 0:i.__asyncLoader()]))}),e},wf=e=>{e.component("ClientOnly",$o),e.component("Content",Ef)},Of=(e,t)=>{const l=Y(()=>Ut.resolveRouteLocale(Tt.value.locales,t.currentRoute.value.path)),i=Y(()=>Ut.resolveSiteLocaleData(Tt.value,l.value)),o=Y(()=>Ut.resolvePageFrontmatter(gt.value)),n=Y(()=>Ut.resolvePageHeadTitle(gt.value,i.value)),a=Y(()=>Ut.resolvePageHead(n.value,o.value,i.value)),r=Y(()=>Ut.resolvePageLang(gt.value));return e.provide(No,l),e.provide(Qr,i),e.provide(Xr,o),e.provide(_f,n),e.provide(qr,a),e.provide(Kr,r),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>o.value},$head:{get:()=>a.value},$headTitle:{get:()=>n.value},$lang:{get:()=>r.value},$page:{get:()=>gt.value},$routeLocale:{get:()=>l.value},$site:{get:()=>Tt.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>Yo}}),{pageData:gt,pageFrontmatter:o,pageHead:a,pageHeadTitle:n,pageLang:r,routeLocale:l,siteData:Tt,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),Ze(()=>{o(),n(),dt(()=>e.path,()=>n())})},zf=([e,t,l=""])=>{const i=Object.entries(t).map(([r,s])=>be(s)?`[${r}="${s}"]`:s===!0?`[${r}]`:"").join(""),o=`head > ${e}${i}`;return Array.from(document.querySelectorAll(o)).find(r=>r.innerText===l)||null},Df=([e,t,l])=>{if(!be(e))return null;const i=document.createElement(e);return Oo(t)&&Object.entries(t).forEach(([o,n])=>{be(n)?i.setAttribute(o,n):n===!0&&i.setAttribute(o,"")}),be(l)&&i.appendChild(document.createTextNode(l)),i},Mf=Ph,Hf=async()=>{var l;const e=Mf({name:"VuepressApp",setup(){var i;Ff();for(const o of oi)(i=o.setup)==null||i.call(o);return()=>[he(Pr),...oi.flatMap(({rootComponents:o=[]})=>o.map(n=>he(n)))]}}),t=If();wf(e),Of(e,t);for(const i of oi)await((l=i.enhance)==null?void 0:l.call(i,{app:e,router:t,siteData:Tt}));return e.use(t),{app:e,router:t}};Hf().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ae as _,jc as a,fe as b,J as c,Hf as createVueApp,oe as d,Mt as e,N as o,_t as r,He as w}; diff --git a/docs/assets/changelog.html.0f19712c.js b/docs/assets/changelog.html.0f19712c.js deleted file mode 100644 index 3edce3a0..00000000 --- a/docs/assets/changelog.html.0f19712c.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as l,o as n,c as a,b as e,d,e as o,a as t}from"./app.b0c3bf74.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-3-2022-09-30",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),g=o(" 1.1.3 | 2022.09.30 \u2002"),f=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),m={id:"_1-1-2-2022-09-30",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),P=o(" 1.1.2 | 2022.09.30 \u2002"),b=t('
    • \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),x={id:"_1-1-1-2022-09-28",tabindex:"-1"},y=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),C=o(" 1.1.1 | 2022.09.28 \u2002"),A=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),v={id:"_1-1-0-2022-09-28",tabindex:"-1"},M=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),I=o(" 1.1.0 | 2022.09.28 \u2002"),R=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),Y=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),S={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},X=o("VuePress"),F=t('
  • \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),L=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 "),B={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},D=o("5ec1cff"),W=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),U=t("
  • \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),G=e("code",null,"ModifierRules",-1),T=o(" \u4E2D\u7684 "),w=e("code",null,"as*",-1),N=o(" \u529F\u80FD\u6539\u540D\u4E3A "),E=e("code",null,"is*",-1),j=o("\uFF0C\u611F\u8C22 "),z={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},V=o("Kitsune"),O=o(" \u7684\u5EFA\u8BAE"),Z=t("
  • 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),K=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 "),J=e("strong",null,"AA",-1),q=o(" \u4EE5\u53CA "),Q={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},$=o("Kitsune"),ee=o(" \u7684\u5EFA\u8BAE"),oe=o("\u4FEE\u590D "),de=e("code",null,"appClassLoader",-1),ie=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 "),ce={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},te=o("Luckyzyx"),le=o(" \u7684\u53CD\u9988"),se=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),ne=o("\u4FEE\u590D "),ae=e("code",null,"YukiHookModulePrefs",-1),re=o(" \u4E2D "),_e=e("code",null,"getStringSet",-1),he=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),ue={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},ke=o("Teddy_Zhu"),pe=o(" \u7684 "),ge={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},fe=o("PR"),me=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),He=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),Pe=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),be=o("\u65B0\u589E\u81EA\u52A8 Hook "),xe=e("code",null,"SharedPreferences",-1),ye=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),Ce=e("code",null,"0664",-1),Ae=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),ve={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Me=o("5ec1cff"),Ie=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),Re=t("
  • \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),Ye=o("Resources Hook \u4E2D\u65B0\u589E "),Se=e("code",null,"array",-1),Xe=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),Fe={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},Le=o("GSWXXN"),Be=o(" \u7684 "),De={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},We=o("PR"),Ue=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),Ge=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),Te=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),we=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),Ne={id:"_1-0-92-2022-05-31",tabindex:"-1"},Ee=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),je=o(" 1.0.92 | 2022.05.31 \u2002"),ze=t("
    • \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),Ve={id:"_1-0-91-2022-05-29",tabindex:"-1"},Oe=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),Ze=o(" 1.0.91 | 2022.05.29 \u2002"),Ke=o("\u4FEE\u590D\u90E8\u5206\u8BBE\u5907\u7684\u5B9A\u5236\u7CFB\u7EDF\u5728 LSPosed \u73AF\u5883\u4E0B\u5F00\u673A\u542F\u52A8\u83B7\u53D6\u7684 "),Je=e("code",null,"ClassLoader",-1),qe=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Qe={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},$e=o("Luckyzyx"),eo=o(" \u7684\u53CD\u9988"),oo=t("
  • \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),io={id:"_1-0-90-2022-05-27",tabindex:"-1"},co=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),to=o(" 1.0.90 | 2022.05.27 \u2002"),lo=t("
    • \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),so={id:"_1-0-89-2022-05-26",tabindex:"-1"},no=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),ao=o(" 1.0.89 | 2022.05.26 \u2002"),ro=t("
    • \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),_o={id:"_1-0-88-2022-05-25",tabindex:"-1"},ho=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),uo=o(" 1.0.88 | 2022.05.25 \u2002"),ko=t("
    • \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),po={id:"_1-0-87-2022-05-10",tabindex:"-1"},go=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),fo=o(" 1.0.87 | 2022.05.10 \u2002"),mo=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),Ho={id:"_1-0-86-2022-05-06",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),bo=o(" 1.0.86 | 2022.05.06 \u2002"),xo=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),yo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Co=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Ao=o(" 1.0.85 | 2022.05.04 \u2002"),vo=t("
    • \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),Mo={id:"_1-0-83-2022-05-04",tabindex:"-1"},Io=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Ro=o(" 1.0.83 | 2022.05.04 \u2002"),Yo=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),So={id:"_1-0-82-2022-05-04",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),Fo=o(" 1.0.82 | 2022.05.04 \u2002"),Lo=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),Bo={id:"_1-0-81-2022-05-04",tabindex:"-1"},Do=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Wo=o(" 1.0.81 | 2022.05.04 \u2002"),Uo=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),Go={id:"_1-0-80-2022-05-01",tabindex:"-1"},To=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),wo=o(" 1.0.80 | 2022.05.01 \u2002"),No=t("
  • 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),Eo=o("\u4FEE\u590D Hook "),jo=e("code",null,"ClassLoader",-1),zo=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Vo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Oo=o("WankkoRee"),Zo=o(" \u7684\u53CD\u9988"),Ko=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),Jo=e("li",null,[o("Java "),e("code",null,"type"),o(" \u65B0\u589E "),e("code",null,"ClassLoader"),o(" \u7C7B\u578B")],-1),qo=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),Qo={id:"_1-0-78-2022-04-18",tabindex:"-1"},$o=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),ed=o(" 1.0.78 | 2022.04.18 \u2002"),od=t("
  • 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),dd=o("\u9002\u914D "),id=e("code",null,"PreferenceFragmentCompat",-1),cd=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),td={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},ld=o("mahoshojoHCG"),sd=o(" \u7684\u53CD\u9988"),nd=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),ad=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),rd={id:"_1-0-77-2022-04-15",tabindex:"-1"},_d=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),hd=o(" 1.0.77 | 2022.04.15 \u2002"),ud=e("code",null,"YukiHookModulePrefs",-1),kd=o(" \u65B0\u589E "),pd=e("code",null,"clear",-1),gd=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),fd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},md=o("WankkoRee"),Hd=o(" \u7684\u5EFA\u8BAE"),Pd=t("
  • 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),bd={id:"_1-0-75-2022-04-13",tabindex:"-1"},xd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),yd=o(" 1.0.75 | 2022.04.13 \u2002"),Cd=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),Ad={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},vd=o("ApeaSuperz"),Md=o(" \u7684\u8D21\u732E"),Id=t("
  • \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),Rd=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),Yd=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),Sd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Xd=o("WankkoRee"),Fd=o(" \u7684\u8D21\u732E"),Ld=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),Bd=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Dd=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Wd={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Ud=o("Luckyzyx"),Gd=o(" \u7684\u53CD\u9988"),Td=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),wd={id:"_1-0-72-2022-04-09",tabindex:"-1"},Nd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Ed=o(" 1.0.72 | 2022.04.09 \u2002"),jd=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),zd={id:"_1-0-71-2022-04-04",tabindex:"-1"},Vd=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),Od=o(" 1.0.71 | 2022.04.04 \u2002"),Zd=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),Kd={id:"_1-0-70-2022-04-04",tabindex:"-1"},Jd=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),qd=o(" 1.0.70 | 2022.04.04 \u2002"),Qd=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),$d=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),ei=e("code",null,"isUseAppClassLoader",-1),oi=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),di={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ii=o("WankkoRee"),ci=o(" \u7684\u53CD\u9988"),ti=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),li=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),si=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),ni=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),ai=o("\u4FEE\u590D "),ri=e("code",null,"allMethods",-1),_i=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),hi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ui=o("WankkoRee"),ki=o(" \u7684\u53CD\u9988"),pi=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),gi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},fi=o("WankkoRee"),mi=o(" \u7684\u5EFA\u8BAE"),Hi=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),Pi=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 "),bi=e("code",null,"index",-1),xi=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),yi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ci=o("WankkoRee"),Ai=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),vi=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),Mi=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),Ii=o("\u4FEE\u590D\u4E86 Hook \u8FC7\u7A0B\u4E2D\u7684\u5927\u91CF BUG\uFF0C\u611F\u8C22 "),Ri={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Yi=o("WankkoRee"),Si=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),Xi={id:"_1-0-69-2022-03-30",tabindex:"-1"},Fi=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Li=o(" 1.0.69 | 2022.03.30 \u2002"),Bi=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),Di=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),Wi=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),Ui=e("code",null,"allMethods",-1),Gi=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Ti={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},wi=o("WankkoRee"),Ni=o(" \u7684\u53CD\u9988"),Ei={id:"_1-0-68-2022-03-29",tabindex:"-1"},ji=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),zi=o(" 1.0.68 | 2022.03.29 \u2002"),Vi=t("
    • \u589E\u52A0 Demo \u4E2D\u7684\u65B0\u7528\u4F8B\u548C LSPosed \u4F5C\u7528\u57DF
    • \u589E\u52A0 Member \u67E5\u627E\u7F13\u5B58\u548C\u67E5\u627E\u7F13\u5B58\u914D\u7F6E\u5F00\u5173
    • \u79FB\u9664\u548C\u4FEE\u6539 MethodFinder\u3001FieldFinder \u4EE5\u53CA HookParam \u76F8\u5173\u65B9\u6CD5\u7684\u8C03\u7528
    • \u589E\u52A0\u66F4\u591A Finder \u4E2D\u7684 cast \u7C7B\u578B\u5E76\u652F\u6301 cast \u4E3A\u6570\u7EC4
    • \u6574\u4F53\u7684\u6027\u80FD\u548C\u7A33\u5B9A\u6027\u63D0\u5347
    • \u4FEE\u590D\u4E0A\u4E00\u4E2A\u7248\u672C\u53EF\u80FD\u5B58\u5728\u7684 BUG
    ",1),Oi={id:"_1-0-67-2022-03-27",tabindex:"-1"},Zi=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),Ki=o(" 1.0.67 | 2022.03.27 \u2002"),Ji=t("
    • \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),qi={id:"_1-0-66-2022-03-25",tabindex:"-1"},Qi=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),$i=o(" 1.0.66 | 2022.03.25 \u2002"),ec=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),oc={id:"_1-0-65-2022-03-25",tabindex:"-1"},dc=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),ic=o(" 1.0.65 | 2022.03.25 \u2002"),cc=t("
    • \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),tc={id:"_1-0-6-2022-03-20",tabindex:"-1"},lc=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),sc=o(" 1.0.6 | 2022.03.20 \u2002"),nc=t("
    • \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),ac={id:"_1-0-55-2022-03-18",tabindex:"-1"},rc=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),_c=o(" 1.0.55 | 2022.03.18 \u2002"),hc=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),uc={id:"_1-0-5-2022-03-18",tabindex:"-1"},kc=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),pc=o(" 1.0.5 | 2022.03.18 \u2002"),gc=t("
    • \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 \u6846\u67B6\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),fc={id:"_1-0-4-2022-03-06",tabindex:"-1"},mc=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),Hc=o(" 1.0.4 | 2022.03.06 \u2002"),Pc=t("
    • \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),bc={id:"_1-0-3-2022-03-02",tabindex:"-1"},xc=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),yc=o(" 1.0.3 | 2022.03.02 \u2002"),Cc=t("
    • \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),Ac={id:"_1-0-2-2022-02-18",tabindex:"-1"},vc=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Mc=o(" 1.0.2 | 2022.02.18 \u2002"),Ic=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),Rc={id:"_1-0-1-2022-02-15",tabindex:"-1"},Yc=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Sc=o(" 1.0.1 | 2022.02.15 \u2002"),Xc=t("
    • 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),Fc={id:"_1-0-2022-02-14",tabindex:"-1"},Lc=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Bc=o(" 1.0 | 2022.02.14 \u2002"),Dc=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function Wc(Uc,Gc){const i=l("Badge"),c=l("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",m,[H,P,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),b,e("h3",x,[y,C,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),A,e("h3",v,[M,I,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),e("ul",null,[R,e("li",null,[Y,e("a",S,[X,d(c)])]),F,e("li",null,[L,e("a",B,[D,d(c)]),W]),U,e("li",null,[G,T,w,N,E,j,e("a",z,[V,d(c)]),O]),Z,e("li",null,[K,J,q,e("a",Q,[$,d(c)]),ee]),e("li",null,[oe,de,ie,e("a",ce,[te,d(c)]),le]),se,e("li",null,[ne,ae,re,_e,he,e("a",ue,[ke,d(c)]),pe,e("a",ge,[fe,d(c)])]),me,He,Pe,e("li",null,[be,xe,ye,Ce,Ae,e("a",ve,[Me,d(c)]),Ie]),Re,e("li",null,[Ye,Se,Xe,e("a",Fe,[Le,d(c)]),Be,e("a",De,[We,d(c)])]),Ue,Ge,Te,we]),e("h3",Ne,[Ee,je,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ze,e("h3",Ve,[Oe,Ze,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Ke,Je,qe,e("a",Qe,[$e,d(c)]),eo]),oo]),e("h3",io,[co,to,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),lo,e("h3",so,[no,ao,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ro,e("h3",_o,[ho,uo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ko,e("h3",po,[go,fo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),mo,e("h3",Ho,[Po,bo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),xo,e("h3",yo,[Co,Ao,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),vo,e("h3",Mo,[Io,Ro,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Yo,e("h3",So,[Xo,Fo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Lo,e("h3",Bo,[Do,Wo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Uo,e("h3",Go,[To,wo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[No,e("li",null,[Eo,jo,zo,e("a",Vo,[Oo,d(c)]),Zo]),Ko,Jo,qo]),e("h3",Qo,[$o,ed,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[od,e("li",null,[dd,id,cd,e("a",td,[ld,d(c)]),sd]),nd,ad]),e("h3",rd,[_d,hd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[ud,kd,pd,gd,e("a",fd,[md,d(c)]),Hd]),Pd]),e("h3",bd,[xd,yd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Cd,e("a",Ad,[vd,d(c)]),Md]),Id]),Rd,e("ul",null,[e("li",null,[Yd,e("a",Sd,[Xd,d(c)]),Fd]),e("li",null,[Ld,Bd,Dd,e("a",Wd,[Ud,d(c)]),Gd]),Td]),e("h3",wd,[Nd,Ed,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),jd,e("h3",zd,[Vd,Od,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Zd,e("h3",Kd,[Jd,qd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Qd,e("li",null,[$d,ei,oi,e("a",di,[ii,d(c)]),ci]),ti,li,si,ni,e("li",null,[ai,ri,_i,e("a",hi,[ui,d(c)]),ki]),e("li",null,[pi,e("a",gi,[fi,d(c)]),mi]),Hi,e("li",null,[Pi,bi,xi,e("a",yi,[Ci,d(c)]),Ai]),vi,Mi,e("li",null,[Ii,e("a",Ri,[Yi,d(c)]),Si])]),e("h3",Xi,[Fi,Li,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Bi,Di,e("li",null,[Wi,Ui,Gi,e("a",Ti,[wi,d(c)]),Ni])]),e("h3",Ei,[ji,zi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Vi,e("h3",Oi,[Zi,Ki,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ji,e("h3",qi,[Qi,$i,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ec,e("h3",oc,[dc,ic,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),cc,e("h3",tc,[lc,sc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),nc,e("h3",ac,[rc,_c,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hc,e("h3",uc,[kc,pc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),gc,e("h3",fc,[mc,Hc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Pc,e("h3",bc,[xc,yc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Cc,e("h3",Ac,[vc,Mc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ic,e("h3",Rc,[Yc,Sc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Xc,e("h3",Fc,[Lc,Bc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Dc])}const wc=s(r,[["render",Wc],["__file","changelog.html.vue"]]);export{wc as default}; diff --git a/docs/assets/changelog.html.379566e7.js b/docs/assets/changelog.html.379566e7.js new file mode 100644 index 00000000..c0845253 --- /dev/null +++ b/docs/assets/changelog.html.379566e7.js @@ -0,0 +1 @@ +import{_ as s,r as l,o as n,c as a,b as e,d,e as o,a as c}from"./app.99fcdd51.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-4-2022-10-04",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),g=o(" 1.1.4 | 2022.10.04 \u2002"),f=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),m={id:"_1-1-3-2022-09-30",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),P=o(" 1.1.3 | 2022.09.30 \u2002"),b=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),x={id:"_1-1-2-2022-09-30",tabindex:"-1"},y=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),C=o(" 1.1.2 | 2022.09.30 \u2002"),A=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),v={id:"_1-1-1-2022-09-28",tabindex:"-1"},M=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),Y=o(" 1.1.1 | 2022.09.28 \u2002"),I=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),R={id:"_1-1-0-2022-09-28",tabindex:"-1"},S=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),L=o(" 1.1.0 | 2022.09.28 \u2002"),X=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),F=o("\u66F4\u6362\u5E2E\u52A9\u6587\u6863\u6846\u67B6\u5230 "),D={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},B=o("VuePress"),U=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),W=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 "),G={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},w=o("5ec1cff"),T=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u89E3\u51B3\u65B9\u6848"),N=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),E=e("code",null,"ModifierRules",-1),j=o(" \u4E2D\u7684 "),z=e("code",null,"as*",-1),V=o(" \u529F\u80FD\u6539\u540D\u4E3A "),Z=e("code",null,"is*",-1),O=o("\uFF0C\u611F\u8C22 "),K={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},J=o("Kitsune"),q=o(" \u7684\u5EFA\u8BAE"),Q=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),$=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 "),ee=e("strong",null,"AA",-1),oe=o(" \u4EE5\u53CA "),de={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},ie=o("Kitsune"),ce=o(" \u7684\u5EFA\u8BAE"),te=o("\u4FEE\u590D "),le=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 "),ne={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ae=o("Luckyzyx"),re=o(" \u7684\u53CD\u9988"),_e=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),he=o("\u4FEE\u590D "),ue=e("code",null,"YukiHookModulePrefs",-1),ke=o(" \u4E2D "),pe=e("code",null,"getStringSet",-1),ge=o(" \u65B9\u6CD5\u53D6\u503C\u9519\u8BEF\u7684\u95EE\u9898\u5E76\u4F18\u5316\u4EE3\u7801\u98CE\u683C\uFF0C\u611F\u8C22 "),fe={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},me=o("Teddy_Zhu"),He=o(" \u7684 "),Pe={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},be=o("PR"),xe=e("li",null,[o("\u4FEE\u6539 "),e("code",null,"YukiHookModulePrefs"),o("\uFF0C\u62E6\u622A "),e("code",null,"XSharePreference"),o(" \u53EF\u80FD\u4E0D\u5B58\u5728\u7684\u5F02\u5E38")],-1),ye=e("li",null,[o("\u4FEE\u590D "),e("code",null,"YukiHookDataChannel"),o(" \u5728\u67D0\u4E9B\u7B2C\u4E09\u65B9 ROM \u7CFB\u7EDF\u6846\u67B6\u4E2D\u65E0\u6CD5\u6CE8\u518C\u6210\u529F\u7684\u95EE\u9898")],-1),Ce=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),Ae=o("\u65B0\u589E\u81EA\u52A8 Hook "),ve=e("code",null,"SharedPreferences",-1),Me=o(" \u4EE5\u4FEE\u590D\u90E8\u5206\u7CFB\u7EDF\u4E2D\u6587\u4EF6\u6743\u9650\u4E0D\u662F "),Ye=e("code",null,"0664",-1),Ie=o(" \u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Re={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Se=o("5ec1cff"),Le=o(" \u7684\u53CD\u9988\u53CA\u63D0\u4F9B\u7684\u5B9E\u73B0\u4EE3\u7801"),Xe=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),Fe=o("Resources Hook \u4E2D\u65B0\u589E "),De=e("code",null,"array",-1),Be=o(" \u7C7B\u578B\uFF0C\u611F\u8C22 "),Ue={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},We=o("GSWXXN"),Ge=o(" \u7684 "),we={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},Te=o("PR"),Ne=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),Ee=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),je=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),ze=e("li",null,"\u66F4\u65B0 Demo \u7684 API \u7248\u672C\u5230 33",-1),Ve={id:"_1-0-92-2022-05-31",tabindex:"-1"},Ze=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),Oe=o(" 1.0.92 | 2022.05.31 \u2002"),Ke=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),Je={id:"_1-0-91-2022-05-29",tabindex:"-1"},qe=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),Qe=o(" 1.0.91 | 2022.05.29 \u2002"),$e=o("\u4FEE\u590D\u90E8\u5206\u8BBE\u5907\u7684\u5B9A\u5236\u7CFB\u7EDF\u5728 LSPosed \u73AF\u5883\u4E0B\u5F00\u673A\u542F\u52A8\u83B7\u53D6\u7684 "),eo=e("code",null,"ClassLoader",-1),oo=o(" \u9519\u8BEF\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),io={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},co=o("Luckyzyx"),to=o(" \u7684\u53CD\u9988"),lo=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"},no=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),ao=o(" 1.0.90 | 2022.05.27 \u2002"),ro=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),_o={id:"_1-0-89-2022-05-26",tabindex:"-1"},ho=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),uo=o(" 1.0.89 | 2022.05.26 \u2002"),ko=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),po={id:"_1-0-88-2022-05-25",tabindex:"-1"},go=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),fo=o(" 1.0.88 | 2022.05.25 \u2002"),mo=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),Ho={id:"_1-0-87-2022-05-10",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),bo=o(" 1.0.87 | 2022.05.10 \u2002"),xo=e("ul",null,[e("li",null,[o("\u65B0\u589E "),e("code",null,"refreshModuleAppResources"),o(" \u529F\u80FD\uFF0C\u4EE5\u9002\u914D\u8BED\u8A00\u533A\u57DF\u3001\u5B57\u4F53\u5927\u5C0F\u3001\u5206\u8FA8\u7387\u6539\u53D8\u7B49\u60C5\u51B5\u4E0B\u7684 Resources \u5237\u65B0")]),e("li",null,[o("\u65B0\u589E "),e("code",null,"isEnableModuleAppResourcesCache"),o(" \u529F\u80FD\uFF0C\u53EF\u81EA\u884C\u8BBE\u7F6E\u662F\u5426\u81EA\u52A8\u7F13\u5B58\u5F53\u524D\u6A21\u5757\u7684 Resources")])],-1),yo={id:"_1-0-86-2022-05-06",tabindex:"-1"},Co=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),Ao=o(" 1.0.86 | 2022.05.06 \u2002"),vo=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),Mo={id:"_1-0-85-2022-05-04",tabindex:"-1"},Yo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Io=o(" 1.0.85 | 2022.05.04 \u2002"),Ro=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),So={id:"_1-0-83-2022-05-04",tabindex:"-1"},Lo=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Xo=o(" 1.0.83 | 2022.05.04 \u2002"),Fo=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),Do={id:"_1-0-82-2022-05-04",tabindex:"-1"},Bo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),Uo=o(" 1.0.82 | 2022.05.04 \u2002"),Wo=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),Go={id:"_1-0-81-2022-05-04",tabindex:"-1"},wo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),To=o(" 1.0.81 | 2022.05.04 \u2002"),No=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),Eo={id:"_1-0-80-2022-05-01",tabindex:"-1"},jo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),zo=o(" 1.0.80 | 2022.05.01 \u2002"),Vo=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),Zo=o("\u4FEE\u590D Hook "),Oo=e("code",null,"ClassLoader",-1),Ko=o(" \u5BFC\u81F4 Hook \u5361\u6B7B\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Jo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},qo=o("WankkoRee"),Qo=o(" \u7684\u53CD\u9988"),$o=e("li",null,[o("\u63D0\u5347 "),e("code",null,"XC_Callback"),o(" \u63A5\u53E3\u5BF9\u63A5\u540E\u7684\u6027\u80FD")],-1),ed=e("li",null,[o("Java "),e("code",null,"type"),o(" \u65B0\u589E "),e("code",null,"ClassLoader"),o(" \u7C7B\u578B")],-1),od=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),dd={id:"_1-0-78-2022-04-18",tabindex:"-1"},id=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),cd=o(" 1.0.78 | 2022.04.18 \u2002"),td=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),ld=o("\u9002\u914D "),sd=e("code",null,"PreferenceFragmentCompat",-1),nd=o(" \u7684 Sp \u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\uFF0C\u611F\u8C22 "),ad={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},rd=o("mahoshojoHCG"),_d=o(" \u7684\u53CD\u9988"),hd=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),ud=e("li",null,"\u4FEE\u6B63\u90E8\u5206\u6587\u6863\u548C\u4EE3\u7801\u6CE8\u91CA\u4E2D\u7684\u9519\u8BEF",-1),kd={id:"_1-0-77-2022-04-15",tabindex:"-1"},pd=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),gd=o(" 1.0.77 | 2022.04.15 \u2002"),fd=e("code",null,"YukiHookModulePrefs",-1),md=o(" \u65B0\u589E "),Hd=e("code",null,"clear",-1),Pd=o(" \u65B9\u6CD5\uFF0C\u611F\u8C22 "),bd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},xd=o("WankkoRee"),yd=o(" \u7684\u5EFA\u8BAE"),Cd=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),Ad={id:"_1-0-75-2022-04-13",tabindex:"-1"},vd=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Md=o(" 1.0.75 | 2022.04.13 \u2002"),Yd=o("\u66F4\u6B63\u4E86\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7684\u903B\u8F91\u8BC6\u522B\u90E8\u5206\uFF0C\u611F\u8C22 "),Id={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Rd=o("ApeaSuperz"),Sd=o(" \u7684\u8D21\u732E"),Ld=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),Xd=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),Fd=o("\u4FEE\u6B63\u51E0\u5904\u6587\u6863\u7684\u4E2D\u6587\u7FFB\u8BD1\u9519\u8BEF\uFF0C\u611F\u8C22 "),Dd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Bd=o("WankkoRee"),Ud=o(" \u7684\u8D21\u732E"),Wd=o("\u4FEE\u590D\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B "),Gd=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),wd=o(" \u5185\u5BB9\u4E3A\u7A7A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),Td={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Nd=o("Luckyzyx"),Ed=o(" \u7684\u53CD\u9988"),jd=e("li",null,"\u4FEE\u590D\u4E00\u4E9B\u5DF2\u77E5\u7684 BUG\uFF0C\u63D0\u5347 Hook \u7A33\u5B9A\u6027",-1),zd={id:"_1-0-72-2022-04-09",tabindex:"-1"},Vd=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Zd=o(" 1.0.72 | 2022.04.09 \u2002"),Od=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),Kd={id:"_1-0-71-2022-04-04",tabindex:"-1"},Jd=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),qd=o(" 1.0.71 | 2022.04.04 \u2002"),Qd=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),$d={id:"_1-0-70-2022-04-04",tabindex:"-1"},ei=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),oi=o(" 1.0.70 | 2022.04.04 \u2002"),di=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),ii=o("\u5728 Hook \u8FC7\u7A0B\u4E2D\u52A0\u5165 "),ci=e("code",null,"isUseAppClassLoader",-1),ti=o(" \u529F\u80FD\uFF0C\u611F\u8C22 "),li={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},si=o("WankkoRee"),ni=o(" \u7684\u53CD\u9988"),ai=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),ri=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),_i=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),hi=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),ui=o("\u4FEE\u590D "),ki=e("code",null,"allMethods",-1),pi=o(" \u672A Hook \u5230\u65B9\u6CD5\u65F6\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),gi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},fi=o("WankkoRee"),mi=o(" \u7684\u53CD\u9988"),Hi=o("\u52A0\u5165 Hook \u72B6\u6001\u76D1\u542C\u529F\u80FD\uFF0C\u611F\u8C22 "),Pi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},bi=o("WankkoRee"),xi=o(" \u7684\u5EFA\u8BAE"),yi=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),Ci=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 "),Ai=e("code",null,"index",-1),vi=o(" \u5B9A\u4F4D\u6307\u5B9A\u7684\u65B9\u6CD5\u548C\u53D8\u91CF\uFF0C\u611F\u8C22 "),Mi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Yi=o("WankkoRee"),Ii=o(" \u63D0\u4F9B\u7684\u601D\u8DEF"),Ri=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),Si=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),Li=o("\u4FEE\u590D\u4E86 Hook \u8FC7\u7A0B\u4E2D\u7684\u5927\u91CF BUG\uFF0C\u611F\u8C22 "),Xi={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Fi=o("WankkoRee"),Di=o(" \u5BF9\u6B64\u9879\u76EE\u6240\u505A\u51FA\u7684\u8D21\u732E"),Bi={id:"_1-0-69-2022-03-30",tabindex:"-1"},Ui=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Wi=o(" 1.0.69 | 2022.03.30 \u2002"),Gi=e("li",null,"\u6DFB\u52A0\u5E76\u6539\u8FDB\u4E00\u4E9B\u65B9\u6CD5\u529F\u80FD\u7684\u6CE8\u91CA",-1),wi=e("li",null,"\u589E\u52A0 Demo \u4E2D\u7684\u66F4\u591A\u793A\u4F8B Hook \u5185\u5BB9",-1),Ti=o("\u4FEE\u590D\u5728\u4E00\u4E2A Hook \u5B9E\u4F8B\u4E2D\uFF0C"),Ni=e("code",null,"allMethods",-1),Ei=o(" \u591A\u6B21\u4F7F\u7528\u65F6\u53EA\u6709\u6700\u540E\u4E00\u4E2A\u751F\u6548\u7684\u95EE\u9898\uFF0C\u611F\u8C22 "),ji={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},zi=o("WankkoRee"),Vi=o(" \u7684\u53CD\u9988"),Zi={id:"_1-0-68-2022-03-29",tabindex:"-1"},Oi=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),Ki=o(" 1.0.68 | 2022.03.29 \u2002"),Ji=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),qi={id:"_1-0-67-2022-03-27",tabindex:"-1"},Qi=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),$i=o(" 1.0.67 | 2022.03.27 \u2002"),ec=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),oc={id:"_1-0-66-2022-03-25",tabindex:"-1"},dc=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),ic=o(" 1.0.66 | 2022.03.25 \u2002"),cc=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),tc={id:"_1-0-65-2022-03-25",tabindex:"-1"},lc=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"),nc=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),ac={id:"_1-0-6-2022-03-20",tabindex:"-1"},rc=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),_c=o(" 1.0.6 | 2022.03.20 \u2002"),hc=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),uc={id:"_1-0-55-2022-03-18",tabindex:"-1"},kc=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),pc=o(" 1.0.55 | 2022.03.18 \u2002"),gc=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),fc={id:"_1-0-5-2022-03-18",tabindex:"-1"},mc=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),Hc=o(" 1.0.5 | 2022.03.18 \u2002"),Pc=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 \u6846\u67B6\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),bc={id:"_1-0-4-2022-03-06",tabindex:"-1"},xc=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),yc=o(" 1.0.4 | 2022.03.06 \u2002"),Cc=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),Ac={id:"_1-0-3-2022-03-02",tabindex:"-1"},vc=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Mc=o(" 1.0.3 | 2022.03.02 \u2002"),Yc=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),Ic={id:"_1-0-2-2022-02-18",tabindex:"-1"},Rc=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Sc=o(" 1.0.2 | 2022.02.18 \u2002"),Lc=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),Xc={id:"_1-0-1-2022-02-15",tabindex:"-1"},Fc=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Dc=o(" 1.0.1 | 2022.02.15 \u2002"),Bc=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),Uc={id:"_1-0-2022-02-14",tabindex:"-1"},Wc=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Gc=o(" 1.0 | 2022.02.14 \u2002"),wc=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function Tc(Nc,Ec){const i=l("Badge"),t=l("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",m,[H,P,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),b,e("h3",x,[y,C,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),A,e("h3",v,[M,Y,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),I,e("h3",R,[S,L,d(i,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),e("ul",null,[X,e("li",null,[F,e("a",D,[B,d(t)])]),U,e("li",null,[W,e("a",G,[w,d(t)]),T]),N,e("li",null,[E,j,z,V,Z,O,e("a",K,[J,d(t)]),q]),Q,e("li",null,[$,ee,oe,e("a",de,[ie,d(t)]),ce]),e("li",null,[te,le,se,e("a",ne,[ae,d(t)]),re]),_e,e("li",null,[he,ue,ke,pe,ge,e("a",fe,[me,d(t)]),He,e("a",Pe,[be,d(t)])]),xe,ye,Ce,e("li",null,[Ae,ve,Me,Ye,Ie,e("a",Re,[Se,d(t)]),Le]),Xe,e("li",null,[Fe,De,Be,e("a",Ue,[We,d(t)]),Ge,e("a",we,[Te,d(t)])]),Ne,Ee,je,ze]),e("h3",Ve,[Ze,Oe,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ke,e("h3",Je,[qe,Qe,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[$e,eo,oo,e("a",io,[co,d(t)]),to]),lo]),e("h3",so,[no,ao,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ro,e("h3",_o,[ho,uo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ko,e("h3",po,[go,fo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),mo,e("h3",Ho,[Po,bo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),xo,e("h3",yo,[Co,Ao,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),vo,e("h3",Mo,[Yo,Io,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ro,e("h3",So,[Lo,Xo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Fo,e("h3",Do,[Bo,Uo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Wo,e("h3",Go,[wo,To,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),No,e("h3",Eo,[jo,zo,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Vo,e("li",null,[Zo,Oo,Ko,e("a",Jo,[qo,d(t)]),Qo]),$o,ed,od]),e("h3",dd,[id,cd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[td,e("li",null,[ld,sd,nd,e("a",ad,[rd,d(t)]),_d]),hd,ud]),e("h3",kd,[pd,gd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[fd,md,Hd,Pd,e("a",bd,[xd,d(t)]),yd]),Cd]),e("h3",Ad,[vd,Md,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[e("li",null,[Yd,e("a",Id,[Rd,d(t)]),Sd]),Ld]),Xd,e("ul",null,[e("li",null,[Fd,e("a",Dd,[Bd,d(t)]),Ud]),e("li",null,[Wd,Gd,wd,e("a",Td,[Nd,d(t)]),Ed]),jd]),e("h3",zd,[Vd,Zd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Od,e("h3",Kd,[Jd,qd,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Qd,e("h3",$d,[ei,oi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[di,e("li",null,[ii,ci,ti,e("a",li,[si,d(t)]),ni]),ai,ri,_i,hi,e("li",null,[ui,ki,pi,e("a",gi,[fi,d(t)]),mi]),e("li",null,[Hi,e("a",Pi,[bi,d(t)]),xi]),yi,e("li",null,[Ci,Ai,vi,e("a",Mi,[Yi,d(t)]),Ii]),Ri,Si,e("li",null,[Li,e("a",Xi,[Fi,d(t)]),Di])]),e("h3",Bi,[Ui,Wi,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),e("ul",null,[Gi,wi,e("li",null,[Ti,Ni,Ei,e("a",ji,[zi,d(t)]),Vi])]),e("h3",Zi,[Oi,Ki,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Ji,e("h3",qi,[Qi,$i,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),ec,e("h3",oc,[dc,ic,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),cc,e("h3",tc,[lc,sc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),nc,e("h3",ac,[rc,_c,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),hc,e("h3",uc,[kc,pc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),gc,e("h3",fc,[mc,Hc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Pc,e("h3",bc,[xc,yc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Cc,e("h3",Ac,[vc,Mc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),Yc,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",Uc,[Wc,Gc,d(i,{type:"danger",text:"\u8FC7\u671F",vertical:"middle"})]),wc])}const zc=s(r,[["render",Tc],["__file","changelog.html.vue"]]);export{zc as default}; diff --git a/docs/assets/changelog.html.55546508.js b/docs/assets/changelog.html.55546508.js deleted file mode 100644 index 491b5bca..00000000 --- a/docs/assets/changelog.html.55546508.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.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":1664552550000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":6}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.6b6ac23b.js b/docs/assets/changelog.html.6b6ac23b.js deleted file mode 100644 index 4f796c5e..00000000 --- a/docs/assets/changelog.html.6b6ac23b.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as c,o as a,c as l,b as e,d as t,a as n,e as o}from"./app.b0c3bf74.js";const r={},h=n('

    Changelog

    The version update history of YukiHookAPI is recorded here.

    Pay Attention

    We will only maintain the latest API version, if you are using an outdate API version, you voluntarily renounce any possibility of maintenance.

    Notice

    To avoid translation time consumption, Changelog will use Google Translation from Chinese to English, please refer to the original text for actual reference.

    Time zone of version release date: UTC+8

    ',4),u={id:"_1-1-3-2022-09-30",tabindex:"-1"},_=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),m=o(" 1.1.3 | 2022.09.30 \u2002"),p=e("ul",null,[e("li",null,"Fixed a fatal bug where the Hook entry class name could not be customized"),e("li",null,[o("Added some code notes in "),e("code",null,"LoggerFactory"),o(" and updated special features documentation")])],-1),f={id:"_1-1-2-2022-09-30",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),k=o(" 1.1.2 | 2022.09.30 \u2002"),b=n('
    • Documentation Basic Knowledge page add a friend link to the English version
    • Fixed YukiBaseHooker comments in English code note link errors
    • Fixed ClassCastException in ModuleClassLoader
    • Fixed and standardize some code notes
    • Added ModuleClassLoader exclusion list function, you can use excludeHostClasses and excludeModuleClasses methods to customize the exclusion list
    • Added YukiLoggerData real-time log data class, you can get the log array in real time through YukiHookLogger.inMemoryData
    • Added ClassLoader.listOfClasses method, which can directly get all Class in the current Dex
    ',1),y={id:"_1-1-1-2022-09-28",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),v=o(" 1.1.1 | 2022.09.28 \u2002"),w=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),A={id:"_1-1-0-2022-09-28",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),P=o(" 1.1.0 | 2022.09.28 \u2002"),F=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),C=o("Change the help documentation framework to "),M={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},I=o("VuePress"),R=n('
  • Unify and standardize the terms and nouns in the document, for example, "query" is always changed to "find", XposedHelper is misspelled and changed to XposedHelpers
  • Documentation Basic Knowledge page to add friend links, Simplified Chinese 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),Y=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 "),S={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},X=o("5ec1cff"),z=o(" for the feedback and solutions provided"),L=n("
  • 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),T=e("code",null,"as*",-1),D=o(" function in "),W=e("code",null,"ModifierRules",-1),j=o(" renamed to "),B=e("code",null,"is*",-1),O=o(", thanks to "),N={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},E=o("Kitsune"),U=o(" suggestion"),q=n("
  • Added RemedyPlan feature in FieldFinder
  • Added Class fuzzy search function (Beta) in Dex, you can now directly use searchClass function to fuzzy search Class with specified conditions
  • ",2),K=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 "),V=e("strong",null,"AA",-1),Z=o(" and "),G={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},J=o("Kitsune"),Q=o(" for suggestions"),$=o("Fixed the problem that the object obtained by "),ee=e("code",null,"appClassLoader",-1),oe=o(" is incorrect in system applications in some systems, thanks to "),te={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},de=o("Luckyzyx"),ie=o(" for the feedback"),ne=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),ce=o("Fixed the problem of wrong value of "),se=e("code",null,"getStringSet",-1),ae=o(" method in "),le=e("code",null,"YukiHookModulePrefs",-1),re=o(" and optimize the code style, thanks to "),he={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},ue=o("Teddy_Zhu"),_e=o(),me={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},pe=o("PR"),fe=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),ge=e("li",null,[o("Fixed the problem that "),e("code",null,"YukiHookDataChannel"),o(" could not be successfully registered in some third-party ROM system frameworks")],-1),ke=e("li",null,[o("Secured "),e("code",null,"YukiHookDataChannel"),o(", now it can only communicate between modules from the specified package name and the host")],-1),be=o("Added automatic hook "),ye=e("code",null,"SharedPreferences",-1),xe=o(" to fix the problem that file permissions are not "),ve=e("code",null,"0664",-1),we=o(" in some systems, thanks to "),Ae={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},He=o("5ec1cff"),Pe=o(" for the feedback and implementation code provided"),Fe=n("
  • 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),Ce=o("Added "),Me=e("code",null,"array",-1),Ie=o(" type to Resources Hook, thanks to "),Re={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},Ye=o("PR"),Se=o(" of "),Xe={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},ze=o("GSWXXN"),Le=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),Te=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),De=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),We=e("li",null,"Updated Demo API version to 33",-1),je={id:"_1-0-92-2022-05-31",tabindex:"-1"},Be=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),Oe=o(" 1.0.92 | 2022.05.31 \u2002"),Ne=n("
    • Fixed the naming method of callback in a large number of methods
    • Changed the solution to fix the problem that YukiHookDataChannel cannot call back the current Activity broadcast on devices lower than Android 12
    • The InjectYukiHookWithXposed annotation adds the isUsingResourcesHook function, now you can selectively disable the dependency interface that automatically generates IXposedHookInitPackageResources
    ",1),Ee={id:"_1-0-91-2022-05-29",tabindex:"-1"},Ue=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),qe=o(" 1.0.91 | 2022.05.29 \u2002"),Ke=o("Fixed the "),Ve=e("code",null,"ClassLoader",-1),Ze=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),Ge={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Je=o("Luckyzyx"),Qe=o(" for the feedback"),$e=n("
  • 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),eo={id:"_1-0-90-2022-05-27",tabindex:"-1"},oo=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),to=o(" 1.0.90 | 2022.05.27 \u2002"),io=n("
    • Fixed YukiHookDataChannel crashing when the module sets the listener callback
    • Fixed YukiHookDataChannel still calling back when not in current Activity
    • Remove the default value of YukiHookDataChannel callback event, no callback
    • Removed YukiHookModulePrefs warning printed if XShare is unreadable
    • Added the isXSharePrefsReadable method in YukiHookModulePrefs to determine whether the current XShare is available
    ",1),no={id:"_1-0-89-2022-05-26",tabindex:"-1"},co=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),so=o(" 1.0.89 | 2022.05.26 \u2002"),ao=n("
    • Fixed the problem that YukiHookDataChannel cannot be repeatedly set to monitor, and added the function of repeating response in different Activity modules and automatically following Activity to destroy the monitor function
    • Added YukiHookDataChannel repeated listening use case description document
    • Add the onAlreadyHooked method to determine whether the current method is repeated Hook
    • Modify part of the logic of repeatedly adding HashMap, remove the putIfAbsent method, allow to override the addition
    • Fixed several possible bugs
    ",1),lo={id:"_1-0-88-2022-05-25",tabindex:"-1"},ro=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),ho=o(" 1.0.88 | 2022.05.25 \u2002"),uo=n("
    • Fully decoupled from Xposed API
    • Added android type in type
    • Separate YukiHookModuleStatus from auto-generated code and add isEnableHookModuleStatus switch, it is up to you to enable or not
    • Internal closure processing for the constructors of a large number of classes in the API
    • Set YukiHookModulePrefs to run as a singleton to prevent repeated creation and waste of system resources
    • Fixed the bug that Hook cannot be nested since version 1.0.80, and optimize the related functions of nested Hook
    • Modify the Hooker storage scheme from HashSet to HashMap to prevent the problem of repeatedly adding Hookers
    • Modify the core implementation method of Hook, add duplicate checking to avoid repeating the Hook multiple callbacks to the HookParam method
    • MethodFinder and FieldFinder add the function of finding fuzzy methods and variable names, you can call name { ... } to set search conditions, and support regular expressions
    • Optimize and modify the way to get appContext to reduce the possibility of getting empty
    • Modify the print TAG of logger in the automatically generated code to default to your custom name, which is convenient for debugging
    • Optimize the Hooker implementation of YukiHookBridge to improve Hook performance
    • PackageParam adds the onAppLifecycle method, which can natively monitor the life cycle of the host and implement the registration system broadcast function
    • Added YukiHookDataChannel function to communicate using system out-of-order broadcast while the module and the host remain alive
    • YukiHookDataChannel adds the checkingVersionEquals method, which can be monitored to verify that the host has not updated the version mismatch problem after the module is updated
    • Added Java version example in the example code of demo-module for reference only
    ",1),_o={id:"_1-0-87-2022-05-10",tabindex:"-1"},mo=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),po=o(" 1.0.87 | 2022.05.10 \u2002"),fo=e("ul",null,[e("li",null,[o("Added "),e("code",null,"refreshModuleAppResources"),o(" function to adapt Resources refresh when the language region, font size, resolution changes, etc.")]),e("li",null,[o("Added "),e("code",null,"isEnableModuleAppResourcesCache"),o(" function, you can set whether to automatically cache the resources of the current module")])],-1),go={id:"_1-0-86-2022-05-06",tabindex:"-1"},ko=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),bo=o(" 1.0.86 | 2022.05.06 \u2002"),yo=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),xo={id:"_1-0-85-2022-05-04",tabindex:"-1"},vo=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),wo=o(" 1.0.85 | 2022.05.04 \u2002"),Ao=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),Ho={id:"_1-0-83-2022-05-04",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Fo=o(" 1.0.83 | 2022.05.04 \u2002"),Co=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),Mo={id:"_1-0-82-2022-05-04",tabindex:"-1"},Io=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),Ro=o(" 1.0.82 | 2022.05.04 \u2002"),Yo=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),So={id:"_1-0-81-2022-05-04",tabindex:"-1"},Xo=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),zo=o(" 1.0.81 | 2022.05.04 \u2002"),Lo=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),To={id:"_1-0-80-2022-05-01",tabindex:"-1"},Do=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),Wo=o(" 1.0.80 | 2022.05.01 \u2002"),jo=n("
  • 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),Bo=o("Fixed the problem that Hook "),Oo=e("code",null,"ClassLoader",-1),No=o(" causes Hook to freeze, thanks to "),Eo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Uo=o("WankkoRee"),qo=o(" for the feedback"),Ko=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),Vo=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),Zo=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),Go={id:"_1-0-78-2022-04-18",tabindex:"-1"},Jo=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),Qo=o(" 1.0.78 | 2022.04.18 \u2002"),$o=n("
  • 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),et=o("Adapt the Sp data storage solution of "),ot=e("code",null,"PreferenceFragmentCompat",-1),tt=o(", thanks to "),dt={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},it=o("mahoshojoHCG"),nt=o(" for feedback"),ct=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),st=e("li",null,"Fixed some bugs in documentation and code comments",-1),at={id:"_1-0-77-2022-04-15",tabindex:"-1"},lt=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),rt=o(" 1.0.77 | 2022.04.15 \u2002"),ht=e("code",null,"YukiHookModulePrefs",-1),ut=o(" added "),_t=e("code",null,"clear",-1),mt=o(" method, thanks to "),pt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ft=o("WankkoRee"),gt=o(" for the suggestion"),kt=n("
  • 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),bt={id:"_1-0-75-2022-04-13",tabindex:"-1"},yt=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),xt=o(" 1.0.75 | 2022.04.13 \u2002"),vt=o("Corrected the logic recognition part of the automatic handler, thanks to "),wt={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},At=o("ApeaSuperz"),Ht=o(" contribution"),Pt=n("
  • 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),Ft={id:"_1-0-73-2022-04-10",tabindex:"-1"},Ct=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),Mt=o(" 1.0.73 | 2022.04.10 \u2002"),It=o("Fixed some Chinese translation errors in documents, thanks to "),Rt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Yt=o("WankkoRee"),St=o(" for their contributions"),Xt=o("Fixed the problem that "),zt=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),Lt=o(" throws an exception when the content is empty in some cases, thanks to "),Tt={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Dt=o("Luckyzyx"),Wt=o(" for the feedback"),jt=e("li",null,"Fixed some known bugs and improve Hook stability",-1),Bt={id:"_1-0-72-2022-04-09",tabindex:"-1"},Ot=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Nt=o(" 1.0.72 | 2022.04.09 \u2002"),Et=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),Ut={id:"_1-0-71-2022-04-04",tabindex:"-1"},qt=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),Kt=o(" 1.0.71 | 2022.04.04 \u2002"),Vt=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),Zt={id:"_1-0-70-2022-04-04",tabindex:"-1"},Gt=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),Jt=o(" 1.0.70 | 2022.04.04 \u2002"),Qt=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),$t=o("Add "),ed=e("code",null,"isUseAppClassLoader",-1),od=o(" function in Hook process, thanks to "),td={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},dd=o("WankkoRee"),id=o(" for feedback"),nd=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),cd=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),sd=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),ad=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),ld=o("Fixed "),rd=e("code",null,"allMethods",-1),hd=o(" not throwing an exception when it is not hooked to a method, thanks to "),ud={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},_d=o("WankkoRee"),md=o(" for the feedback"),pd=o("Added Hook status monitoring function, thanks to "),fd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},gd=o("WankkoRee"),kd=o(" for the suggestion"),bd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),yd=o("Added obfuscated method and variable lookup function, you can use different types of filter "),xd=e("code",null,"index",-1),vd=o(" to locate the specified method and variable, thanks to "),wd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ad=o("WankkoRee"),Hd=o(" for the ideas provided"),Pd=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),Fd=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),Cd=o("Fixed a lot of bugs in the hook process, thanks to "),Md={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Id=o("WankkoRee"),Rd=o(" for contributing to this project"),Yd={id:"_1-0-69-2022-03-30",tabindex:"-1"},Sd=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Xd=o(" 1.0.69 | 2022.03.30 \u2002"),zd=e("li",null,"Added and improved annotations for some method functions",-1),Ld=e("li",null,"Added more example Hook content in Demo",-1),Td=o("Fixed the issue that only the last one takes effect when "),Dd=e("code",null,"allMethods",-1),Wd=o(" is used multiple times in a Hook instance, thanks to "),jd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Bd=o("WankkoRee"),Od=o(" for the feedback"),Nd={id:"_1-0-68-2022-03-29",tabindex:"-1"},Ed=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),Ud=o(" 1.0.68 | 2022.03.29 \u2002"),qd=n("
    • Added new use case and LSPosed scope in Demo
    • Added Member lookup cache and lookup cache configuration switches
    • Removed and modified MethodFinder, FieldFinder and HookParam related method calls
    • Add more cast types in Finder and support cast as array
    • Overall performance and stability improvements
    • Fixed bugs that may exist in the previous version
    ",1),Kd={id:"_1-0-67-2022-03-27",tabindex:"-1"},Vd=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),Zd=o(" 1.0.67 | 2022.03.27 \u2002"),Gd=n("
    • Added three modifiers functions in Finder, which can filter static, native, public, abstract and many other description types
    • When searching for methods and constructors, the method parameter type can be blurred to a specified number for searching
    • Added hasModifiers extension for Member
    • Added give method in MethodFinder and ConstructorFinder to get primitive types
    • Added PrefsData template function in YukiHookModulePrefs
    • Completely refactored method, constructor and variable lookup scheme
    • Optimized code comments and fixed possible bugs
    ",1),Jd={id:"_1-0-66-2022-03-25",tabindex:"-1"},Qd=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),$d=o(" 1.0.66 | 2022.03.25 \u2002"),ei=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),oi={id:"_1-0-65-2022-03-25",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),di=o(" 1.0.65 | 2022.03.25 \u2002"),ii=n("
    • Republished version to fix the incorrect new version of the Maven repository due to cache issues
    • Added MethodFinder and FieldFinder new return value calling methods
    • Fixed possible problems and fix possible problems during the use of Tai Chi
    • Fixed possible problems with auto-generated Xposed entry classes
    • Added android type and java type in type
    ",1),ni={id:"_1-0-6-2022-03-20",tabindex:"-1"},ci=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),si=o(" 1.0.6 | 2022.03.20 \u2002"),ai=n("
    • Fixed YukiHookModulePrefs being ignored every time after using direct once to ignore cache
    • Added new API, abolished the traditional usage of isActive to judge module activation
    • Fixed the issue of printing debug logs when using the API in a non-Xposed environment
    • Fixed log output issue and unintercepted exception issue when looking for Field
    • Decoupling Xposed API in ReflectionUtils
    • Added YukiHookModuleStatus method name confusion to reduce the size of module generation
    • The welcome message will no longer be printed when loading the module's own Hook
    • Fixed some bugs that still exist in the previous version
    ",1),li={id:"_1-0-55-2022-03-18",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),hi=o(" 1.0.55 | 2022.03.18 \u2002"),ui=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),_i={id:"_1-0-5-2022-03-18",tabindex:"-1"},mi=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),pi=o(" 1.0.5 | 2022.03.18 \u2002"),fi=n("
    • Fixed the problem that the welcome message was printed multiple times in the case of the old version of the LSPosed framework
    • Added onInit method to configure YukiHookAPI
    • Added executorName and executorVersion to get the name and version number of the current hook framework
    • Added by method to set the timing and condition of Hook
    • YukiHookModulePrefs adds a controllable key-value cache, which can dynamically update data when the host is running
    • Fixed some possible bugs
    ",1),gi={id:"_1-0-4-2022-03-06",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),bi=o(" 1.0.4 | 2022.03.06 \u2002"),yi=n("
    • Fixed LSPosed cannot find XposedBridge after enabling "Only module classloader can use Xposed API" option in latest version
    • Added constant version name and version number for YukiHookAPI
    • Added hasField method and isAllowPrintingLogs configuration parameter
    • Added isDebug to enable the API to automatically print the welcome message to test whether the module is valid
    ",1),xi={id:"_1-0-3-2022-03-02",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),wi=o(" 1.0.3 | 2022.03.02 \u2002"),Ai=n("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),Hi={id:"_1-0-2-2022-02-18",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Fi=o(" 1.0.2 | 2022.02.18 \u2002"),Ci=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),Mi={id:"_1-0-1-2022-02-15",tabindex:"-1"},Ii=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Ri=o(" 1.0.1 | 2022.02.15 \u2002"),Yi=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),Si={id:"_1-0-2022-02-14",tabindex:"-1"},Xi=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),zi=o(" 1.0 | 2022.02.14 \u2002"),Li=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function Ti(Di,Wi){const d=c("Badge"),i=c("ExternalLinkIcon");return a(),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"})]),b,e("h3",y,[x,v,t(d,{type:"warning",text:"stale",vertical:"middle"})]),w,e("h3",A,[H,P,t(d,{type:"warning",text:"stale",vertical:"middle"})]),e("ul",null,[F,e("li",null,[C,e("a",M,[I,t(i)])]),R,e("li",null,[Y,e("a",S,[X,t(i)]),z]),L,e("li",null,[T,D,W,j,B,O,e("a",N,[E,t(i)]),U]),q,e("li",null,[K,V,Z,e("a",G,[J,t(i)]),Q]),e("li",null,[$,ee,oe,e("a",te,[de,t(i)]),ie]),ne,e("li",null,[ce,se,ae,le,re,e("a",he,[ue,t(i)]),_e,e("a",me,[pe,t(i)])]),fe,ge,ke,e("li",null,[be,ye,xe,ve,we,e("a",Ae,[He,t(i)]),Pe]),Fe,e("li",null,[Ce,Me,Ie,e("a",Re,[Ye,t(i)]),Se,e("a",Xe,[ze,t(i)])]),Le,Te,De,We]),e("h3",je,[Be,Oe,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ne,e("h3",Ee,[Ue,qe,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Ke,Ve,Ze,e("a",Ge,[Je,t(i)]),Qe]),$e]),e("h3",eo,[oo,to,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),io,e("h3",no,[co,so,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ao,e("h3",lo,[ro,ho,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),uo,e("h3",_o,[mo,po,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fo,e("h3",go,[ko,bo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yo,e("h3",xo,[vo,wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ao,e("h3",Ho,[Po,Fo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Co,e("h3",Mo,[Io,Ro,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Yo,e("h3",So,[Xo,zo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Lo,e("h3",To,[Do,Wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[jo,e("li",null,[Bo,Oo,No,e("a",Eo,[Uo,t(i)]),qo]),Ko,Vo,Zo]),e("h3",Go,[Jo,Qo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[$o,e("li",null,[et,ot,tt,e("a",dt,[it,t(i)]),nt]),ct,st]),e("h3",at,[lt,rt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[ht,ut,_t,mt,e("a",pt,[ft,t(i)]),gt]),kt]),e("h3",bt,[yt,xt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[vt,e("a",wt,[At,t(i)]),Ht]),Pt]),e("h3",Ft,[Ct,Mt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[It,e("a",Rt,[Yt,t(i)]),St]),e("li",null,[Xt,zt,Lt,e("a",Tt,[Dt,t(i)]),Wt]),jt]),e("h3",Bt,[Ot,Nt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Et,e("h3",Ut,[qt,Kt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Vt,e("h3",Zt,[Gt,Jt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Qt,e("li",null,[$t,ed,od,e("a",td,[dd,t(i)]),id]),nd,cd,sd,ad,e("li",null,[ld,rd,hd,e("a",ud,[_d,t(i)]),md]),e("li",null,[pd,e("a",fd,[gd,t(i)]),kd]),bd,e("li",null,[yd,xd,vd,e("a",wd,[Ad,t(i)]),Hd]),Pd,Fd,e("li",null,[Cd,e("a",Md,[Id,t(i)]),Rd])]),e("h3",Yd,[Sd,Xd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[zd,Ld,e("li",null,[Td,Dd,Wd,e("a",jd,[Bd,t(i)]),Od])]),e("h3",Nd,[Ed,Ud,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),qd,e("h3",Kd,[Vd,Zd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Gd,e("h3",Jd,[Qd,$d,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ei,e("h3",oi,[ti,di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ii,e("h3",ni,[ci,si,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ai,e("h3",li,[ri,hi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ui,e("h3",_i,[mi,pi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fi,e("h3",gi,[ki,bi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yi,e("h3",xi,[vi,wi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ai,e("h3",Hi,[Pi,Fi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ci,e("h3",Mi,[Ii,Ri,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Yi,e("h3",Si,[Xi,zi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Li])}const Bi=s(r,[["render",Ti],["__file","changelog.html.vue"]]);export{Bi as default}; diff --git a/docs/assets/changelog.html.368d515d.js b/docs/assets/changelog.html.858036fa.js similarity index 89% rename from docs/assets/changelog.html.368d515d.js rename to docs/assets/changelog.html.858036fa.js index 1c5b8a6c..0e54c56e 100644 --- a/docs/assets/changelog.html.368d515d.js +++ b/docs/assets/changelog.html.858036fa.js @@ -1 +1 @@ -const l=JSON.parse('{"key":"v-3f851d14","path":"/en/about/changelog.html","title":"Changelog","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.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":1664552550000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; +const l=JSON.parse('{"key":"v-0e6c3476","path":"/zh-cn/about/changelog.html","title":"\u66F4\u65B0\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.1.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":1664838909000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.88d98aec.js b/docs/assets/changelog.html.88d98aec.js new file mode 100644 index 00000000..2284d53d --- /dev/null +++ b/docs/assets/changelog.html.88d98aec.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.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":1664838909000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":6}]},"filePathRelative":"en/about/changelog.md"}');export{l as data}; diff --git a/docs/assets/changelog.html.f7e20a5d.js b/docs/assets/changelog.html.f7e20a5d.js new file mode 100644 index 00000000..5fd85d20 --- /dev/null +++ b/docs/assets/changelog.html.f7e20a5d.js @@ -0,0 +1 @@ +import{_ as a,r as c,o as s,c as l,b as e,d as t,a as n,e as o}from"./app.99fcdd51.js";const r={},h=n('

    Changelog

    The version update history of YukiHookAPI is recorded here.

    Pay Attention

    We will only maintain the latest API version, if you are using an outdate API version, you voluntarily renounce any possibility of maintenance.

    Notice

    To avoid translation time consumption, Changelog will use Google Translation from Chinese to English, please refer to the original text for actual reference.

    Time zone of version release date: UTC+8

    ',4),u={id:"_1-1-4-2022-10-04",tabindex:"-1"},_=e("a",{class:"header-anchor",href:"#_1-1-4-2022-10-04","aria-hidden":"true"},"#",-1),m=o(" 1.1.4 | 2022.10.04 \u2002"),p=n("
    • Fixed the issue that YukiHookDataChannel may not respond to broadcast events in the system framework, reproduced in A13
    • Fixed the issue that YukiHookDataChannel could not communicate with Module App in Host App for multiple versions
    • Added obtainLoggerInMemoryData method in YukiHookDataChannel to share debug log data between module and host
    • Modify the type of YukiHookLogger.inMemoryData to ArrayList and change YukiLoggerData to data class
    • Fixed YukiLoggerData printing blank when the package name is empty in the module
    • Added loadApp, loadZygote, loadSystem, withProcess multi-parameter methods of the same name in PackageParam
    • Fixed some possible bugs
    ",1),f={id:"_1-1-3-2022-09-30",tabindex:"-1"},g=e("a",{class:"header-anchor",href:"#_1-1-3-2022-09-30","aria-hidden":"true"},"#",-1),k=o(" 1.1.3 | 2022.09.30 \u2002"),b=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),y={id:"_1-1-2-2022-09-30",tabindex:"-1"},x=e("a",{class:"header-anchor",href:"#_1-1-2-2022-09-30","aria-hidden":"true"},"#",-1),v=o(" 1.1.2 | 2022.09.30 \u2002"),w=n('
    • Documentation Basic Knowledge page add a friend link to the English version
    • Fixed YukiBaseHooker comments in English code note link errors
    • Fixed ClassCastException in ModuleClassLoader
    • Fixed and standardize some code notes
    • Added ModuleClassLoader exclusion list function, you can use excludeHostClasses and excludeModuleClasses methods to customize the exclusion list
    • Added YukiLoggerData real-time log data class, you can get the log array in real time through YukiHookLogger.inMemoryData
    • Added ClassLoader.listOfClasses method, which can directly get all Class in the current Dex
    ',1),A={id:"_1-1-1-2022-09-28",tabindex:"-1"},H=e("a",{class:"header-anchor",href:"#_1-1-1-2022-09-28","aria-hidden":"true"},"#",-1),P=o(" 1.1.1 | 2022.09.28 \u2002"),F=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),C={id:"_1-1-0-2022-09-28",tabindex:"-1"},M=e("a",{class:"header-anchor",href:"#_1-1-0-2022-09-28","aria-hidden":"true"},"#",-1),I=o(" 1.1.0 | 2022.09.28 \u2002"),R=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),Y=o("Change the help documentation framework to "),S={href:"https://v2.vuepress.vuejs.org",target:"_blank",rel:"noopener noreferrer"},L=o("VuePress"),D=n('
  • Unify and standardize the terms and nouns in the document, for example, "query" is always changed to "find", XposedHelper is misspelled and changed to XposedHelpers
  • Documentation Basic Knowledge page to add friend links, Simplified Chinese 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),X=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 "),z={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},T=o("5ec1cff"),W=o(" for the feedback and solutions provided"),j=n("
  • 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),B=e("code",null,"as*",-1),O=o(" function in "),N=e("code",null,"ModifierRules",-1),E=o(" renamed to "),U=e("code",null,"is*",-1),q=o(", thanks to "),K={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},V=o("Kitsune"),Z=o(" suggestion"),G=n("
  • Added RemedyPlan feature in FieldFinder
  • Added Class fuzzy search function (Beta) in Dex, you can now directly use searchClass function to fuzzy search Class with specified conditions
  • ",2),J=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 "),Q=e("strong",null,"AA",-1),$=o(" and "),ee={href:"https://github.com/KyuubiRan",target:"_blank",rel:"noopener noreferrer"},oe=o("Kitsune"),te=o(" for suggestions"),de=o("Fixed the problem that the object obtained by "),ie=e("code",null,"appClassLoader",-1),ne=o(" is incorrect in system applications in some systems, thanks to "),ce={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},ae=o("Luckyzyx"),se=o(" for the feedback"),le=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),re=o("Fixed the problem of wrong value of "),he=e("code",null,"getStringSet",-1),ue=o(" method in "),_e=e("code",null,"YukiHookModulePrefs",-1),me=o(" and optimize the code style, thanks to "),pe={href:"https://github.com/Teddy-Zhu",target:"_blank",rel:"noopener noreferrer"},fe=o("Teddy_Zhu"),ge=o(),ke={href:"https://github.com/fankes/YukiHookAPI/pull/19",target:"_blank",rel:"noopener noreferrer"},be=o("PR"),ye=e("li",null,[o("Modify "),e("code",null,"YukiHookModulePrefs"),o(" to intercept exceptions that may not exist in "),e("code",null,"XSharePreference")],-1),xe=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),ve=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),we=o("Added automatic hook "),Ae=e("code",null,"SharedPreferences",-1),He=o(" to fix the problem that file permissions are not "),Pe=e("code",null,"0664",-1),Fe=o(" in some systems, thanks to "),Ce={href:"https://github.com/5ec1cff",target:"_blank",rel:"noopener noreferrer"},Me=o("5ec1cff"),Ie=o(" for the feedback and implementation code provided"),Re=n("
  • 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),Ye=o("Added "),Se=e("code",null,"array",-1),Le=o(" type to Resources Hook, thanks to "),De={href:"https://github.com/fankes/YukiHookAPI/pull/12",target:"_blank",rel:"noopener noreferrer"},Xe=o("PR"),ze=o(" of "),Te={href:"https://github.com/GSWXXN",target:"_blank",rel:"noopener noreferrer"},We=o("GSWXXN"),je=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),Be=e("li",null,"Remove the exception thrown when the Hook method body is empty, and modify it to print the warning log",-1),Oe=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),Ne=e("li",null,"Updated Demo API version to 33",-1),Ee={id:"_1-0-92-2022-05-31",tabindex:"-1"},Ue=e("a",{class:"header-anchor",href:"#_1-0-92-2022-05-31","aria-hidden":"true"},"#",-1),qe=o(" 1.0.92 | 2022.05.31 \u2002"),Ke=n("
    • Fixed the naming method of callback in a large number of methods
    • Changed the solution to fix the problem that YukiHookDataChannel cannot call back the current Activity broadcast on devices lower than Android 12
    • The InjectYukiHookWithXposed annotation adds the isUsingResourcesHook function, now you can selectively disable the dependency interface that automatically generates IXposedHookInitPackageResources
    ",1),Ve={id:"_1-0-91-2022-05-29",tabindex:"-1"},Ze=e("a",{class:"header-anchor",href:"#_1-0-91-2022-05-29","aria-hidden":"true"},"#",-1),Ge=o(" 1.0.91 | 2022.05.29 \u2002"),Je=o("Fixed the "),Qe=e("code",null,"ClassLoader",-1),$e=o(" error when the customized system of some devices is booted in the LSPosed environment, thanks to "),eo={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},oo=o("Luckyzyx"),to=o(" for the feedback"),io=n("
  • 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),no={id:"_1-0-90-2022-05-27",tabindex:"-1"},co=e("a",{class:"header-anchor",href:"#_1-0-90-2022-05-27","aria-hidden":"true"},"#",-1),ao=o(" 1.0.90 | 2022.05.27 \u2002"),so=n("
    • Fixed YukiHookDataChannel crashing when the module sets the listener callback
    • Fixed YukiHookDataChannel still calling back when not in current Activity
    • Remove the default value of YukiHookDataChannel callback event, no callback
    • Removed YukiHookModulePrefs warning printed if XShare is unreadable
    • Added the isXSharePrefsReadable method in YukiHookModulePrefs to determine whether the current XShare is available
    ",1),lo={id:"_1-0-89-2022-05-26",tabindex:"-1"},ro=e("a",{class:"header-anchor",href:"#_1-0-89-2022-05-26","aria-hidden":"true"},"#",-1),ho=o(" 1.0.89 | 2022.05.26 \u2002"),uo=n("
    • Fixed the problem that YukiHookDataChannel cannot be repeatedly set to monitor, and added the function of repeating response in different Activity modules and automatically following Activity to destroy the monitor function
    • Added YukiHookDataChannel repeated listening use case description document
    • Add the onAlreadyHooked method to determine whether the current method is repeated Hook
    • Modify part of the logic of repeatedly adding HashMap, remove the putIfAbsent method, allow to override the addition
    • Fixed several possible bugs
    ",1),_o={id:"_1-0-88-2022-05-25",tabindex:"-1"},mo=e("a",{class:"header-anchor",href:"#_1-0-88-2022-05-25","aria-hidden":"true"},"#",-1),po=o(" 1.0.88 | 2022.05.25 \u2002"),fo=n("
    • Fully decoupled from Xposed API
    • Added android type in type
    • Separate YukiHookModuleStatus from auto-generated code and add isEnableHookModuleStatus switch, it is up to you to enable or not
    • Internal closure processing for the constructors of a large number of classes in the API
    • Set YukiHookModulePrefs to run as a singleton to prevent repeated creation and waste of system resources
    • Fixed the bug that Hook cannot be nested since version 1.0.80, and optimize the related functions of nested Hook
    • Modify the Hooker storage scheme from HashSet to HashMap to prevent the problem of repeatedly adding Hookers
    • Modify the core implementation method of Hook, add duplicate checking to avoid repeating the Hook multiple callbacks to the HookParam method
    • MethodFinder and FieldFinder add the function of finding fuzzy methods and variable names, you can call name { ... } to set search conditions, and support regular expressions
    • Optimize and modify the way to get appContext to reduce the possibility of getting empty
    • Modify the print TAG of logger in the automatically generated code to default to your custom name, which is convenient for debugging
    • Optimize the Hooker implementation of YukiHookBridge to improve Hook performance
    • PackageParam adds the onAppLifecycle method, which can natively monitor the life cycle of the host and implement the registration system broadcast function
    • Added YukiHookDataChannel function to communicate using system out-of-order broadcast while the module and the host remain alive
    • YukiHookDataChannel adds the checkingVersionEquals method, which can be monitored to verify that the host has not updated the version mismatch problem after the module is updated
    • Added Java version example in the example code of demo-module for reference only
    ",1),go={id:"_1-0-87-2022-05-10",tabindex:"-1"},ko=e("a",{class:"header-anchor",href:"#_1-0-87-2022-05-10","aria-hidden":"true"},"#",-1),bo=o(" 1.0.87 | 2022.05.10 \u2002"),yo=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),xo={id:"_1-0-86-2022-05-06",tabindex:"-1"},vo=e("a",{class:"header-anchor",href:"#_1-0-86-2022-05-06","aria-hidden":"true"},"#",-1),wo=o(" 1.0.86 | 2022.05.06 \u2002"),Ao=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),Ho={id:"_1-0-85-2022-05-04",tabindex:"-1"},Po=e("a",{class:"header-anchor",href:"#_1-0-85-2022-05-04","aria-hidden":"true"},"#",-1),Fo=o(" 1.0.85 | 2022.05.04 \u2002"),Co=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),Mo={id:"_1-0-83-2022-05-04",tabindex:"-1"},Io=e("a",{class:"header-anchor",href:"#_1-0-83-2022-05-04","aria-hidden":"true"},"#",-1),Ro=o(" 1.0.83 | 2022.05.04 \u2002"),Yo=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),So={id:"_1-0-82-2022-05-04",tabindex:"-1"},Lo=e("a",{class:"header-anchor",href:"#_1-0-82-2022-05-04","aria-hidden":"true"},"#",-1),Do=o(" 1.0.82 | 2022.05.04 \u2002"),Xo=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),zo={id:"_1-0-81-2022-05-04",tabindex:"-1"},To=e("a",{class:"header-anchor",href:"#_1-0-81-2022-05-04","aria-hidden":"true"},"#",-1),Wo=o(" 1.0.81 | 2022.05.04 \u2002"),jo=e("ul",null,[e("li",null,[o("Fixed the problem that the method and constructor that cannot be found in the Hook method body still output the error log after setting the condition using the "),e("code",null,"by"),o(" method")]),e("li",null,"Added a global log to display the package name of the current Hook APP during the execution of the Hook, and fixed a problem with the printing style of the error log")],-1),Bo={id:"_1-0-80-2022-05-01",tabindex:"-1"},Oo=e("a",{class:"header-anchor",href:"#_1-0-80-2022-05-01","aria-hidden":"true"},"#",-1),No=o(" 1.0.80 | 2022.05.01 \u2002"),Eo=n("
  • 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),Uo=o("Fixed the problem that Hook "),qo=e("code",null,"ClassLoader",-1),Ko=o(" causes Hook to freeze, thanks to "),Vo={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Zo=o("WankkoRee"),Go=o(" for the feedback"),Jo=e("li",null,[o("Improve the performance after the "),e("code",null,"XC_Callback"),o(" interface is connected")],-1),Qo=e("li",null,[o("Java "),e("code",null,"type"),o(" added "),e("code",null,"ClassLoader"),o(" type")],-1),$o=e("li",null,"Optimize the API help documentation, fix the problem that the page may be continuously cached",-1),et={id:"_1-0-78-2022-04-18",tabindex:"-1"},ot=e("a",{class:"header-anchor",href:"#_1-0-78-2022-04-18","aria-hidden":"true"},"#",-1),tt=o(" 1.0.78 | 2022.04.18 \u2002"),dt=n("
  • 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),it=o("Adapt the Sp data storage solution of "),nt=e("code",null,"PreferenceFragmentCompat",-1),ct=o(", thanks to "),at={href:"https://github.com/mahoshojoHCG",target:"_blank",rel:"noopener noreferrer"},st=o("mahoshojoHCG"),lt=o(" for feedback"),rt=e("li",null,[o("Update autohandlers and "),e("code",null,"Kotlin"),o(" dependencies to the latest version")],-1),ht=e("li",null,"Fixed some bugs in documentation and code comments",-1),ut={id:"_1-0-77-2022-04-15",tabindex:"-1"},_t=e("a",{class:"header-anchor",href:"#_1-0-77-2022-04-15","aria-hidden":"true"},"#",-1),mt=o(" 1.0.77 | 2022.04.15 \u2002"),pt=e("code",null,"YukiHookModulePrefs",-1),ft=o(" added "),gt=e("code",null,"clear",-1),kt=o(" method, thanks to "),bt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},yt=o("WankkoRee"),xt=o(" for the suggestion"),vt=n("
  • 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),wt={id:"_1-0-75-2022-04-13",tabindex:"-1"},At=e("a",{class:"header-anchor",href:"#_1-0-75-2022-04-13","aria-hidden":"true"},"#",-1),Ht=o(" 1.0.75 | 2022.04.13 \u2002"),Pt=o("Corrected the logic recognition part of the automatic handler, thanks to "),Ft={href:"https://github.com/ApeaSuperz",target:"_blank",rel:"noopener noreferrer"},Ct=o("ApeaSuperz"),Mt=o(" contribution"),It=n("
  • 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),Rt={id:"_1-0-73-2022-04-10",tabindex:"-1"},Yt=e("a",{class:"header-anchor",href:"#_1-0-73-2022-04-10","aria-hidden":"true"},"#",-1),St=o(" 1.0.73 | 2022.04.10 \u2002"),Lt=o("Fixed some Chinese translation errors in documents, thanks to "),Dt={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Xt=o("WankkoRee"),zt=o(" for their contributions"),Tt=o("Fixed the problem that "),Wt=e("code",null,"XC_LoadPackage.LoadPackageParam",-1),jt=o(" throws an exception when the content is empty in some cases, thanks to "),Bt={href:"https://github.com/luckyzyx",target:"_blank",rel:"noopener noreferrer"},Ot=o("Luckyzyx"),Nt=o(" for the feedback"),Et=e("li",null,"Fixed some known bugs and improve Hook stability",-1),Ut={id:"_1-0-72-2022-04-09",tabindex:"-1"},qt=e("a",{class:"header-anchor",href:"#_1-0-72-2022-04-09","aria-hidden":"true"},"#",-1),Kt=o(" 1.0.72 | 2022.04.09 \u2002"),Vt=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),Zt={id:"_1-0-71-2022-04-04",tabindex:"-1"},Gt=e("a",{class:"header-anchor",href:"#_1-0-71-2022-04-04","aria-hidden":"true"},"#",-1),Jt=o(" 1.0.71 | 2022.04.04 \u2002"),Qt=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),$t={id:"_1-0-70-2022-04-04",tabindex:"-1"},ed=e("a",{class:"header-anchor",href:"#_1-0-70-2022-04-04","aria-hidden":"true"},"#",-1),od=o(" 1.0.70 | 2022.04.04 \u2002"),td=e("li",null,[o("Fixed "),e("code",null,"instanceClass"),o(" reporting an error after being called in a static instance")],-1),dd=o("Add "),id=e("code",null,"isUseAppClassLoader",-1),nd=o(" function in Hook process, thanks to "),cd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},ad=o("WankkoRee"),sd=o(" for feedback"),ld=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),rd=e("li",null,"Fixed critical logic errors in lookup methods, constructor classes and variables",-1),hd=e("li",null,"Fixed the problem that the abnormal output cannot be ignored when the Hook target class does not exist",-1),ud=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),_d=o("Fixed "),md=e("code",null,"allMethods",-1),pd=o(" not throwing an exception when it is not hooked to a method, thanks to "),fd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},gd=o("WankkoRee"),kd=o(" for the feedback"),bd=o("Added Hook status monitoring function, thanks to "),yd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},xd=o("WankkoRee"),vd=o(" for the suggestion"),wd=e("li",null,"Modify the way the Xposed entry is injected into the class, and redefine the definition domain of the API",-1),Ad=o("Added obfuscated method and variable lookup function, you can use different types of filter "),Hd=e("code",null,"index",-1),Pd=o(" to locate the specified method and variable, thanks to "),Fd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Cd=o("WankkoRee"),Md=o(" for the ideas provided"),Id=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),Rd=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),Yd=o("Fixed a lot of bugs in the hook process, thanks to "),Sd={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ld=o("WankkoRee"),Dd=o(" for contributing to this project"),Xd={id:"_1-0-69-2022-03-30",tabindex:"-1"},zd=e("a",{class:"header-anchor",href:"#_1-0-69-2022-03-30","aria-hidden":"true"},"#",-1),Td=o(" 1.0.69 | 2022.03.30 \u2002"),Wd=e("li",null,"Added and improved annotations for some method functions",-1),jd=e("li",null,"Added more example Hook content in Demo",-1),Bd=o("Fixed the issue that only the last one takes effect when "),Od=e("code",null,"allMethods",-1),Nd=o(" is used multiple times in a Hook instance, thanks to "),Ed={href:"https://github.com/WankkoRee",target:"_blank",rel:"noopener noreferrer"},Ud=o("WankkoRee"),qd=o(" for the feedback"),Kd={id:"_1-0-68-2022-03-29",tabindex:"-1"},Vd=e("a",{class:"header-anchor",href:"#_1-0-68-2022-03-29","aria-hidden":"true"},"#",-1),Zd=o(" 1.0.68 | 2022.03.29 \u2002"),Gd=n("
    • Added new use case and LSPosed scope in Demo
    • Added Member lookup cache and lookup cache configuration switches
    • Removed and modified MethodFinder, FieldFinder and HookParam related method calls
    • Add more cast types in Finder and support cast as array
    • Overall performance and stability improvements
    • Fixed bugs that may exist in the previous version
    ",1),Jd={id:"_1-0-67-2022-03-27",tabindex:"-1"},Qd=e("a",{class:"header-anchor",href:"#_1-0-67-2022-03-27","aria-hidden":"true"},"#",-1),$d=o(" 1.0.67 | 2022.03.27 \u2002"),ei=n("
    • Added three modifiers functions in Finder, which can filter static, native, public, abstract and many other description types
    • When searching for methods and constructors, the method parameter type can be blurred to a specified number for searching
    • Added hasModifiers extension for Member
    • Added give method in MethodFinder and ConstructorFinder to get primitive types
    • Added PrefsData template function in YukiHookModulePrefs
    • Completely refactored method, constructor and variable lookup scheme
    • Optimized code comments and fixed possible bugs
    ",1),oi={id:"_1-0-66-2022-03-25",tabindex:"-1"},ti=e("a",{class:"header-anchor",href:"#_1-0-66-2022-03-25","aria-hidden":"true"},"#",-1),di=o(" 1.0.66 | 2022.03.25 \u2002"),ii=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),ni={id:"_1-0-65-2022-03-25",tabindex:"-1"},ci=e("a",{class:"header-anchor",href:"#_1-0-65-2022-03-25","aria-hidden":"true"},"#",-1),ai=o(" 1.0.65 | 2022.03.25 \u2002"),si=n("
    • Republished version to fix the incorrect new version of the Maven repository due to cache issues
    • Added MethodFinder and FieldFinder new return value calling methods
    • Fixed possible problems and fix possible problems during the use of Tai Chi
    • Fixed possible problems with auto-generated Xposed entry classes
    • Added android type and java type in type
    ",1),li={id:"_1-0-6-2022-03-20",tabindex:"-1"},ri=e("a",{class:"header-anchor",href:"#_1-0-6-2022-03-20","aria-hidden":"true"},"#",-1),hi=o(" 1.0.6 | 2022.03.20 \u2002"),ui=n("
    • Fixed YukiHookModulePrefs being ignored every time after using direct once to ignore cache
    • Added new API, abolished the traditional usage of isActive to judge module activation
    • Fixed the issue of printing debug logs when using the API in a non-Xposed environment
    • Fixed log output issue and unintercepted exception issue when looking for Field
    • Decoupling Xposed API in ReflectionUtils
    • Added YukiHookModuleStatus method name confusion to reduce the size of module generation
    • The welcome message will no longer be printed when loading the module's own Hook
    • Fixed some bugs that still exist in the previous version
    ",1),_i={id:"_1-0-55-2022-03-18",tabindex:"-1"},mi=e("a",{class:"header-anchor",href:"#_1-0-55-2022-03-18","aria-hidden":"true"},"#",-1),pi=o(" 1.0.55 | 2022.03.18 \u2002"),fi=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),gi={id:"_1-0-5-2022-03-18",tabindex:"-1"},ki=e("a",{class:"header-anchor",href:"#_1-0-5-2022-03-18","aria-hidden":"true"},"#",-1),bi=o(" 1.0.5 | 2022.03.18 \u2002"),yi=n("
    • Fixed the problem that the welcome message was printed multiple times in the case of the old version of the LSPosed framework
    • Added onInit method to configure YukiHookAPI
    • Added executorName and executorVersion to get the name and version number of the current hook framework
    • Added by method to set the timing and condition of Hook
    • YukiHookModulePrefs adds a controllable key-value cache, which can dynamically update data when the host is running
    • Fixed some possible bugs
    ",1),xi={id:"_1-0-4-2022-03-06",tabindex:"-1"},vi=e("a",{class:"header-anchor",href:"#_1-0-4-2022-03-06","aria-hidden":"true"},"#",-1),wi=o(" 1.0.4 | 2022.03.06 \u2002"),Ai=n("
    • Fixed LSPosed cannot find XposedBridge after enabling "Only module classloader can use Xposed API" option in latest version
    • Added constant version name and version number for YukiHookAPI
    • Added hasField method and isAllowPrintingLogs configuration parameter
    • Added isDebug to enable the API to automatically print the welcome message to test whether the module is valid
    ",1),Hi={id:"_1-0-3-2022-03-02",tabindex:"-1"},Pi=e("a",{class:"header-anchor",href:"#_1-0-3-2022-03-02","aria-hidden":"true"},"#",-1),Fi=o(" 1.0.3 | 2022.03.02 \u2002"),Ci=n("
    • Fixed a potential exception not intercepted BUG
    • Added ignoredError function
    • Added android type in type
    • Added ClassNotFound function after listening to hook
    ",1),Mi={id:"_1-0-2-2022-02-18",tabindex:"-1"},Ii=e("a",{class:"header-anchor",href:"#_1-0-2-2022-02-18","aria-hidden":"true"},"#",-1),Ri=o(" 1.0.2 | 2022.02.18 \u2002"),Yi=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),Si={id:"_1-0-1-2022-02-15",tabindex:"-1"},Li=e("a",{class:"header-anchor",href:"#_1-0-1-2022-02-15","aria-hidden":"true"},"#",-1),Di=o(" 1.0.1 | 2022.02.15 \u2002"),Xi=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),zi={id:"_1-0-2022-02-14",tabindex:"-1"},Ti=e("a",{class:"header-anchor",href:"#_1-0-2022-02-14","aria-hidden":"true"},"#",-1),Wi=o(" 1.0 | 2022.02.14 \u2002"),ji=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function Bi(Oi,Ni){const d=c("Badge"),i=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"})]),b,e("h3",y,[x,v,t(d,{type:"warning",text:"stale",vertical:"middle"})]),w,e("h3",A,[H,P,t(d,{type:"warning",text:"stale",vertical:"middle"})]),F,e("h3",C,[M,I,t(d,{type:"warning",text:"stale",vertical:"middle"})]),e("ul",null,[R,e("li",null,[Y,e("a",S,[L,t(i)])]),D,e("li",null,[X,e("a",z,[T,t(i)]),W]),j,e("li",null,[B,O,N,E,U,q,e("a",K,[V,t(i)]),Z]),G,e("li",null,[J,Q,$,e("a",ee,[oe,t(i)]),te]),e("li",null,[de,ie,ne,e("a",ce,[ae,t(i)]),se]),le,e("li",null,[re,he,ue,_e,me,e("a",pe,[fe,t(i)]),ge,e("a",ke,[be,t(i)])]),ye,xe,ve,e("li",null,[we,Ae,He,Pe,Fe,e("a",Ce,[Me,t(i)]),Ie]),Re,e("li",null,[Ye,Se,Le,e("a",De,[Xe,t(i)]),ze,e("a",Te,[We,t(i)])]),je,Be,Oe,Ne]),e("h3",Ee,[Ue,qe,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ke,e("h3",Ve,[Ze,Ge,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Je,Qe,$e,e("a",eo,[oo,t(i)]),to]),io]),e("h3",no,[co,ao,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),so,e("h3",lo,[ro,ho,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),uo,e("h3",_o,[mo,po,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fo,e("h3",go,[ko,bo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yo,e("h3",xo,[vo,wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ao,e("h3",Ho,[Po,Fo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Co,e("h3",Mo,[Io,Ro,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Yo,e("h3",So,[Lo,Do,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Xo,e("h3",zo,[To,Wo,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),jo,e("h3",Bo,[Oo,No,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Eo,e("li",null,[Uo,qo,Ko,e("a",Vo,[Zo,t(i)]),Go]),Jo,Qo,$o]),e("h3",et,[ot,tt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[dt,e("li",null,[it,nt,ct,e("a",at,[st,t(i)]),lt]),rt,ht]),e("h3",ut,[_t,mt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[pt,ft,gt,kt,e("a",bt,[yt,t(i)]),xt]),vt]),e("h3",wt,[At,Ht,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Pt,e("a",Ft,[Ct,t(i)]),Mt]),It]),e("h3",Rt,[Yt,St,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[e("li",null,[Lt,e("a",Dt,[Xt,t(i)]),zt]),e("li",null,[Tt,Wt,jt,e("a",Bt,[Ot,t(i)]),Nt]),Et]),e("h3",Ut,[qt,Kt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Vt,e("h3",Zt,[Gt,Jt,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Qt,e("h3",$t,[ed,od,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[td,e("li",null,[dd,id,nd,e("a",cd,[ad,t(i)]),sd]),ld,rd,hd,ud,e("li",null,[_d,md,pd,e("a",fd,[gd,t(i)]),kd]),e("li",null,[bd,e("a",yd,[xd,t(i)]),vd]),wd,e("li",null,[Ad,Hd,Pd,e("a",Fd,[Cd,t(i)]),Md]),Id,Rd,e("li",null,[Yd,e("a",Sd,[Ld,t(i)]),Dd])]),e("h3",Xd,[zd,Td,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),e("ul",null,[Wd,jd,e("li",null,[Bd,Od,Nd,e("a",Ed,[Ud,t(i)]),qd])]),e("h3",Kd,[Vd,Zd,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Gd,e("h3",Jd,[Qd,$d,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ei,e("h3",oi,[ti,di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ii,e("h3",ni,[ci,ai,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),si,e("h3",li,[ri,hi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ui,e("h3",_i,[mi,pi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),fi,e("h3",gi,[ki,bi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),yi,e("h3",xi,[vi,wi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ai,e("h3",Hi,[Pi,Fi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Ci,e("h3",Mi,[Ii,Ri,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Yi,e("h3",Si,[Li,Di,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),Xi,e("h3",zi,[Ti,Wi,t(d,{type:"danger",text:"outdate",vertical:"middle"})]),ji])}const Ui=a(r,[["render",Bi],["__file","changelog.html.vue"]]);export{Ui as default}; diff --git a/docs/assets/contacts.html.9f3c0025.js b/docs/assets/contacts.html.0c1be9b2.js similarity index 91% rename from docs/assets/contacts.html.9f3c0025.js rename to docs/assets/contacts.html.0c1be9b2.js index 027eed2d..a6060095 100644 --- a/docs/assets/contacts.html.9f3c0025.js +++ b/docs/assets/contacts.html.0c1be9b2.js @@ -1 +1 @@ -import{_ as s,r,o as c,c as a,b as e,d as n,e as o}from"./app.b0c3bf74.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.99fcdd51.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/contacts.html.3a3de7e7.js b/docs/assets/contacts.html.3d7caa0e.js similarity index 94% rename from docs/assets/contacts.html.3a3de7e7.js rename to docs/assets/contacts.html.3d7caa0e.js index a7afa087..8f45e36b 100644 --- a/docs/assets/contacts.html.3a3de7e7.js +++ b/docs/assets/contacts.html.3d7caa0e.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.b0c3bf74.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.99fcdd51.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/example.html.ff3cdf38.js b/docs/assets/example.html.27a92a09.js similarity index 99% rename from docs/assets/example.html.ff3cdf38.js rename to docs/assets/example.html.27a92a09.js index a905bcf1..526407b0 100644 --- a/docs/assets/example.html.ff3cdf38.js +++ b/docs/assets/example.html.27a92a09.js @@ -1,4 +1,4 @@ -import{_ as o,r as p,o as i,c,b as s,d as a,a as l,e as n}from"./app.b0c3bf74.js";const t={},r=l(`

    Usage Example

    Here is an introduction to the basic working method of YukiHookAPI and a list of simple Hook examples and common functions.

    Structure Diagram

    The structure below describes the basic working and principle of YukiHookAPI.

    Host Environment
    +import{_ as o,r as p,o as i,c,b as s,d as a,a as l,e as n}from"./app.99fcdd51.js";const t={},r=l(`

    Usage Example

    Here is an introduction to the basic working method of YukiHookAPI and a list of simple Hook examples and common functions.

    Structure Diagram

    The structure below describes the basic working and principle of YukiHookAPI.

    Host Environment
     \u2514\u2500\u2500 YukiMemberHookCreator
         \u2514\u2500\u2500 Class
             \u2514\u2500\u2500 MemberHookCreator
    diff --git a/docs/assets/example.html.f9dd7429.js b/docs/assets/example.html.f72f0f04.js
    similarity index 99%
    rename from docs/assets/example.html.f9dd7429.js
    rename to docs/assets/example.html.f72f0f04.js
    index 4edd6989..abe2692e 100644
    --- a/docs/assets/example.html.f9dd7429.js
    +++ b/docs/assets/example.html.f72f0f04.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.b0c3bf74.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.99fcdd51.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.a63589de.js b/docs/assets/future.html.1187acab.js
    similarity index 98%
    rename from docs/assets/future.html.a63589de.js
    rename to docs/assets/future.html.1187acab.js
    index 151729ee..683c2428 100644
    --- a/docs/assets/future.html.a63589de.js
    +++ b/docs/assets/future.html.1187acab.js
    @@ -1 +1 @@
    -import{_ as e,o,c as a,a as d}from"./app.b0c3bf74.js";const r={},c=d('

    \u5C55\u671B\u672A\u6765

    \u672A\u6765\u662F\u7F8E\u597D\u7684\uFF0C\u4E5F\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8BA9\u6211\u4EEC\u5171\u540C\u671F\u5F85 YukiHookAPI \u5728\u672A\u6765\u7684\u53D1\u5C55\u7A7A\u95F4\u3002

    \u672A\u89E3\u51B3\u7684\u95EE\u9898

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u5C1A\u672A\u89E3\u51B3\u7684\u95EE\u9898\u3002

    YukiHookModulePrefs

    \u76EE\u524D\u4EC5\u9650\u5B8C\u7F8E\u652F\u6301 LSPosed\uFF0C\u5176\u5B83 Xposed \u6846\u67B6\u9700\u8981\u964D\u7EA7\u6A21\u5757 API\u3002

    \u53EF\u80FD\u5B8C\u5168\u4E0D\u652F\u6301\u592A\u6781\uFF0C\u592A\u6781\u5728\u9AD8\u7248\u672C\u7CFB\u7EDF\u4E0A\u9700\u8981\u66F4\u4F4E\u7684 API \u624D\u80FD\u9002\u914D\u3002

    \u90E8\u5206 Xposed \u6A21\u5757\u5F00\u53D1\u8005\u76EE\u524D\u9009\u62E9 Hook \u76EE\u6807 APP \u5185\u7F6E Sp \u5B58\u50A8\u65B9\u6848\u89E3\u51B3\u6A21\u5757\u8BBE\u7F6E\u5171\u4EAB\u95EE\u9898\u3002

    \u540E\u671F Android \u7CFB\u7EDF\u7684\u6743\u9650\u5C06\u8D8A\u6765\u8D8A\u4E25\u683C\uFF0Cselinux \u5C31\u662F\u76EE\u524D\u9762\u4E34\u7684\u4E00\u4E2A\u5927\u95EE\u9898\uFF0C\u6709\u5F85\u8BA8\u8BBA\u548C\u7814\u7A76\u3002

    \u672A\u6765\u7684\u8BA1\u5212

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u53EF\u80FD\u4F1A\u5728\u540E\u671F\u6DFB\u52A0\u7684\u529F\u80FD\u3002

    \u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C

    \u5F85\u8BA8\u8BBA

    \u76EE\u524D API \u53EA\u652F\u6301\u901A\u8FC7\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7ED1\u5B9A\u5230 xposed_init\uFF0C\u82E5\u60A8\u4E0D\u559C\u6B22\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u4E00\u5B9A\u8981\u81EA\u5DF1\u5B9E\u73B0\u6A21\u5757\u88C5\u8F7D\u5165\u53E3\uFF0C\u672A\u6765\u4F1A\u6309\u7167\u9700\u6C42\u4EBA\u6570\u63A8\u51FA\u4EC5\u6709 API \u529F\u80FD\u7684 Lite \u7248\u672C\uFF0C\u4F60\u53EF\u5411\u6211\u4EEC\u63D0\u51FA issues\u3002

    API \u5DF2\u7ECF\u63D0\u4F9B\u4E86 Xposed \u539F\u751F API \u76D1\u542C\u63A5\u53E3\uFF0C\u4F60\u53EF\u4EE5 \u5728\u8FD9\u91CC \u627E\u5230\u6216\u67E5\u770B Demo \u7684\u5B9E\u73B0\u65B9\u6CD5\u3002

    \u652F\u6301\u66F4\u591A Hook Framework

    \u4F5C\u4E3A API \u6765\u8BB2\uFF0C\u76EE\u524D\u4EC5\u4EC5\u5BF9\u63A5 XposedBridge \u4F5C\u4E3A\u517C\u5BB9\u5C42\uFF0C\u8FD8\u662F\u6709\u4E00\u5B9A\u7684\u5C40\u9650\u6027\u3002

    \u5927\u90E8\u5206 inline hook \u6CA1\u6709 Java \u517C\u5BB9\u5C42\uFF0C\u540E\u671F\u53EF\u80FD\u4F1A\u8003\u8651 native hook \u7684 Java \u517C\u5BB9\u5C42\u9002\u914D\u3002

    ',17),i=[c];function t(s,h){return o(),a("div",null,i)}const p=e(r,[["render",t],["__file","future.html.vue"]]);export{p as default}; +import{_ as e,o,c as a,a as d}from"./app.99fcdd51.js";const r={},c=d('

    \u5C55\u671B\u672A\u6765

    \u672A\u6765\u662F\u7F8E\u597D\u7684\uFF0C\u4E5F\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8BA9\u6211\u4EEC\u5171\u540C\u671F\u5F85 YukiHookAPI \u5728\u672A\u6765\u7684\u53D1\u5C55\u7A7A\u95F4\u3002

    \u672A\u89E3\u51B3\u7684\u95EE\u9898

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u5C1A\u672A\u89E3\u51B3\u7684\u95EE\u9898\u3002

    YukiHookModulePrefs

    \u76EE\u524D\u4EC5\u9650\u5B8C\u7F8E\u652F\u6301 LSPosed\uFF0C\u5176\u5B83 Xposed \u6846\u67B6\u9700\u8981\u964D\u7EA7\u6A21\u5757 API\u3002

    \u53EF\u80FD\u5B8C\u5168\u4E0D\u652F\u6301\u592A\u6781\uFF0C\u592A\u6781\u5728\u9AD8\u7248\u672C\u7CFB\u7EDF\u4E0A\u9700\u8981\u66F4\u4F4E\u7684 API \u624D\u80FD\u9002\u914D\u3002

    \u90E8\u5206 Xposed \u6A21\u5757\u5F00\u53D1\u8005\u76EE\u524D\u9009\u62E9 Hook \u76EE\u6807 APP \u5185\u7F6E Sp \u5B58\u50A8\u65B9\u6848\u89E3\u51B3\u6A21\u5757\u8BBE\u7F6E\u5171\u4EAB\u95EE\u9898\u3002

    \u540E\u671F Android \u7CFB\u7EDF\u7684\u6743\u9650\u5C06\u8D8A\u6765\u8D8A\u4E25\u683C\uFF0Cselinux \u5C31\u662F\u76EE\u524D\u9762\u4E34\u7684\u4E00\u4E2A\u5927\u95EE\u9898\uFF0C\u6709\u5F85\u8BA8\u8BBA\u548C\u7814\u7A76\u3002

    \u672A\u6765\u7684\u8BA1\u5212

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiHookAPI \u53EF\u80FD\u4F1A\u5728\u540E\u671F\u6DFB\u52A0\u7684\u529F\u80FD\u3002

    \u652F\u6301\u72EC\u7ACB\u4F7F\u7528\u7684 Lite \u7248\u672C

    \u5F85\u8BA8\u8BBA

    \u76EE\u524D API \u53EA\u652F\u6301\u901A\u8FC7\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u7ED1\u5B9A\u5230 xposed_init\uFF0C\u82E5\u60A8\u4E0D\u559C\u6B22\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\uFF0C\u4E00\u5B9A\u8981\u81EA\u5DF1\u5B9E\u73B0\u6A21\u5757\u88C5\u8F7D\u5165\u53E3\uFF0C\u672A\u6765\u4F1A\u6309\u7167\u9700\u6C42\u4EBA\u6570\u63A8\u51FA\u4EC5\u6709 API \u529F\u80FD\u7684 Lite \u7248\u672C\uFF0C\u4F60\u53EF\u5411\u6211\u4EEC\u63D0\u51FA issues\u3002

    API \u5DF2\u7ECF\u63D0\u4F9B\u4E86 Xposed \u539F\u751F API \u76D1\u542C\u63A5\u53E3\uFF0C\u4F60\u53EF\u4EE5 \u5728\u8FD9\u91CC \u627E\u5230\u6216\u67E5\u770B Demo \u7684\u5B9E\u73B0\u65B9\u6CD5\u3002

    \u652F\u6301\u66F4\u591A Hook Framework

    \u4F5C\u4E3A API \u6765\u8BB2\uFF0C\u76EE\u524D\u4EC5\u4EC5\u5BF9\u63A5 XposedBridge \u4F5C\u4E3A\u517C\u5BB9\u5C42\uFF0C\u8FD8\u662F\u6709\u4E00\u5B9A\u7684\u5C40\u9650\u6027\u3002

    \u5927\u90E8\u5206 inline hook \u6CA1\u6709 Java \u517C\u5BB9\u5C42\uFF0C\u540E\u671F\u53EF\u80FD\u4F1A\u8003\u8651 native hook \u7684 Java \u517C\u5BB9\u5C42\u9002\u914D\u3002

    ',17),i=[c];function t(s,h){return o(),a("div",null,i)}const p=e(r,[["render",t],["__file","future.html.vue"]]);export{p as default}; diff --git a/docs/assets/future.html.221ddd5c.js b/docs/assets/future.html.373b372f.js similarity index 97% rename from docs/assets/future.html.221ddd5c.js rename to docs/assets/future.html.373b372f.js index b30f23a2..a442864b 100644 --- a/docs/assets/future.html.221ddd5c.js +++ b/docs/assets/future.html.373b372f.js @@ -1 +1 @@ -import{_ as e,o,c as t,a as r}from"./app.b0c3bf74.js";const a={},i=r('

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

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

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    ',17),s=[i];function n(d,u){return o(),t("div",null,s)}const h=e(a,[["render",n],["__file","future.html.vue"]]);export{h as default}; +import{_ as e,o,c as t,a as r}from"./app.99fcdd51.js";const a={},i=r('

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

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

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    ',17),s=[i];function n(d,u){return o(),t("div",null,s)}const h=e(a,[["render",n],["__file","future.html.vue"]]);export{h as default}; diff --git a/docs/assets/home.html.8b5b4f42.js b/docs/assets/home.html.63ebf7b8.js similarity index 99% rename from docs/assets/home.html.8b5b4f42.js rename to docs/assets/home.html.63ebf7b8.js index a64a75c4..6eb1adfc 100644 --- a/docs/assets/home.html.8b5b4f42.js +++ b/docs/assets/home.html.63ebf7b8.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.b0c3bf74.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,"This is a Hook API Framework, it does not provide any Hook function itself, it needs the support of basic Xposed API.")],-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 Xposed Hook API rebuilt in "),s("code",null,"Kotlin"),e(".")],-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'),_=e("."),b=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.99fcdd51.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,"This is a Hook API Framework, it does not provide any Hook function itself, it needs the support of basic Xposed API.")],-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 Xposed Hook API rebuilt in "),s("code",null,"Kotlin"),e(".")],-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'),_=e("."),b=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"}},"class"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"HookEntry"),s("span",{style:{color:"#ADBAC7"}}," "),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.8834bf0c.js b/docs/assets/home.html.6ee3debd.js similarity index 97% rename from docs/assets/home.html.8834bf0c.js rename to docs/assets/home.html.6ee3debd.js index 4add701b..66425c19 100644 --- a/docs/assets/home.html.8834bf0c.js +++ b/docs/assets/home.html.6ee3debd.js @@ -1 +1 @@ -import{_ as e,o,c as t,a as i}from"./app.b0c3bf74.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.99fcdd51.js";const n={},d=i('

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiHookAPI as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt \xA0Kotlin Static File

    • annotation \xA0Annotation Class

    • interface \xA0Interface Class

    • object \xA0Class (Singleton)

    • class \xA0Class

    • field \xA0Field or get / set method or read-only get method

    • method \xA0Method

    • enum \xA0Enum constant

    • ext-field \xA0Extension field (global)

    • ext-method \xA0Extension method (global)

    • i-ext-field \xA0Extension field (internal)

    • i-ext-method \xA0Extension method (internal)

    ',14),a=[d];function c(r,l){return o(),t("div",null,a)}const p=e(n,[["render",c],["__file","home.html.vue"]]);export{p as default}; diff --git a/docs/assets/home.html.4331e424.js b/docs/assets/home.html.bf707b4b.js similarity index 99% rename from docs/assets/home.html.4331e424.js rename to docs/assets/home.html.bf707b4b.js index dc6982da..67c23cf6 100644 --- a/docs/assets/home.html.4331e424.js +++ b/docs/assets/home.html.bf707b4b.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.b0c3bf74.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,"\u8FD9\u662F\u4E00\u4E2A Hook API \u6846\u67B6\uFF0C\u672C\u8EAB\u4E0D\u63D0\u4F9B\u4EFB\u4F55 Hook \u529F\u80FD\uFF0C\u9700\u8981 Xposed \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),C=s("p",null,[l("\u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 "),s("code",null,"Kotlin"),l(" \u91CD\u65B0\u6784\u5EFA\u7684\u9AD8\u6548 Xposed Hook API\u3002")],-1),h=l("\u540D\u79F0\u53D6\u81EA "),m={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),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")]),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.99fcdd51.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,"\u8FD9\u662F\u4E00\u4E2A Hook API \u6846\u67B6\uFF0C\u672C\u8EAB\u4E0D\u63D0\u4F9B\u4EFB\u4F55 Hook \u529F\u80FD\uFF0C\u9700\u8981 Xposed \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),C=s("p",null,[l("\u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 "),s("code",null,"Kotlin"),l(" \u91CD\u65B0\u6784\u5EFA\u7684\u9AD8\u6548 Xposed Hook API\u3002")],-1),h=l("\u540D\u79F0\u53D6\u81EA "),m={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),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")]),l(` `),s("span",{class:"line"},[s("span",{style:{color:"#F47067"}},"class"),s("span",{style:{color:"#ADBAC7"}}," "),s("span",{style:{color:"#F69D50"}},"HookEntry"),s("span",{style:{color:"#ADBAC7"}}," "),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.51cf628f.js b/docs/assets/home.html.f11cb486.js similarity index 98% rename from docs/assets/home.html.51cf628f.js rename to docs/assets/home.html.f11cb486.js index e56c45cd..dad09cd0 100644 --- a/docs/assets/home.html.51cf628f.js +++ b/docs/assets/home.html.f11cb486.js @@ -1 +1 @@ -import{_ as e,o,c as i,a as d}from"./app.b0c3bf74.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.99fcdd51.js";const c={},t=d('

    \u6587\u6863\u4ECB\u7ECD

    \u8FD9\u91CC\u7684\u6587\u6863\u5C06\u540C\u6B65\u6700\u65B0 API \u7248\u672C\u7684\u76F8\u5173\u7528\u6CD5\uFF0C\u8BF7\u4FDD\u6301 YukiHookAPI \u4E3A\u6700\u65B0\u7248\u672C\u4EE5\u4F7F\u7528\u6700\u65B0\u7248\u672C\u7684\u529F\u80FD\u3002

    \u529F\u80FD\u63CF\u8FF0\u8BF4\u660E

    \u529F\u80FD\u63CF\u8FF0\u4E3B\u8981\u4ECB\u7ECD\u5F53\u524D API \u7684\u76F8\u5173\u7528\u6CD5\u548C\u7528\u9014\u3002

    \u529F\u80FD\u793A\u4F8B\u8BF4\u660E

    \u529F\u80FD\u793A\u4F8B\u4E3B\u8981\u5C55\u793A\u4E86\u5F53\u524D API \u7684\u57FA\u672C\u7528\u6CD5\u793A\u4F8B\uFF0C\u53EF\u4F9B\u53C2\u8003\u3002

    \u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E

    \u9996\u4E2A\u7248\u672C\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u6DFB\u52A0\uFF1B

    \u540E\u671F\u65B0\u589E\u52A0\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u65B0\u589E\uFF1B

    \u540E\u671F\u4FEE\u6539\u7684\u529F\u80FD\u5C06\u88AB\u8FFD\u52A0\u4E3A v<version> \u4FEE\u6539\uFF1B

    \u540E\u671F\u88AB\u4F5C\u5E9F\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u4F5C\u5E9F \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\uFF1B

    \u540E\u671F\u88AB\u5220\u9664\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u79FB\u9664 \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\u3002

    \u76F8\u5173\u7B26\u53F7\u8BF4\u660E

    • kt \xA0Kotlin Static File

    • annotation \xA0\u6CE8\u89E3

    • interface \xA0\u63A5\u53E3

    • object \xA0\u7C7B (\u5355\u4F8B)

    • class \xA0\u7C7B

    • field \xA0\u53D8\u91CF\u6216 get\u3001set \u65B9\u6CD5\u6216\u53EA\u8BFB\u7684 get \u65B9\u6CD5

    • method \xA0\u65B9\u6CD5

    • enum \xA0Enum \u5E38\u91CF

    • ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u5168\u5C40)

    • ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u5168\u5C40)

    • i-ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u8C03\u7528\u57DF\u9650\u5236)

    • i-ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u8C03\u7528\u57DF\u9650\u5236)

    ',14),a=[t];function l(p,r){return o(),i("div",null,a)}const n=e(c,[["render",l],["__file","home.html.vue"]]);export{n as default}; diff --git a/docs/assets/host-inject.html.5890a899.js b/docs/assets/host-inject.html.5ae0aeb9.js similarity index 99% rename from docs/assets/host-inject.html.5890a899.js rename to docs/assets/host-inject.html.5ae0aeb9.js index 2891ce94..f7208d9f 100644 --- a/docs/assets/host-inject.html.5890a899.js +++ b/docs/assets/host-inject.html.5ae0aeb9.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.b0c3bf74.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.99fcdd51.js";const t={},r=a(`

    \u5BBF\u4E3B\u8D44\u6E90\u6CE8\u5165\u6269\u5C55

    \u8FD9\u662F\u4E00\u4E2A\u5C06\u6A21\u5757\u8D44\u6E90\u3001Activity \u7EC4\u4EF6\u4EE5\u53CA Context \u4E3B\u9898\u6CE8\u5165\u5230\u5BBF\u4E3B\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5728\u4F7F\u7528\u4EE5\u4E0B\u529F\u80FD\u4E4B\u524D\uFF0C\u4E3A\u9632\u6B62\u8D44\u6E90 ID \u4E92\u76F8\u51B2\u7A81\uFF0C\u4F60\u9700\u8981\u5728\u5F53\u524D Xposed \u6A21\u5757\u9879\u76EE\u7684 build.gradle \u4E2D\u4FEE\u6539\u8D44\u6E90 ID\u3002

    • Kotlin Gradle DSL
    android {
         androidResources.additionalParameters("--allow-reserved-package-id", "--package-id", "0x64")
     }
     
    • Groovy
    android {
    diff --git a/docs/assets/host-inject.html.4b98e6f3.js b/docs/assets/host-inject.html.9e3097f8.js
    similarity index 99%
    rename from docs/assets/host-inject.html.4b98e6f3.js
    rename to docs/assets/host-inject.html.9e3097f8.js
    index 412836cb..7ec8c39b 100644
    --- a/docs/assets/host-inject.html.4b98e6f3.js
    +++ b/docs/assets/host-inject.html.9e3097f8.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.b0c3bf74.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.99fcdd51.js";const c={},r=n(`

    Host Resource Injection Extension

    This is an extension that injects Module App's Resources, Activity components, and Context topics into the Host App.

    Before using the following functions, in order to prevent Resource Id from conflicting with each other, you need to modify the Resource Id in the build.gradle of the current Xposed Module project.

    • Kotlin Gradle DSL
    android {
         androidResources.additionalParameters("--allow-reserved-package-id", "--package-id", "0x64")
     }
     
    • Groovy
    android {
    diff --git a/docs/assets/host-lifecycle.html.b91276fb.js b/docs/assets/host-lifecycle.html.ed922d2c.js
    similarity index 99%
    rename from docs/assets/host-lifecycle.html.b91276fb.js
    rename to docs/assets/host-lifecycle.html.ed922d2c.js
    index 528ad8e8..b779ebd0 100644
    --- a/docs/assets/host-lifecycle.html.b91276fb.js
    +++ b/docs/assets/host-lifecycle.html.ed922d2c.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.b0c3bf74.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.99fcdd51.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
         onAppLifecycle {
             // \u4F60\u53EF\u4EE5\u5728\u8FD9\u91CC\u5B9E\u73B0 Application \u4E2D\u7684\u751F\u547D\u5468\u671F\u65B9\u6CD5\u76D1\u542C
    diff --git a/docs/assets/host-lifecycle.html.fb60eab5.js b/docs/assets/host-lifecycle.html.fe173b3e.js
    similarity index 99%
    rename from docs/assets/host-lifecycle.html.fb60eab5.js
    rename to docs/assets/host-lifecycle.html.fe173b3e.js
    index 804c93f5..1f10e1ee 100644
    --- a/docs/assets/host-lifecycle.html.fb60eab5.js
    +++ b/docs/assets/host-lifecycle.html.fe173b3e.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as e,a}from"./app.b0c3bf74.js";const l={},p=a(`

    Host Lifecycle Extension

    This is an extension of the lifecycle of an automatic hooking Host App.

    Monitor Lifecycle

    Implement the monitoring 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.99fcdd51.js";const l={},p=a(`

    Host Lifecycle Extension

    This is an extension of the lifecycle of an automatic hooking Host App.

    Monitor Lifecycle

    Implement the monitoring 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
         onAppLifecycle {
             // You can implement lifecycle method listeners in Application here
    diff --git a/docs/assets/index.html.ff71767b.js b/docs/assets/index.html.0e1e0a04.js
    similarity index 98%
    rename from docs/assets/index.html.ff71767b.js
    rename to docs/assets/index.html.0e1e0a04.js
    index d99fbec1..c8cb6fd1 100644
    --- a/docs/assets/index.html.ff71767b.js
    +++ b/docs/assets/index.html.0e1e0a04.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.b0c3bf74.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.99fcdd51.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/index.html.ae6b8bb7.js b/docs/assets/index.html.2ea35cea.js
    similarity index 98%
    rename from docs/assets/index.html.ae6b8bb7.js
    rename to docs/assets/index.html.2ea35cea.js
    index e505a529..2e57bb6d 100644
    --- a/docs/assets/index.html.ae6b8bb7.js
    +++ b/docs/assets/index.html.2ea35cea.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.b0c3bf74.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.99fcdd51.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.1624fa4e.js b/docs/assets/index.html.e1a0a108.js
    similarity index 63%
    rename from docs/assets/index.html.1624fa4e.js
    rename to docs/assets/index.html.e1a0a108.js
    index 842557a2..d789c2c9 100644
    --- a/docs/assets/index.html.1624fa4e.js
    +++ b/docs/assets/index.html.e1a0a108.js
    @@ -1 +1 @@
    -import{_ as e,o as c,c as t}from"./app.b0c3bf74.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.99fcdd51.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/knowledge.html.bd978abe.js b/docs/assets/knowledge.html.50976213.js
    similarity index 99%
    rename from docs/assets/knowledge.html.bd978abe.js
    rename to docs/assets/knowledge.html.50976213.js
    index f82305d4..77f2b34a 100644
    --- a/docs/assets/knowledge.html.bd978abe.js
    +++ b/docs/assets/knowledge.html.50976213.js
    @@ -1,4 +1,4 @@
    -import{_ as n,r as a,o as r,c as i,b as e,d as t,a as d,e as o}from"./app.b0c3bf74.js";const l={},p=d(`

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

    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 (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.41a63e9f.js b/docs/assets/knowledge.html.7539105b.js
    similarity index 99%
    rename from docs/assets/knowledge.html.41a63e9f.js
    rename to docs/assets/knowledge.html.7539105b.js
    index eb8e7cf1..849aae67 100644
    --- a/docs/assets/knowledge.html.41a63e9f.js
    +++ b/docs/assets/knowledge.html.7539105b.js
    @@ -1,4 +1,4 @@
    -import{_ as a,r as t,o as r,c as p,b as o,d as n,a as l,e}from"./app.b0c3bf74.js";const d={},c=l(`

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

    \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.26841e5b.js b/docs/assets/logger.html.6370ce77.js
    similarity index 93%
    rename from docs/assets/logger.html.26841e5b.js
    rename to docs/assets/logger.html.6370ce77.js
    index 3534dbe0..8e7b819f 100644
    --- a/docs/assets/logger.html.26841e5b.js
    +++ b/docs/assets/logger.html.6370ce77.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.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.99fcdd51.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 point, YukiHookAPI will call android.util.Log and XposedBridge.log 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 XposedBridge.log 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)
    @@ -32,7 +32,7 @@ import{_ as s,o as e,c as o,a}from"./app.b0c3bf74.js";const n={},l=a(`

    it.throwable // Get exception // ... } -

    The above features require YukiHookLogger.Configs.isRecord to be enabled.

    Pay Attention

    The obtained log data is isolated from each other in the Host App and the Module App's process.

    You can only get the corresponding log data in the corresponding process.

    If you need to get these log data in real time anywhere, please refer to Xposed Module and Host Channel, Register Module App's Activity.

    You can also use YukiHookLogger.Configs.elements to customize the elements that debug logs display externally.

    This function requires YukiHookAPI.Configs to be configured in onInit of the Hook entry class.

    The following example

    override fun onInit() = configs {
    +

    The above features require YukiHookLogger.Configs.isRecord to be enabled.

    Pay Attention

    The obtained log data is isolated from each other in the Host App and the Module App's process.

    You can only get the corresponding log data in the corresponding process.

    If you need to get these log data in real time anywhere, please refer to Xposed Module and Host Channel, Register Module App's Activity.

    If you only want to get log data in real time through Module App or Host App, Please refer to the optional solution YukiHookDataChannel.obtainLoggerInMemoryData method.

    You can also use YukiHookLogger.Configs.elements to customize the elements that debug logs display externally.

    This function requires YukiHookAPI.Configs to be configured in onInit of the Hook entry class.

    The following example

    override fun onInit() = configs {
         debugLog {
             // ...
             elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
    diff --git a/docs/assets/logger.html.f1a6f984.js b/docs/assets/logger.html.9fbe7076.js
    similarity index 93%
    rename from docs/assets/logger.html.f1a6f984.js
    rename to docs/assets/logger.html.9fbe7076.js
    index dd0c414c..8aa38aed 100644
    --- a/docs/assets/logger.html.f1a6f984.js
    +++ b/docs/assets/logger.html.9fbe7076.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

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

    \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 XposedBridge.log \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 XposedBridge.log \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)
    @@ -30,7 +30,7 @@ import{_ as s,o,c as a,a as e}from"./app.b0c3bf74.js";const n={},l=e(`

    it.throwable // \u83B7\u53D6\u5F02\u5E38 // ... } -

    \u4EE5\u4E0A\u529F\u80FD\u9700\u8981\u542F\u7528 YukiHookLogger.Configs.isRecord\u3002

    \u7279\u522B\u6CE8\u610F

    \u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

    \u4F60\u53EA\u80FD\u5728\u5BF9\u5E94\u7684\u8FDB\u7A0B\u4E2D\u83B7\u53D6\u5BF9\u5E94\u7684\u65E5\u5FD7\u6570\u636E\uFF0C\u5982\u679C\u4F60\u9700\u8981\u5728\u4EFB\u4F55\u5730\u65B9\u5B9E\u65F6\u5F97\u5230\u8FD9\u4E9B\u65E5\u5FD7\u6570\u636E\uFF0C\u8BF7\u53C2\u8003 Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865\u3001\u6CE8\u518C\u6A21\u5757 Activity\u3002

    \u4F60\u8FD8\u53EF\u4EE5\u4F7F\u7528 YukiHookLogger.Configs.elements \u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u5BF9\u5916\u663E\u793A\u7684\u5143\u7D20\u3002

    \u6B64\u529F\u80FD\u9700\u8981\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u4E2D\u5BF9 YukiHookAPI.Configs \u8FDB\u884C\u914D\u7F6E\u3002

    \u793A\u4F8B\u5982\u4E0B

    override fun onInit() = configs {
    +

    \u4EE5\u4E0A\u529F\u80FD\u9700\u8981\u542F\u7528 YukiHookLogger.Configs.isRecord\u3002

    \u7279\u522B\u6CE8\u610F

    \u83B7\u53D6\u5230\u7684\u65E5\u5FD7\u6570\u636E\u5728 Hook APP (\u5BBF\u4E3B) \u53CA\u6A21\u5757\u8FDB\u7A0B\u4E2D\u662F\u76F8\u4E92\u9694\u79BB\u7684\u3002

    \u4F60\u53EA\u80FD\u5728\u5BF9\u5E94\u7684\u8FDB\u7A0B\u4E2D\u83B7\u53D6\u5BF9\u5E94\u7684\u65E5\u5FD7\u6570\u636E\uFF0C\u5982\u679C\u4F60\u9700\u8981\u5728\u4EFB\u4F55\u5730\u65B9\u5B9E\u65F6\u5F97\u5230\u8FD9\u4E9B\u65E5\u5FD7\u6570\u636E\uFF0C\u8BF7\u53C2\u8003 Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u901A\u8BAF\u6865\u3001\u6CE8\u518C\u6A21\u5757 Activity\u3002

    \u5982\u679C\u4F60\u53EA\u60F3\u901A\u8FC7\u6A21\u5757\u6216\u5BBF\u4E3B\u6765\u5B9E\u65F6\u5F97\u5230\u65E5\u5FD7\u6570\u636E\uFF0C\u8BF7\u53C2\u8003\u53EF\u9009\u65B9\u6848 YukiHookDataChannel.obtainLoggerInMemoryData \u65B9\u6CD5\u3002

    \u4F60\u8FD8\u53EF\u4EE5\u4F7F\u7528 YukiHookLogger.Configs.elements \u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u5BF9\u5916\u663E\u793A\u7684\u5143\u7D20\u3002

    \u6B64\u529F\u80FD\u9700\u8981\u5728 Hook \u5165\u53E3\u7C7B\u7684 onInit \u4E2D\u5BF9 YukiHookAPI.Configs \u8FDB\u884C\u914D\u7F6E\u3002

    \u793A\u4F8B\u5982\u4E0B

    override fun onInit() = configs {
         debugLog {
             // ...
             elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
    diff --git a/docs/assets/logger.html.0fee6876.js b/docs/assets/logger.html.c841577b.js
    similarity index 85%
    rename from docs/assets/logger.html.0fee6876.js
    rename to docs/assets/logger.html.c841577b.js
    index 1dadc297..51b02c9a 100644
    --- a/docs/assets/logger.html.0fee6876.js
    +++ b/docs/assets/logger.html.c841577b.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-1f0f591e","path":"/zh-cn/api/special-features/logger.html","title":"\u8C03\u8BD5\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664552003000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":6}]},"filePathRelative":"zh-cn/api/special-features/logger.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-1f0f591e","path":"/zh-cn/api/special-features/logger.html","title":"\u8C03\u8BD5\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664834451000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":7}]},"filePathRelative":"zh-cn/api/special-features/logger.md"}');export{e as data};
    diff --git a/docs/assets/logger.html.1cedacb2.js b/docs/assets/logger.html.f841b55d.js
    similarity index 81%
    rename from docs/assets/logger.html.1cedacb2.js
    rename to docs/assets/logger.html.f841b55d.js
    index 1bba30f1..215c0579 100644
    --- a/docs/assets/logger.html.1cedacb2.js
    +++ b/docs/assets/logger.html.f841b55d.js
    @@ -1 +1 @@
    -const e=JSON.parse('{"key":"v-33c1dc26","path":"/en/api/special-features/logger.html","title":"Debug Logs","lang":"en-US","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664552003000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":4}]},"filePathRelative":"en/api/special-features/logger.md"}');export{e as data};
    +const e=JSON.parse('{"key":"v-33c1dc26","path":"/en/api/special-features/logger.html","title":"Debug Logs","lang":"en-US","frontmatter":{},"excerpt":"","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":[]}],"git":{"updatedTime":1664834451000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":5}]},"filePathRelative":"en/api/special-features/logger.md"}');export{e as data};
    diff --git a/docs/assets/move-to-new-api.html.01ff3d47.js b/docs/assets/move-to-new-api.html.45e76cd4.js
    similarity index 99%
    rename from docs/assets/move-to-new-api.html.01ff3d47.js
    rename to docs/assets/move-to-new-api.html.45e76cd4.js
    index 67115cdc..0b963cec 100644
    --- a/docs/assets/move-to-new-api.html.01ff3d47.js
    +++ b/docs/assets/move-to-new-api.html.45e76cd4.js
    @@ -1,4 +1,4 @@
    -import{_ as t,r as c,o as p,c as i,d as l,w as n,a as r,b as s,e}from"./app.b0c3bf74.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 p,c as i,d as l,w as n,a as r,b as s,e}from"./app.99fcdd51.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.40a99cb4.js b/docs/assets/move-to-new-api.html.99d85464.js similarity index 99% rename from docs/assets/move-to-new-api.html.40a99cb4.js rename to docs/assets/move-to-new-api.html.99d85464.js index 45429d9b..23d3982c 100644 --- a/docs/assets/move-to-new-api.html.40a99cb4.js +++ b/docs/assets/move-to-new-api.html.99d85464.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.b0c3bf74.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.99fcdd51.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.1db5f7e1.js b/docs/assets/quick-start.html.1d7f6624.js similarity index 99% rename from docs/assets/quick-start.html.1db5f7e1.js rename to docs/assets/quick-start.html.1d7f6624.js index 6d7572f6..ff03a2f8 100644 --- a/docs/assets/quick-start.html.1db5f7e1.js +++ b/docs/assets/quick-start.html.1d7f6624.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.b0c3bf74.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.99fcdd51.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/quick-start.html.d89bcd22.js b/docs/assets/quick-start.html.b66f71d7.js
    similarity index 99%
    rename from docs/assets/quick-start.html.d89bcd22.js
    rename to docs/assets/quick-start.html.b66f71d7.js
    index ce7db597..bb062e12 100644
    --- a/docs/assets/quick-start.html.d89bcd22.js
    +++ b/docs/assets/quick-start.html.b66f71d7.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.b0c3bf74.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.99fcdd51.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/r8-proguard.html.bad8ca81.js b/docs/assets/r8-proguard.html.3e207302.js
    similarity index 96%
    rename from docs/assets/r8-proguard.html.bad8ca81.js
    rename to docs/assets/r8-proguard.html.3e207302.js
    index cb14c395..ba7d2a81 100644
    --- a/docs/assets/r8-proguard.html.bad8ca81.js
    +++ b/docs/assets/r8-proguard.html.3e207302.js
    @@ -1,2 +1,2 @@
    -import{_ as e,o,c as a,a as r}from"./app.b0c3bf74.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.99fcdd51.js";const n={},s=r(`

    R8 & Proguard Obfuscate

    In most scenarios, the Xposed Module can be compressed by native obfuscation.

    Here is the configuration method of obfuscation.

    R8

    If you are using R8 then you don't need any special configuration for YukiHookAPI.

    Proguard

    If you are still using Proguard, you need to do some rule configuration.

    Pay Attention

    Proguard rules have been deprecated, please don't use them anymore.

    Since Android Gradle Plugin 4.2, the obfuscator with the latest version of the Android Jetpack default is R8, and you no longer need to consider obfuscation.

    To enable R8 in any version, please add the following rules to the gradle.properties file, no configuration is required for Android Gradle Plugin 7.0 and above.

    android.enableR8=true
     
    `,9),t=[s];function d(c,i){return o(),a("div",null,t)}const u=e(n,[["render",d],["__file","r8-proguard.html.vue"]]);export{u as default}; diff --git a/docs/assets/r8-proguard.html.66f29d39.js b/docs/assets/r8-proguard.html.6013d73f.js similarity index 97% rename from docs/assets/r8-proguard.html.66f29d39.js rename to docs/assets/r8-proguard.html.6013d73f.js index 3d34c944..a845c07a 100644 --- a/docs/assets/r8-proguard.html.66f29d39.js +++ b/docs/assets/r8-proguard.html.6013d73f.js @@ -1,2 +1,2 @@ -import{_ as e,o,c as r,a}from"./app.b0c3bf74.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.99fcdd51.js";const d={},s=a(`

    R8 \u4E0E Proguard \u6DF7\u6DC6

    \u5927\u90E8\u5206\u573A\u666F\u4E0B Xposed \u6A21\u5757\u53EF\u901A\u8FC7\u539F\u751F\u6DF7\u6DC6\u538B\u7F29\u4F53\u79EF\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86\u6DF7\u6DC6\u7684\u914D\u7F6E\u65B9\u6CD5\u3002

    R8

    \u5982\u679C\u4F60\u4F7F\u7528\u7684\u662F R8\uFF0C\u90A3\u4E48\u4F60\u65E0\u9700\u5BF9 YukiHookAPI \u8FDB\u884C\u4EFB\u4F55\u7279\u6B8A\u914D\u7F6E\u3002

    Proguard

    \u5982\u679C\u4F60\u4ECD\u7136\u5728\u4F7F\u7528 Proguard\uFF0C\u4F60\u9700\u8981\u505A\u4E00\u4E9B\u89C4\u5219\u914D\u7F6E\u3002

    \u7279\u522B\u6CE8\u610F

    Proguard \u89C4\u5219\u5DF2\u88AB\u5F03\u7528\uFF0C\u8BF7\u4E0D\u8981\u518D\u4F7F\u7528\uFF0C\u81EA\u4ECE Android Gradle Plugin 4.2 \u540E\uFF0C\u62E5\u6709 Android Jetpack \u5957\u4EF6\u6700\u65B0\u7248\u672C\u7684\u6DF7\u6DC6\u5904\u7406\u7A0B\u5E8F\u9ED8\u8BA4\u5747\u4E3A R8\uFF0C\u4E0D\u518D\u9700\u8981\u8003\u8651\u6DF7\u6DC6\u7684\u95EE\u9898\u3002

    \u82E5\u8981\u5728\u4EFB\u4F55\u7248\u672C\u4E0B\u542F\u7528 R8\uFF0C\u8BF7\u5728 gradle.properties \u6587\u4EF6\u4E2D\u52A0\u5165\u5982\u4E0B\u89C4\u5219\uFF0CAndroid Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A\u7248\u672C\u65E0\u9700\u4EFB\u4F55\u914D\u7F6E\u3002

    android.enableR8=true
     
    `,9),n=[s];function c(l,t){return o(),r("div",null,n)}const p=e(d,[["render",c],["__file","r8-proguard.html.vue"]]);export{p as default}; diff --git a/docs/assets/reflection.html.11857a65.js b/docs/assets/reflection.html.31159190.js similarity index 99% rename from docs/assets/reflection.html.11857a65.js rename to docs/assets/reflection.html.31159190.js index a3049cfd..6928c182 100644 --- a/docs/assets/reflection.html.11857a65.js +++ b/docs/assets/reflection.html.31159190.js @@ -1,4 +1,4 @@ -import{_ as e,r as l,o,c as p,b as s,d as t,a as n,e as c}from"./app.b0c3bf74.js";const i={},r=n(`

    Reflection Extensions

    YukiHookAPI encapsulates a set of reflection API with near-zero reflection writing for developers, which can almost completely replace the usage of reflection API in Java.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
    +import{_ as e,r as l,o,c as p,b as s,d as t,a as n,e as c}from"./app.99fcdd51.js";const i={},r=n(`

    Reflection Extensions

    YukiHookAPI encapsulates a set of reflection API with near-zero reflection writing for developers, which can almost completely replace the usage of reflection API in Java.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
     var instance = Class.forName("com.demo.Test")
     // Specify the Class in the ClassLoader environment
     val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    diff --git a/docs/assets/reflection.html.2352eb66.js b/docs/assets/reflection.html.4d705ea1.js
    similarity index 99%
    rename from docs/assets/reflection.html.2352eb66.js
    rename to docs/assets/reflection.html.4d705ea1.js
    index a3522002..492b3f38 100644
    --- a/docs/assets/reflection.html.2352eb66.js
    +++ b/docs/assets/reflection.html.4d705ea1.js
    @@ -1,4 +1,4 @@
    -import{_ as l,r as e,o as p,c as o,b as s,d as c,a as n,e as r}from"./app.b0c3bf74.js";const i={},t=n(`

    \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55

    YukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u63A5\u8FD1\u96F6\u53CD\u5C04\u5199\u6CD5\u7684\u53CD\u5C04 API\uFF0C\u5B83\u51E0\u4E4E\u53EF\u4EE5\u5B8C\u5168\u53D6\u4EE3\u539F\u751F Java \u7684\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u3002

    Class \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5BF9\u8C61\u81EA\u8EAB\u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5BF9\u8C61\u8F6C\u6362

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230\u4E00\u4E2A\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u7684 Class\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    +import{_ as l,r as e,o as p,c as o,b as s,d as c,a as n,e as r}from"./app.99fcdd51.js";const i={},t=n(`

    \u5B57\u8282\u7801\u4E0E\u53CD\u5C04\u6269\u5C55

    YukiHookAPI \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u4E00\u5957\u63A5\u8FD1\u96F6\u53CD\u5C04\u5199\u6CD5\u7684\u53CD\u5C04 API\uFF0C\u5B83\u51E0\u4E4E\u53EF\u4EE5\u5B8C\u5168\u53D6\u4EE3\u539F\u751F Java \u7684\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u3002

    Class \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5BF9\u8C61\u81EA\u8EAB\u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5BF9\u8C61\u8F6C\u6362

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230\u4E00\u4E2A\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u7684 Class\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
     var instance = Class.forName("com.demo.Test")
     // \u6307\u5B9A ClassLoader \u73AF\u5883\u4E0B\u7684 Class
     val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    diff --git a/docs/assets/xposed-channel.html.fcf7cdd5.js b/docs/assets/xposed-channel.html.4864ff1b.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.fcf7cdd5.js
    rename to docs/assets/xposed-channel.html.4864ff1b.js
    index 3367325b..ba7b3eef 100644
    --- a/docs/assets/xposed-channel.html.fcf7cdd5.js
    +++ b/docs/assets/xposed-channel.html.4864ff1b.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as n,a}from"./app.b0c3bf74.js";const l={},o=a(`

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

    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-channel.html.db5aa0b9.js b/docs/assets/xposed-channel.html.e26f5994.js
    similarity index 99%
    rename from docs/assets/xposed-channel.html.db5aa0b9.js
    rename to docs/assets/xposed-channel.html.e26f5994.js
    index 1530ad70..fbab007a 100644
    --- a/docs/assets/xposed-channel.html.db5aa0b9.js
    +++ b/docs/assets/xposed-channel.html.e26f5994.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as l}from"./app.b0c3bf74.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.99fcdd51.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-storage.html.ae972879.js b/docs/assets/xposed-storage.html.3cad78fc.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.ae972879.js
    rename to docs/assets/xposed-storage.html.3cad78fc.js
    index bca19616..b0d72c14 100644
    --- a/docs/assets/xposed-storage.html.ae972879.js
    +++ b/docs/assets/xposed-storage.html.3cad78fc.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as o,a}from"./app.b0c3bf74.js";const n={},l=a(`

    Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences \u7684\u9AD8\u6548\u6A21\u5757\u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\u3002

    \u6211\u4EEC\u9700\u8981\u5B58\u50A8\u6A21\u5757\u7684\u6570\u636E\uFF0C\u4EE5\u4F9B\u5BBF\u4E3B\u8C03\u7528\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F1A\u9047\u5230\u539F\u751F Sp \u5B58\u50A8\u7684\u6570\u636E\u4E92\u901A\u963B\u788D\u3002

    \u539F\u751F\u7684 Xposed \u7ED9\u6211\u4EEC\u63D0\u4F9B\u4E86\u4E00\u4E2A XSharedPreferences \u7528\u4E8E\u8BFB\u53D6\u6A21\u5757\u7684 Sp \u6570\u636E\u3002

    \u5728 Activity \u4E2D\u4F7F\u7528

    \u8FD9\u91CC\u63CF\u8FF0\u4E86\u5728 Activity \u4E2D\u88C5\u8F7D YukiHookModulePrefs \u7684\u573A\u666F\u3002

    \u901A\u5E38\u60C5\u51B5\u4E0B\u6211\u4EEC\u53EF\u4EE5\u8FD9\u6837\u5728 Hook APP (\u5BBF\u4E3B) \u5185\u5BF9\u5176\u8FDB\u884C\u521D\u59CB\u5316\u3002

    \u793A\u4F8B\u5982\u4E0B

    XSharedPreferences(BuildConfig.APPLICATION_ID)
    +import{_ as e,o as s,c as o,a}from"./app.99fcdd51.js";const n={},l=a(`

    Xposed \u6A21\u5757\u6570\u636E\u5B58\u50A8

    \u8FD9\u662F\u4E00\u4E2A\u81EA\u52A8\u5BF9\u63A5 SharedPreferences \u548C XSharedPreferences \u7684\u9AD8\u6548\u6A21\u5757\u6570\u636E\u5B58\u50A8\u89E3\u51B3\u65B9\u6848\u3002

    \u6211\u4EEC\u9700\u8981\u5B58\u50A8\u6A21\u5757\u7684\u6570\u636E\uFF0C\u4EE5\u4F9B\u5BBF\u4E3B\u8C03\u7528\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4F1A\u9047\u5230\u539F\u751F Sp \u5B58\u50A8\u7684\u6570\u636E\u4E92\u901A\u963B\u788D\u3002

    \u539F\u751F\u7684 Xposed \u7ED9\u6211\u4EEC\u63D0\u4F9B\u4E86\u4E00\u4E2A XSharedPreferences \u7528\u4E8E\u8BFB\u53D6\u6A21\u5757\u7684 Sp \u6570\u636E\u3002

    \u5728 Activity \u4E2D\u4F7F\u7528

    \u8FD9\u91CC\u63CF\u8FF0\u4E86\u5728 Activity \u4E2D\u88C5\u8F7D YukiHookModulePrefs \u7684\u573A\u666F\u3002

    \u901A\u5E38\u60C5\u51B5\u4E0B\u6211\u4EEC\u53EF\u4EE5\u8FD9\u6837\u5728 Hook APP (\u5BBF\u4E3B) \u5185\u5BF9\u5176\u8FDB\u884C\u521D\u59CB\u5316\u3002

    \u793A\u4F8B\u5982\u4E0B

    XSharedPreferences(BuildConfig.APPLICATION_ID)
     

    \u6709\u6CA1\u6709\u65B9\u4FBF\u5FEB\u6377\u7684\u89E3\u51B3\u65B9\u6848\u5462\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u4F7F\u7528 YukiHookAPI \u7684\u6269\u5C55\u80FD\u529B\u5FEB\u901F\u5B9E\u73B0\u8FD9\u4E2A\u529F\u80FD\u3002

    \u5F53\u4F60\u5728\u6A21\u5757\u4E2D\u5B58\u50A8\u6570\u636E\u7684\u65F6\u5019\uFF0C\u82E5\u5F53\u524D\u5904\u4E8E Activity \u5185\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    modulePrefs.putString("test_name", "saved_value")
     

    \u5F53\u4F60\u5728 Hook APP (\u5BBF\u4E3B) \u4E2D\u8BFB\u53D6\u6570\u636E\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    val testName = prefs.getString("test_name", "default_value")
     

    \u4F60\u4E0D\u9700\u8981\u8003\u8651\u4F20\u5165\u6A21\u5757\u7684\u5305\u540D\u4EE5\u53CA\u4E00\u7CFB\u5217\u590D\u6742\u7684\u6743\u9650\u914D\u7F6E\uFF0C\u4E00\u5207\u90FD\u4EA4\u7ED9 YukiHookModulePrefs \u6765\u5904\u7406\u3002

    \u82E5\u8981\u5B9E\u73B0\u5B58\u50A8\u7684\u533A\u57DF\u5212\u5206\uFF0C\u4F60\u53EF\u4EE5\u6307\u5B9A\u6BCF\u4E2A prefs \u6587\u4EF6\u7684\u540D\u79F0\u3002

    \u5728\u6A21\u5757\u7684 Activity \u4E2D\u8FD9\u6837\u4F7F\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u63A8\u8350\u7528\u6CD5
    diff --git a/docs/assets/xposed-storage.html.b021133f.js b/docs/assets/xposed-storage.html.f78666ac.js
    similarity index 99%
    rename from docs/assets/xposed-storage.html.b021133f.js
    rename to docs/assets/xposed-storage.html.f78666ac.js
    index 8bb19698..5ec9f7ba 100644
    --- a/docs/assets/xposed-storage.html.b021133f.js
    +++ b/docs/assets/xposed-storage.html.f78666ac.js
    @@ -1,4 +1,4 @@
    -import{_ as e,o as s,c as o,a}from"./app.b0c3bf74.js";const n={},t=a(`

    Xposed Module Data Storage

    This is an efficient Module App data storage solution that automatically connects SharedPreferences and XSharedPreferences.

    We need to store the data of the Module App for the Host App to call.

    At this time, we will encounter the data exchange obstacle of the native Sp storage.

    The native Xposed provides us with a XSharedPreferences for reading the Sp data of the Module App.

    Use in Activity

    Loading YukiHookModulePrefs in Activity is described here.

    Usually we can initialize it in Host App like this.

    The following example

    XSharedPreferences(BuildConfig.APPLICATION_ID)
    +import{_ as e,o as s,c as o,a}from"./app.99fcdd51.js";const n={},t=a(`

    Xposed Module Data Storage

    This is an efficient Module App data storage solution that automatically connects SharedPreferences and XSharedPreferences.

    We need to store the data of the Module App for the Host App to call.

    At this time, we will encounter the data exchange obstacle of the native Sp storage.

    The native Xposed provides us with a XSharedPreferences for reading the Sp data of the Module App.

    Use in Activity

    Loading YukiHookModulePrefs in Activity is described here.

    Usually we can initialize it in Host App like this.

    The following example

    XSharedPreferences(BuildConfig.APPLICATION_ID)
     

    Is there a convenient and quick solution?

    At this point, you can use the extension capability of YukiHookAPI to quickly implement this function.

    When you store data in a Module App, you can use the following methods if you are currently in an Activity.

    The following example

    modulePrefs.putString("test_name", "saved_value")
     

    When you read data in a Host App, you can use the following methods.

    The following example

    val testName = prefs.getString("test_name", "default_value")
     

    You don't need to consider the module package name and a series of complicated permission configurations, everything is handled by YukiHookModulePrefs.

    To achieve localization of storage, you can specify the name of each prefs file.

    This is used in the Activity of the Module App.

    The following example

    // Recommended usage
    diff --git a/docs/assets/xposed-using.html.313fe8ce.js b/docs/assets/xposed-using.html.59211920.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.313fe8ce.js
    rename to docs/assets/xposed-using.html.59211920.js
    index 5d34d34d..af222616 100644
    --- a/docs/assets/xposed-using.html.313fe8ce.js
    +++ b/docs/assets/xposed-using.html.59211920.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as e,c as a,a as n}from"./app.b0c3bf74.js";const o={},l=n(`

    Use as Xposed Module Configs

    Here are the related configuration methods used by YukiHookAPI as an Xposed Module.

    Dependency Configs

    As an Xposed Module, YukiHookAPI provides an automatic builder.

    You need to integrate the latest version of the com.highcapable.yukihookapi:ksp-xposed dependency in your build.gradle.

    Custom Automatic Builder

    You can configure how YukiHookAPI will generate the xposed_init entry point.

    InjectYukiHookWithXposed Annotation

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

    Use as Xposed Module Configs

    Here are the related configuration methods used by YukiHookAPI as an Xposed Module.

    Dependency Configs

    As an Xposed Module, YukiHookAPI provides an automatic builder.

    You need to integrate the latest version of the com.highcapable.yukihookapi:ksp-xposed dependency in your build.gradle.

    Custom Automatic Builder

    You can configure how YukiHookAPI will generate the xposed_init entry point.

    InjectYukiHookWithXposed Annotation

    annotation class InjectYukiHookWithXposed(
         val sourcePath: String,
         val modulePackageName: String,
         val entryClassName: String,
    diff --git a/docs/assets/xposed-using.html.68fb179d.js b/docs/assets/xposed-using.html.873df271.js
    similarity index 99%
    rename from docs/assets/xposed-using.html.68fb179d.js
    rename to docs/assets/xposed-using.html.873df271.js
    index b21c16a1..4589069d 100644
    --- a/docs/assets/xposed-using.html.68fb179d.js
    +++ b/docs/assets/xposed-using.html.873df271.js
    @@ -1,4 +1,4 @@
    -import{_ as s,o as n,c as a,a as o}from"./app.b0c3bf74.js";const e={},l=o(`

    \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u65B9\u6CD5\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F5C\u4E3A Xposed \u6A21\u5757\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u3002

    \u4F60\u9700\u8981\u5728\u4F60\u7684 build.gradle \u4E2D\u96C6\u6210 com.highcapable.yukihookapi:ksp-xposed \u4F9D\u8D56\u7684\u6700\u65B0\u7248\u672C\u3002

    \u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F

    \u4F60\u53EF\u4EE5\u5BF9 YukiHookAPI \u5C06\u5982\u4F55\u751F\u6210 xposed_init \u5165\u53E3\u8FDB\u884C\u76F8\u5173\u914D\u7F6E\u3002

    InjectYukiHookWithXposed \u6CE8\u89E3

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

    \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E

    \u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiHookAPI \u4F5C\u4E3A Xposed \u6A21\u5757\u4F7F\u7528\u7684\u76F8\u5173\u914D\u7F6E\u65B9\u6CD5\u3002

    \u4F9D\u8D56\u914D\u7F6E

    \u4F5C\u4E3A Xposed \u6A21\u5757\uFF0CYukiHookAPI \u63D0\u4F9B\u4E86\u4E00\u4E2A\u81EA\u52A8\u5904\u7406\u7A0B\u5E8F\u3002

    \u4F60\u9700\u8981\u5728\u4F60\u7684 build.gradle \u4E2D\u96C6\u6210 com.highcapable.yukihookapi:ksp-xposed \u4F9D\u8D56\u7684\u6700\u65B0\u7248\u672C\u3002

    \u81EA\u5B9A\u4E49\u5904\u7406\u7A0B\u5E8F

    \u4F60\u53EF\u4EE5\u5BF9 YukiHookAPI \u5C06\u5982\u4F55\u751F\u6210 xposed_init \u5165\u53E3\u8FDB\u884C\u76F8\u5173\u914D\u7F6E\u3002

    InjectYukiHookWithXposed \u6CE8\u89E3

    annotation class InjectYukiHookWithXposed(
         val sourcePath: String,
         val modulePackageName: String,
         val entryClassName: String,
    diff --git a/docs/assets/yukihookapi-projectbuilder.html.547d751c.js b/docs/assets/yukihookapi-projectbuilder.html.0e3e500d.js
    similarity index 98%
    rename from docs/assets/yukihookapi-projectbuilder.html.547d751c.js
    rename to docs/assets/yukihookapi-projectbuilder.html.0e3e500d.js
    index e0e41915..261b4414 100644
    --- a/docs/assets/yukihookapi-projectbuilder.html.547d751c.js
    +++ b/docs/assets/yukihookapi-projectbuilder.html.0e3e500d.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.b0c3bf74.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.99fcdd51.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.51a98dc8.js b/docs/assets/yukihookapi-projectbuilder.html.6785eea5.js similarity index 98% rename from docs/assets/yukihookapi-projectbuilder.html.51a98dc8.js rename to docs/assets/yukihookapi-projectbuilder.html.6785eea5.js index f798eba4..13f15c22 100644 --- a/docs/assets/yukihookapi-projectbuilder.html.51a98dc8.js +++ b/docs/assets/yukihookapi-projectbuilder.html.6785eea5.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.b0c3bf74.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.99fcdd51.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 827fe1c7..66de8787 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-2022 HighCapable

    - + diff --git a/docs/en/about/changelog.html b/docs/en/about/changelog.html index 1058ce29..870c8d31 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.3 | 2022.09.30  latest

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

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

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

    • 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.4 | 2022.10.04  latest

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

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

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

    • 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 ff4b61f1..b6e50144 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 5b083603..da9e1c8a 100644 --- a/docs/en/about/future.html +++ b/docs/en/about/future.html @@ -23,11 +23,11 @@ } Looking for Future | Yuki Hook API - +

    Looking for Future

    The future is bright and uncertain, let us look forward to the future development space of YukiHookAPI.

    Unresolved Issues

    Here are the unresolved issues with YukiHookAPI.

    YukiHookModulePrefs

    Currently only supports LSPosed perfectly, other Xposed Framework need to downgrade the module target api.

    TaiChi may not be supported at all, and TaiChi needs a lower target api to adapt on high-version systems.

    Some Xposed Module developers currently choose the Hook target app self's SharedPreferences storage solution to solve the module settings sharing problem.

    In the later period, the permissions of the Android system will become more and more strict, and selinux is a big problem currently facing, which needs to be discussed and studied.

    Future Plans

    Features that YukiHookAPI may add later are included here.

    Lite Version Supported for Standalone Use

    To be Discussed

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

    If you don't like the automatic handler, you must implement the module loading entry yourself.

    In the future, the Lite version with only API functions will be launched according to the number of people required.

    You can submit issues with us.

    We have provided the Xposed native API listening interface, you can find or view the implementation method of the Demo here.

    Support for More Hook Framework

    As an API, currently only docking XposedBridge as a compatibility layer still has certain limitations.

    Most inline hook do not have a Java compatibility layer, and the Java compatibility layer adaptation of native hook may be considered later.

    - + diff --git a/docs/en/api/home.html b/docs/en/api/home.html index bcbae09b..cb10935e 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 0a871317..f3a9e5ca 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 - + @@ -125,6 +125,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 19dc3a60..5f147a31 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 5ef08c18..cb7fd3a9 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 3c45130e..f4ab1ebb 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,13 +23,13 @@ } GenericClass - 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.

    GenericClass - class

    class GenericClass internal constructor(private val type: ParameterizedType)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
     

    Change Records

    v1.1.0 added

    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 aa9e8b35..92743c6f 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 6ff475f8..2ed3f30e 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 82ddfdd5..cf54a3cf 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

    Function Illustrate

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null): Class<*>
     

    Change Records

    v1.0.70 added

    Function Illustrate

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null): Class<*>?
     

    Change Records

    v1.1.0 added

    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 8cd9e393..8ed71b8e 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 dbf08fca..646bc1ba 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html @@ -23,7 +23,7 @@ } YukiResourcesHookCreator - class | Yuki Hook API - + @@ -122,6 +122,6 @@

    Change Records

    v1.0.80 added

    Function Illustrate

    添加执行 Hook 需要满足的条件,不满足条件将直接停止 Hook。

    onHookingFailure - method

    fun onHookingFailure(result: (Throwable) -> Unit): Result
     

    Change Records

    v1.0.80 added

    Function Illustrate

    监听 Hook 过程发生错误的回调方法。

    ignoredHookingFailure - method

    fun ignoredHookingFailure(): Result
     

    Change Records

    v1.0.80 added

    Function Illustrate

    忽略 Hook 过程出现的错误。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html index 29c4024e..c6ca53b6 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 341d22c8..73a77919 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 5ec98a8c..c7788366 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 286e123d..8aaf6346 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/classes/DexClassFinder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html index 56218f2f..ad86ee9d 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 970d00e7..d1620f31 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 - + @@ -35,6 +35,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    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 053ac3d9..814edda3 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 - + @@ -33,6 +33,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
     

    Change Records

    v1.1.0 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 6a611773..573a1559 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 e99502c2..1cee298a 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 - + @@ -38,6 +38,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    设置 Method 名称条件。

    paramCount - method

    fun paramCount(numRange: IntRange)
     

    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 指定参数类型而是仅使用此方法指定参数个数条件。

    - + 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 b6a33c85..ab9b4644 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 5a264828..21e9b9e5 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 - + @@ -114,6 +114,6 @@

    Change Records

    v1.0.2 added

    v1.1.0 modified

    新增 constructor 参数

    Function Illustrate

    Constructor 实例处理类。

    call - method

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

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

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

    Change Records

    v1.0.2 added

    Function Illustrate

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - + 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 e91dfdb6..cc48d959 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 - + @@ -110,6 +110,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 8e1e5fc9..ed0db4a2 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 - + @@ -129,6 +129,6 @@

    Change Records

    v1.0.65 added

    v1.0.68 modified

    修改 callBooleanboolean

    Function Illustrate

    执行 Method,指定 Boolean 返回值类型。

    array - method

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

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 Array 返回值类型。

    list - method

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

    Change Records

    v1.0.68 added

    Function Illustrate

    执行 Method,指定 List 返回值类型。

    - + 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 f3aa34f6..f97a1c43 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 05ef7436..6e1250dc 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 - + @@ -87,6 +87,6 @@

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(result: (index: Int, field: Field) -> Unit)
     

    Change Records

    v1.0.70 added

    v1.0.80 modified

    将方法体进行 inline

    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 16258594..cabe68eb 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html @@ -23,7 +23,7 @@ } YukiHookFactory - kt | Yuki Hook API - + @@ -39,6 +39,6 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    向 Hook APP (宿主) ContextResources 注入当前 Xposed 模块的资源。

    注入成功后,你就可以直接使用例如 ImageView.setImageResourceResources.getString 装载当前 Xposed 模块的资源 ID。

    注入的资源作用域仅限当前 ContextResources,你需要在每个用到宿主 ContextResources 的地方重复调用此方法进行注入才能使用。

    Pay Attention

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    Context.registerModuleAppActivities - ext-method

    fun Context.registerModuleAppActivities(proxy: Any?)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    向 Hook APP (宿主) 注册当前 Xposed 模块的 Activity

    注册成功后,你就可以直接使用 Context.startActivity 来启动未在宿主中注册的 Activity

    使用此方法会在未注册的 Activity 在 Hook APP (宿主) 中启动时自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    你要将需要在宿主启动的 Activity 继承于 ModuleAppActivityModuleAppCompatActivity

    Pay Attention

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    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 00d63379..060bfa9f 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 - + @@ -32,7 +32,7 @@

    Change Records

    v1.1.0 added

    Function Illustrate

    仅使用 android.util.Log

    XPOSEDBRIDGE - enum

    XPOSEDBRIDGE
     

    Change Records

    v1.1.0 added

    Function Illustrate

    仅使用 XposedBridge.log

    Pay Attention

    只能在 (Xposed) 宿主环境中使用,模块环境将不生效。

    SCOPE - enum

    SCOPE
     

    Change Records

    v1.1.0 added

    Function Illustrate

    分区使用。

    (Xposed) 宿主环境仅使用 XPOSEDBRIDGE

    模块环境仅使用 LOGD

    BOTH - enum

    BOTH
    -

    Change Records

    v1.1.0 added

    Function Illustrate

    同时使用。

    (Xposed) 宿主环境使用 LOGDXPOSEDBRIDGE

    模块环境仅使用 LOGD

    YukiLoggerData - class

    class YukiLoggerData internal constructor(
    +

    Change Records

    v1.1.0 added

    Function Illustrate

    同时使用。

    (Xposed) 宿主环境使用 LOGDXPOSEDBRIDGE

    模块环境仅使用 LOGD

    YukiLoggerData - class

    data class YukiLoggerData internal constructor(
         var timestamp: Long,
         var time: String,
         var tag: String,
    @@ -41,10 +41,10 @@
         var userId: Int,
         var msg: String,
         var throwable: Throwable?
    -)
    -

    Change Records

    v1.1.2 added

    Function Illustrate

    调试日志数据实现类。

    YukiHookLogger - object

    object YukiHookLogger
    -

    Change Records

    v1.1.0 added

    Function Illustrate

    调试日志实现类。

    inMemoryData - field

    val inMemoryData: HashSet<YukiLoggerData>
    -

    Change Records

    v1.1.2 added

    Function Illustrate

    当前全部已记录的日志数据。

    Pay Attention

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    contents - field

    val contents: String
    +) : Serializable
    +

    Change Records

    v1.1.2 added

    v1.1.4 modified

    实现 Serializable 接口并标识为 data class

    Function Illustrate

    调试日志数据实现类。

    YukiHookLogger - object

    object YukiHookLogger
    +

    Change Records

    v1.1.0 added

    Function Illustrate

    调试日志实现类。

    inMemoryData - field

    val inMemoryData: ArrayList<YukiLoggerData>
    +

    Change Records

    v1.1.2 added

    v1.1.4 modified

    类型由 HashSet 修改为 ArrayList

    Function Illustrate

    当前全部已记录的日志数据。

    Pay Attention

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    contents - field

    val contents: String
     

    Change Records

    v1.1.0 added

    Function Illustrate

    获取当前日志文件内容。

    如果当前没有已记录的日志会返回空字符串。

    Pay Attention

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    clear - method

    fun clear()
     

    Change Records

    v1.1.0 added

    Function Illustrate

    清除全部已记录的日志。

    Pay Attention

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    你也可以直接获取 inMemoryData 来清除。

    saveToFile - method

    fun saveToFile(fileName: String)
     

    Change Records

    v1.1.0 added

    Function Illustrate

    保存当前日志到文件。

    若当前未开启 Configs.isRecord 或记录为空则不会进行任何操作。

    日志文件会追加到 fileName 的文件结尾,若文件不存在会自动创建。

    Pay Attention

    文件读写权限取决于当前宿主、模块已获取的权限。

    Configs - object

    object Configs
    @@ -65,6 +65,6 @@
     

    Change Records

    v1.0 first

    v1.1.0 modified

    新增 type 参数

    Function Illustrate

    LogcatXposedBridge 打印日志,级别 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

    LogcatXposedBridge 打印日志,级别 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

    LogcatXposedBridge 打印日志,级别 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 00c9d976..76d14bb6 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 - + @@ -113,6 +113,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 362acc1d..435df9a9 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 - + @@ -48,7 +48,9 @@

    Change Records

    v1.0.87 added

    Function Illustrate

    刷新当前 Xposed 模块自身 Resources

    onAppLifecycle - method

    inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    监听当前 Hook APP 生命周期装载事件。

    Notice

    loadZygote 中不会被装载,仅会在 loadSystemloadApp 中装载。

    作为 Hook API 装载时请使用原生的 Application 实现生命周期监听。

    loadApp - method

    inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
     
    fun loadApp(name: String, hooker: YukiBaseHooker)
    -

    Change Records

    v1.0 first

    v1.0.80 modified

    将方法体进行 inline

    Function Illustrate

    装载并 Hook 指定包名的 APP。

    name 为 APP 的包名,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    装载并 Hook 指定、全部包名的 APP。

    若要装载 APP Zygote 事件,请使用 loadZygote

    若要 Hook 系统框架,请使用 loadSystem

    Function Example

    你可以使用 loadApplambda 方法体形式或直接装载一个 Hooker。

    The following example

    // 使用 lambda
    +
    inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadApp(name: String, vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0 first

    v1.0.80 modified

    将方法体进行 inline

    v1.1.4 modified

    新增两个方法,可以同时装载多个 APP 与子 Hooker

    Function Illustrate

    装载并 Hook 指定包名的 APP。

    name 为 APP 的包名,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    装载并 Hook 指定、全部包名的 APP。

    若要装载 APP Zygote 事件,请使用 loadZygote

    若要 Hook 系统框架,请使用 loadSystem

    Function Example

    你可以使用 loadApplambda 方法体形式或直接装载一个 Hooker。

    The following example

    // 使用 lambda
     loadApp(name = "com.example.test") {
         // Your code here.
     }
    @@ -60,13 +62,23 @@
     }
     // 使用 Hooker
     loadApp(hooker = CustomHooker)
    -

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
    +

    若想要同时装载多个需要 Hook 的 APP,可以直接使用如下方式。

    The following example

    // 同时装载多个需要 Hook 的 APP
    +loadApp("com.example.test", "com.example.next") {
    +    // Your code here.
    +}
    +

    若想要同时装载多个子 Hooker,可以直接使用如下方式,但此时只能指定一个需要 Hook 的 APP。

    The following example

    // 同时装载多个子 Hooker
    +loadApp("com.example.test", CustomHooker1, CustomHooker2)
    +

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
     
    fun loadZygote(hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.80 added

    Function Illustrate

    装载 APP Zygote 事件。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
    +
    fun loadZygote(vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.80 added

    v1.1.4 modified

    新增一个方法,可以同时装载多个子 Hooker

    Function Illustrate

    装载 APP Zygote 事件。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
     
    fun loadSystem(hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.82 added

    Function Illustrate

    装载并 Hook 系统框架。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadSystem(vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.82 added

    v1.1.4 modified

    新增一个方法,可以同时装载多个子 Hooker

    Function Illustrate

    装载并 Hook 系统框架。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
     
    fun withProcess(name: String, hooker: YukiBaseHooker)
    -

    Change Records

    v1.0.70 added

    Function Illustrate

    装载并 Hook APP 的指定进程。

    name 为 APP 的进程名称,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
    +
    fun withProcess(vararg name: String, hooker: YukiBaseHooker)
    +
    fun withProcess(name: String, vararg hooker: YukiBaseHooker)
    +

    Change Records

    v1.0.70 added

    v1.1.4 modified

    新增两个方法,可以同时装载多个进程与子 Hooker

    Function Illustrate

    装载并 Hook APP 的指定进程。

    name 为 APP 的进程名称,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
     

    Change Records

    v1.0 first

    Function Illustrate

    装载 Hook 子类。

    你可以填入 hooker 在 Hooker 中继续装载 Hooker。

    searchClass - method

    inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
     

    Change Records

    v1.1.0 added

    Function Illustrate

    通过 appClassLoader 按指定条件查找并得到当前 Hook APP Dex 中的 Class

    Pay Attention

    此方法在 Class 数量过多及查找条件复杂时会非常耗时。

    建议启用 async 或设置 name 参数,name 参数将在 Hook APP (宿主) 不同版本中自动进行本地缓存以提升效率。

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    String+VariousClass.clazz - i-ext-field

    Change Records

    v1.0 first

    v1.1.0 deprecated

    请转移到 toClass(...) 方法

    String.hasClass - i-ext-field

    Change Records

    v1.0 first

    v1.1.0 deprecated

    请转移到 hasClass(...) 方法

    String+VariousClass.toClass - i-ext-method

    fun String.toClass(loader: ClassLoader?): Class<*>
     
    fun VariousClass.toClass(loader: ClassLoader?): Class<*>
    @@ -131,6 +143,6 @@
     

    Change Records

    v1.0.88 added

    Function Illustrate

    监听当前 Hook APP 装载 Application.onTrimMemory

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    监听当前 Hook APP 装载 Application.onConfigurationChanged

    registerReceiver - method

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

    Change Records

    v1.0.88 added

    Function Illustrate

    注册系统广播监听。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html index 7819688c..8c95772b 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html @@ -23,11 +23,11 @@ } ComponentTypeFactory - kt | Yuki Hook API - +

    Notice

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

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

    ComponentTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html index 0716de8d..47f8d2b4 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html @@ -23,11 +23,11 @@ } GraphicsTypeFactory - kt | Yuki Hook API - +

    Notice

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

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

    GraphicsTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html index 714ae6a0..34f961cf 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html @@ -23,11 +23,11 @@ } ViewTypeFactory - kt | Yuki Hook API - +

    Notice

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

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

    ViewTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html index 5a0ed950..e21ae1d3 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 a02ac32b..52cc24dd 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html @@ -23,11 +23,11 @@ } VariableTypeFactory - kt | Yuki Hook API - +

    Notice

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

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

    VariableTypeFactory - kt

    Change Records

    v1.0 first

    Function Illustrate

    这是一个预置 Hook 类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html index a1a2135d..54f6a906 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/dummy/YukiModuleResources.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html index ee673455..5773c3be 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/dummy/YukiResForwarder.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html index 03270b90..b72cd787 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/dummy/YukiResources.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html index 23cd602b..93af5bc3 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/bridge/event/YukiXposedEvent.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html index 55efad6c..06a01bb7 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/channel/YukiHookDataChannel.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html index b38d7858..96b4a5cf 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,11 +23,11 @@ } YukiHookDataChannel - 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.

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +    

    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

    实现 Xposed 模块的数据通讯桥。

    通过模块与宿主相互注册 BroadcastReceiver 来实现数据的交互。

    模块需要将 Application 继承于 ModuleApplication 来实现此功能。

    Pay Attention

    模块与宿主需要保持存活状态,否则无法建立通讯。

    NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String, private val isSecure: Boolean)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    新增 isSecure 参数

    Function Illustrate

    YukiHookDataChannel 命名空间。

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    Change Records

    v1.0.88 added

    Function Illustrate

    创建一个调用空间。

    put - method

    fun <T> put(key: String, value: T)
    @@ -38,7 +38,8 @@
     
    fun <T> wait(data: ChannelData<T>, result: (value: T) -> Unit)
     

    Change Records

    v1.0.88 added

    v1.0.90 modified

    移除默认值 value

    Function Illustrate

    获取键值数据。

    wait - method

    fun wait(key: String, callback: () -> Unit)
     

    Change Records

    v1.0.88 added

    Function Illustrate

    仅获取监听结果,不获取键值数据。

    Pay Attention

    仅限使用 VALUE_WAIT_FOR_LISTENER 发送的监听才能被接收。

    checkingVersionEquals - method

    fun checkingVersionEquals(result: (Boolean) -> Unit)
    -

    Change Records

    v1.0.88 added

    Function Illustrate

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    - +

    Change Records

    v1.0.88 added

    Function Illustrate

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(result: (ArrayList<YukiLoggerData>) -> Unit)
    +

    Change Records

    v1.1.4 added

    Function Illustrate

    获取模块与宿主之间的 ArrayList<YukiLoggerData> 数据。

    由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。

    Pay Attention

    模块与宿主必须启用 YukiHookLogger.Configs.isRecord 才能获取到调试日志数据。

    由于 Android 限制了数据传输大小的最大值,如果调试日志过多可能会造成 TransactionTooLargeException 异常。

    + 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 038f7e2e..d92b26bd 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/parasitic/activity/base/ModuleAppActivity.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html index 92897530..5517e025 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html @@ -23,12 +23,12 @@ } ModuleAppActivity - class | Yuki Hook API - +

    Notice

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

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

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
     

    Change Records

    v1.1.0 added

    Function Illustrate

    代理 Activity

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

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

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html index 8ebc1d08..d8becd7d 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html @@ -23,13 +23,13 @@ } ModuleAppCompatActivity - class | Yuki Hook API - +

    Notice

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

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

    ModuleAppCompatActivity - class

    open class ModuleAppCompatActivity : AppCompatActivity()
     

    Change Records

    v1.1.0 added

    Function Illustrate

    代理 AppCompatActivity

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

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

    在 (Xposed) 宿主环境需要重写 moduleTheme 设置 AppCompat 主题,否则会无法启动。

    moduleTheme - field

    open val moduleTheme: Int
     

    Change Records

    v1.1.0 added

    Function Illustrate

    设置当前代理的 Activity 主题。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html index 5a65fa44..bba86df3 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 ecd8c03f..06d4e518 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html @@ -23,7 +23,7 @@ } ModuleClassLoader - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    Change Records

    v1.1.2 added

    Function Illustrate

    自动处理 (Xposed) 宿主环境与模块环境的 ClassLoader

    companion object - object

    Change Records

    v1.1.2 added

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    添加到 Hook APP (宿主) Class 排除列表。

    排除列表中的 Class 将会使用宿主的 ClassLoader 进行装载。

    Pay Attention

    排除列表仅会在 (Xposed) 宿主环境生效。

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    Change Records

    v1.1.2 added

    Function Illustrate

    添加到模块 Class 排除列表。

    排除列表中的 Class 将会使用模块 (当前宿主环境的模块注入进程) 的 ClassLoader 进行装载。

    Pay Attention

    排除列表仅会在 (Xposed) 宿主环境生效。

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html index 58525a0a..ed11a055 100644 --- a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html +++ b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html @@ -23,7 +23,7 @@ } YukiHookModulePrefs - class | Yuki Hook API - + @@ -57,6 +57,6 @@

    Change Records

    v1.0.67 added

    Function Illustrate

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

    put - method

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

    Change Records

    v1.0.67 added

    Function Illustrate

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

    Notice

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

    clearCache - method

    fun clearCache()
     

    Change Records

    v1.0.5 added

    Function Illustrate

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

    无论是否开启 YukiHookAPI.Configs.isEnableModulePrefsCache

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

    下次将从 XSharedPreferences 重新读取。

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

    - + diff --git a/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html b/docs/en/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html index afbb54c4..32fd9e34 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 bf7f5afc..961c4299 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 0caa9023..0cfbb02c 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 c2b34867..bae51480 100644 --- a/docs/en/api/special-features/host-inject.html +++ b/docs/en/api/special-features/host-inject.html @@ -23,7 +23,7 @@ } Host Resource Injection Extension | Yuki Hook API - + @@ -165,6 +165,6 @@ "com.demo.controller.ModuleController" )

    You need to set it before the method of injecting Module App's resources into the Host App is executed to take effect.

    This function is only to solve the situation that Class with the same name may exist in the Host App and Module App, such as shared SDK and dependencies.

    In most cases, you will not use this function.

    Tips

    For more functions, please refer to ModuleClassLoader.

    - + diff --git a/docs/en/api/special-features/host-lifecycle.html b/docs/en/api/special-features/host-lifecycle.html index e1b0acc1..01a31155 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 - + @@ -74,6 +74,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 1fa38fe2..635ff252 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 - + @@ -61,7 +61,7 @@ it.throwable // Get exception // ... } -

    The above features require YukiHookLogger.Configs.isRecord to be enabled.

    Pay Attention

    The obtained log data is isolated from each other in the Host App and the Module App's process.

    You can only get the corresponding log data in the corresponding process.

    If you need to get these log data in real time anywhere, please refer to Xposed Module and Host Channel, Register Module App's Activity.

    You can also use YukiHookLogger.Configs.elements to customize the elements that debug logs display externally.

    This function requires YukiHookAPI.Configs to be configured in onInit of the Hook entry class.

    The following example

    override fun onInit() = configs {
    +

    The above features require YukiHookLogger.Configs.isRecord to be enabled.

    Pay Attention

    The obtained log data is isolated from each other in the Host App and the Module App's process.

    You can only get the corresponding log data in the corresponding process.

    If you need to get these log data in real time anywhere, please refer to Xposed Module and Host Channel, Register Module App's Activity.

    If you only want to get log data in real time through Module App or Host App, Please refer to the optional solution YukiHookDataChannel.obtainLoggerInMemoryData method.

    You can also use YukiHookLogger.Configs.elements to customize the elements that debug logs display externally.

    This function requires YukiHookAPI.Configs to be configured in onInit of the Hook entry class.

    The following example

    override fun onInit() = configs {
         debugLog {
             // ...
             elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
    @@ -69,6 +69,6 @@
         // ...
     }
     
    - + diff --git a/docs/en/api/special-features/reflection.html b/docs/en/api/special-features/reflection.html index e84e6e59..d0884294 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 - + @@ -865,6 +865,6 @@ param(BundleClass) }

    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 ffe027cf..031458cf 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 - + @@ -89,6 +89,6 @@ } }

    In the above example, the callback event A will be replaced by the callback event B, the key of the callback event C is not repeated with others, and the callback event D is in another Activity, So the final callback events B, C, and D can all be created successfully.

    Pay Attention

    A callback event with the same key will only call back the callback event registered in the Activity that the current Module App is displaying, such as test_key in the above, if OtherActivity is being displayed, then test_key in MainActivity will not be called back.

    The same key registers dataChannel in the same Activity but different Fragment, they will still be called back in the current Activity at the same time.

    In a Module App, you can only use Context of Activity to register dataChannel, you cannot use dataChannel in Application and Service.

    If you want to use dataChannel in Fragment, use activity?.dataChannel(...).

    Security Instructions

    In the Module environment, you can only receive communication data sent by the Host App with the specified package name and only send it to the Host App with the specified package name.

    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 b55c0157..e81a550c 100644 --- a/docs/en/api/special-features/xposed-storage.html +++ b/docs/en/api/special-features/xposed-storage.html @@ -23,7 +23,7 @@ } Xposed Module Data Storage | Yuki Hook API - + @@ -39,6 +39,6 @@ // Can also be used like this val testName = prefs.name("specify_file_name").getString("test_name", "default_value")

    If your project has a lot of fixed data that needs to be stored and read, it is recommended to use PrefsData to create templates.

    Tips

    For more functions, please refer to YukiHookModulePrefs, PrefsData.

    Use in PreferenceFragment

    Loading YukiHookModulePrefs in PreferenceFragment is described here.

    If your Module App uses PreferenceFragmentCompat, you can now start migrating its extends ModulePreferenceFragment.

    Pay Attention

    You must extends ModulePreferenceFragment to implement the module storage function of YukiHookModulePrefs.

    Tips

    For more functions, please refer to ModulePreferenceFragment.

    - + diff --git a/docs/en/config/api-example.html b/docs/en/config/api-example.html index b4d37260..aed177b9 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 - + @@ -209,6 +209,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 3ba8b7b1..75c583fd 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 - + @@ -259,7 +259,15 @@ modulePrefs.getBoolean("test_data") } } -
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    Abnormal

    An unsupported storage type was passed in when using the get or put methods of YukiHookModulePrefs or the wait or put methods of YukiHookDataChannel.

    Solution

    The supported types of YukiHookModulePrefs are only String, Set<String>, Int, Float, Long, Boolean, please pass in the supported types.

    The supported types of YukiHookDataChannel are the types restricted by Intent.putExtra, please pass in the supported types.

    exception

    IllegalStateException

    YukiHookDataChannel cannot be used in zygote

    Abnormal

    YukiHookDataChannel is used in loadZygote.

    The following example

    loadZygote {
    +
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    Abnormal

    An unsupported storage type was passed in when using the get or put methods of YukiHookModulePrefs or the wait or put methods of YukiHookDataChannel.

    Solution

    The supported types of YukiHookModulePrefs are only String, Set<String>, Int, Float, Long, Boolean, please pass in the supported types.

    The supported types of YukiHookDataChannel are the types restricted by Intent.putExtra, please pass in the supported types.

    IllegalStateException

    loadApp/loadZygote/loadSystem/withProcess method need a "NAME" param

    Abnormal

    The variable array variable parameter that needs to be filled is missing in loadApp, loadZygote, loadSystem, withProcess.

    The following example

    // <Scenario 1>
    +loadApp()
    +// <Scenario 2>
    +loadZygote()
    +// <Scenario 3>
    +loadSystem()
    +// <Scenario 4>
    +withProcess()
    +

    Solution

    Please see the usage in PackageParam to use this function correctly.

    exception

    IllegalStateException

    YukiHookDataChannel cannot be used in zygote

    Abnormal

    YukiHookDataChannel is used in loadZygote.

    The following example

    loadZygote {
         // This variable is called
         dataChannel...
     }
    @@ -386,6 +394,6 @@
         }.get()
     }
     

    Solution

    Since the cache will store the found Class name in SharedPreferences, but the data directory does not exist in the System Framework, so please do not use this function in the System Framework.

    - + diff --git a/docs/en/config/api-using.html b/docs/en/config/api-using.html index af85b68f..6251a7eb 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 9d180216..efaad345 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 05966d79..e1073d27 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 bbb3b7a5..45a7e499 100644 --- a/docs/en/guide/example.html +++ b/docs/en/guide/example.html @@ -23,7 +23,7 @@ } Usage Example | Yuki Hook API - + @@ -313,6 +313,6 @@ // Your code here. }

    Tips

    For more functions, please refer to YukiHookAPI.Status.

    Notice

    If the activation state of TaiChi and Wuji is included in the Module App activation judgment, the Application of the Module App must be extends ModuleApplication or ModuleApplication must be used directly;

    The API after 1.0.91 has modified the activation logic judgment method, now you can use this API in the Module App and Host App at the same time;

    Need to make sure YukiHookAPI.Configs.isEnableHookModuleStatus is enabled;

    Except for Hook Frameworks that provide standard APIs, Module Apps may not be able to determine whether they are activated in other cases.

    - + diff --git a/docs/en/guide/home.html b/docs/en/guide/home.html index a3c5d497..819c9dab 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 windowNot test, no longer recommended
    - + diff --git a/docs/en/guide/knowledge.html b/docs/en/guide/knowledge.html index d689626a..0380f39c 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 Tai Chi.

    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 Tai Chi/Wuji, VirtualXposed/SandVXposed.

    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 9700e434..3ab3bb38 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 - + @@ -211,6 +211,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 a886e557..c35498bf 100644 --- a/docs/en/guide/quick-start.html +++ b/docs/en/guide/quick-start.html @@ -23,7 +23,7 @@ } Quick Start | Yuki Hook API - + @@ -97,6 +97,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

    YukiHookModuleStatus, YukiHookModulePrefs, YukiHookDataChannel and Resources Hook functionality will not work when using a custom Hook Framework instead of the full Xposed Module.

    - + diff --git a/docs/en/index.html b/docs/en/index.html index d93d9c6c..2864b4b9 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 0b2a86fc..d1cc8e93 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 0c6595f4..ff58b0ae 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 950cbc35..ab86961a 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-2022 HighCapable

    - + diff --git a/docs/zh-cn/about/changelog.html b/docs/zh-cn/about/changelog.html index a1f3c733..e7653cef 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.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 框架的名称和版本号
    • 新增 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.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 框架的名称和版本号
    • 新增 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 8a9e01f9..96288503 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 6c499a51..9a800ee1 100644 --- a/docs/zh-cn/about/future.html +++ b/docs/zh-cn/about/future.html @@ -23,11 +23,11 @@ } 展望未来 | Yuki Hook API - +

    展望未来

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

    未解决的问题

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

    YukiHookModulePrefs

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

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

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

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

    未来的计划

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

    支持独立使用的 Lite 版本

    待讨论

    目前 API 只支持通过自动处理程序绑定到 xposed_init,若您不喜欢自动处理程序,一定要自己实现模块装载入口,未来会按照需求人数推出仅有 API 功能的 Lite 版本,你可向我们提出 issues

    API 已经提供了 Xposed 原生 API 监听接口,你可以 在这里 找到或查看 Demo 的实现方法。

    支持更多 Hook Framework

    作为 API 来讲,目前仅仅对接 XposedBridge 作为兼容层,还是有一定的局限性。

    大部分 inline hook 没有 Java 兼容层,后期可能会考虑 native hookJava 兼容层适配。

    - + diff --git a/docs/zh-cn/api/home.html b/docs/zh-cn/api/home.html index d945dabd..c28e4fa3 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 649f6baa..26489f7c 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 - + @@ -125,6 +125,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 4bd383f6..03b91016 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 34da6527..40b87c50 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 e42bae2c..2c05ba32 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,13 +23,13 @@ } GenericClass - class | Yuki Hook API - +

    GenericClass - class

    class GenericClass internal constructor(private val type: ParameterizedType)
     

    变更记录

    v1.1.0 新增

    功能描述

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
     

    变更记录

    v1.1.0 新增

    功能描述

    获得泛型参数数组下标的 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 f66187bb..d0899084 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 1eb09552..49dd7330 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 250da4bf..351f7149 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 添加

    功能描述

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null): Class<*>
     

    变更记录

    v1.0.70 新增

    功能描述

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null): Class<*>?
     

    变更记录

    v1.1.0 新增

    功能描述

    获取匹配的实体类。

    使用当前 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 02c3fff5..f10d593e 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 6666b149..19231d77 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/YukiResourcesHookCreator.html @@ -23,7 +23,7 @@ } YukiResourcesHookCreator - class | Yuki Hook API - + @@ -122,6 +122,6 @@

    变更记录

    v1.0.80 新增

    功能描述

    添加执行 Hook 需要满足的条件,不满足条件将直接停止 Hook。

    onHookingFailure - method

    fun onHookingFailure(result: (Throwable) -> Unit): Result
     

    变更记录

    v1.0.80 新增

    功能描述

    监听 Hook 过程发生错误的回调方法。

    ignoredHookingFailure - method

    fun ignoredHookingFailure(): Result
     

    变更记录

    v1.0.80 新增

    功能描述

    忽略 Hook 过程出现的错误。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.html index 4f5856ce..92b7a339 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 33ab3251..8eacf91a 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 8a95f2f8..66f2a5f6 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 5f61b473..36311b61 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/classes/DexClassFinder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/core/finder/classes/DexClassFinder.html index 33ad500b..99066b19 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 ce25d9cb..183f9459 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 - + @@ -35,6 +35,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    特别注意

    无参 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 7c1de1ce..af6f78c1 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 - + @@ -33,6 +33,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 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 f0cbeaaf..e88b4872 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 f6210d90..eff8af5d 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 - + @@ -38,6 +38,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    设置 Method 名称条件。

    paramCount - method

    fun paramCount(numRange: IntRange)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
     

    变更记录

    v1.1.0 新增

    功能描述

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    - + 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 251e3546..6c2a5710 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 8c971853..9cdeafef 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 - + @@ -114,6 +114,6 @@

    变更记录

    v1.0.2 新增

    v1.1.0 修改

    新增 constructor 参数

    功能描述

    Constructor 实例处理类。

    call - method

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

    变更记录

    v1.0.2 新增

    功能描述

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

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

    变更记录

    v1.0.2 新增

    功能描述

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - + 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 a58c7e46..45e6ca84 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 - + @@ -110,6 +110,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 f411fd65..9e7a7cd7 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 - + @@ -129,6 +129,6 @@

    变更记录

    v1.0.65 新增

    v1.0.68 修改

    修改 callBooleanboolean

    功能描述

    执行 Method,指定 Boolean 返回值类型。

    array - method

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

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 Array 返回值类型。

    list - method

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

    变更记录

    v1.0.68 新增

    功能描述

    执行 Method,指定 List 返回值类型。

    - + 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 1402dcf0..4923bddd 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 9c468993..dd277d0a 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 - + @@ -87,6 +87,6 @@

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(result: (index: Int, constructor: Constructor<*>) -> Unit)
     

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(result: (index: Int, field: Field) -> Unit)
     

    变更记录

    v1.0.70 新增

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    遍历当前类中的所有变量。

    - + 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 89f6bc2c..d367a34b 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.html @@ -23,7 +23,7 @@ } YukiHookFactory - kt | Yuki Hook API - + @@ -39,6 +39,6 @@

    变更记录

    v1.1.0 新增

    功能描述

    向 Hook APP (宿主) ContextResources 注入当前 Xposed 模块的资源。

    注入成功后,你就可以直接使用例如 ImageView.setImageResourceResources.getString 装载当前 Xposed 模块的资源 ID。

    注入的资源作用域仅限当前 ContextResources,你需要在每个用到宿主 ContextResources 的地方重复调用此方法进行注入才能使用。

    特别注意

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    Context.registerModuleAppActivities - ext-method

    fun Context.registerModuleAppActivities(proxy: Any?)
     

    变更记录

    v1.1.0 新增

    功能描述

    向 Hook APP (宿主) 注册当前 Xposed 模块的 Activity

    注册成功后,你就可以直接使用 Context.startActivity 来启动未在宿主中注册的 Activity

    使用此方法会在未注册的 Activity 在 Hook APP (宿主) 中启动时自动调用 injectModuleAppResources 注入当前 Xposed 模块的资源。

    你要将需要在宿主启动的 Activity 继承于 ModuleAppActivityModuleAppCompatActivity

    特别注意

    只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。

    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 5c87ffea..08296412 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 - + @@ -32,7 +32,7 @@

    变更记录

    v1.1.0 新增

    功能描述

    仅使用 android.util.Log

    XPOSEDBRIDGE - enum

    XPOSEDBRIDGE
     

    变更记录

    v1.1.0 新增

    功能描述

    仅使用 XposedBridge.log

    特别注意

    只能在 (Xposed) 宿主环境中使用,模块环境将不生效。

    SCOPE - enum

    SCOPE
     

    变更记录

    v1.1.0 新增

    功能描述

    分区使用。

    (Xposed) 宿主环境仅使用 XPOSEDBRIDGE

    模块环境仅使用 LOGD

    BOTH - enum

    BOTH
    -

    变更记录

    v1.1.0 新增

    功能描述

    同时使用。

    (Xposed) 宿主环境使用 LOGDXPOSEDBRIDGE

    模块环境仅使用 LOGD

    YukiLoggerData - class

    class YukiLoggerData internal constructor(
    +

    变更记录

    v1.1.0 新增

    功能描述

    同时使用。

    (Xposed) 宿主环境使用 LOGDXPOSEDBRIDGE

    模块环境仅使用 LOGD

    YukiLoggerData - class

    data class YukiLoggerData internal constructor(
         var timestamp: Long,
         var time: String,
         var tag: String,
    @@ -41,10 +41,10 @@
         var userId: Int,
         var msg: String,
         var throwable: Throwable?
    -)
    -

    变更记录

    v1.1.2 新增

    功能描述

    调试日志数据实现类。

    YukiHookLogger - object

    object YukiHookLogger
    -

    变更记录

    v1.1.0 新增

    功能描述

    调试日志实现类。

    inMemoryData - field

    val inMemoryData: HashSet<YukiLoggerData>
    -

    变更记录

    v1.1.2 新增

    功能描述

    当前全部已记录的日志数据。

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    contents - field

    val contents: String
    +) : Serializable
    +

    变更记录

    v1.1.2 新增

    v1.1.4 修改

    实现 Serializable 接口并标识为 data class

    功能描述

    调试日志数据实现类。

    YukiHookLogger - object

    object YukiHookLogger
    +

    变更记录

    v1.1.0 新增

    功能描述

    调试日志实现类。

    inMemoryData - field

    val inMemoryData: ArrayList<YukiLoggerData>
    +

    变更记录

    v1.1.2 新增

    v1.1.4 修改

    类型由 HashSet 修改为 ArrayList

    功能描述

    当前全部已记录的日志数据。

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    contents - field

    val contents: String
     

    变更记录

    v1.1.0 新增

    功能描述

    获取当前日志文件内容。

    如果当前没有已记录的日志会返回空字符串。

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    clear - method

    fun clear()
     

    变更记录

    v1.1.0 新增

    功能描述

    清除全部已记录的日志。

    你也可以直接获取 inMemoryData 来清除。

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    saveToFile - method

    fun saveToFile(fileName: String)
     

    变更记录

    v1.1.0 新增

    功能描述

    保存当前日志到文件。

    若当前未开启 Configs.isRecord 或记录为空则不会进行任何操作。

    日志文件会追加到 fileName 的文件结尾,若文件不存在会自动创建。

    特别注意

    文件读写权限取决于当前宿主、模块已获取的权限。

    Configs - object

    object Configs
    @@ -65,6 +65,6 @@
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    LogcatXposedBridge 打印日志,级别 I

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerW - method

    fun loggerW(tag: String, msg: String, type: LoggerType)
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    LogcatXposedBridge 打印日志,级别 W

    tag 的默认参数为 YukiHookAPI.Configs.debugTag,你可以进行自定义。

    loggerE - method

    fun loggerE(tag: String, msg: String, e: Throwable?, type: LoggerType)
     

    变更记录

    v1.0 添加

    v1.1.0 修改

    新增 type 参数

    功能描述

    LogcatXposedBridge 打印日志,级别 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 9f5c4966..89444442 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 - + @@ -113,6 +113,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 331a9b35..f99232ce 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 - + @@ -48,7 +48,9 @@

    变更记录

    v1.0.87 新增

    功能描述

    刷新当前 Xposed 模块自身 Resources

    onAppLifecycle - method

    inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit)
     

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 生命周期装载事件。

    注意

    loadZygote 中不会被装载,仅会在 loadSystemloadApp 中装载。

    作为 Hook API 装载时请使用原生的 Application 实现生命周期监听。

    loadApp - method

    inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
     
    fun loadApp(name: String, hooker: YukiBaseHooker)
    -

    变更记录

    v1.0 添加

    v1.0.80 修改

    将方法体进行 inline

    功能描述

    装载并 Hook 指定包名的 APP。

    name 为 APP 的包名,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    装载并 Hook 指定、全部包名的 APP。

    若要装载 APP Zygote 事件,请使用 loadZygote

    若要 Hook 系统框架,请使用 loadSystem

    功能示例

    你可以使用 loadApplambda 方法体形式或直接装载一个 Hooker。

    示例如下

    // 使用 lambda
    +
    inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadApp(name: String, vararg hooker: YukiBaseHooker)
    +

    变更记录

    v1.0 添加

    v1.0.80 修改

    将方法体进行 inline

    v1.1.4 修改

    新增两个方法,可以同时装载多个 APP 与子 Hooker

    功能描述

    装载并 Hook 指定包名的 APP。

    name 为 APP 的包名,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    装载并 Hook 指定、全部包名的 APP。

    若要装载 APP Zygote 事件,请使用 loadZygote

    若要 Hook 系统框架,请使用 loadSystem

    功能示例

    你可以使用 loadApplambda 方法体形式或直接装载一个 Hooker。

    示例如下

    // 使用 lambda
     loadApp(name = "com.example.test") {
         // Your code here.
     }
    @@ -60,13 +62,23 @@
     }
     // 使用 Hooker
     loadApp(hooker = CustomHooker)
    -

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
    +

    若想要同时装载多个需要 Hook 的 APP,可以直接使用如下方式。

    示例如下

    // 同时装载多个需要 Hook 的 APP
    +loadApp("com.example.test", "com.example.next") {
    +    // Your code here.
    +}
    +

    若想要同时装载多个子 Hooker,可以直接使用如下方式,但此时只能指定一个需要 Hook 的 APP。

    示例如下

    // 同时装载多个子 Hooker
    +loadApp("com.example.test", CustomHooker1, CustomHooker2)
    +

    loadZygote - method

    inline fun loadZygote(initiate: PackageParam.() -> Unit)
     
    fun loadZygote(hooker: YukiBaseHooker)
    -

    变更记录

    v1.0.80 新增

    功能描述

    装载 APP Zygote 事件。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
    +
    fun loadZygote(vararg hooker: YukiBaseHooker)
    +

    变更记录

    v1.0.80 新增

    v1.1.4 修改

    新增一个方法,可以同时装载多个子 Hooker

    功能描述

    装载 APP Zygote 事件。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadSystem - method

    inline fun loadSystem(initiate: PackageParam.() -> Unit)
     
    fun loadSystem(hooker: YukiBaseHooker)
    -

    变更记录

    v1.0.82 新增

    功能描述

    装载并 Hook 系统框架。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
    +
    fun loadSystem(vararg hooker: YukiBaseHooker)
    +

    变更记录

    v1.0.82 新增

    v1.1.4 修改

    新增一个方法,可以同时装载多个子 Hooker

    功能描述

    装载并 Hook 系统框架。

    方法中的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    withProcess - method

    inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
     
    fun withProcess(name: String, hooker: YukiBaseHooker)
    -

    变更记录

    v1.0.70 新增

    功能描述

    装载并 Hook APP 的指定进程。

    name 为 APP 的进程名称,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
    +
    fun withProcess(vararg name: String, hooker: YukiBaseHooker)
    +
    fun withProcess(name: String, vararg hooker: YukiBaseHooker)
    +

    变更记录

    v1.0.70 新增

    v1.1.4 修改

    新增两个方法,可以同时装载多个进程与子 Hooker

    功能描述

    装载并 Hook APP 的指定进程。

    name 为 APP 的进程名称,后方的两个参数一个可作为 lambda 方法体使用,一个可以直接装载子 Hooker。

    loadHooker - method

    fun loadHooker(hooker: YukiBaseHooker)
     

    变更记录

    v1.0 添加

    功能描述

    装载 Hook 子类。

    你可以填入 hooker 在 Hooker 中继续装载 Hooker。

    searchClass - method

    inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
     

    变更记录

    v1.1.0 新增

    功能描述

    通过 appClassLoader 按指定条件查找并得到当前 Hook APP Dex 中的 Class

    特别注意

    此方法在 Class 数量过多及查找条件复杂时会非常耗时。

    建议启用 async 或设置 name 参数,name 参数将在 Hook APP (宿主) 不同版本中自动进行本地缓存以提升效率。

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    String+VariousClass.clazz - i-ext-field

    变更记录

    v1.0 添加

    v1.1.0 作废

    请转移到 toClass(...) 方法

    String.hasClass - i-ext-field

    变更记录

    v1.0 添加

    v1.1.0 作废

    请转移到 hasClass(...) 方法

    String+VariousClass.toClass - i-ext-method

    fun String.toClass(loader: ClassLoader?): Class<*>
     
    fun VariousClass.toClass(loader: ClassLoader?): Class<*>
    @@ -131,6 +143,6 @@
     

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 装载 Application.onTrimMemory

    onConfigurationChanged - method

    fun onConfigurationChanged(result: (self: Application, config: Configuration) -> Unit)
     

    变更记录

    v1.0.88 新增

    功能描述

    监听当前 Hook APP 装载 Application.onConfigurationChanged

    registerReceiver - method

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

    变更记录

    v1.0.88 新增

    功能描述

    注册系统广播监听。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html index cb7411c1..2511724c 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.html @@ -23,11 +23,11 @@ } ComponentTypeFactory - kt | Yuki Hook API - +

    ComponentTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html index d4bed35c..b3a730b0 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/GraphicsTypeFactory.html @@ -23,11 +23,11 @@ } GraphicsTypeFactory - kt | Yuki Hook API - +

    GraphicsTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html index ee42f5ab..3e4d3371 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/android/ViewTypeFactory.html @@ -23,11 +23,11 @@ } ViewTypeFactory - kt | Yuki Hook API - +

    ViewTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/defined/DefinedTypeFactory.html index 98a982f9..85a309d5 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 36c161ac..8d842c9e 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.html @@ -23,11 +23,11 @@ } VariableTypeFactory - kt | Yuki Hook API - +

    VariableTypeFactory - kt

    变更记录

    v1.0 添加

    功能描述

    这是一个预置 Hook 类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication.html index c109c036..8a4dea10 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/dummy/YukiModuleResources.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html index fd1e785f..353e3344 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiModuleResources.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/dummy/YukiResForwarder.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html index 6b87df5d..d0e52ac6 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResForwarder.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/dummy/YukiResources.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html index 07be2f0f..798fd528 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/YukiResources.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/dummy/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/bridge/event/YukiXposedEvent.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/bridge/event/YukiXposedEvent.html index 8fd6176d..c4dd6f7e 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/channel/YukiHookDataChannel.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.html index 5b35e593..1e94abed 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,11 +23,11 @@ } YukiHookDataChannel - class | Yuki Hook API - + -

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
    +    

    YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()
     

    变更记录

    v1.0.88 新增

    功能描述

    实现 Xposed 模块的数据通讯桥。

    通过模块与宿主相互注册 BroadcastReceiver 来实现数据的交互。

    模块需要将 Application 继承于 ModuleApplication 来实现此功能。

    特别注意

    模块与宿主需要保持存活状态,否则无法建立通讯。

    NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String, private val isSecure: Boolean)
     

    变更记录

    v1.0.88 新增

    v1.0.90 修改

    新增 isSecure 参数

    功能描述

    YukiHookDataChannel 命名空间。

    with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace
     

    变更记录

    v1.0.88 新增

    功能描述

    创建一个调用空间。

    put - method

    fun <T> put(key: String, value: T)
    @@ -38,7 +38,8 @@
     
    fun <T> wait(data: ChannelData<T>, result: (value: T) -> Unit)
     

    变更记录

    v1.0.88 新增

    v1.0.90 修改

    移除默认值 value

    功能描述

    获取键值数据。

    wait - method

    fun wait(key: String, callback: () -> Unit)
     

    变更记录

    v1.0.88 新增

    功能描述

    仅获取监听结果,不获取键值数据。

    特别注意

    仅限使用 VALUE_WAIT_FOR_LISTENER 发送的监听才能被接收。

    checkingVersionEquals - method

    fun checkingVersionEquals(result: (Boolean) -> Unit)
    -

    变更记录

    v1.0.88 新增

    功能描述

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    - +

    变更记录

    v1.0.88 新增

    功能描述

    获取模块与宿主的版本是否匹配。

    通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

    obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(result: (ArrayList<YukiLoggerData>) -> Unit)
    +

    变更记录

    v1.1.4 新增

    功能描述

    获取模块与宿主之间的 ArrayList<YukiLoggerData> 数据。

    由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。

    特别注意

    模块与宿主必须启用 YukiHookLogger.Configs.isRecord 才能获取到调试日志数据。

    由于 Android 限制了数据传输大小的最大值,如果调试日志过多可能会造成 TransactionTooLargeException 异常。

    + 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 bff8397c..d42de866 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/parasitic/activity/base/ModuleAppActivity.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html index 2797642a..fe0c5d9a 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppActivity.html @@ -23,12 +23,12 @@ } ModuleAppActivity - class | Yuki Hook API - +

    ModuleAppActivity - class

    open class ModuleAppActivity : Activity()
     

    变更记录

    v1.1.0 新增

    功能描述

    代理 Activity

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

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

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html index 6ab9a4d6..fa67c03a 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/activity/base/ModuleAppCompatActivity.html @@ -23,13 +23,13 @@ } ModuleAppCompatActivity - class | Yuki Hook API - +

    ModuleAppCompatActivity - class

    open class ModuleAppCompatActivity : AppCompatActivity()
     

    变更记录

    v1.1.0 新增

    功能描述

    代理 AppCompatActivity

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

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

    在 (Xposed) 宿主环境需要重写 moduleTheme 设置 AppCompat 主题,否则会无法启动。

    moduleTheme - field

    open val moduleTheme: Int
     

    变更记录

    v1.1.0 新增

    功能描述

    设置当前代理的 Activity 主题。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/context/wrapper/ModuleContextThemeWrapper.html index 2d58318a..578975fe 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 3b1807c0..078368f7 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/parasitic/reference/ModuleClassLoader.html @@ -23,7 +23,7 @@ } ModuleClassLoader - class | Yuki Hook API - + @@ -31,6 +31,6 @@

    变更记录

    v1.1.2 新增

    功能描述

    自动处理 (Xposed) 宿主环境与模块环境的 ClassLoader

    companion object - object

    变更记录

    v1.1.2 新增

    excludeHostClasses - method

    fun excludeHostClasses(vararg name: String)
     

    变更记录

    v1.1.2 新增

    功能描述

    添加到 Hook APP (宿主) Class 排除列表。

    排除列表中的 Class 将会使用宿主的 ClassLoader 进行装载。

    特别注意

    排除列表仅会在 (Xposed) 宿主环境生效。

    excludeModuleClasses - method

    fun excludeModuleClasses(vararg name: String)
     

    变更记录

    v1.1.2 新增

    功能描述

    添加到模块 Class 排除列表。

    排除列表中的 Class 将会使用模块 (当前宿主环境的模块注入进程) 的 ClassLoader 进行装载。

    特别注意

    排除列表仅会在 (Xposed) 宿主环境生效。

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html index 4781fe06..2845c232 100644 --- a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html +++ b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/YukiHookModulePrefs.html @@ -23,7 +23,7 @@ } YukiHookModulePrefs - class | Yuki Hook API - + @@ -57,6 +57,6 @@

    变更记录

    v1.0.67 新增

    功能描述

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

    put - method

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

    变更记录

    v1.0.67 新增

    功能描述

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

    注意

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

    clearCache - method

    fun clearCache()
     

    变更记录

    v1.0.5 新增

    功能描述

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

    无论是否开启 YukiHookAPI.Configs.isEnableModulePrefsCache

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

    下次将从 XSharedPreferences 重新读取。

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

    - + diff --git a/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html b/docs/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/prefs/data/PrefsData.html index edd74c7c..a7582204 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 269cb9c9..14390978 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 843a5d30..d7abde62 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 02e275e9..baf1bb67 100644 --- a/docs/zh-cn/api/special-features/host-inject.html +++ b/docs/zh-cn/api/special-features/host-inject.html @@ -23,7 +23,7 @@ } 宿主资源注入扩展 | Yuki Hook API - + @@ -159,6 +159,6 @@ "com.demo.controller.ModuleController" )

    你需要在向宿主注入模块资源的方法执行之前进行设置才能生效。

    此功能仅为解决宿主与模块中可能存在同名的 Class 情况,例如共用的 SDK 以及依赖,在大部分情况下你不会用到此功能。

    小提示

    更多功能请参考 ModuleClassLoader

    - + diff --git a/docs/zh-cn/api/special-features/host-lifecycle.html b/docs/zh-cn/api/special-features/host-lifecycle.html index e9fddede..74b91021 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 - + @@ -73,6 +73,6 @@ } }

    小提示

    更多功能请参考 AppLifecycle

    - + diff --git a/docs/zh-cn/api/special-features/logger.html b/docs/zh-cn/api/special-features/logger.html index d90d4325..f3cd01b0 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 - + @@ -59,7 +59,7 @@ it.throwable // 获取异常 // ... } -

    以上功能需要启用 YukiHookLogger.Configs.isRecord

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    你只能在对应的进程中获取对应的日志数据,如果你需要在任何地方实时得到这些日志数据,请参考 Xposed 模块与宿主通讯桥注册模块 Activity

    你还可以使用 YukiHookLogger.Configs.elements 自定义调试日志对外显示的元素。

    此功能需要在 Hook 入口类的 onInit 中对 YukiHookAPI.Configs 进行配置。

    示例如下

    override fun onInit() = configs {
    +

    以上功能需要启用 YukiHookLogger.Configs.isRecord

    特别注意

    获取到的日志数据在 Hook APP (宿主) 及模块进程中是相互隔离的。

    你只能在对应的进程中获取对应的日志数据,如果你需要在任何地方实时得到这些日志数据,请参考 Xposed 模块与宿主通讯桥注册模块 Activity

    如果你只想通过模块或宿主来实时得到日志数据,请参考可选方案 YukiHookDataChannel.obtainLoggerInMemoryData 方法。

    你还可以使用 YukiHookLogger.Configs.elements 自定义调试日志对外显示的元素。

    此功能需要在 Hook 入口类的 onInit 中对 YukiHookAPI.Configs 进行配置。

    示例如下

    override fun onInit() = configs {
         debugLog {
             // ...
             elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
    @@ -67,6 +67,6 @@
         // ...
     }
     

    小提示

    更多功能请参考 YukiHookLogger.inMemoryDataYukiHookLogger.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 367929c2..886de966 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 - + @@ -839,6 +839,6 @@ param(BundleClass) }

    小提示

    更多类型可查看 ComponentTypeFactoryGraphicsTypeFactoryViewTypeFactoryVariableTypeFactory

    同时,欢迎你能贡献更多的常用类型。

    - + diff --git a/docs/zh-cn/api/special-features/xposed-channel.html b/docs/zh-cn/api/special-features/xposed-channel.html index 760f17df..d24f67b7 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 - + @@ -89,6 +89,6 @@ } }

    在上述示例中,回调事件 A 会被回调事件 B 替换掉,回调事件 C 的 key 不与其它重复,回调事件 D 在另一个 Activity 中,所以最终回调事件 B、C、D 都可被创建成功。

    特别注意

    一个相同 key 的回调事件只会回调当前模块正在显示的 Activity 中注册的回调事件,例如上述中的 test_key,如果 OtherActivity 正在显示,那么 MainActivity 中的 test_key 就不会被回调。

    相同的 key 在同一个 Activity 不同的 Fragment 中注册 dataChannel,它们依然会在当前 Activity 中同时被回调。

    在模块中,你只能使用 ActivityContext 注册 dataChannel,你不能在 Application 以及 Service 等地方使用 dataChannel

    若要在 Fragment 中使用 dataChannel,请使用 activity?.dataChannel(...)

    安全性说明

    在模块环境中,你只能接收指定包名的宿主发送的通讯数据且只能发送给指定包名的宿主

    特别注意

    为了进一步防止广播滥用,通讯数据中 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 c2abcd3e..d4584e03 100644 --- a/docs/zh-cn/api/special-features/xposed-storage.html +++ b/docs/zh-cn/api/special-features/xposed-storage.html @@ -23,7 +23,7 @@ } Xposed 模块数据存储 | Yuki Hook API - + @@ -39,6 +39,6 @@ // 也可以这样用 val testName = prefs.name("specify_file_name").getString("test_name", "default_value")

    若你的项目中有大量的固定数据需要存储和读取,推荐使用 PrefsData 来创建模板。

    小提示

    更多功能请参考 YukiHookModulePrefsPrefsData

    在 PreferenceFragment 中使用

    这里描述了在 PreferenceFragment 中装载 YukiHookModulePrefs 的场景。

    若你的模块使用了 PreferenceFragmentCompat,你现在可以将其继承类开始迁移到 ModulePreferenceFragment

    特别注意

    你必须继承 ModulePreferenceFragment 才能实现 YukiHookModulePrefs 的模块存储功能。

    小提示

    更多功能请参考 ModulePreferenceFragment

    - + diff --git a/docs/zh-cn/config/api-example.html b/docs/zh-cn/config/api-example.html index c71333fe..8f64feb4 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 - + @@ -207,6 +207,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 ddcace3c..ef10dea4 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 - + @@ -257,18 +257,26 @@ modulePrefs.getBoolean("test_data") } } -
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    异常原因

    在使用 YukiHookModulePrefsgetput 方法或 YukiHookDataChannelwaitput 方法时传入了不支持的存储类型。

    解决方案

    YukiHookModulePrefs 支持的类型只有 StringSet<String>IntFloatLongBoolean,请传入支持的类型。

    YukiHookDataChannel 支持的类型为 Intent.putExtra 限制的类型,请传入支持的类型。

    exception

    IllegalStateException

    YukiHookDataChannel cannot used in zygote

    异常原因

    loadZygote 中使用了 YukiHookDataChannel

    示例如下

    loadZygote {
    +
    exception

    IllegalStateException

    Key-Value type TYPE is not allowed

    异常原因

    在使用 YukiHookModulePrefsgetput 方法或 YukiHookDataChannelwaitput 方法时传入了不支持的存储类型。

    解决方案

    YukiHookModulePrefs 支持的类型只有 StringSet<String>IntFloatLongBoolean,请传入支持的类型。

    YukiHookDataChannel 支持的类型为 Intent.putExtra 限制的类型,请传入支持的类型。

    exception

    IllegalStateException

    loadApp/loadZygote/loadSystem/withProcess method need a "NAME" param

    异常原因

    loadApploadZygoteloadSystemwithProcess 中缺少了需要填写的可变数组变量参数。

    示例如下

    // <情景 1>
    +loadApp()
    +// <情景 2> 
    +loadZygote()
    +// <情景 3>
    +loadSystem()
    +// <情景 4>
    +withProcess()
    +

    解决方案

    请查看 PackageParam 中的用法正确地使用此功能。

    exception

    IllegalStateException

    YukiHookDataChannel cannot used in zygote

    异常原因

    loadZygote 中使用了 YukiHookDataChannel

    示例如下

    loadZygote {
         // 调用了此变量
         dataChannel...
     }
    -

    解决方案

    YukiHookDataChannel 只能在 loadSystemloadApp 中使用。

    exception

    IllegalStateException

    Custom Hooking Members is empty

    异常原因

    MemberHookCreator 中调用 members() 但是未设置需要 Hook 的 Member 实例。

    示例如下

    injectMember {
    +

    解决方案

    YukiHookDataChannel 只能在 loadSystemloadApp 中使用。

    exception

    IllegalStateException

    Custom Hooking Members is empty

    异常原因

    MemberHookCreator 中调用 members() 但是未设置需要 Hook 的 Member 实例。

    示例如下

    injectMember {
         // 括号里的方法参数被留空了
         members()
         afterHook {
             // ...
         }
     }
    -

    解决方案

    若要使用 members() 设置自定义 Hook 方法,你必须保证其方法参数里的 Member 数组对象不能为空。

    exception

    IllegalStateException

    HookParam Method args index must be >= 0

    异常原因

    HookParam 中调用 args().last() 但是目标 param 为空或 args 中的 index 设置了小于 0 的数值。

    示例如下

    injectMember {
    +

    解决方案

    若要使用 members() 设置自定义 Hook 方法,你必须保证其方法参数里的 Member 数组对象不能为空。

    exception

    IllegalStateException

    HookParam Method args index must be >= 0

    异常原因

    HookParam 中调用 args().last() 但是目标 param 为空或 args 中的 index 设置了小于 0 的数值。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 假设 param 是空的
    @@ -277,7 +285,7 @@
             args(index = -5)...
         }
     }
    -

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,且不能对 args 的下标设置小于 0 的数值。

    exception

    IllegalStateException

    HookParam instance got null! Is this a static member?

    异常原因

    HookParam 中调用 instance 变量或 instance 方法但获取不到当前实例的对象。

    示例如下

    injectMember {
    +

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,且不能对 args 的下标设置小于 0 的数值。

    exception

    IllegalStateException

    HookParam instance got null! Is this a static member?

    异常原因

    HookParam 中调用 instance 变量或 instance 方法但获取不到当前实例的对象。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此变量
    @@ -286,68 +294,68 @@
             instance<Any>()...
         }
     }
    -

    解决方案

    请确认你 Hook 的方法是否为静态类型,静态类型的方法没有实例,不能使用此功能,若非静态方法,请检查实例是否已经销毁。

    exception

    IllegalStateException

    Current hooked Member args is null

    异常原因

    HookParam 中调用 args 变量但获取不到当前实例方法、构造方法的参数数组。

    示例如下

    injectMember {
    +

    解决方案

    请确认你 Hook 的方法是否为静态类型,静态类型的方法没有实例,不能使用此功能,若非静态方法,请检查实例是否已经销毁。

    exception

    IllegalStateException

    Current hooked Member args is null

    异常原因

    HookParam 中调用 args 变量但获取不到当前实例方法、构造方法的参数数组。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此变量
             args...
         }
     }
    -

    解决方案

    这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current hooked Member is null

    异常原因

    HookParam 中调用 member 变量但获取不到当前实例的方法、构造方法实例。

    示例如下

    injectMember {
    +

    解决方案

    这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current hooked Member is null

    异常原因

    HookParam 中调用 member 变量但获取不到当前实例的方法、构造方法实例。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此变量
             member...
         }
     }
    -

    解决方案

    这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current hooked Member is not a Method

    异常原因

    HookParam 中调用 method 变量但获取不到当前实例的方法实例。

    示例如下

    injectMember {
    +

    解决方案

    这种问题一般不会发生,真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current hooked Member is not a Method

    异常原因

    HookParam 中调用 method 变量但获取不到当前实例的方法实例。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此变量
             method...
         }
     }
    -

    解决方案

    请确认你 Hook 的方法是构造方法还是普通方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 member 来获取。

    exception

    IllegalStateException

    Current hooked Member is not a Constructor

    异常原因

    HookParam 中调用 constructor 变量但获取不到当前实例的方法实例。

    示例如下

    injectMember {
    +

    解决方案

    请确认你 Hook 的方法是构造方法还是普通方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 member 来获取。

    exception

    IllegalStateException

    Current hooked Member is not a Constructor

    异常原因

    HookParam 中调用 constructor 变量但获取不到当前实例的方法实例。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此变量
             constructor...
         }
     }
    -

    解决方案

    请确认你 Hook 的方法是普通方法还是构造方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 member 来获取。

    exception

    IllegalStateException

    HookParam instance cannot cast to TYPE

    异常原因

    HookParam 中调用 instance 方法指定了错误的类型。

    示例如下

    injectMember {
    +

    解决方案

    请确认你 Hook 的方法是普通方法还是构造方法并使用对应类型的方法获取指定的实例,若不知道字节码的类型可以直接使用 member 来获取。

    exception

    IllegalStateException

    HookParam instance cannot cast to TYPE

    异常原因

    HookParam 中调用 instance 方法指定了错误的类型。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 类型被 cast 为 Activity 但假设当前实例的类型并非此类型
             instance<Activity>()...
         }
     }
    -

    解决方案

    请确认当前 Hook 实例的正确类型并重新填写泛型中的类型,若不能确定请使用 Any 或直接使用 instance 变量。

    exception

    IllegalStateException

    HookParam Method args is empty, mabe not has args

    异常原因

    HookParam 中调用 ArgsModifyer.set 方法但是当前实例的方法参数数组为空。

    示例如下

    injectMember {
    +

    解决方案

    请确认当前 Hook 实例的正确类型并重新填写泛型中的类型,若不能确定请使用 Any 或直接使用 instance 变量。

    exception

    IllegalStateException

    HookParam Method args is empty, mabe not has args

    异常原因

    HookParam 中调用 ArgsModifyer.set 方法但是当前实例的方法参数数组为空。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 调用了此方法
             args(...).set(...)
         }
     }
    -

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,否则你无法使用此功能。

    exception

    IllegalStateException

    HookParam Method args index out of bounds, max is NUMBER

    异常原因

    HookParam 中调用 ArgsModifyer.set 方法指定了超出方法参数下标的数组序号。

    示例如下

    injectMember {
    +

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,否则你无法使用此功能。

    exception

    IllegalStateException

    HookParam Method args index out of bounds, max is NUMBER

    异常原因

    HookParam 中调用 ArgsModifyer.set 方法指定了超出方法参数下标的数组序号。

    示例如下

    injectMember {
         // ...
         afterHook {
             // 下标从 0 开始,假设原始的参数下标是 5 个,但是这里填写了 6
             args(index = 6).set(...)
         }
     }
    -

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数个数,并重新设置数组下标。

    exception

    IllegalStateException

    PackageParam got null ClassLoader

    异常原因

    PackageParam 中调用了 appClassLoader 变量但是无法获取到实例对象。

    示例如下

    encase {
    +

    解决方案

    请确认你 Hook 的目标方法、构造方法的方法参数个数,并重新设置数组下标。

    exception

    IllegalStateException

    PackageParam got null ClassLoader

    异常原因

    PackageParam 中调用了 appClassLoader 变量但是无法获取到实例对象。

    示例如下

    encase {
         // 调用了此变量
         appClassLoader...
     }
    -

    解决方案

    这种情况几乎不存在,除非模块被装载的宿主或目标 Hook Framework 自身存在问题,若真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current Hook Framework not support moduleAppResources

    异常原因

    PackageParam 中调用了 moduleAppResources 变量但是无法获取到实例对象。

    示例如下

    encase {
    +

    解决方案

    这种情况几乎不存在,除非模块被装载的宿主或目标 Hook Framework 自身存在问题,若真的发生了此问题,请携带详细日志进行反馈。

    exception

    IllegalStateException

    Current Hook Framework not support moduleAppResources

    异常原因

    PackageParam 中调用了 moduleAppResources 变量但是无法获取到实例对象。

    示例如下

    encase {
         // 调用了此变量
         moduleAppResources...
     }
    -

    解决方案

    moduleAppResources 需要当前 Hook Framework 支持 initZygote 功能,请检查后再试一次。

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    异常原因

    在使用 VariousClass 创建不确定的 Class 对象时全部的 Class 都没有被找到。

    解决方案

    检查当前 Hook 的宿主内是否存在其中能够匹配的 Class 后,再试一次。

    exception

    IllegalStateException

    Cannot get hook class "NAME" cause THROWABLE

    异常原因

    hook 方法体非 onPrepareHook 方法内调用了 instanceClass 变量且当前 Hook 的 Class 不存在。

    示例如下

    TargetClass.hook {
    +

    解决方案

    moduleAppResources 需要当前 Hook Framework 支持 initZygote 功能,请检查后再试一次。

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    异常原因

    在使用 VariousClass 创建不确定的 Class 对象时全部的 Class 都没有被找到。

    解决方案

    检查当前 Hook 的宿主内是否存在其中能够匹配的 Class 后,再试一次。

    exception

    IllegalStateException

    Cannot get hook class "NAME" cause THROWABLE

    异常原因

    hook 方法体非 onPrepareHook 方法内调用了 instanceClass 变量且当前 Hook 的 Class 不存在。

    示例如下

    TargetClass.hook {
         // 可能的情况为在非 onPrepareHook 方法体内调用了 instanceClass 变量用于打印日志
         loggerD(msg = "$instanceClass hook start")
     }
    -

    解决方案

    hook 内直接使用 instanceClass 是很危险的,若 Class 不存在则会直接导致 Hook 进程“死掉”。

    详情请参考 状态监听

    exception

    IllegalStateException

    LayoutInflatedParam View instance got null

    异常原因

    在布局 Hook 回调中调用了 currentView 但没取到实例对象。

    示例如下

    injectResource {
    +

    解决方案

    hook 内直接使用 instanceClass 是很危险的,若 Class 不存在则会直接导致 Hook 进程“死掉”。

    详情请参考 状态监听

    exception

    IllegalStateException

    LayoutInflatedParam View instance got null

    异常原因

    在布局 Hook 回调中调用了 currentView 但没取到实例对象。

    示例如下

    injectResource {
         conditions {
             name = "activity_main"
             layout()
    @@ -357,9 +365,9 @@
             currentView...
         }
     }
    -

    解决方案

    这种情况基本上不存在,除非被 Hook 的宿主当前 Activity 已经销毁或 Hook Framework 自身存在问题。

    exception

    IllegalStateException

    XResForwarder is invalid

    异常原因

    YukiResForwarder 中调用了 resources 但没取到实例对象。

    示例如下

    // 调用了此变量
    +

    解决方案

    这种情况基本上不存在,除非被 Hook 的宿主当前 Activity 已经销毁或 Hook Framework 自身存在问题。

    exception

    IllegalStateException

    XResForwarder is invalid

    异常原因

    YukiResForwarder 中调用了 resources 但没取到实例对象。

    示例如下

    // 调用了此变量
     moduleAppResources.fwd(...).resources
    -

    解决方案

    这种情况基本上不存在,除非 Hook Framework 自身存在问题。

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    异常原因

    在查找方法、构造方法时保留了空的 param 方法。

    示例如下

    method {
    +

    解决方案

    这种情况基本上不存在,除非 Hook Framework 自身存在问题。

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    异常原因

    在查找方法、构造方法时保留了空的 param 方法。

    示例如下

    method {
         name = "test"
         // 括号内没有填写任何参数
         param()
    @@ -372,15 +380,15 @@
         name = "test"
         paramCount = 0
     }
    -
    exception

    IllegalStateException

    Invalid YukiHookCallback type

    异常原因

    YukiHookAPI 的核心 Hook 功能发生故障。

    解决方案

    这种情况基本上不存在,若发生上述问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    IllegalStateException

    ModuleContextThemeWrapper already loaded

    异常原因

    Context 中使用 applyModuleTheme 方法时重复进行调用。

    示例如下

    // 假设这就是当前的 Context 对象
    +
    exception

    IllegalStateException

    Invalid YukiHookCallback type

    异常原因

    YukiHookAPI 的核心 Hook 功能发生故障。

    解决方案

    这种情况基本上不存在,若发生上述问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。

    exception

    IllegalStateException

    ModuleContextThemeWrapper already loaded

    异常原因

    Context 中使用 applyModuleTheme 方法时重复进行调用。

    示例如下

    // 假设这就是当前的 Context 对象
     context.applyModuleTheme(R.style.Theme_AppCompat).applyModuleTheme(R.style.Theme_AppCompat)
    -

    解决方案

    Context 中只能创建一次 ModuleContextThemeWrapper,请检查代码是否有循环调用问题。

    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    异常原因

    在系统框架 (android) 宿主使用了 DexClassFinder 的缓存功能 searchClass(name = ...)

    示例如下

    loadSystem {
    +

    解决方案

    Context 中只能创建一次 ModuleContextThemeWrapper,请检查代码是否有循环调用问题。

    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    异常原因

    在系统框架 (android) 宿主使用了 DexClassFinder 的缓存功能 searchClass(name = ...)

    示例如下

    loadSystem {
         searchClass(name = "test") {
             from(...)
             // ...
         }.get()
     }
     

    解决方案

    由于缓存会将找到的 Class 名称存入 SharedPreferences,但是系统框架不存在 data 目录,所以请不要在系统框架中使用此功能。

    - + diff --git a/docs/zh-cn/config/api-using.html b/docs/zh-cn/config/api-using.html index bcea0905..cb995901 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 630d99e9..6f4b8058 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 ff9a476c..0543ff72 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 4d455d44..ff29993d 100644 --- a/docs/zh-cn/guide/example.html +++ b/docs/zh-cn/guide/example.html @@ -23,7 +23,7 @@ } 用法示例 | Yuki Hook API - + @@ -313,6 +313,6 @@ // Your code here. }

    小提示

    更多功能请参考 YukiHookAPI.Status

    注意

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

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

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

    除了提供标准 API 的 Hook 框架之外,其它情况下模块可能都将无法判断自己是否被激活。

    - + diff --git a/docs/zh-cn/guide/home.html b/docs/zh-cn/guide/home.html index 9fe86e43..9731ef05 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 框架

    以下是 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在新窗口中打开未测试,不再推荐使用
    - + diff --git a/docs/zh-cn/guide/knowledge.html b/docs/zh-cn/guide/knowledge.html index c4e7423f..5e4e7c9f 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 框架也随之产生,例如太极

    这些在 ART 层面上的 Hook 框架同样也可不借助 Xposed API 完成其和 Xposed 原理一样的 Hook 流程,免 Root 的运行原理为修改 APK 并将 Hook 进程注入宿主,通过外部模块对其进行控制。

    另外一种产品就是利用 Android 运行环境现有的功能虚拟出一个完全与当前设备系统一样的环境,并在其中运行 APP,这个就是虚拟 APP 技术 VirtualApp,后来衍生为 VirtualXposed

    上述提到的免 Root 框架分别为太极/无极VirtualXposed/SandVXposed

    YukiHookAPI 做了什么

    自从 Xposed 出现到现在为止,除了开发者人人皆知的 XposedHelpers,依然没有一套针对 Kotlin 打造的语法糖以及用法封装十分完善的 API。

    本 API 框架的诞生就是希望在 Xposed 的如今时代,能让更多有动手能力的 Xposed 模块开发者少走弯路,更容易、更简单地完成整个开发流程。

    未来,YukiHookAPI 将在使用 Xposed API 的目标基础上适配更多第三方 Hook 框架,使得整个生态得到完善,并帮助更多开发者让 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 911a203d..d10d5d25 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 - + @@ -211,6 +211,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 5a52eeb2..edd99065 100644 --- a/docs/zh-cn/guide/quick-start.html +++ b/docs/zh-cn/guide/quick-start.html @@ -23,7 +23,7 @@ } 快速开始 | Yuki Hook API - + @@ -96,6 +96,6 @@ super.attachBaseContext(base) }

    然后,你就可以开始编写 Hook 代码了,方式与作为 Xposed 模块使用基本一致。

    有关作为 Hook API 使用的相关配置详细内容,你可以 点击这里 继续阅读。

    注意

    使用自定义的 Hook 框架而并非完整的 Xposed 模块时,YukiHookModuleStatusYukiHookModulePrefsYukiHookDataChannel 以及 Resources Hook 功能将失效。

    - + diff --git a/docs/zh-cn/index.html b/docs/zh-cn/index.html index 9a09b5e9..593c1994 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 b3c11c10..2788d152 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) 一栏手动选择软件的界面语言。

    - +