This commit is contained in:
2022-02-13 05:55:35 +08:00
parent 7249486b57
commit 6a9741ed33
11 changed files with 1068 additions and 84 deletions

View File

@@ -28,9 +28,12 @@
package com.highcapable.yukihookapi.hook.bean
/**
* 自适应异常 [Class] 接管类
* 创建一个当前 Hook 的 [Class] 接管类
* @param instance 实例
* @param name 完整名称
* @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"
}

View File

@@ -48,6 +48,13 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
/** 当前找到的 [Field] */
private var fieldInstance: Field? = null
/**
* [Field] 所在的 [Class]
*
* 不填默认为当前的 [hookClass]
*/
var classSet = hookClass
/**
* [Field] 名称
*
@@ -70,19 +77,26 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
* @throws IllegalStateException 如果 [name] 没有被设置
*/
@DoNotUseMethod
fun build() = if (name.isBlank()) {
loggerE(msg = "Field name cannot be empty in Class [$hookClass] [${hookInstance.tag}]")
Result(isNoSuch = true)
} else try {
runBlocking {
fieldInstance = ReflectionUtils.findFieldIfExists(hookClass, type?.name, name)
}.result {
hookInstance.onHookLogMsg(msg = "Find Field [${fieldInstance}] takes ${it}ms [${hookInstance.tag}]")
fun build() = when {
name.isBlank() -> {
loggerE(msg = "Field name cannot be empty in Class [$classSet] [${hookInstance.tag}]")
Result(isNoSuch = true)
}
type == null -> {
loggerE(msg = "Field type cannot be null in Class [$classSet] [${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 */
fun setNull() = set(null)
override fun toString() = "[${self?.javaClass?.name ?: ""}] in [${instance?.javaClass?.name ?: ""}] value \"$self\""
}
}
}

View File

@@ -34,25 +34,6 @@ import java.lang.reflect.Constructor
import java.lang.reflect.Field
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]
* @return [HookClass]
@@ -65,6 +46,37 @@ val Class<*>.hookClass get() = HookClass(instance = this, name)
*/
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 名称
@@ -151,7 +163,9 @@ fun Class<*>.obtainConstructor(vararg paramType: Class<*>): Constructor<out Any>
* @throws IllegalStateException 如果 [T] 类型错误
*/
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] 类型错误
*/
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}")

View File

@@ -184,5 +184,9 @@ class HookParam(private val wrapper: HookParamWrapper) {
* ❗请确保目标对象的类型是 [Boolean] 不然会发生意想不到的问题
*/
fun setFalse() = set(false)
override fun toString() = "Args of index $index"
}
override fun toString() = "HookParam by $wrapper"
}

View File

@@ -36,6 +36,8 @@ import com.highcapable.yukihookapi.hook.bean.HookClass
import com.highcapable.yukihookapi.hook.bean.VariousClass
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
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.param.wrapper.PackageParamWrapper
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)
/**
* 通过字符串转换为实体类
*
* - 使用当前 [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]
* @param name 类名
* @return [HookClass]
*/
fun findClass(name: String) = try {
appClassLoader.loadClass(name).hookClass
name.clazz.hookClass
} catch (e: Throwable) {
HookClass(name = name, throwable = e)
}
@@ -155,21 +195,10 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
* @param various 实例
* @return [HookClass]
*/
fun findClass(various: VariousClass): HookClass {
var finalClass: Class<*>? = null
if (various.name.isNotEmpty())
run {
various.name.forEach {
runCatching {
finalClass = appClassLoader.loadClass(it)
return@run
}
}
}
return finalClass?.hookClass ?: HookClass(
name = "VariousClass",
throwable = Throwable("VariousClass match failed of those $various")
)
fun findClass(various: VariousClass) = try {
various.clazz.hookClass
} catch (e: Throwable) {
HookClass(name = "VariousClass", throwable = Throwable(e.message))
}
/**
@@ -193,7 +222,7 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
* @return [HookClass]
*/
private fun HookClass.bind() = try {
appClassLoader.loadClass(name).hookClass
name.clazz.hookClass
} catch (e: Throwable) {
HookClass(name = name, throwable = throwable ?: e)
}
@@ -203,4 +232,6 @@ open class PackageParam(private var wrapper: PackageParamWrapper? = null) {
* @return [PackageParam]
*/
private val thisParam get() = this
override fun toString() = "PackageParam by $wrapper"
}

View File

@@ -89,4 +89,6 @@ class HookParamWrapper(private val baseParam: XC_MethodHook.MethodHookParam) {
*/
fun invokeOriginalMember(member: Member, vararg args: Any?): Any? =
XposedBridge.invokeOriginalMethod(member, instance, args)
override fun toString() = "HookParamWrapper[$baseParam]"
}

View File

@@ -48,4 +48,7 @@ class PackageParamWrapper(
var processName: String,
var appClassLoader: ClassLoader,
var appInfo: ApplicationInfo
)
) {
override fun toString() = "PackageParamWrapper [packageName] $packageName [processName] $processName [appInfo] $appInfo"
}

View File

@@ -25,20 +25,29 @@
*
* 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
import android.app.Activity
import android.app.Application
import android.app.Service
import android.content.BroadcastReceiver
import android.content.ContentProvider
import android.content.ContentResolver
import android.content.Context
import android.app.*
import android.content.*
import android.content.res.ColorStateList
import android.content.res.Resources
import android.os.Bundle
import com.highcapable.yukihookapi.hook.factory.clazz
import android.graphics.drawable.*
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] 类型
@@ -50,7 +59,43 @@ val ContextClass get() = Context::class.java
* 获得 [ContextImpl] 类型
* @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] 类型
@@ -59,10 +104,28 @@ val ContextImplClass get() = ("android.app.ContextImpl").clazz
val ActivityClass get() = Activity::class.java
/**
* 获得 [Fragment] 类型
* 获得 [Fragment] 类型 - Support
* @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] 类型
@@ -88,12 +151,6 @@ val BundleClass get() = Bundle::class.java
*/
val ResourcesClass get() = Resources::class.java
/**
* 获得 [Application] 类型
* @return [Class]
*/
val ApplicationClass get() = Application::class.java
/**
* 获得 [ContentResolver] 类型
* @return [Class]
@@ -104,4 +161,206 @@ val ContentResolverClass get() = ContentResolver::class.java
* 获得 [ContentProvider] 类型
* @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

View File

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

View File

@@ -29,8 +29,9 @@
package com.highcapable.yukihookapi.hook.type.android
import android.view.View
import android.view.ViewGroup
import android.graphics.Outline
import android.util.AttributeSet
import android.view.*
import android.widget.*
/**
@@ -79,4 +80,148 @@ val CheckBoxClass get() = CheckBox::class.java
* 获得 [CompoundButton] 类型
* @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

View File

@@ -25,11 +25,38 @@
*
* 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
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] 类型
@@ -53,31 +80,31 @@ val BooleanType get() = Boolean::class.java
* 获得 [Int] 类型
* @return [Class]
*/
val IntType get() = Int::class.javaPrimitiveType
val IntType get() = Int::class.javaPrimitiveType ?: UnitType
/**
* 获得 [Long] 类型
* @return [Class]
*/
val LongType get() = Long::class.javaPrimitiveType
val LongType get() = Long::class.javaPrimitiveType ?: UnitType
/**
* 获得 [Short] 类型
* @return [Class]
*/
val ShortType get() = Short::class.javaPrimitiveType
val ShortType get() = Short::class.javaPrimitiveType ?: UnitType
/**
* 获得 [Float] 类型
* @return [Class]
*/
val FloatType get() = Float::class.javaPrimitiveType
val FloatType get() = Float::class.javaPrimitiveType ?: UnitType
/**
* 获得 [Double] 类型
* @return [Class]
*/
val DoubleType get() = Double::class.javaPrimitiveType
val DoubleType get() = Double::class.javaPrimitiveType ?: UnitType
/**
* 获得 [String] 类型
@@ -101,4 +128,326 @@ val CharSequenceType get() = CharSequence::class.java
* 获得 [Serializable] 类型
* @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