mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 18:55:35 +08:00
Added systemContext function in PackageParam
This commit is contained in:
@@ -72,6 +72,20 @@ val appResources:Resources
|
|||||||
|
|
||||||
!> 你只能在 `HookResources.hook` 方法体内或 `appContext` 装载完毕时进行调用。
|
!> 你只能在 `HookResources.hook` 方法体内或 `appContext` 装载完毕时进行调用。
|
||||||
|
|
||||||
|
### systemContext [field]
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
val systemContext: Context
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.93` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 获取当前系统框架的 `Context`。
|
||||||
|
|
||||||
### processName [field]
|
### processName [field]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
|
@@ -456,6 +456,25 @@ Resources 的 Hook 并非类似方法的 Hook,其必须拥有完整的名称
|
|||||||
|
|
||||||
> 这些异常会直接导致 APP 停止运行(FC),同时会在控制台打印 `E` 级别的日志,还会造成 Hook 进程“死掉”。
|
> 这些异常会直接导致 APP 停止运行(FC),同时会在控制台打印 `E` 级别的日志,还会造成 Hook 进程“死掉”。
|
||||||
|
|
||||||
|
!> `IllegalStateException` Failed to got SystemContext
|
||||||
|
|
||||||
|
**异常原因**
|
||||||
|
|
||||||
|
在被 Hook 的宿主内调用了 `systemContext` 但并未成功获取到实例对象。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
encase {
|
||||||
|
// 调用了此变量
|
||||||
|
systemContext...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**解决方案**
|
||||||
|
|
||||||
|
这种情况不应该存在,由于 `systemContext` 通过反射从 `ActivityThread` 中得到,除非系统进程发生异常,否则获取到的对象不会为空。
|
||||||
|
|
||||||
!> `IllegalStateException` App is dead, You cannot call to appContext
|
!> `IllegalStateException` App is dead, You cannot call to appContext
|
||||||
|
|
||||||
**异常原因**
|
**异常原因**
|
||||||
|
@@ -85,20 +85,6 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper:
|
|||||||
*/
|
*/
|
||||||
val appInfo get() = wrapper?.appInfo ?: YukiHookAppHelper.currentApplicationInfo() ?: ApplicationInfo()
|
val appInfo get() = wrapper?.appInfo ?: YukiHookAppHelper.currentApplicationInfo() ?: ApplicationInfo()
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前 Hook APP 的进程名称
|
|
||||||
*
|
|
||||||
* 默认的进程名称是 [packageName]
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
val processName get() = wrapper?.processName ?: YukiHookAppHelper.currentProcessName() ?: packageName
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前 Hook APP 的包名
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
val packageName get() = wrapper?.packageName ?: YukiHookAppHelper.currentPackageName() ?: ""
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook APP 的 [Application] 实例
|
* 获取当前 Hook APP 的 [Application] 实例
|
||||||
*
|
*
|
||||||
@@ -117,6 +103,27 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper:
|
|||||||
*/
|
*/
|
||||||
val appResources get() = wrapper?.appResources ?: appContext.resources ?: error("You cannot call to appResources in this time")
|
val appResources get() = wrapper?.appResources ?: appContext.resources ?: error("You cannot call to appResources in this time")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前系统框架的 [Context]
|
||||||
|
* @return [Context] ContextImpl 实例对象
|
||||||
|
* @throws IllegalStateException 如果获取不到系统框架的 [Context]
|
||||||
|
*/
|
||||||
|
val systemContext get() = YukiHookBridge.systemContext
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前 Hook APP 的进程名称
|
||||||
|
*
|
||||||
|
* 默认的进程名称是 [packageName]
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
val processName get() = wrapper?.processName ?: YukiHookAppHelper.currentProcessName() ?: packageName
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前 Hook APP 的包名
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
val packageName get() = wrapper?.packageName ?: YukiHookAppHelper.currentPackageName() ?: ""
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook APP 是否为第一个 [Application]
|
* 获取当前 Hook APP 是否为第一个 [Application]
|
||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
|
@@ -46,10 +46,7 @@ import com.highcapable.yukihookapi.hook.param.PackageParam
|
|||||||
import com.highcapable.yukihookapi.hook.param.type.HookEntryType
|
import com.highcapable.yukihookapi.hook.param.type.HookEntryType
|
||||||
import com.highcapable.yukihookapi.hook.param.wrapper.HookParamWrapper
|
import com.highcapable.yukihookapi.hook.param.wrapper.HookParamWrapper
|
||||||
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
||||||
import com.highcapable.yukihookapi.hook.type.android.ApplicationClass
|
import com.highcapable.yukihookapi.hook.type.android.*
|
||||||
import com.highcapable.yukihookapi.hook.type.android.ConfigurationClass
|
|
||||||
import com.highcapable.yukihookapi.hook.type.android.ContextClass
|
|
||||||
import com.highcapable.yukihookapi.hook.type.android.InstrumentationClass
|
|
||||||
import com.highcapable.yukihookapi.hook.type.java.IntType
|
import com.highcapable.yukihookapi.hook.type.java.IntType
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources
|
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
|
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
|
||||||
@@ -122,6 +119,17 @@ object YukiHookBridge {
|
|||||||
*/
|
*/
|
||||||
internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion()
|
internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前系统框架的 [Context]
|
||||||
|
* @return [Context] ContextImpl 实例对象
|
||||||
|
* @throws IllegalStateException 如果获取不到系统框架的 [Context]
|
||||||
|
*/
|
||||||
|
internal val systemContext
|
||||||
|
get() = runCatching {
|
||||||
|
Hooker.findMethod(ActivityThreadClass, name = "getSystemContext")
|
||||||
|
.invoke(Hooker.findMethod(ActivityThreadClass, name = "currentActivityThread").invoke(null)) as? Context?
|
||||||
|
}.getOrNull() ?: error("Failed to got SystemContext")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块是否装载了 Xposed 回调方法
|
* 模块是否装载了 Xposed 回调方法
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user