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 package com.highcapable.yukihookapi.hook.param
import android.app.AndroidAppHelper
import android.app.Application import android.app.Application
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import com.highcapable.yukihookapi.hook.bean.HookClass 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.hasClass
import com.highcapable.yukihookapi.hook.factory.hookClass import com.highcapable.yukihookapi.hook.factory.hookClass
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
/** /**
@@ -54,21 +54,21 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
* @throws IllegalStateException 如果 [ClassLoader] 是空的 * @throws IllegalStateException 如果 [ClassLoader] 是空的
*/ */
val appClassLoader 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] * 获取当前 Hook APP 的 [ApplicationInfo]
* @return [ApplicationInfo] * @return [ApplicationInfo]
*/ */
val appInfo get() = wrapper?.appInfo ?: ApplicationInfo() val appInfo get() = wrapper?.appInfo ?: YukiHookAppHelper.currentApplicationInfo() ?: ApplicationInfo()
/** /**
* 获取当前 Hook APP 的 [Application] 实例 * 获取当前 Hook APP 的 [Application] 实例
* @return [Application] * @return [Application]
* @throws IllegalStateException 如果 [Application] 是空的 * @throws IllegalStateException 如果 [Application] 是空的
*/ */
val appContext val appContext get() = YukiHookAppHelper.currentApplication() ?: error("PackageParam got null appContext")
get() = runCatching { AndroidAppHelper.currentApplication() }.getOrNull() ?: error("PackageParam got null appContext")
/** /**
* 获取当前 Hook APP 的进程名称 * 获取当前 Hook APP 的进程名称
@@ -76,13 +76,13 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
* 默认的进程名称是 [packageName] * 默认的进程名称是 [packageName]
* @return [String] * @return [String]
*/ */
val processName get() = wrapper?.processName ?: packageName val processName get() = wrapper?.processName ?: YukiHookAppHelper.currentProcessName() ?: packageName
/** /**
* 获取当前 Hook APP 的包名 * 获取当前 Hook APP 的包名
* @return [String] * @return [String]
*/ */
val packageName get() = wrapper?.packageName ?: "" val packageName get() = wrapper?.packageName ?: YukiHookAppHelper.currentPackageName() ?: ""
/** /**
* 获取当前 Hook APP 是否为第一个 [Application] * 获取当前 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()
}