mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 02:35:40 +08:00
Added isEnableHookSharedPreferences in YukiHookAPI.Configs and add SharedPreferences hook in YukiHookBridge
This commit is contained in:
@@ -31,6 +31,7 @@ package com.highcapable.yukihookapi
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.Resources
|
||||
import com.highcapable.yukihookapi.YukiHookAPI.configs
|
||||
import com.highcapable.yukihookapi.YukiHookAPI.encase
|
||||
@@ -221,6 +222,17 @@ object YukiHookAPI {
|
||||
*/
|
||||
var isEnableHookModuleStatus = true
|
||||
|
||||
/**
|
||||
* 是否启用 Hook [SharedPreferences]
|
||||
*
|
||||
* 启用后将在模块启动时强制将 [SharedPreferences] 文件权限调整为 [Context.MODE_WORLD_READABLE] (0644)
|
||||
*
|
||||
* - ❗这是一个可选的实验性功能 - 此功能默认不启用
|
||||
*
|
||||
* - 仅用于修复某些系统可能会出现在启用了 New XSharedPreferences 后依然出现文件权限错误问题 - 若你能正常使用 [YukiHookModulePrefs] 就不建议启用此功能
|
||||
*/
|
||||
var isEnableHookSharedPreferences = false
|
||||
|
||||
/**
|
||||
* 是否启用当前 Xposed 模块与宿主交互的 [YukiHookDataChannel] 功能
|
||||
*
|
||||
|
@@ -40,8 +40,10 @@ import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||
import com.highcapable.yukihookapi.hook.param.type.HookEntryType
|
||||
import com.highcapable.yukihookapi.hook.param.wrapper.HookParamWrapper
|
||||
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
||||
import com.highcapable.yukihookapi.hook.type.android.ContextImplClass
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiHookHelper
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiMemberHook
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiMemberReplacement
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus
|
||||
@@ -210,8 +212,13 @@ object YukiHookBridge {
|
||||
*/
|
||||
@YukiGenerateApi
|
||||
fun hookModuleAppStatus(loader: ClassLoader?, isHookResourcesStatus: Boolean = false) {
|
||||
if (YukiHookAPI.Configs.isEnableHookModuleStatus.not()) return
|
||||
classOf<YukiHookModuleStatus>(loader).apply {
|
||||
if (YukiHookAPI.Configs.isEnableHookSharedPreferences)
|
||||
YukiHookHelper.hook(ContextImplClass.method { name = "setFilePermissionsFromMode" }, object : YukiMemberHook() {
|
||||
override fun beforeHookedMember(wrapper: HookParamWrapper) {
|
||||
if ((wrapper.args?.get(0) as? String?)?.endsWith(suffix = "preferences.xml") == true) wrapper.args?.set(1, 1)
|
||||
}
|
||||
})
|
||||
if (YukiHookAPI.Configs.isEnableHookModuleStatus) classOf<YukiHookModuleStatus>(loader).apply {
|
||||
if (isHookResourcesStatus.not()) {
|
||||
YukiHookHelper.hook(method { name = YukiHookModuleStatus.IS_ACTIVE_METHOD_NAME }, object : YukiMemberReplacement() {
|
||||
override fun replaceHookedMember(wrapper: HookParamWrapper) = true
|
||||
|
Reference in New Issue
Block a user