mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 18:55:35 +08:00
...
This commit is contained in:
@@ -66,6 +66,13 @@ object YukiHookAPI {
|
|||||||
@DoNotUseField
|
@DoNotUseField
|
||||||
var modulePackageName = ""
|
var modulePackageName = ""
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标识是否从自定义 Hook API 装载
|
||||||
|
*
|
||||||
|
* - ❗这是私有 API - 请勿手动修改 - 否则会导致功能判断错误
|
||||||
|
*/
|
||||||
|
internal var isLoadedFromBaseContext = false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配置 YukiHookAPI
|
* 配置 YukiHookAPI
|
||||||
*/
|
*/
|
||||||
@@ -129,6 +136,7 @@ object YukiHookAPI {
|
|||||||
* @param initiate Hook 方法体
|
* @param initiate Hook 方法体
|
||||||
*/
|
*/
|
||||||
fun encase(initiate: PackageParam.() -> Unit) {
|
fun encase(initiate: PackageParam.() -> Unit) {
|
||||||
|
isLoadedFromBaseContext = false
|
||||||
if (hasXposedBridge)
|
if (hasXposedBridge)
|
||||||
packageParamCallback = initiate
|
packageParamCallback = initiate
|
||||||
else printNoXposedBridge()
|
else printNoXposedBridge()
|
||||||
@@ -144,6 +152,7 @@ object YukiHookAPI {
|
|||||||
* @throws IllegalStateException 如果 [hooker] 是空的
|
* @throws IllegalStateException 如果 [hooker] 是空的
|
||||||
*/
|
*/
|
||||||
fun encase(vararg hooker: YukiBaseHooker) {
|
fun encase(vararg hooker: YukiBaseHooker) {
|
||||||
|
isLoadedFromBaseContext = false
|
||||||
if (hasXposedBridge)
|
if (hasXposedBridge)
|
||||||
packageParamCallback = {
|
packageParamCallback = {
|
||||||
if (hooker.isNotEmpty())
|
if (hooker.isNotEmpty())
|
||||||
@@ -167,6 +176,7 @@ object YukiHookAPI {
|
|||||||
* @param initiate Hook 方法体
|
* @param initiate Hook 方法体
|
||||||
*/
|
*/
|
||||||
fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit) {
|
fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit) {
|
||||||
|
isLoadedFromBaseContext = true
|
||||||
if (hasXposedBridge)
|
if (hasXposedBridge)
|
||||||
(if (baseContext != null) initiate.invoke(baseContext.packagePararm))
|
(if (baseContext != null) initiate.invoke(baseContext.packagePararm))
|
||||||
else printNoXposedBridge()
|
else printNoXposedBridge()
|
||||||
@@ -187,6 +197,7 @@ object YukiHookAPI {
|
|||||||
* @throws IllegalStateException 如果 [hooker] 是空的
|
* @throws IllegalStateException 如果 [hooker] 是空的
|
||||||
*/
|
*/
|
||||||
fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker) {
|
fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker) {
|
||||||
|
isLoadedFromBaseContext = true
|
||||||
if (hasXposedBridge)
|
if (hasXposedBridge)
|
||||||
(if (baseContext != null)
|
(if (baseContext != null)
|
||||||
if (hooker.isNotEmpty())
|
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?) =
|
inline fun <reified T> Method.invokeStatic(vararg param: Any?) =
|
||||||
if (param.isNotEmpty())
|
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}")
|
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?) =
|
inline fun <reified T> Method.invokeAny(any: Any?, vararg param: Any?) =
|
||||||
if (param.isNotEmpty())
|
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}")
|
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.os.*
|
||||||
import android.service.notification.StatusBarNotification
|
import android.service.notification.StatusBarNotification
|
||||||
import android.text.SpannableStringBuilder
|
import android.text.SpannableStringBuilder
|
||||||
import android.util.ArrayMap
|
import android.util.*
|
||||||
import android.util.ArraySet
|
|
||||||
import android.util.Base64
|
|
||||||
import android.util.DisplayMetrics
|
|
||||||
import android.view.Display
|
import android.view.Display
|
||||||
import android.view.Window
|
import android.view.Window
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.highcapable.yukihookapi.hook.factory.classOf
|
import com.highcapable.yukihookapi.hook.factory.classOf
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [android.R] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val AndroidRClass get() = android.R::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Context] 类型
|
* 获得 [Context] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -103,6 +106,12 @@ val LoadedApkClass get() = classOf(name = "android.app.LoadedApk")
|
|||||||
*/
|
*/
|
||||||
val ActivityClass get() = Activity::class.java
|
val ActivityClass get() = Activity::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Looper] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LooperClass get() = Looper::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Fragment] 类型 - Support
|
* 获得 [Fragment] 类型 - Support
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -127,12 +136,30 @@ val FragmentActivityClass_AndroidSupport get() = classOf(name = "android.support
|
|||||||
*/
|
*/
|
||||||
val FragmentActivityClass_AndroidX get() = classOf(name = "androidx.fragment.app.FragmentActivity")
|
val FragmentActivityClass_AndroidX get() = classOf(name = "androidx.fragment.app.FragmentActivity")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DocumentFile] 类型 - AndroidX
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DocumentFileClass get() = classOf(name = "androidx.documentfile.provider.DocumentFile")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Service] 类型
|
* 获得 [Service] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val ServiceClass get() = Service::class.java
|
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] 类型
|
* 获得 [BroadcastReceiver] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -145,6 +172,12 @@ val BroadcastReceiverClass get() = BroadcastReceiver::class.java
|
|||||||
*/
|
*/
|
||||||
val BundleClass get() = Bundle::class.java
|
val BundleClass get() = Bundle::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [BaseBundle] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val BaseBundleClass get() = BaseBundle::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Resources] 类型
|
* 获得 [Resources] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -195,6 +228,18 @@ val Handler_CallbackClass get() = Handler.Callback::class.java
|
|||||||
*/
|
*/
|
||||||
val MessageClass get() = Message::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] 类型
|
* 获得 [AsyncTask] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -215,12 +260,24 @@ val SimpleDateFormatClass_Android get() = SimpleDateFormat::class.java
|
|||||||
*/
|
*/
|
||||||
val Base64Class_Android get() = Base64::class.java
|
val Base64Class_Android get() = Base64::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Window] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val WindowClass get() = Window::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [WindowManager] 类型
|
* 获得 [WindowManager] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val WindowManagerClass get() = WindowManager::class.java
|
val WindowManagerClass get() = WindowManager::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Parcel] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val ParcelClass get() = Parcel::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Parcelable] 类型
|
* 获得 [Parcelable] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -293,12 +350,6 @@ val SharedPreferencesClass get() = SharedPreferences::class.java
|
|||||||
*/
|
*/
|
||||||
val SpannableStringBuilderClass get() = SpannableStringBuilder::class.java
|
val SpannableStringBuilderClass get() = SpannableStringBuilder::class.java
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得 [Window] 类型
|
|
||||||
* @return [Class]
|
|
||||||
*/
|
|
||||||
val WindowClass get() = Window::class.java
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [MediaPlayer] 类型
|
* 获得 [MediaPlayer] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -311,24 +362,30 @@ val MediaPlayerClass get() = MediaPlayer::class.java
|
|||||||
*/
|
*/
|
||||||
val ProgressDialogClass get() = ProgressDialog::class.java
|
val ProgressDialogClass get() = ProgressDialog::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Log] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val LogClass get() = Log::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Build] 类型
|
* 获得 [Build] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val BuildClass get() = Build::class.java
|
val BuildClass get() = Build::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [Xml] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val XmlClass get() = Xml::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [ContrastColorUtil] 类型
|
* 获得 [ContrastColorUtil] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val ContrastColorUtilClass get() = classOf(name = "com.android.internal.util.ContrastColorUtil")
|
val ContrastColorUtilClass get() = classOf(name = "com.android.internal.util.ContrastColorUtil")
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得 [DialogInterface] 类型
|
|
||||||
* @return [Class]
|
|
||||||
*/
|
|
||||||
val DialogInterfaceClass get() = DialogInterface::class.java
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [StatusBarNotification] 类型
|
* 获得 [StatusBarNotification] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -347,6 +404,12 @@ val NotificationClass get() = Notification::class.java
|
|||||||
*/
|
*/
|
||||||
val Notification_BuilderClass get() = Notification.Builder::class.java
|
val Notification_BuilderClass get() = Notification.Builder::class.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得 [DialogInterface] 类型
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
val DialogInterfaceClass get() = DialogInterface::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [DialogInterface.OnClickListener] 类型
|
* 获得 [DialogInterface.OnClickListener] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
@@ -364,3 +427,55 @@ val DialogInterface_OnCancelListenerClass get() = DialogInterface.OnCancelListen
|
|||||||
* @return [Class]
|
* @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
|
val BitmapClass get() = Bitmap::class.java
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得 [Drawable] 类型
|
|
||||||
* @return [Class]
|
|
||||||
*/
|
|
||||||
val DrawableClass get() = Drawable::class.java
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Icon] 类型
|
* 获得 [Icon] 类型
|
||||||
*
|
*
|
||||||
@@ -59,6 +53,18 @@ val DrawableClass get() = Drawable::class.java
|
|||||||
*/
|
*/
|
||||||
val IconClass get() = Icon::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] 类型
|
* 获得 [GradientDrawable] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
|
@@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.type.android
|
package com.highcapable.yukihookapi.hook.type.android
|
||||||
|
|
||||||
import android.graphics.Outline
|
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
@@ -161,10 +160,10 @@ val LinearLayout_LayoutParamsClass get() = LinearLayout.LayoutParams::class.java
|
|||||||
val FrameLayout_LayoutParamsClass get() = FrameLayout.LayoutParams::class.java
|
val FrameLayout_LayoutParamsClass get() = FrameLayout.LayoutParams::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [Outline] 类型
|
* 获得 [TextClock] 类型
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
*/
|
*/
|
||||||
val OutlineClass get() = Outline::class.java
|
val TextClockClass get() = TextClock::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [View.OnClickListener] 类型
|
* 获得 [View.OnClickListener] 类型
|
||||||
|
@@ -451,3 +451,63 @@ val JavaMemberClass get() = Member::class.java
|
|||||||
* @return [Class]
|
* @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>()
|
private var xPrefCacheKeyValueFloats = HashMap<String, Float>()
|
||||||
|
|
||||||
|
/** 检查是否处于自定义 Hook API 状态 */
|
||||||
|
private fun checkApiInBaseContext() {
|
||||||
|
if (YukiHookAPI.isLoadedFromBaseContext) error("YukiHookModulePrefs not allowed in Custom Hook API")
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 [XSharedPreferences] 对象
|
* 获得 [XSharedPreferences] 对象
|
||||||
* @return [XSharedPreferences]
|
* @return [XSharedPreferences]
|
||||||
*/
|
*/
|
||||||
private val xPref
|
private val xPref
|
||||||
get() = XSharedPreferences(YukiHookAPI.modulePackageName, prefsName).apply {
|
get() = XSharedPreferences(YukiHookAPI.modulePackageName, prefsName).apply {
|
||||||
|
checkApiInBaseContext()
|
||||||
makeWorldReadable()
|
makeWorldReadable()
|
||||||
reload()
|
reload()
|
||||||
}
|
}
|
||||||
@@ -95,9 +101,11 @@ class YukiHookModulePrefs(private val context: Context? = null) {
|
|||||||
*/
|
*/
|
||||||
private val sPref
|
private val sPref
|
||||||
get() = try {
|
get() = try {
|
||||||
|
checkApiInBaseContext()
|
||||||
context?.getSharedPreferences(prefsName, Context.MODE_WORLD_READABLE)
|
context?.getSharedPreferences(prefsName, Context.MODE_WORLD_READABLE)
|
||||||
?: error("If you want to use module prefs,you must set the context instance first")
|
?: error("If you want to use module prefs,you must set the context instance first")
|
||||||
} catch (_: Throwable) {
|
} catch (_: Throwable) {
|
||||||
|
checkApiInBaseContext()
|
||||||
context?.getSharedPreferences(prefsName, Context.MODE_PRIVATE)
|
context?.getSharedPreferences(prefsName, Context.MODE_PRIVATE)
|
||||||
?: error("If you want to use module prefs,you must set the context instance first")
|
?: error("If you want to use module prefs,you must set the context instance first")
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user