Added the AndroidAppHelper function

This commit is contained in:
2022-04-09 00:57:04 +08:00
parent 6a1646588b
commit c3fbaf553f
2 changed files with 71 additions and 7 deletions

View File

@@ -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]

View File

@@ -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()
}