mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 10:45:47 +08:00
...
This commit is contained in:
@@ -28,9 +28,12 @@
|
|||||||
package com.highcapable.yukihookapi.hook.bean
|
package com.highcapable.yukihookapi.hook.bean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自适应异常 [Class] 接管类
|
* 创建一个当前 Hook 的 [Class] 接管类
|
||||||
* @param instance 实例
|
* @param instance 实例
|
||||||
* @param name 完整名称
|
* @param name 完整名称
|
||||||
* @param throwable 异常
|
* @param throwable 异常
|
||||||
*/
|
*/
|
||||||
class HookClass(var instance: Class<*>? = null, var name: String, var throwable: Throwable? = null)
|
class HookClass(var instance: Class<*>? = null, var name: String, var throwable: Throwable? = null) {
|
||||||
|
|
||||||
|
override fun toString() = "[class] $name [throwable] $throwable [instance] $instance"
|
||||||
|
}
|
@@ -48,6 +48,13 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
|
|||||||
/** 当前找到的 [Field] */
|
/** 当前找到的 [Field] */
|
||||||
private var fieldInstance: Field? = null
|
private var fieldInstance: Field? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [Field] 所在的 [Class]
|
||||||
|
*
|
||||||
|
* 不填默认为当前的 [hookClass]
|
||||||
|
*/
|
||||||
|
var classSet = hookClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [Field] 名称
|
* [Field] 名称
|
||||||
*
|
*
|
||||||
@@ -70,19 +77,26 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
|
|||||||
* @throws IllegalStateException 如果 [name] 没有被设置
|
* @throws IllegalStateException 如果 [name] 没有被设置
|
||||||
*/
|
*/
|
||||||
@DoNotUseMethod
|
@DoNotUseMethod
|
||||||
fun build() = if (name.isBlank()) {
|
fun build() = when {
|
||||||
loggerE(msg = "Field name cannot be empty in Class [$hookClass] [${hookInstance.tag}]")
|
name.isBlank() -> {
|
||||||
Result(isNoSuch = true)
|
loggerE(msg = "Field name cannot be empty in Class [$classSet] [${hookInstance.tag}]")
|
||||||
} else try {
|
Result(isNoSuch = true)
|
||||||
runBlocking {
|
}
|
||||||
fieldInstance = ReflectionUtils.findFieldIfExists(hookClass, type?.name, name)
|
type == null -> {
|
||||||
}.result {
|
loggerE(msg = "Field type cannot be null in Class [$classSet] [${hookInstance.tag}]")
|
||||||
hookInstance.onHookLogMsg(msg = "Find Field [${fieldInstance}] takes ${it}ms [${hookInstance.tag}]")
|
Result(isNoSuch = true)
|
||||||
|
}
|
||||||
|
else -> try {
|
||||||
|
runBlocking {
|
||||||
|
fieldInstance = ReflectionUtils.findFieldIfExists(classSet, type?.name, name)
|
||||||
|
}.result {
|
||||||
|
hookInstance.onHookLogMsg(msg = "Find Field [${fieldInstance}] takes ${it}ms [${hookInstance.tag}]")
|
||||||
|
}
|
||||||
|
Result()
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
loggerE(msg = "NoSuchField happend in [$classSet] [${hookInstance.tag}]", e = e)
|
||||||
|
Result(isNoSuch = true, e)
|
||||||
}
|
}
|
||||||
Result()
|
|
||||||
} catch (e: Throwable) {
|
|
||||||
loggerE(msg = "NoSuchField happend in [$hookClass] [${hookInstance.tag}]", e = e)
|
|
||||||
Result(isNoSuch = true, e)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,6 +184,8 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
|
|||||||
|
|
||||||
/** 设置变量实例为 null */
|
/** 设置变量实例为 null */
|
||||||
fun setNull() = set(null)
|
fun setNull() = set(null)
|
||||||
|
|
||||||
|
override fun toString() = "[${self?.javaClass?.name ?: ""}] in [${instance?.javaClass?.name ?: ""}] value \"$self\""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -34,25 +34,6 @@ import java.lang.reflect.Constructor
|
|||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
/**
|
|
||||||
* 字符串转换为实体类
|
|
||||||
* @return [Class]
|
|
||||||
* @throws NoClassDefFoundError
|
|
||||||
*/
|
|
||||||
val String.clazz: Class<*> get() = Class.forName(this)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过字符串查找类是否存在
|
|
||||||
* @return [Boolean] 是否存在
|
|
||||||
*/
|
|
||||||
val String.hasClass
|
|
||||||
get() = try {
|
|
||||||
clazz
|
|
||||||
true
|
|
||||||
} catch (_: Throwable) {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [Class] 转换为 [HookClass]
|
* [Class] 转换为 [HookClass]
|
||||||
* @return [HookClass]
|
* @return [HookClass]
|
||||||
@@ -65,6 +46,37 @@ val Class<*>.hookClass get() = HookClass(instance = this, name)
|
|||||||
*/
|
*/
|
||||||
val HookClass.normalClass get() = instance
|
val HookClass.normalClass get() = instance
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字符串查找类是否存在
|
||||||
|
*
|
||||||
|
* - ❗仅限使用当前的 [ClassLoader]
|
||||||
|
* @return [Boolean] 是否存在
|
||||||
|
*/
|
||||||
|
val String.hasClass get() = hasClass(loader = null)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字符串转换为实体类
|
||||||
|
* @param name [Class] 的完整包名+名称
|
||||||
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 可不填
|
||||||
|
* @return [Class]
|
||||||
|
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
||||||
|
*/
|
||||||
|
fun classOf(name: String, loader: ClassLoader? = null): Class<*> =
|
||||||
|
if (loader == null) Class.forName(name)
|
||||||
|
else loader.loadClass(name)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字符串查找类是否存在
|
||||||
|
* @param loader [Class] 所在的 [ClassLoader]
|
||||||
|
* @return [Boolean] 是否存在
|
||||||
|
*/
|
||||||
|
fun String.hasClass(loader: ClassLoader?) = try {
|
||||||
|
classOf(name = this, loader)
|
||||||
|
true
|
||||||
|
} catch (_: Throwable) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查找方法是否存在
|
* 查找方法是否存在
|
||||||
* @param name 名称
|
* @param name 名称
|
||||||
@@ -151,7 +163,9 @@ fun Class<*>.obtainConstructor(vararg paramType: Class<*>): Constructor<out Any>
|
|||||||
* @throws IllegalStateException 如果 [T] 类型错误
|
* @throws IllegalStateException 如果 [T] 类型错误
|
||||||
*/
|
*/
|
||||||
inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
||||||
invoke(null, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
if (param.isNotEmpty())
|
||||||
|
invoke(null, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||||
|
else invoke(null) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行方法
|
* 执行方法
|
||||||
@@ -161,4 +175,6 @@ inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
|||||||
* @throws IllegalStateException 如果 [T] 类型错误
|
* @throws IllegalStateException 如果 [T] 类型错误
|
||||||
*/
|
*/
|
||||||
inline fun <reified T> Method.invokeAny(any: Any?, vararg param: Any?) =
|
inline fun <reified T> Method.invokeAny(any: Any?, vararg param: Any?) =
|
||||||
invoke(any, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
if (param.isNotEmpty())
|
||||||
|
invoke(any, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||||
|
else invoke(any) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||||
|
@@ -184,5 +184,9 @@ class HookParam(private val wrapper: HookParamWrapper) {
|
|||||||
* ❗请确保目标对象的类型是 [Boolean] 不然会发生意想不到的问题
|
* ❗请确保目标对象的类型是 [Boolean] 不然会发生意想不到的问题
|
||||||
*/
|
*/
|
||||||
fun setFalse() = set(false)
|
fun setFalse() = set(false)
|
||||||
|
|
||||||
|
override fun toString() = "Args of index $index"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString() = "HookParam by $wrapper"
|
||||||
}
|
}
|
@@ -36,6 +36,8 @@ import com.highcapable.yukihookapi.hook.bean.HookClass
|
|||||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||||
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
|
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
|
||||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||||
|
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.factory.hookClass
|
||||||
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
||||||
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
||||||
@@ -130,13 +132,51 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
|
|||||||
*/
|
*/
|
||||||
fun loadHooker(hooker: YukiBaseHooker) = hooker.assignInstance(packageParam = this)
|
fun loadHooker(hooker: YukiBaseHooker) = hooker.assignInstance(packageParam = this)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字符串转换为实体类
|
||||||
|
*
|
||||||
|
* - 使用当前 [appClassLoader] 装载目标 [Class]
|
||||||
|
* @return [Class]
|
||||||
|
* @throws NoClassDefFoundError 如果找不到 [Class]
|
||||||
|
*/
|
||||||
|
val String.clazz get() = classOf(name = this, appClassLoader)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [VariousClass] 转换为实体类
|
||||||
|
*
|
||||||
|
* - 使用当前 [appClassLoader] 装载目标 [Class]
|
||||||
|
* @return [Class]
|
||||||
|
* @throws IllegalStateException 如果任何 [Class] 都没有匹配到
|
||||||
|
*/
|
||||||
|
val VariousClass.clazz
|
||||||
|
get() :Class<*> {
|
||||||
|
var finalClass: Class<*>? = null
|
||||||
|
if (name.isNotEmpty()) run {
|
||||||
|
name.forEach {
|
||||||
|
runCatching {
|
||||||
|
finalClass = it.clazz
|
||||||
|
return@run
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return finalClass ?: error("VariousClass match failed of those $this")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过字符串查找类是否存在
|
||||||
|
*
|
||||||
|
* - 使用当前 [appClassLoader] 装载目标 [Class]
|
||||||
|
* @return [Boolean] 是否存在
|
||||||
|
*/
|
||||||
|
val String.hasClass get() = hasClass(appClassLoader)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 [appClassLoader] 查询并装载 [Class]
|
* 通过 [appClassLoader] 查询并装载 [Class]
|
||||||
* @param name 类名
|
* @param name 类名
|
||||||
* @return [HookClass]
|
* @return [HookClass]
|
||||||
*/
|
*/
|
||||||
fun findClass(name: String) = try {
|
fun findClass(name: String) = try {
|
||||||
appClassLoader.loadClass(name).hookClass
|
name.clazz.hookClass
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
HookClass(name = name, throwable = e)
|
HookClass(name = name, throwable = e)
|
||||||
}
|
}
|
||||||
@@ -155,21 +195,10 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
|
|||||||
* @param various 实例
|
* @param various 实例
|
||||||
* @return [HookClass]
|
* @return [HookClass]
|
||||||
*/
|
*/
|
||||||
fun findClass(various: VariousClass): HookClass {
|
fun findClass(various: VariousClass) = try {
|
||||||
var finalClass: Class<*>? = null
|
various.clazz.hookClass
|
||||||
if (various.name.isNotEmpty())
|
} catch (e: Throwable) {
|
||||||
run {
|
HookClass(name = "VariousClass", throwable = Throwable(e.message))
|
||||||
various.name.forEach {
|
|
||||||
runCatching {
|
|
||||||
finalClass = appClassLoader.loadClass(it)
|
|
||||||
return@run
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return finalClass?.hookClass ?: HookClass(
|
|
||||||
name = "VariousClass",
|
|
||||||
throwable = Throwable("VariousClass match failed of those $various")
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -193,7 +222,7 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
|
|||||||
* @return [HookClass]
|
* @return [HookClass]
|
||||||
*/
|
*/
|
||||||
private fun HookClass.bind() = try {
|
private fun HookClass.bind() = try {
|
||||||
appClassLoader.loadClass(name).hookClass
|
name.clazz.hookClass
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
HookClass(name = name, throwable = throwable ?: e)
|
HookClass(name = name, throwable = throwable ?: e)
|
||||||
}
|
}
|
||||||
@@ -203,4 +232,6 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
|
|||||||
* @return [PackageParam]
|
* @return [PackageParam]
|
||||||
*/
|
*/
|
||||||
private val thisParam get() = this
|
private val thisParam get() = this
|
||||||
|
|
||||||
|
override fun toString() = "PackageParam by $wrapper"
|
||||||
}
|
}
|
@@ -89,4 +89,6 @@ class HookParamWrapper(private val baseParam: XC_MethodHook.MethodHookParam) {
|
|||||||
*/
|
*/
|
||||||
fun invokeOriginalMember(member: Member, vararg args: Any?): Any? =
|
fun invokeOriginalMember(member: Member, vararg args: Any?): Any? =
|
||||||
XposedBridge.invokeOriginalMethod(member, instance, args)
|
XposedBridge.invokeOriginalMethod(member, instance, args)
|
||||||
|
|
||||||
|
override fun toString() = "HookParamWrapper[$baseParam]"
|
||||||
}
|
}
|
@@ -48,4 +48,7 @@ class PackageParamWrapper(
|
|||||||
var processName: String,
|
var processName: String,
|
||||||
var appClassLoader: ClassLoader,
|
var appClassLoader: ClassLoader,
|
||||||
var appInfo: ApplicationInfo
|
var appInfo: ApplicationInfo
|
||||||
)
|
) {
|
||||||
|
|
||||||
|
override fun toString() = "PackageParamWrapper [packageName] $packageName [processName] $processName [appInfo] $appInfo"
|
||||||
|
}
|
@@ -25,20 +25,29 @@
|
|||||||
*
|
*
|
||||||
* This file is Created by fankes on 2022/2/2.
|
* This file is Created by fankes on 2022/2/2.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("unused", "KDocUnresolvedReference")
|
@file:Suppress("unused", "KDocUnresolvedReference", "DEPRECATION", "NewApi")
|
||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.type.android
|
package com.highcapable.yukihookapi.hook.type.android
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.*
|
||||||
import android.app.Application
|
import android.content.*
|
||||||
import android.app.Service
|
import android.content.res.ColorStateList
|
||||||
import android.content.BroadcastReceiver
|
|
||||||
import android.content.ContentProvider
|
|
||||||
import android.content.ContentResolver
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Bundle
|
import android.graphics.drawable.*
|
||||||
import com.highcapable.yukihookapi.hook.factory.clazz
|
import android.icu.text.SimpleDateFormat
|
||||||
|
import android.media.MediaPlayer
|
||||||
|
import android.os.*
|
||||||
|
import android.service.notification.StatusBarNotification
|
||||||
|
import android.text.SpannableStringBuilder
|
||||||
|
import android.util.ArrayMap
|
||||||
|
import android.util.ArraySet
|
||||||
|
import android.util.Base64
|
||||||
|
import android.util.DisplayMetrics
|
||||||
|
import android.view.Display
|
||||||
|
import android.view.Window
|
||||||
|
import android.view.WindowManager
|
||||||
|
import android.widget.Toast
|
||||||
|
import com.highcapable.yukihookapi.hook.factory.classOf
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Context] 类型
|
* 获得 [Context] 类型
|
||||||
@@ -50,7 +59,43 @@ val ContextClass get() = Context::class.java
|
|||||||
* 获得 [ContextImpl] 类型
|
* 获得 [ContextImpl] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val ContextImplClass get() = ("android.app.ContextImpl").clazz
|
val ContextImplClass get() = classOf(name = "android.app.ContextImpl")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ContextWrapper] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ContextWrapperClass get() = ContextWrapper::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Application] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ApplicationClass get() = Application::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ApplicationPackageManager] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ApplicationPackageManagerClass get() = classOf(name = "android.app.ApplicationPackageManager")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ActivityThread] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ActivityThreadClass get() = classOf(name = "android.app.ActivityThread")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [IPackageManager] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val IPackageManagerClass get() = classOf(name = "android.content.pm.IPackageManager")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [LoadedApk] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LoadedApkClass get() = classOf(name = "android.app.LoadedApk")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Activity] 类型
|
* 获得 [Activity] 类型
|
||||||
@@ -59,10 +104,28 @@ val ContextImplClass get() = ("android.app.ContextImpl").clazz
|
|||||||
val ActivityClass get() = Activity::class.java
|
val ActivityClass get() = Activity::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Fragment] 类型
|
* 获得 [Fragment] 类型 - Support
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val FragmentClass get() = ("androidx.fragment.app.Fragment").clazz
|
val FragmentClass_AndroidSupport get() = classOf(name = "android.support.v4.app.Fragment")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Fragment] 类型 - AndroidX
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FragmentClass_AndroidX get() = classOf(name = "androidx.fragment.app.Fragment")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [FragmentActivity] 类型 - Support
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FragmentActivityClass_AndroidSupport get() = classOf(name = "android.support.v4.app.FragmentActivity")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [FragmentActivity] 类型 - AndroidX
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FragmentActivityClass_AndroidX get() = classOf(name = "androidx.fragment.app.FragmentActivity")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Service] 类型
|
* 获得 [Service] 类型
|
||||||
@@ -88,12 +151,6 @@ val BundleClass get() = Bundle::class.java
|
|||||||
*/
|
*/
|
||||||
val ResourcesClass get() = Resources::class.java
|
val ResourcesClass get() = Resources::class.java
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得 [Application] 类型
|
|
||||||
* @return [Class]
|
|
||||||
*/
|
|
||||||
val ApplicationClass get() = Application::class.java
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [ContentResolver] 类型
|
* 获得 [ContentResolver] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -105,3 +162,205 @@ val ContentResolverClass get() = ContentResolver::class.java
|
|||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val ContentProviderClass get() = ContentProvider::class.java
|
val ContentProviderClass get() = ContentProvider::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ArrayMap] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ArrayMapClass get() = ArrayMap::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ArraySet] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*
|
||||||
|
* ❗在 Android M (23) 及以上系统加入
|
||||||
|
*/
|
||||||
|
val ArraySetClass get() = ArraySet::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Handler] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HandlerClass get() = Handler::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Handler.Callback] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Handler_CallbackClass get() = Handler.Callback::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Message] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val MessageClass get() = Message::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [AsyncTask] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AsyncTaskClass get() = AsyncTask::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [SimpleDateFormat] 类型
|
||||||
|
*
|
||||||
|
* ❗在 Android N (24) 及以上系统加入
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SimpleDateFormatClass_Android get() = SimpleDateFormat::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Base64] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Base64Class_Android get() = Base64::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [WindowManager] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val WindowManagerClass get() = WindowManager::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Parcelable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ParcelableClass get() = Parcelable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Parcelable.Creator] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Parcelable_CreatorClass get() = Parcelable.Creator::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Dialog] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogClass get() = Dialog::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [AlertDialog] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AlertDialogClass get() = AlertDialog::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DisplayMetrics] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DisplayMetricsClass get() = DisplayMetrics::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Display] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DisplayClass get() = Display::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Toast] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ToastClass get() = Toast::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Intent] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val IntentClass get() = Intent::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ColorStateList] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ColorStateListClass get() = ColorStateList::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ContentValues] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ContentValuesClass get() = ContentValues::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [SharedPreferences] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SharedPreferencesClass get() = SharedPreferences::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [SpannableStringBuilder] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SpannableStringBuilderClass get() = SpannableStringBuilder::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Window] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val WindowClass get() = Window::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [MediaPlayer] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val MediaPlayerClass get() = MediaPlayer::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ProgressDialog] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ProgressDialogClass get() = ProgressDialog::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Build] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BuildClass get() = Build::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ContrastColorUtil] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ContrastColorUtilClass get() = classOf(name = "com.android.internal.util.ContrastColorUtil")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DialogInterface] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogInterfaceClass get() = DialogInterface::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [StatusBarNotification] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val StatusBarNotificationClass get() = StatusBarNotification::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Notification] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val NotificationClass get() = Notification::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Notification.Builder] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Notification_BuilderClass get() = Notification.Builder::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DialogInterface.OnClickListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogInterface_OnClickListenerClass get() = DialogInterface.OnClickListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DialogInterface.OnCancelListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogInterface_OnCancelListenerClass get() = DialogInterface.OnCancelListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DialogInterface.OnDismissListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogInterface_OnDismissListenerClass get() = DialogInterface.OnDismissListener::class.java
|
@@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* 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/2/13.
|
||||||
|
*/
|
||||||
|
@file:Suppress("unused", "KDocUnresolvedReference", "NewApi")
|
||||||
|
|
||||||
|
package com.highcapable.yukihookapi.hook.type.android
|
||||||
|
|
||||||
|
import android.graphics.*
|
||||||
|
import android.graphics.drawable.*
|
||||||
|
import android.text.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Typeface] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TypefaceClass get() = Typeface::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Bitmap] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BitmapClass get() = Bitmap::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Drawable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DrawableClass get() = Drawable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Icon] 类型
|
||||||
|
*
|
||||||
|
* ❗在 Android M (23) 及以上系统加入
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val IconClass get() = Icon::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [GradientDrawable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val GradientDrawableClass get() = GradientDrawable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ColorDrawable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ColorDrawableClass get() = ColorDrawable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BitmapDrawable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BitmapDrawableClass get() = BitmapDrawable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Rect] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val RectClass get() = Rect::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [NinePatch] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val NinePatchClass get() = NinePatch::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Paint] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val PaintClass get() = Paint::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [TextPaint] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TextPaintClass get() = TextPaint::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Canvas] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val CanvasClass get() = Canvas::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Point] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val PointClass get() = Point::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Editable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val EditableClass get() = Editable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [TextWatcher] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TextWatcherClass get() = TextWatcher::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Editable.Factory] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Editable_FactoryClass get() = Editable.Factory::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [GetChars] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val GetCharsClass get() = GetChars::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Spannable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SpannableClass get() = Spannable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BitmapFactory] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BitmapFactoryClass get() = BitmapFactory::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BitmapFactory.Options] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BitmapFactory_OptionsClass get() = BitmapFactory.Options::class.java
|
@@ -29,8 +29,9 @@
|
|||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.type.android
|
package com.highcapable.yukihookapi.hook.type.android
|
||||||
|
|
||||||
import android.view.View
|
import android.graphics.Outline
|
||||||
import android.view.ViewGroup
|
import android.util.AttributeSet
|
||||||
|
import android.view.*
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,3 +81,147 @@ val CheckBoxClass get() = CheckBox::class.java
|
|||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val CompoundButtonClass get() = CompoundButton::class.java
|
val CompoundButtonClass get() = CompoundButton::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [VideoView] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val VideoViewClass get() = VideoView::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ListView] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ListViewClass get() = ListView::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [LayoutInflater] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LayoutInflaterClass get() = LayoutInflater::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ListAdapter] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ListAdapterClass get() = ListAdapter::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ArrayAdapter] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ArrayAdapterClass get() = ArrayAdapter::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BaseAdapter] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BaseAdapterClass get() = BaseAdapter::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [RelativeLayout] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val RelativeLayoutClass get() = RelativeLayout::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [FrameLayout] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FrameLayoutClass get() = FrameLayout::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [LinearLayout] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LinearLayoutClass get() = LinearLayout::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ViewGroup.LayoutParams] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ViewGroup_LayoutParamsClass get() = ViewGroup.LayoutParams::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [RelativeLayout.LayoutParams] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val RelativeLayout_LayoutParamsClass get() = RelativeLayout.LayoutParams::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [LinearLayout.LayoutParams] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LinearLayout_LayoutParamsClass get() = LinearLayout.LayoutParams::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [FrameLayout.LayoutParams] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FrameLayout_LayoutParamsClass get() = FrameLayout.LayoutParams::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Outline] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val OutlineClass get() = Outline::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [View.OnClickListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val View_OnClickListenerClass get() = View.OnClickListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [View.OnLongClickListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val View_OnLongClickListenerClass get() = View.OnLongClickListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [View.OnTouchListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val View_OnTouchListenerClass get() = View.OnTouchListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [AutoCompleteTextView] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AutoCompleteTextViewClass get() = AutoCompleteTextView::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ViewStub] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ViewStubClass get() = ViewStub::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ViewStub.OnInflateListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ViewStub_OnInflateListenerClass get() = ViewStub.OnInflateListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [GestureDetector] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val GestureDetectorClass get() = GestureDetector::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [GestureDetector.SimpleOnGestureListener] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val GestureDetector_SimpleOnGestureListenerClass get() = GestureDetector.SimpleOnGestureListener::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ProgressBar] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ProgressBarClass get() = ProgressBar::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [AttributeSet] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AttributeSetClass get() = AttributeSet::class.java
|
@@ -25,11 +25,38 @@
|
|||||||
*
|
*
|
||||||
* This file is Created by fankes on 2022/2/2.
|
* This file is Created by fankes on 2022/2/2.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("unused")
|
@file:Suppress("unused", "KDocUnresolvedReference", "DEPRECATION", "FunctionName", "NewApi")
|
||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.type.java
|
package com.highcapable.yukihookapi.hook.type.java
|
||||||
|
|
||||||
import java.io.Serializable
|
import org.json.JSONArray
|
||||||
|
import org.json.JSONObject
|
||||||
|
import java.io.*
|
||||||
|
import java.lang.ref.Reference
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
|
import java.lang.reflect.Constructor
|
||||||
|
import java.lang.reflect.Field
|
||||||
|
import java.lang.reflect.Member
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
import java.net.HttpCookie
|
||||||
|
import java.net.HttpURLConnection
|
||||||
|
import java.net.http.HttpClient
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
import java.util.zip.ZipEntry
|
||||||
|
import java.util.zip.ZipFile
|
||||||
|
import java.util.zip.ZipInputStream
|
||||||
|
import java.util.zip.ZipOutputStream
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任意类型的数组
|
||||||
|
*
|
||||||
|
* Java 中的表示:array[]
|
||||||
|
* @param type 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
fun AnyArrayClass(type: Class<*>) = java.lang.reflect.Array.newInstance(type, 0).javaClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Any] 类型
|
* 获得 [Any] 类型
|
||||||
@@ -53,31 +80,31 @@ val BooleanType get() = Boolean::class.java
|
|||||||
* 获得 [Int] 类型
|
* 获得 [Int] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val IntType get() = Int::class.javaPrimitiveType
|
val IntType get() = Int::class.javaPrimitiveType ?: UnitType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Long] 类型
|
* 获得 [Long] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val LongType get() = Long::class.javaPrimitiveType
|
val LongType get() = Long::class.javaPrimitiveType ?: UnitType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Short] 类型
|
* 获得 [Short] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val ShortType get() = Short::class.javaPrimitiveType
|
val ShortType get() = Short::class.javaPrimitiveType ?: UnitType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Float] 类型
|
* 获得 [Float] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val FloatType get() = Float::class.javaPrimitiveType
|
val FloatType get() = Float::class.javaPrimitiveType ?: UnitType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Double] 类型
|
* 获得 [Double] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val DoubleType get() = Double::class.javaPrimitiveType
|
val DoubleType get() = Double::class.javaPrimitiveType ?: UnitType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [String] 类型
|
* 获得 [String] 类型
|
||||||
@@ -102,3 +129,325 @@ val CharSequenceType get() = CharSequence::class.java
|
|||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val SerializableClass get() = Serializable::class.java
|
val SerializableClass get() = Serializable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Byte] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ByteClass get() = Byte::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Array] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ArrayClass get() = Array::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Byte] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:byte[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ByteArrayClass get() = AnyArrayClass(ByteClass)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Int] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:int[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val IntArrayClass get() = AnyArrayClass(IntType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [String] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:String[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val StringArrayClass get() = AnyArrayClass(StringType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Long] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:long[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LongArrayClass get() = AnyArrayClass(LongType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Short] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:short[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ShortArrayClass get() = AnyArrayClass(ShortType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Float] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:float[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FloatArrayClass get() = AnyArrayClass(FloatType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Double] - [Array] 类型
|
||||||
|
*
|
||||||
|
* Java 中表示:double[]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DoubleArrayClass get() = AnyArrayClass(DoubleType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Cloneable] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val CloneableClass get() = Cloneable::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [List] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ListClass get() = List::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ArrayList] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ArrayListClass get() = ArrayList::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [HashMap] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HashMapClass get() = HashMap::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [HashSet] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HashSetClass get() = HashSet::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [WeakHashMap] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val WeakHashMapClass get() = WeakHashMap::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [WeakReference] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val WeakReferenceClass get() = WeakReference::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Map] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val MapClass get() = Map::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Map.Entry] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Map_EntryClass get() = Map.Entry::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Reference] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ReferenceClass get() = Reference::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Vector] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val VectorClass get() = Vector::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [File] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val FileClass get() = File::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [InputStream] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val InputStreamClass get() = InputStream::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [OutputStream] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val OutputStreamClass get() = OutputStream::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BufferedReader] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BufferedReaderClass get() = BufferedReader::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Date] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DateClass get() = Date::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [TimeZone] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TimeZoneClass get() = TimeZone::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [SimpleDateFormat] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SimpleDateFormatClass_Java get() = SimpleDateFormat::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Timer] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TimerClass get() = Timer::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [TimerTask] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val TimerTaskClass get() = TimerTask::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Thread] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ThreadClass get() = Thread::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Base64] 类型
|
||||||
|
*
|
||||||
|
* ❗在 Android O (26) 及以上系统加入
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val Base64Class_Java get() = Base64::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Observer] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ObserverClass get() = Observer::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Set] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val SetClass get() = Set::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [JSONObject] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JSONObjectClass get() = JSONObject::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [JSONArray] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JSONArrayClass get() = JSONArray::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [StringBuilder] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val StringBuilderClass get() = StringBuilder::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [StringBuffer] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val StringBufferClass get() = StringBuffer::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ZipEntry] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ZipEntryClass get() = ZipEntry::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ZipFile] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ZipFileClass get() = ZipFile::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ZipInputStream] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ZipInputStreamClass get() = ZipInputStream::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [ZipOutputStream] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ZipOutputStreamClass get() = ZipOutputStream::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [HttpURLConnection] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HttpURLConnectionClass get() = HttpURLConnection::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [HttpCookie] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HttpCookieClass get() = HttpCookie::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [HttpClient] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val HttpClientClass get() = HttpClient::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [AtomicBoolean] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AtomicBooleanClass get() = AtomicBoolean::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Class] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaClass get() = Class::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Method] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaMethodClass get() = Method::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Field] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaFieldClass get() = Field::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Constructor] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaConstructorClass get() = Constructor::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Member] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaMemberClass get() = Member::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Annotation] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val JavaAnnotationClass get() = Annotation::class.java
|
Reference in New Issue
Block a user