diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt index af1b88a5..ccc5c774 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt @@ -29,7 +29,6 @@ package com.highcapable.yukihookapi.hook.param -import android.app.AndroidAppHelper import android.app.Application import android.content.pm.ApplicationInfo import com.highcapable.yukihookapi.hook.bean.HookClass @@ -40,6 +39,7 @@ import com.highcapable.yukihookapi.hook.factory.classOf import com.highcapable.yukihookapi.hook.factory.hasClass import com.highcapable.yukihookapi.hook.factory.hookClass import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper +import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs /** @@ -54,21 +54,21 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) { * @throws IllegalStateException 如果 [ClassLoader] 是空的 */ val appClassLoader - get() = wrapper?.appClassLoader ?: javaClass.classLoader ?: error("PackageParam got null ClassLoader") + get() = wrapper?.appClassLoader ?: YukiHookAppHelper.currentApplication()?.classLoader ?: javaClass.classLoader + ?: error("PackageParam got null ClassLoader") /** * 获取当前 Hook APP 的 [ApplicationInfo] * @return [ApplicationInfo] */ - val appInfo get() = wrapper?.appInfo ?: ApplicationInfo() + val appInfo get() = wrapper?.appInfo ?: YukiHookAppHelper.currentApplicationInfo() ?: ApplicationInfo() /** * 获取当前 Hook APP 的 [Application] 实例 * @return [Application] * @throws IllegalStateException 如果 [Application] 是空的 */ - val appContext - get() = runCatching { AndroidAppHelper.currentApplication() }.getOrNull() ?: error("PackageParam got null appContext") + val appContext get() = YukiHookAppHelper.currentApplication() ?: error("PackageParam got null appContext") /** * 获取当前 Hook APP 的进程名称 @@ -76,13 +76,13 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) { * 默认的进程名称是 [packageName] * @return [String] */ - val processName get() = wrapper?.processName ?: packageName + val processName get() = wrapper?.processName ?: YukiHookAppHelper.currentProcessName() ?: packageName /** * 获取当前 Hook APP 的包名 * @return [String] */ - val packageName get() = wrapper?.packageName ?: "" + val packageName get() = wrapper?.packageName ?: YukiHookAppHelper.currentPackageName() ?: "" /** * 获取当前 Hook APP 是否为第一个 [Application] diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/helper/YukiHookAppHelper.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/helper/YukiHookAppHelper.kt new file mode 100644 index 00000000..50c3da14 --- /dev/null +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/helper/YukiHookAppHelper.kt @@ -0,0 +1,64 @@ +/* + * YukiHookAPI - An efficient Kotlin version of the Xposed Hook API. + * Copyright (C) 2019-2022 HighCapable + * https://github.com/fankes/YukiHookAPI + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file is Created by fankes on 2022/4/9. + */ +package com.highcapable.yukihookapi.hook.xposed.helper + +import android.app.AndroidAppHelper +import android.app.Application +import android.content.pm.ApplicationInfo + +/** + * 这是一个宿主 Hook 功能接口 + * + * 对接 [AndroidAppHelper] + */ +internal object YukiHookAppHelper { + + /** + * 获取当前宿主的 [Application] + * @return [Application] or null + */ + internal fun currentApplication() = runCatching { AndroidAppHelper.currentApplication() }.getOrNull() + + /** + * 获取当前宿主的 [ApplicationInfo] + * @return [ApplicationInfo] or null + */ + internal fun currentApplicationInfo() = runCatching { AndroidAppHelper.currentApplicationInfo() }.getOrNull() + + /** + * 获取当前宿主的包名 + * @return [String] or null + */ + internal fun currentPackageName() = runCatching { AndroidAppHelper.currentPackageName() }.getOrNull() + + /** + * 获取当前宿主的进程名 + * @return [String] or null + */ + internal fun currentProcessName() = runCatching { AndroidAppHelper.currentProcessName() }.getOrNull() +} \ No newline at end of file