import{_ as s,o as n,c as o,a}from"./app.fb8271cf.js";const e={},l=a(`
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
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
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
\u53D8\u66F4\u8BB0\u5F55
v1.0.5
\u65B0\u589E
v1.0.91
\u79FB\u9664
\u8BF7\u8F6C\u79FB\u5230 Status.executorName
\u53D8\u66F4\u8BB0\u5F55
v1.0.5
\u65B0\u589E
v1.0.91
\u79FB\u9664
\u8BF7\u8F6C\u79FB\u5230 Status.executorVersion
object Status
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u5F53\u524D
YukiHookAPI
\u7684\u72B6\u6001\u3002
val compiledTimestamp: Long
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u9879\u76EE\u7F16\u8BD1\u5B8C\u6210\u7684\u65F6\u95F4\u6233 (\u5F53\u524D\u672C\u5730\u65F6\u95F4)\u3002
val isXposedEnvironment: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D\u662F\u5426\u4E3A (Xposed) \u5BBF\u4E3B\u73AF\u5883\u3002
val executorName: String
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook \u6846\u67B6\u7684\u540D\u79F0\u3002
\u65E0\u6CD5\u83B7\u53D6\u4F1A\u8FD4\u56DE unknown
\uFF0CXposedBridge
\u4E0D\u5B58\u5728\u4F1A\u8FD4\u56DE invalid
\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u9700\u8981\u542F\u7528 Configs.isEnableHookModuleStatus\u3002
val executorVersion: Int
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u83B7\u53D6\u5F53\u524D Hook \u6846\u67B6\u7684\u7248\u672C\u3002
\u65E0\u6CD5\u83B7\u53D6\u4F1A\u8FD4\u56DE -1
\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u9700\u8981\u542F\u7528 Configs.isEnableHookModuleStatus\u3002
val isModuleActive: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u5224\u65AD\u6A21\u5757\u662F\u5426\u5728 Xposed \u6216\u592A\u6781\u3001\u65E0\u6781\u4E2D\u6FC0\u6D3B\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F60\u9700\u8981\u5C06 Application \u7EE7\u627F\u4E8E ModuleApplication\u3002
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u9700\u8981\u542F\u7528 Configs.isEnableHookModuleStatus\u3002
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u4EC5\u8FD4\u56DE\u975E isTaiChiModuleActive \u7684\u6FC0\u6D3B\u72B6\u6001\u3002
val isXposedModuleActive: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u4EC5\u5224\u65AD\u6A21\u5757\u662F\u5426\u5728 Xposed \u4E2D\u6FC0\u6D3B\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u9700\u8981\u542F\u7528 Configs.isEnableHookModuleStatus\u3002
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u59CB\u7EC8\u8FD4\u56DE true\u3002
val isTaiChiModuleActive: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u4EC5\u5224\u65AD\u6A21\u5757\u662F\u5426\u5728\u592A\u6781\u3001\u65E0\u6781\u4E2D\u6FC0\u6D3B\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F60\u9700\u8981\u5C06 Application \u7EE7\u627F\u4E8E ModuleApplication\u3002
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u59CB\u7EC8\u8FD4\u56DE false\u3002
val isSupportResourcesHook: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.91
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u5224\u65AD\u5F53\u524D Hook Framework \u662F\u5426\u652F\u6301\u8D44\u6E90\u94A9\u5B50(Resources Hook)\u3002
\u6CE8\u610F
\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u9700\u8981\u542F\u7528 Configs.isEnableHookModuleStatus\u3002
\u5728 (Xposed) \u5BBF\u4E3B\u73AF\u5883\u4E2D\u53EF\u80FD\u4F1A\u5EF6\u8FDF\u7B49\u5F85\u4E8B\u4EF6\u56DE\u8C03\u540E\u624D\u4F1A\u8FD4\u56DE true\u3002
\u8BF7\u6CE8\u610F\u4F60\u9700\u8981\u786E\u4FDD InjectYukiHookWithXposed.isUsingResourcesHook \u5DF2\u542F\u7528\uFF0C\u5426\u5219\u59CB\u7EC8\u8FD4\u56DE false\u3002
object Configs
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u5BF9 API \u76F8\u5173\u529F\u80FD\u7684\u914D\u7F6E\u7C7B\u3002
inline fun debugLog(initiate: YukiHookLogger.Configs.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u914D\u7F6E
YukiHookLogger.Configs
\u76F8\u5173\u53C2\u6570\u3002
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
v1.1.0
\u4F5C\u5E9F
\u8BF7\u8F6C\u79FB\u5230 YukiHookLogger.Configs.tag
var isDebug: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528 DEBUG \u6A21\u5F0F\u3002
\u9ED8\u8BA4\u4E3A\u5F00\u542F\u72B6\u6001\uFF0C\u5F00\u542F\u540E\u6A21\u5757\u5C06\u4F1A\u5411 Logcat
\u548C XposedBridge.log
\u6253\u5370\u8BE6\u7EC6\u7684 Hook \u65E5\u5FD7\uFF0C\u5173\u95ED\u540E\u4EC5\u4F1A\u6253\u5370 E
\u7EA7\u522B\u7684\u65E5\u5FD7\u3002
\u53D8\u66F4\u8BB0\u5F55
v1.0.4
\u65B0\u589E
v1.1.0
\u4F5C\u5E9F
\u8BF7\u8F6C\u79FB\u5230 YukiHookLogger.Configs.isEnable
var isEnableModulePrefsCache: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.5
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528
YukiHookModulePrefs
\u7684\u952E\u503C\u7F13\u5B58\u529F\u80FD\u3002
\u4E3A\u9632\u6B62\u5185\u5B58\u590D\u7528\u8FC7\u9AD8\u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002
\u4F60\u53EF\u4EE5\u624B\u52A8\u5728 YukiHookModulePrefs
\u4E2D\u81EA\u7531\u5F00\u542F\u548C\u5173\u95ED\u7F13\u5B58\u529F\u80FD\u4EE5\u53CA\u6E05\u9664\u7F13\u5B58\u3002
var isEnableModuleAppResourcesCache: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.87
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528\u5F53\u524D Xposed \u6A21\u5757\u81EA\u8EAB
Resources
\u7F13\u5B58\u529F\u80FD\u3002
\u4E3A\u9632\u6B62\u5185\u5B58\u590D\u7528\u8FC7\u9AD8\u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002
\u4F60\u53EF\u4EE5\u624B\u52A8\u8C03\u7528 PackageParam.refreshModuleAppResources
\u6765\u5237\u65B0\u7F13\u5B58\u3002
\u6CE8\u610F
\u5173\u95ED\u540E\u6BCF\u6B21\u4F7F\u7528 PackageParam.moduleAppResources \u90FD\u4F1A\u91CD\u65B0\u521B\u5EFA\uFF0C\u53EF\u80FD\u4F1A\u9020\u6210\u8FD0\u884C\u7F13\u6162\u3002
var isEnableHookModuleStatus: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528 Hook Xposed \u6A21\u5757\u6FC0\u6D3B\u7B49\u72B6\u6001\u529F\u80FD.
\u4E3A\u539F\u751F\u652F\u6301 Xposed \u6A21\u5757\u6FC0\u6D3B\u72B6\u6001\u68C0\u6D4B\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002
\u6CE8\u610F
\u5173\u95ED\u540E\u4F60\u5C06\u4E0D\u80FD\u518D\u5728\u6A21\u5757\u73AF\u5883\u4E2D\u4F7F\u7528 YukiHookAPI.Status \u4E2D\u7684\u6FC0\u6D3B\u72B6\u6001\u5224\u65AD\u529F\u80FD\u3002
var isEnableHookSharedPreferences: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.1.0
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528 Hook
SharedPreferences
\u3002
\u542F\u7528\u540E\u5C06\u5728\u6A21\u5757\u542F\u52A8\u65F6\u5F3A\u5236\u5C06 SharedPreferences
\u6587\u4EF6\u6743\u9650\u8C03\u6574\u4E3A Context.MODE_WORLD_READABLE
(0664)\u3002
\u6CE8\u610F
\u8FD9\u662F\u4E00\u4E2A\u53EF\u9009\u7684\u5B9E\u9A8C\u6027\u529F\u80FD\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u4E0D\u542F\u7528\u3002
\u4EC5\u7528\u4E8E\u4FEE\u590D\u67D0\u4E9B\u7CFB\u7EDF\u53EF\u80FD\u4F1A\u51FA\u73B0\u5728\u542F\u7528\u4E86 New XSharedPreferences \u540E\u4F9D\u7136\u51FA\u73B0\u6587\u4EF6\u6743\u9650\u9519\u8BEF\u95EE\u9898\uFF0C\u82E5\u4F60\u80FD\u6B63\u5E38\u4F7F\u7528 YukiHookModulePrefs \u5C31\u4E0D\u5EFA\u8BAE\u542F\u7528\u6B64\u529F\u80FD\u3002
var isEnableDataChannel: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.88
\u65B0\u589E
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528\u5F53\u524D Xposed \u6A21\u5757\u4E0E\u5BBF\u4E3B\u4EA4\u4E92\u7684
YukiHookDataChannel
\u529F\u80FD\u3002
\u8BF7\u786E\u4FDD Xposed \u6A21\u5757\u7684 Application
\u7EE7\u627F\u4E8E ModuleApplication
\u624D\u80FD\u6709\u6548\u3002
\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\uFF0C\u5173\u95ED\u540E\u5C06\u4E0D\u4F1A\u5728\u529F\u80FD\u521D\u59CB\u5316\u7684\u65F6\u5019\u88C5\u8F7D YukiHookDataChannel
\u3002
var isEnableMemberCache: Boolean
\u53D8\u66F4\u8BB0\u5F55
v1.0.68
\u65B0\u589E
v1.0.80
\u4FEE\u6539
\u5C06\u65B9\u6CD5\u4F53\u8FDB\u884C inline
\u529F\u80FD\u63CF\u8FF0
\u662F\u5426\u542F\u7528
Member
\u7F13\u5B58\u529F\u80FD\u3002
\u4E3A\u9632\u6B62 Member
\u590D\u7528\u8FC7\u9AD8\u9020\u6210\u7684\u7CFB\u7EDF GC \u95EE\u9898\uFF0C\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\u3002
\u542F\u7528\u540E\u4F1A\u7F13\u5B58\u5DF2\u7ECF\u627E\u5230\u7684 Method
\u3001Constructor
\u3001Field
\u3002
\u7F13\u5B58\u7684 Member
\u90FD\u5C06\u5904\u4E8E MemberCacheStore
\u7684\u5168\u5C40\u9759\u6001\u5B9E\u4F8B\u4E2D\u3002
\u63A8\u8350\u4F7F\u7528 MethodFinder
\u3001ConstructorFinder
\u3001FieldFinder
\u6765\u83B7\u53D6 Member
\u3002
\u9664\u975E\u7F13\u5B58\u7684 Member
\u53D1\u751F\u4E86\u6DF7\u6DC6\u7684\u95EE\u9898\uFF0C\u4F8B\u5982\u4F7F\u7528 R8 \u6DF7\u6DC6\u540E\u7684 APP \u7684\u76EE\u6807 Member
\uFF0C\u5426\u5219\u5EFA\u8BAE\u542F\u7528\u3002
inline fun configs(initiate: Configs.() -> Unit)
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u5BF9
Configs
\u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2Alambda
\u65B9\u6CD5\u4F53\u3002
\u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002
\u529F\u80FD\u793A\u4F8B
\u4F60\u53EF\u4EE5\u5728 HookEntryClass
\u7684 onInit
\u65B9\u6CD5\u4E2D\u8C03\u7528 configs
\u65B9\u6CD5\u548C debugLog
\u65B9\u6CD5\u5B8C\u6210\u5BF9 API \u7684\u529F\u80FD\u914D\u7F6E\uFF0C\u5B9E\u65F6\u751F\u6548\u3002
\u793A\u4F8B\u5982\u4E0B
class HookEntryClass : IYukiHookXposedInit {
override fun onInit() {
YukiHookAPI.configs {
debugLog {
tag = "YukiHookAPI"
isEnable = true
isRecord = false
elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
}
isDebug = BuildConfig.DEBUG
isEnableModulePrefsCache = true
isEnableModuleAppResourcesCache = true
isEnableHookModuleStatus = true
isEnableHookSharedPreferences = false
isEnableDataChannel = true
isEnableMemberCache = true
}
}
override fun onHook() {
// Your code here.
}
}
\u82E5\u89C9\u5F97\u4E0A\u9762\u7684\u5199\u6CD5\u4E0D\u7F8E\u89C2\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5199\u5F97\u66F4\u52A0\u7B80\u6D01\u3002
\u793A\u4F8B\u5982\u4E0B
class HookEntryClass : IYukiHookXposedInit {
override fun onInit() = configs {
debugLog {
tag = "YukiHookAPI"
isEnable = true
isRecord = false
elements(TAG, PRIORITY, PACKAGE_NAME, USER_ID)
}
isDebug = BuildConfig.DEBUG
isEnableModulePrefsCache = true
isEnableModuleAppResourcesCache = true
isEnableHookModuleStatus = true
isEnableHookSharedPreferences = false
isEnableDataChannel = true
isEnableMemberCache = true
}
override fun onHook() {
// Your code here.
}
}
\u4F60\u4E5F\u53EF\u4EE5\u4E0D\u901A\u8FC7 configs
\u548C debugLog
\u65B9\u6CD5\uFF0C\u76F4\u63A5\u8FDB\u884C\u914D\u7F6E\u3002
\u793A\u4F8B\u5982\u4E0B
class HookEntryClass : IYukiHookXposedInit {
override fun onInit() {
YukiHookLogger.Configs.tag = "YukiHookAPI"
YukiHookLogger.Configs.isEnable = true
YukiHookLogger.Configs.isRecord = false
YukiHookLogger.Configs.elements(
YukiHookLogger.Configs.TAG,
YukiHookLogger.Configs.PRIORITY,
YukiHookLogger.Configs.PACKAGE_NAME,
YukiHookLogger.Configs.USER_ID
)
YukiHookAPI.Configs.isDebug = BuildConfig.DEBUG
YukiHookAPI.Configs.isEnableModulePrefsCache = true
YukiHookAPI.Configs.isEnableModuleAppResourcesCache = true
YukiHookAPI.Configs.isEnableHookModuleStatus = true
YukiHookAPI.Configs.isEnableHookSharedPreferences = false
YukiHookAPI.Configs.isEnableDataChannel = true
YukiHookAPI.Configs.isEnableMemberCache = true
}
override fun onHook() {
// Your code here.
}
}
fun encase(initiate: PackageParam.() -> Unit)
fun encase(vararg hooker: YukiBaseHooker)
fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
\u53D8\u66F4\u8BB0\u5F55
v1.0
\u6DFB\u52A0
\u529F\u80FD\u63CF\u8FF0
\u88C5\u8F7D Hook \u5165\u53E3\u7684\u6838\u5FC3\u65B9\u6CD5\u3002
\u529F\u80FD\u793A\u4F8B
\u8BE6\u60C5\u8BF7\u53C2\u8003
`,202),p=[l];function c(r,t){return n(),o("div",null,p)}const d=s(e,[["render",c],["__file","YukiHookAPI.html.vue"]]);export{d as default};