mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 01:35:17 +08:00
refactor: merge HashSet/ArraySet to MutableSet, HashMap/ArrayMap to MutableMap, ArrayList to MutableList
This commit is contained in:
@@ -441,7 +441,7 @@ fun enclosing(vararg name: String)
|
||||
## FromPackageRules <span class="symbol">- class</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
|
||||
inner class FromPackageRules internal constructor(private val packages: MutableList<ClassRulesData.PackageRulesData>)
|
||||
```
|
||||
|
||||
**Change Records**
|
||||
|
@@ -259,7 +259,7 @@ fun contains(key: String): Boolean
|
||||
## all <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun all(): HashMap<String, Any?>
|
||||
fun all(): MutableMap<String, Any?>
|
||||
```
|
||||
|
||||
**Change Records**
|
||||
|
@@ -433,7 +433,7 @@ fun enclosing(vararg name: String)
|
||||
## FromPackageRules <span class="symbol">- class</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
|
||||
inner class FromPackageRules internal constructor(private val packages: MutableList<ClassRulesData.PackageRulesData>)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
@@ -251,7 +251,7 @@ fun contains(key: String): Boolean
|
||||
## all <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun all(): HashMap<String, Any?>
|
||||
fun all(): MutableMap<String, Any?>
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
@@ -29,7 +29,6 @@
|
||||
|
||||
package com.highcapable.yukihookapi.hook.core
|
||||
|
||||
import android.util.ArrayMap
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.annotation.CauseProblemsApi
|
||||
import com.highcapable.yukihookapi.hook.bean.HookClass
|
||||
@@ -97,13 +96,13 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
|
||||
|
||||
/** 当前 [YukiMemberHookCreator] 禁止执行 Hook 操作的条件数组 */
|
||||
private val disableCreatorRunHookReasons = HashSet<Boolean>()
|
||||
private val disableCreatorRunHookReasons = mutableSetOf<Boolean>()
|
||||
|
||||
/** 是否对当前 [YukiMemberHookCreator] 禁止执行 Hook 操作 */
|
||||
private var isDisableCreatorRunHook = false
|
||||
|
||||
/** 设置要 Hook 的 [Method]、[Constructor] */
|
||||
private var preHookMembers = ArrayMap<String, MemberHookCreator>()
|
||||
private var preHookMembers = mutableMapOf<String, MemberHookCreator>()
|
||||
|
||||
/**
|
||||
* 更新当前 [YukiMemberHookCreator] 禁止执行 Hook 操作的条件
|
||||
@@ -293,10 +292,10 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
private var isHookMemberSetup = false
|
||||
|
||||
/** 当前被 Hook 的 [Method]、[Constructor] 实例数组 */
|
||||
private val hookedMembers = HashSet<YukiMemberHook.HookedMember>()
|
||||
private val hookedMembers = mutableSetOf<YukiMemberHook.HookedMember>()
|
||||
|
||||
/** 当前需要 Hook 的 [Method]、[Constructor] */
|
||||
internal val members = HashSet<Member>()
|
||||
internal val members = mutableSetOf<Member>()
|
||||
|
||||
/**
|
||||
* 手动指定要 Hook 的 [Method]、[Constructor]
|
||||
@@ -322,7 +321,6 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
*
|
||||
* - 请现在迁移到 [MethodFinder] or [allMembers]
|
||||
* @param name 方法名称
|
||||
* @return [ArrayList]<[MethodFinder.Result.Instance]>
|
||||
*/
|
||||
@Deprecated(message = "请使用新方式来实现 Hook 所有方法", ReplaceWith("method { this.name = name }.all()"))
|
||||
fun allMethods(name: String) = method { this.name = name }.all()
|
||||
@@ -333,7 +331,6 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
||||
* - 此方法已弃用 - 在之后的版本中将直接被删除
|
||||
*
|
||||
* - 请现在迁移到 [ConstructorFinder] or [allMembers]
|
||||
* @return [ArrayList]<[ConstructorFinder.Result.Instance]>
|
||||
*/
|
||||
@Deprecated(
|
||||
message = "请使用新方式来实现 Hook 所有构造方法",
|
||||
|
@@ -30,7 +30,6 @@
|
||||
package com.highcapable.yukihookapi.hook.core
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.util.ArrayMap
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.bean.HookResources
|
||||
import com.highcapable.yukihookapi.hook.core.api.compat.HookApiCategoryHelper
|
||||
@@ -48,7 +47,7 @@ import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
|
||||
class YukiResourcesHookCreator internal constructor(internal val packageParam: PackageParam, internal val hookResources: HookResources) {
|
||||
|
||||
/** 设置要 Hook 的 Resources */
|
||||
private var preHookResources = ArrayMap<String, ResourcesHookCreator>()
|
||||
private var preHookResources = mutableMapOf<String, ResourcesHookCreator>()
|
||||
|
||||
/**
|
||||
* 注入要 Hook 的 Resources
|
||||
|
@@ -37,5 +37,5 @@ import java.lang.reflect.Member
|
||||
internal object YukiHookCacheStore {
|
||||
|
||||
/** 已经 Hook 的 [Member] 数组 */
|
||||
internal val hookedMembers = HashSet<YukiMemberHook.HookedMember>()
|
||||
internal val hookedMembers = mutableSetOf<YukiMemberHook.HookedMember>()
|
||||
}
|
@@ -30,7 +30,6 @@
|
||||
|
||||
package com.highcapable.yukihookapi.hook.core.finder.base.rules
|
||||
|
||||
import android.util.ArrayMap
|
||||
import java.lang.reflect.Field
|
||||
import java.lang.reflect.Member
|
||||
import java.lang.reflect.Method
|
||||
@@ -47,14 +46,14 @@ class ModifierRules private constructor(private val instance: Any) {
|
||||
internal companion object {
|
||||
|
||||
/** 当前实例数组 */
|
||||
private val instances = ArrayMap<Long, ModifierRules>()
|
||||
private val instances = mutableMapOf<Long, ModifierRules>()
|
||||
|
||||
/**
|
||||
* 获取模板字符串数组
|
||||
* @param value 唯一标识值
|
||||
* @return [ArrayList]<[String]>
|
||||
* @return [MutableList]<[String]>
|
||||
*/
|
||||
internal fun templates(value: Long) = instances[value]?.templates ?: arrayListOf()
|
||||
internal fun templates(value: Long) = instances[value]?.templates ?: mutableListOf()
|
||||
|
||||
/**
|
||||
* 创建实例
|
||||
@@ -66,7 +65,7 @@ class ModifierRules private constructor(private val instance: Any) {
|
||||
}
|
||||
|
||||
/** 当前模板字符串数组 */
|
||||
private val templates = ArrayList<String>()
|
||||
private val templates = mutableListOf<String>()
|
||||
|
||||
/**
|
||||
* [Class]、[Member] 类型是否包含 public
|
||||
|
@@ -176,7 +176,7 @@ class DexClassFinder internal constructor(
|
||||
* @param name 指定包名
|
||||
* @return [FromPackageRules] 可设置 [FromPackageRules.absolute] 标识包名绝对匹配
|
||||
*/
|
||||
fun from(vararg name: String) = FromPackageRules(arrayListOf<ClassRulesData.PackageRulesData>().also {
|
||||
fun from(vararg name: String) = FromPackageRules(mutableListOf<ClassRulesData.PackageRulesData>().also {
|
||||
name.takeIf { e -> e.isNotEmpty() }?.forEach { e -> it.add(rulesData.createPackageRulesData(e)) }
|
||||
if (it.isNotEmpty()) rulesData.fromPackages.addAll(it)
|
||||
})
|
||||
@@ -359,7 +359,7 @@ class DexClassFinder internal constructor(
|
||||
* 包名范围名称过滤匹配条件实现类
|
||||
* @param packages 包名数组
|
||||
*/
|
||||
inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>) {
|
||||
inner class FromPackageRules internal constructor(private val packages: MutableList<ClassRulesData.PackageRulesData>) {
|
||||
|
||||
/**
|
||||
* 设置包名绝对匹配
|
||||
|
@@ -62,7 +62,7 @@ import java.lang.reflect.Method
|
||||
* @param constroctorRules [Constructor] 查找条件数据数组
|
||||
*/
|
||||
internal class ClassRulesData internal constructor(
|
||||
var fromPackages: ArrayList<PackageRulesData> = arrayListOf(),
|
||||
var fromPackages: MutableList<PackageRulesData> = mutableListOf(),
|
||||
var fullName: NameRulesData? = null,
|
||||
var simpleName: NameRulesData? = null,
|
||||
var singleName: NameRulesData? = null,
|
||||
@@ -72,13 +72,13 @@ internal class ClassRulesData internal constructor(
|
||||
var isAnonymousClass: Boolean? = null,
|
||||
var isNoExtendsClass: Boolean? = null,
|
||||
var isNoImplementsClass: Boolean? = null,
|
||||
var extendsClass: ArrayList<String> = arrayListOf(),
|
||||
var implementsClass: ArrayList<String> = arrayListOf(),
|
||||
var enclosingClass: ArrayList<String> = arrayListOf(),
|
||||
var memberRules: ArrayList<MemberRulesData> = arrayListOf(),
|
||||
var fieldRules: ArrayList<FieldRulesData> = arrayListOf(),
|
||||
var methodRules: ArrayList<MethodRulesData> = arrayListOf(),
|
||||
var constroctorRules: ArrayList<ConstructorRulesData> = arrayListOf()
|
||||
var extendsClass: MutableList<String> = mutableListOf(),
|
||||
var implementsClass: MutableList<String> = mutableListOf(),
|
||||
var enclosingClass: MutableList<String> = mutableListOf(),
|
||||
var memberRules: MutableList<MemberRulesData> = mutableListOf(),
|
||||
var fieldRules: MutableList<FieldRulesData> = mutableListOf(),
|
||||
var methodRules: MutableList<MethodRulesData> = mutableListOf(),
|
||||
var constroctorRules: MutableList<ConstructorRulesData> = mutableListOf()
|
||||
) : BaseRulesData() {
|
||||
|
||||
/**
|
||||
|
@@ -102,7 +102,7 @@ class ConstructorRules internal constructor(private val rulesData: ConstructorRu
|
||||
fun param(vararg paramType: Any) {
|
||||
if (paramType.isEmpty()) error("paramTypes is empty, please use emptyParam() instead")
|
||||
rulesData.paramTypes =
|
||||
arrayListOf<Class<*>>().apply { paramType.forEach { add(it.compat(tag = "Constructor") ?: UndefinedType) } }.toTypedArray()
|
||||
mutableListOf<Class<*>>().apply { paramType.forEach { add(it.compat(tag = "Constructor") ?: UndefinedType) } }.toTypedArray()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -128,7 +128,7 @@ class MethodRules internal constructor(private val rulesData: MethodRulesData) :
|
||||
fun param(vararg paramType: Any) {
|
||||
if (paramType.isEmpty()) error("paramTypes is empty, please use emptyParam() instead")
|
||||
rulesData.paramTypes =
|
||||
arrayListOf<Class<*>>().apply { paramType.forEach { add(it.compat(tag = "Method") ?: UndefinedType) } }.toTypedArray()
|
||||
mutableListOf<Class<*>>().apply { paramType.forEach { add(it.compat(tag = "Method") ?: UndefinedType) } }.toTypedArray()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -138,7 +138,7 @@ class ConstructorFinder internal constructor(override val classSet: Class<*>? =
|
||||
*/
|
||||
fun param(vararg paramType: Any): IndexTypeCondition {
|
||||
if (paramType.isEmpty()) error("paramTypes is empty, please use emptyParam() instead")
|
||||
rulesData.paramTypes = arrayListOf<Class<*>>().apply { paramType.forEach { add(it.compat() ?: UndefinedType) } }.toTypedArray()
|
||||
rulesData.paramTypes = mutableListOf<Class<*>>().apply { paramType.forEach { add(it.compat() ?: UndefinedType) } }.toTypedArray()
|
||||
return IndexTypeCondition(IndexConfigType.MATCH)
|
||||
}
|
||||
|
||||
|
@@ -169,7 +169,7 @@ class MethodFinder internal constructor(override val classSet: Class<*>? = null)
|
||||
*/
|
||||
fun param(vararg paramType: Any): IndexTypeCondition {
|
||||
if (paramType.isEmpty()) error("paramTypes is empty, please use emptyParam() instead")
|
||||
rulesData.paramTypes = arrayListOf<Class<*>>().apply { paramType.forEach { add(it.compat() ?: UndefinedType) } }.toTypedArray()
|
||||
rulesData.paramTypes = mutableListOf<Class<*>>().apply { paramType.forEach { add(it.compat() ?: UndefinedType) } }.toTypedArray()
|
||||
return IndexTypeCondition(IndexConfigType.MATCH)
|
||||
}
|
||||
|
||||
|
@@ -29,7 +29,6 @@
|
||||
|
||||
package com.highcapable.yukihookapi.hook.core.finder.tools
|
||||
|
||||
import android.util.ArrayMap
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.core.finder.base.data.BaseRulesData
|
||||
import com.highcapable.yukihookapi.hook.core.finder.classes.data.ClassRulesData
|
||||
@@ -85,10 +84,10 @@ internal object ReflectionTool {
|
||||
private object MemoryCache {
|
||||
|
||||
/** 缓存的 [Class] 列表数组 */
|
||||
val dexClassListData = ArrayMap<String, List<String>>()
|
||||
val dexClassListData = mutableMapOf<String, List<String>>()
|
||||
|
||||
/** 缓存的 [Class] 对象数组 */
|
||||
val classData = ArrayMap<String, Class<*>?>()
|
||||
val classData = mutableMapOf<String, Class<*>?>()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -660,7 +659,7 @@ internal object ReflectionTool {
|
||||
*/
|
||||
private val Class<*>.existMembers
|
||||
get() = runCatching {
|
||||
arrayListOf<Member>().apply {
|
||||
mutableListOf<Member>().apply {
|
||||
addAll(declaredFields.toList())
|
||||
addAll(declaredMethods.toList())
|
||||
addAll(declaredConstructors.toList())
|
||||
|
@@ -30,7 +30,6 @@
|
||||
package com.highcapable.yukihookapi.hook.param
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.ArrayMap
|
||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator
|
||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator.MemberHookCreator
|
||||
import com.highcapable.yukihookapi.hook.core.api.helper.YukiHookHelper
|
||||
@@ -56,7 +55,7 @@ class HookParam internal constructor(
|
||||
internal companion object {
|
||||
|
||||
/** 每个回调方法体的数据存储实例数据 */
|
||||
private val dataExtras = ArrayMap<String, Bundle>()
|
||||
private val dataExtras = mutableMapOf<String, Bundle>()
|
||||
|
||||
/** [HookParam] 是否已经执行首次回调事件 */
|
||||
internal var isCallbackCalled = false
|
||||
|
@@ -102,10 +102,10 @@ internal inline fun <T> T.conditions(initiate: Conditions<T>.() -> Unit) = Condi
|
||||
internal class Conditions<T>(internal var value: T) {
|
||||
|
||||
/** 全部判断条件数组 (与) */
|
||||
private val andConditions = ArrayList<Boolean>()
|
||||
private val andConditions = mutableListOf<Boolean>()
|
||||
|
||||
/** 全部判断条件数组 (或) */
|
||||
private val optConditions = ArrayList<Boolean>()
|
||||
private val optConditions = mutableListOf<Boolean>()
|
||||
|
||||
/**
|
||||
* 添加与 (and) 条件
|
||||
|
@@ -30,7 +30,6 @@ package com.highcapable.yukihookapi.hook.xposed.bridge
|
||||
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.res.Resources
|
||||
import android.util.ArrayMap
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.core.api.compat.HookApiCategoryHelper
|
||||
import com.highcapable.yukihookapi.hook.factory.hasClass
|
||||
@@ -59,13 +58,13 @@ internal object YukiXposedModule : IYukiXposedModuleLifecycle {
|
||||
private var isInitializingZygote = false
|
||||
|
||||
/** 当前 [PackageParam] 实例数组 */
|
||||
private val packageParams = ArrayMap<String, PackageParam>()
|
||||
private val packageParams = mutableMapOf<String, PackageParam>()
|
||||
|
||||
/** 已在 [PackageParam] 中被装载的 APP 包名 */
|
||||
private val loadedPackageNames = HashSet<String>()
|
||||
private val loadedPackageNames = mutableSetOf<String>()
|
||||
|
||||
/** 当前 [PackageParamWrapper] 实例数组 */
|
||||
private val packageParamWrappers = ArrayMap<String, PackageParamWrapper>()
|
||||
private val packageParamWrappers = mutableMapOf<String, PackageParamWrapper>()
|
||||
|
||||
/** 当前 [PackageParam] 方法体回调 */
|
||||
internal var packageParamCallback: (PackageParam.() -> Unit)? = null
|
||||
|
@@ -155,7 +155,7 @@ class YukiHookDataChannel private constructor() {
|
||||
intent.action?.also { action ->
|
||||
runCatching {
|
||||
receiverCallbacks.takeIf { it.isNotEmpty() }?.apply {
|
||||
arrayListOf<String>().also { destroyedCallbacks ->
|
||||
mutableListOf<String>().also { destroyedCallbacks ->
|
||||
forEach { (key, it) ->
|
||||
when {
|
||||
(it.first as? Activity?)?.isDestroyed == true -> destroyedCallbacks.add(key)
|
||||
@@ -259,10 +259,10 @@ class YukiHookDataChannel private constructor() {
|
||||
* @param stringData [String] 数据数组
|
||||
*/
|
||||
internal inner class SegmentsTempData(
|
||||
var listData: ArrayList<List<*>> = arrayListOf(),
|
||||
var mapData: ArrayList<Map<*, *>> = arrayListOf(),
|
||||
var setData: ArrayList<Set<*>> = arrayListOf(),
|
||||
var stringData: ArrayList<String> = arrayListOf()
|
||||
var listData: MutableList<List<*>> = mutableListOf(),
|
||||
var mapData: MutableList<Map<*, *>> = mutableListOf(),
|
||||
var setData: MutableList<Set<*>> = mutableListOf(),
|
||||
var stringData: MutableList<String> = mutableListOf()
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -531,7 +531,7 @@ class YukiHookDataChannel private constructor() {
|
||||
if (tempData.listData.isEmpty() && wrapper.segmentsIndex > 0) return
|
||||
tempData.listData.add(wrapper.segmentsIndex, value)
|
||||
if (tempData.listData.size == wrapper.segmentsSize) {
|
||||
result(arrayListOf<Any?>().also { list -> tempData.listData.forEach { list.addAll(it) } } as T)
|
||||
result(mutableListOf<Any?>().also { list -> tempData.listData.forEach { list.addAll(it) } } as T)
|
||||
tempData.listData.clear()
|
||||
segmentsTempData.remove(wrapper.wrapperId)
|
||||
}
|
||||
@@ -540,7 +540,7 @@ class YukiHookDataChannel private constructor() {
|
||||
if (tempData.mapData.isEmpty() && wrapper.segmentsIndex > 0) return
|
||||
tempData.mapData.add(wrapper.segmentsIndex, value)
|
||||
if (tempData.mapData.size == wrapper.segmentsSize) {
|
||||
result(hashMapOf<Any?, Any?>().also { map -> tempData.mapData.forEach { it.forEach { (k, v) -> map[k] = v } } } as T)
|
||||
result(mutableMapOf<Any?, Any?>().also { map -> tempData.mapData.forEach { it.forEach { (k, v) -> map[k] = v } } } as T)
|
||||
tempData.mapData.clear()
|
||||
segmentsTempData.remove(wrapper.wrapperId)
|
||||
}
|
||||
@@ -549,7 +549,7 @@ class YukiHookDataChannel private constructor() {
|
||||
if (tempData.setData.isEmpty() && wrapper.segmentsIndex > 0) return
|
||||
tempData.setData.add(wrapper.segmentsIndex, value)
|
||||
if (tempData.setData.size == wrapper.segmentsSize) {
|
||||
result(hashSetOf<Any?>().also { set -> tempData.setData.forEach { set.addAll(it) } } as T)
|
||||
result(mutableSetOf<Any?>().also { set -> tempData.setData.forEach { set.addAll(it) } } as T)
|
||||
tempData.setData.clear()
|
||||
segmentsTempData.remove(wrapper.wrapperId)
|
||||
}
|
||||
@@ -623,13 +623,13 @@ class YukiHookDataChannel private constructor() {
|
||||
wrapper.isSegmentsType || isAllowSendTooLargeData -> pushReceiver(wrapper)
|
||||
dataByteSize >= receiverDataMaxByteSize -> when (wrapper.instance.value) {
|
||||
is List<*> -> (wrapper.instance.value as List<*>).also { value ->
|
||||
val segments = arrayListOf<List<*>>()
|
||||
var segment = arrayListOf<Any?>()
|
||||
val segments = mutableListOf<List<*>>()
|
||||
var segment = mutableListOf<Any?>()
|
||||
value.forEach {
|
||||
segment.add(it)
|
||||
if (segment.calDataByteSize() >= receiverDataSegmentMaxByteSize) {
|
||||
segments.add(segment)
|
||||
segment = arrayListOf()
|
||||
segment = mutableListOf()
|
||||
}
|
||||
}
|
||||
if (segment.isNotEmpty()) segments.add(segment)
|
||||
@@ -639,13 +639,13 @@ class YukiHookDataChannel private constructor() {
|
||||
} ?: loggerForUnprocessableDataByFirstElement(name = "List")
|
||||
}
|
||||
is Map<*, *> -> (wrapper.instance.value as Map<*, *>).also { value ->
|
||||
val segments = arrayListOf<Map<*, *>>()
|
||||
var segment = hashMapOf<Any?, Any?>()
|
||||
val segments = mutableListOf<Map<*, *>>()
|
||||
var segment = mutableMapOf<Any?, Any?>()
|
||||
value.forEach { (k, v) ->
|
||||
segment[k] = v
|
||||
if (segment.calDataByteSize() >= receiverDataSegmentMaxByteSize) {
|
||||
segments.add(segment)
|
||||
segment = hashMapOf()
|
||||
segment = mutableMapOf()
|
||||
}
|
||||
}
|
||||
if (segment.isNotEmpty()) segments.add(segment)
|
||||
@@ -655,13 +655,13 @@ class YukiHookDataChannel private constructor() {
|
||||
} ?: loggerForUnprocessableDataByFirstElement(name = "Map")
|
||||
}
|
||||
is Set<*> -> (wrapper.instance.value as Set<*>).also { value ->
|
||||
val segments = arrayListOf<Set<*>>()
|
||||
var segment = hashSetOf<Any?>()
|
||||
val segments = mutableListOf<Set<*>>()
|
||||
var segment = mutableSetOf<Any?>()
|
||||
value.forEach {
|
||||
segment.add(it)
|
||||
if (segment.calDataByteSize() >= receiverDataSegmentMaxByteSize) {
|
||||
segments.add(segment)
|
||||
segment = hashSetOf()
|
||||
segment = mutableSetOf()
|
||||
}
|
||||
}
|
||||
if (segment.isNotEmpty()) segments.add(segment)
|
||||
@@ -673,7 +673,7 @@ class YukiHookDataChannel private constructor() {
|
||||
is String -> (wrapper.instance.value as String).also { value ->
|
||||
/** 由于字符会被按照双字节计算 - 所以这里将限制字节大小除以 2 */
|
||||
val twoByteMaxSize = receiverDataMaxByteSize / 2
|
||||
val segments = arrayListOf<String>()
|
||||
val segments = mutableListOf<String>()
|
||||
for (i in 0..value.length step twoByteMaxSize)
|
||||
if (i + twoByteMaxSize <= value.length)
|
||||
segments.add(value.substring(i, i + twoByteMaxSize))
|
||||
|
@@ -47,7 +47,6 @@ import android.content.res.Configuration
|
||||
import android.content.res.Resources
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.util.ArrayMap
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.core.api.compat.HookApiProperty
|
||||
@@ -111,7 +110,7 @@ internal object AppParasitics {
|
||||
private var isClassLoaderHooked = false
|
||||
|
||||
/** [ClassLoader] 监听回调数组 */
|
||||
private var classLoaderCallbacks = ArrayMap<Int, (Class<*>) -> Unit>()
|
||||
private var classLoaderCallbacks = mutableMapOf<Int, (Class<*>) -> Unit>()
|
||||
|
||||
/**
|
||||
* 当前 Hook APP (宿主) 的全局生命周期 [Application]
|
||||
@@ -476,9 +475,9 @@ internal object AppParasitics {
|
||||
internal var onConfigurationChangedCallback: ((Application, Configuration) -> Unit)? = null
|
||||
|
||||
/** 系统广播监听回调 */
|
||||
internal val onReceiverActionsCallbacks = ArrayMap<String, Pair<Array<out String>, (Context, Intent) -> Unit>>()
|
||||
internal val onReceiverActionsCallbacks = mutableMapOf<String, Pair<Array<out String>, (Context, Intent) -> Unit>>()
|
||||
|
||||
/** 系统广播监听回调 */
|
||||
internal val onReceiverFiltersCallbacks = ArrayMap<String, Pair<IntentFilter, (Context, Intent) -> Unit>>()
|
||||
internal val onReceiverFiltersCallbacks = mutableMapOf<String, Pair<IntentFilter, (Context, Intent) -> Unit>>()
|
||||
}
|
||||
}
|
@@ -44,10 +44,10 @@ class ModuleClassLoader private constructor() : ClassLoader(AppParasitics.baseCl
|
||||
private var instance: ModuleClassLoader? = null
|
||||
|
||||
/** 排除的 Hook APP (宿主) [Class] 类名数组 */
|
||||
private val excludeHostClasses = HashSet<String>()
|
||||
private val excludeHostClasses = mutableSetOf<String>()
|
||||
|
||||
/** 排除的模块 [Class] 类名数组 */
|
||||
private val excludeModuleClasses = HashSet<String>()
|
||||
private val excludeModuleClasses = mutableSetOf<String>()
|
||||
|
||||
/**
|
||||
* 获取 [ModuleClassLoader] 单例
|
||||
|
@@ -34,7 +34,6 @@ package com.highcapable.yukihookapi.hook.xposed.prefs
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.util.ArrayMap
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.log.YLog
|
||||
@@ -68,10 +67,10 @@ class YukiHookPrefsBridge private constructor(private var context: Context? = nu
|
||||
private val isXposedEnvironment = YukiXposedModule.isXposedEnvironment
|
||||
|
||||
/** 当前缓存的 [XSharedPreferencesDelegate] 实例数组 */
|
||||
private val xPrefs = ArrayMap<String, XSharedPreferencesDelegate>()
|
||||
private val xPrefs = mutableMapOf<String, XSharedPreferencesDelegate>()
|
||||
|
||||
/** 当前缓存的 [SharedPreferences] 实例数组 */
|
||||
private val sPrefs = ArrayMap<String, SharedPreferences>()
|
||||
private val sPrefs = mutableMapOf<String, SharedPreferences>()
|
||||
|
||||
/**
|
||||
* 创建 [YukiHookPrefsBridge] 对象
|
||||
@@ -269,10 +268,10 @@ class YukiHookPrefsBridge private constructor(private var context: Context? = nu
|
||||
*
|
||||
* - 建议使用 [PrefsData] 创建模板并使用 [get] 获取数据
|
||||
* @param key 键值名称
|
||||
* @param value 默认数据 - [HashSet]<[String]>
|
||||
* @param value 默认数据 - [MutableSet]<[String]>
|
||||
* @return [Set]<[String]>
|
||||
*/
|
||||
fun getStringSet(key: String, value: Set<String> = hashSetOf()) = makeWorldReadable {
|
||||
fun getStringSet(key: String, value: Set<String> = mutableSetOf()) = makeWorldReadable {
|
||||
if (isXposedEnvironment && isUsingNativeStorage.not())
|
||||
currentXsp.getStringSet(key, value) ?: value
|
||||
else currentSp.getStringSet(key, value) ?: value
|
||||
@@ -385,9 +384,9 @@ class YukiHookPrefsBridge private constructor(private var context: Context? = nu
|
||||
* - 智能识别对应环境读取键值数据
|
||||
*
|
||||
* - 每次调用都会获取实时的数据 - 不受缓存控制 - 请勿在高并发场景中使用
|
||||
* @return [HashMap] 全部类型的键值数组
|
||||
* @return [MutableMap] 全部类型的键值数组
|
||||
*/
|
||||
fun all() = hashMapOf<String, Any?>().apply {
|
||||
fun all() = mutableMapOf<String, Any?>().apply {
|
||||
if (isXposedEnvironment && isUsingNativeStorage.not())
|
||||
currentXsp.all.forEach { (k, v) -> this[k] = v }
|
||||
else currentSp.all.forEach { (k, v) -> this[k] = v }
|
||||
|
Reference in New Issue
Block a user