mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
...
This commit is contained in:
@@ -66,6 +66,13 @@ object YukiHookAPI {
|
||||
@DoNotUseField
|
||||
var modulePackageName = ""
|
||||
|
||||
/**
|
||||
* 标识是否从自定义 Hook API 装载
|
||||
*
|
||||
* - ❗这是私有 API - 请勿手动修改 - 否则会导致功能判断错误
|
||||
*/
|
||||
internal var isLoadedFromBaseContext = false
|
||||
|
||||
/**
|
||||
* 配置 YukiHookAPI
|
||||
*/
|
||||
@@ -129,6 +136,7 @@ object YukiHookAPI {
|
||||
* @param initiate Hook 方法体
|
||||
*/
|
||||
fun encase(initiate: PackageParam.() -> Unit) {
|
||||
isLoadedFromBaseContext = false
|
||||
if (hasXposedBridge)
|
||||
packageParamCallback = initiate
|
||||
else printNoXposedBridge()
|
||||
@@ -144,6 +152,7 @@ object YukiHookAPI {
|
||||
* @throws IllegalStateException 如果 [hooker] 是空的
|
||||
*/
|
||||
fun encase(vararg hooker: YukiBaseHooker) {
|
||||
isLoadedFromBaseContext = false
|
||||
if (hasXposedBridge)
|
||||
packageParamCallback = {
|
||||
if (hooker.isNotEmpty())
|
||||
@@ -167,6 +176,7 @@ object YukiHookAPI {
|
||||
* @param initiate Hook 方法体
|
||||
*/
|
||||
fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit) {
|
||||
isLoadedFromBaseContext = true
|
||||
if (hasXposedBridge)
|
||||
(if (baseContext != null) initiate.invoke(baseContext.packagePararm))
|
||||
else printNoXposedBridge()
|
||||
@@ -187,6 +197,7 @@ object YukiHookAPI {
|
||||
* @throws IllegalStateException 如果 [hooker] 是空的
|
||||
*/
|
||||
fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker) {
|
||||
isLoadedFromBaseContext = true
|
||||
if (hasXposedBridge)
|
||||
(if (baseContext != null)
|
||||
if (hooker.isNotEmpty())
|
||||
|
@@ -164,7 +164,7 @@ fun Class<*>.obtainConstructor(vararg paramType: Class<*>): Constructor<out Any>
|
||||
*/
|
||||
inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
||||
if (param.isNotEmpty())
|
||||
invoke(null, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||
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}")
|
||||
|
||||
/**
|
||||
@@ -176,5 +176,5 @@ inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
||||
*/
|
||||
inline fun <reified T> Method.invokeAny(any: Any?, vararg param: Any?) =
|
||||
if (param.isNotEmpty())
|
||||
invoke(any, param) as? T? ?: error("Method ReturnType cannot cast to ${T::class.java}")
|
||||
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}")
|
||||
|
@@ -39,16 +39,19 @@ 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.util.*
|
||||
import android.view.Display
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import android.widget.Toast
|
||||
import com.highcapable.yukihookapi.hook.factory.classOf
|
||||
|
||||
/**
|
||||
* 获得 [android.R] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val AndroidRClass get() = android.R::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Context] 类型
|
||||
* @return [Class]
|
||||
@@ -103,6 +106,12 @@ val LoadedApkClass get() = classOf(name = "android.app.LoadedApk")
|
||||
*/
|
||||
val ActivityClass get() = Activity::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Looper] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val LooperClass get() = Looper::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Fragment] 类型 - Support
|
||||
* @return [Class]
|
||||
@@ -127,12 +136,30 @@ val FragmentActivityClass_AndroidSupport get() = classOf(name = "android.support
|
||||
*/
|
||||
val FragmentActivityClass_AndroidX get() = classOf(name = "androidx.fragment.app.FragmentActivity")
|
||||
|
||||
/**
|
||||
* 获得 [DocumentFile] 类型 - AndroidX
|
||||
* @return [Class]
|
||||
*/
|
||||
val DocumentFileClass get() = classOf(name = "androidx.documentfile.provider.DocumentFile")
|
||||
|
||||
/**
|
||||
* 获得 [Service] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ServiceClass get() = Service::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Binder] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val BinderClass get() = Binder::class.java
|
||||
|
||||
/**
|
||||
* 获得 [IBinder] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val IBinderClass get() = IBinder::class.java
|
||||
|
||||
/**
|
||||
* 获得 [BroadcastReceiver] 类型
|
||||
* @return [Class]
|
||||
@@ -145,6 +172,12 @@ val BroadcastReceiverClass get() = BroadcastReceiver::class.java
|
||||
*/
|
||||
val BundleClass get() = Bundle::class.java
|
||||
|
||||
/**
|
||||
* 获得 [BaseBundle] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val BaseBundleClass get() = BaseBundle::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Resources] 类型
|
||||
* @return [Class]
|
||||
@@ -195,6 +228,18 @@ val Handler_CallbackClass get() = Handler.Callback::class.java
|
||||
*/
|
||||
val MessageClass get() = Message::class.java
|
||||
|
||||
/**
|
||||
* 获得 [MessageQueue] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val MessageQueueClass get() = MessageQueue::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Messenger] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val MessengerClass get() = Messenger::class.java
|
||||
|
||||
/**
|
||||
* 获得 [AsyncTask] 类型
|
||||
* @return [Class]
|
||||
@@ -215,12 +260,24 @@ val SimpleDateFormatClass_Android get() = SimpleDateFormat::class.java
|
||||
*/
|
||||
val Base64Class_Android get() = Base64::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Window] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val WindowClass get() = Window::class.java
|
||||
|
||||
/**
|
||||
* 获得 [WindowManager] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val WindowManagerClass get() = WindowManager::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Parcel] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ParcelClass get() = Parcel::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Parcelable] 类型
|
||||
* @return [Class]
|
||||
@@ -293,12 +350,6 @@ val SharedPreferencesClass get() = SharedPreferences::class.java
|
||||
*/
|
||||
val SpannableStringBuilderClass get() = SpannableStringBuilder::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Window] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val WindowClass get() = Window::class.java
|
||||
|
||||
/**
|
||||
* 获得 [MediaPlayer] 类型
|
||||
* @return [Class]
|
||||
@@ -311,24 +362,30 @@ val MediaPlayerClass get() = MediaPlayer::class.java
|
||||
*/
|
||||
val ProgressDialogClass get() = ProgressDialog::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Log] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val LogClass get() = Log::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Build] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val BuildClass get() = Build::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Xml] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val XmlClass get() = Xml::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]
|
||||
@@ -347,6 +404,12 @@ val NotificationClass get() = Notification::class.java
|
||||
*/
|
||||
val Notification_BuilderClass get() = Notification.Builder::class.java
|
||||
|
||||
/**
|
||||
* 获得 [DialogInterface] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val DialogInterfaceClass get() = DialogInterface::class.java
|
||||
|
||||
/**
|
||||
* 获得 [DialogInterface.OnClickListener] 类型
|
||||
* @return [Class]
|
||||
@@ -363,4 +426,56 @@ val DialogInterface_OnCancelListenerClass get() = DialogInterface.OnCancelListen
|
||||
* 获得 [DialogInterface.OnDismissListener] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val DialogInterface_OnDismissListenerClass get() = DialogInterface.OnDismissListener::class.java
|
||||
val DialogInterface_OnDismissListenerClass get() = DialogInterface.OnDismissListener::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Environment] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val EnvironmentClass get() = Environment::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Process] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ProcessClass get() = Process::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Vibrator] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val VibratorClass get() = Vibrator::class.java
|
||||
|
||||
/**
|
||||
* 获得 [VibrationEffect] 类型
|
||||
*
|
||||
* ❗在 Android O (26) 及以上系统加入
|
||||
* @return [Class]
|
||||
*/
|
||||
val VibrationEffectClass get() = VibrationEffect::class.java
|
||||
|
||||
/**
|
||||
* 获得 [VibrationAttributes] 类型
|
||||
*
|
||||
* ❗在 Android R (30) 及以上系统加入
|
||||
* @return [Class]
|
||||
*/
|
||||
val VibrationAttributesClass get() = VibrationAttributes::class.java
|
||||
|
||||
/**
|
||||
* 获得 [SystemClock] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val SystemClockClass get() = SystemClock::class.java
|
||||
|
||||
/**
|
||||
* 获得 [PowerManager] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val PowerManagerClass get() = PowerManager::class.java
|
||||
|
||||
/**
|
||||
* 获得 [PowerManager.WakeLock] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val PowerManager_WakeLockClass get() = PowerManager.WakeLock::class.java
|
@@ -45,12 +45,6 @@ val TypefaceClass get() = Typeface::class.java
|
||||
*/
|
||||
val BitmapClass get() = Bitmap::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Drawable] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val DrawableClass get() = Drawable::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Icon] 类型
|
||||
*
|
||||
@@ -59,6 +53,18 @@ val DrawableClass get() = Drawable::class.java
|
||||
*/
|
||||
val IconClass get() = Icon::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Outline] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val OutlineClass get() = Outline::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Drawable] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val DrawableClass get() = Drawable::class.java
|
||||
|
||||
/**
|
||||
* 获得 [GradientDrawable] 类型
|
||||
* @return [Class]
|
||||
|
@@ -29,7 +29,6 @@
|
||||
|
||||
package com.highcapable.yukihookapi.hook.type.android
|
||||
|
||||
import android.graphics.Outline
|
||||
import android.util.AttributeSet
|
||||
import android.view.*
|
||||
import android.widget.*
|
||||
@@ -161,10 +160,10 @@ val LinearLayout_LayoutParamsClass get() = LinearLayout.LayoutParams::class.java
|
||||
val FrameLayout_LayoutParamsClass get() = FrameLayout.LayoutParams::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Outline] 类型
|
||||
* 获得 [TextClock] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val OutlineClass get() = Outline::class.java
|
||||
val TextClockClass get() = TextClock::class.java
|
||||
|
||||
/**
|
||||
* 获得 [View.OnClickListener] 类型
|
||||
|
@@ -450,4 +450,64 @@ val JavaMemberClass get() = Member::class.java
|
||||
* 获得 [Annotation] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val JavaAnnotationClass get() = Annotation::class.java
|
||||
val JavaAnnotationClass get() = Annotation::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Runtime] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val RuntimeClass get() = Runtime::class.java
|
||||
|
||||
/**
|
||||
* 获得 [NullPointerException] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val NullPointerExceptionClass get() = NullPointerException::class.java
|
||||
|
||||
/**
|
||||
* 获得 [NumberFormatException] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val NumberFormatExceptionClass get() = NumberFormatException::class.java
|
||||
|
||||
/**
|
||||
* 获得 [IllegalStateException] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val IllegalStateExceptionClass get() = IllegalStateException::class.java
|
||||
|
||||
/**
|
||||
* 获得 [RuntimeException] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val RuntimeExceptionClass get() = RuntimeException::class.java
|
||||
|
||||
/**
|
||||
* 获得 [NoSuchMethodError] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val NoSuchMethodErrorClass get() = NoSuchMethodError::class.java
|
||||
|
||||
/**
|
||||
* 获得 [NoSuchFieldError] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val NoSuchFieldErrorClass get() = NoSuchFieldError::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Error] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ErrorClass get() = Error::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Exception] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ExceptionClass get() = Exception::class.java
|
||||
|
||||
/**
|
||||
* 获得 [Throwable] 类型
|
||||
* @return [Class]
|
||||
*/
|
||||
val ThrowableClass get() = Throwable::class.java
|
@@ -79,12 +79,18 @@ class YukiHookModulePrefs(private val context: Context? = null) {
|
||||
/** 缓存数据 */
|
||||
private var xPrefCacheKeyValueFloats = HashMap<String, Float>()
|
||||
|
||||
/** 检查是否处于自定义 Hook API 状态 */
|
||||
private fun checkApiInBaseContext() {
|
||||
if (YukiHookAPI.isLoadedFromBaseContext) error("YukiHookModulePrefs not allowed in Custom Hook API")
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得 [XSharedPreferences] 对象
|
||||
* @return [XSharedPreferences]
|
||||
*/
|
||||
private val xPref
|
||||
get() = XSharedPreferences(YukiHookAPI.modulePackageName, prefsName).apply {
|
||||
checkApiInBaseContext()
|
||||
makeWorldReadable()
|
||||
reload()
|
||||
}
|
||||
@@ -95,9 +101,11 @@ class YukiHookModulePrefs(private val context: Context? = null) {
|
||||
*/
|
||||
private val sPref
|
||||
get() = try {
|
||||
checkApiInBaseContext()
|
||||
context?.getSharedPreferences(prefsName, Context.MODE_WORLD_READABLE)
|
||||
?: error("If you want to use module prefs,you must set the context instance first")
|
||||
} catch (_: Throwable) {
|
||||
checkApiInBaseContext()
|
||||
context?.getSharedPreferences(prefsName, Context.MODE_PRIVATE)
|
||||
?: error("If you want to use module prefs,you must set the context instance first")
|
||||
}
|
||||
|
Reference in New Issue
Block a user