Update version to 1.0.69

This commit is contained in:
2022-03-30 14:02:43 +08:00
parent e895759172
commit 7028a8d75f
5 changed files with 26 additions and 24 deletions

2
.idea/misc.xml generated
View File

@@ -12,7 +12,7 @@
</map>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="11" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@@ -2,7 +2,7 @@
![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen)
![Eclipse Marketplace](https://img.shields.io/badge/license-MIT-blue)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.0.68-green)
![Eclipse Marketplace](https://img.shields.io/badge/version-v1.0.69-green)
[![Telegram](https://img.shields.io/static/v1?label=Telegram&message=交流讨论&color=0088cc)](https://t.me/XiaofangInternet)
<br/><br/>
<img src="https://github.com/fankes/YuKiHookAPI/blob/master/img-src/icon.png" width = "100" height = "100"/>
@@ -188,7 +188,11 @@ class MainHook : YukiHookXposedInitProxy {
移除和修改 `MethodFinder``FieldFinder` 以及 `HookParam` 相关方法的调用;<br/>
增加更多 `Finder` 中的 `cast` 类型并支持 `cast` 为数组;<br/>
整体的性能和稳定性提升;<br/>
修复上一个版本可能存在的 BUG。
修复上一个版本可能存在的 BUG。<br/><br/>
- 1.0.69 <br/>
添加并改进一些方法功能的注释;<br/>
增加 Demo 中的更多示例 Hook 内容;<br/>
修复在一个 Hook 实例中,`allMethods` 多次使用时只有最后一个生效的问题,感谢 [WankkoRee](https://github.com/WankkoRee) 的反馈。
# Features

View File

@@ -10,7 +10,7 @@ ext {
devUser = "fankesyooni"
userEmail = "qzmmcn@163.com"
groupId = "com.highcapable.yukihookapi"
apiVersion = "1.0.68"
apiVersion = "1.0.69"
repoName = "YukiHookAPI"
repoDescription = "An efficient Kotlin version of the Xposed Hook API."
licenceName = "MIT License"

View File

@@ -73,10 +73,10 @@ object YukiHookAPI {
private var isXposedInitialized = false
/** 获取当前 [YukiHookAPI] 的版本 */
const val API_VERSION_NAME = "1.0.68"
const val API_VERSION_NAME = "1.0.69"
/** 获取当前 [YukiHookAPI] 的版本号 */
const val API_VERSION_CODE = 13
const val API_VERSION_CODE = 14
/**
* 模块是否装载了 Xposed 回调方法

View File

@@ -57,15 +57,15 @@ import java.lang.reflect.Member
class YukiHookCreater(private val packageParam: PackageParam, private val hookClass: HookClass) {
/**
* Hook 全部方法的标识
* Hook 模式定义
*/
enum class HookAllMembers { HOOK_ALL_METHODS, HOOK_ALL_CONSTRUCTORS, HOOK_NONE }
enum class HookMemberMode { HOOK_ALL_METHODS, HOOK_ALL_CONSTRUCTORS, HOOK_CONVENTIONAL }
/** 是否对当前 [YukiHookCreater] 禁止执行 Hook 操作 */
private var isDisableCreaterRunHook = false
/** 设置要 Hook 的方法、构造类 */
private var hookMembers = HashMap<String, MemberHookCreater>()
private var hookMembers = HashSet<MemberHookCreater>()
/** [hookClass] 找不到时出现的错误回调 */
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
@@ -87,9 +87,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
* @return [MemberHookCreater.Result]
*/
fun injectMember(tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
MemberHookCreater(tag).apply(initiate).apply {
hookMembers[toString()] = this
}.build()
MemberHookCreater(tag).apply(initiate).apply { hookMembers.add(this) }.build()
/**
* Hook 执行入口
@@ -104,7 +102,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
else Thread {
SystemClock.sleep(10)
if (isDisableCreaterRunHook.not() && hookClass.instance != null) hookMembers.forEach { (_, member) -> member.hook() }
if (isDisableCreaterRunHook.not() && hookClass.instance != null) hookMembers.forEach { it.hook() }
if (isDisableCreaterRunHook.not() && hookClass.instance == null)
if (onHookClassNotFoundFailureCallback == null)
yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable)
@@ -154,8 +152,8 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
/** 是否对当前 [MemberHookCreater] 禁止执行 Hook 操作 */
private var isDisableMemberRunHook = false
/** 是否 Hook 全部方法以及类型 */
private var hookAllMembers = HookAllMembers.HOOK_NONE
/** Hook 当前模式类型 */
private var hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
/** 全部方法的名称 */
private var allMethodsName = ""
@@ -181,7 +179,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
*/
fun allMethods(name: String) {
allMethodsName = name
hookAllMembers = HookAllMembers.HOOK_ALL_METHODS
hookMemberMode = HookMemberMode.HOOK_ALL_METHODS
isHookMemberSetup = true
}
@@ -198,7 +196,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
*/
fun allConstructors() {
allMethodsName = "<init>"
hookAllMembers = HookAllMembers.HOOK_ALL_CONSTRUCTORS
hookMemberMode = HookMemberMode.HOOK_ALL_CONSTRUCTORS
isHookMemberSetup = true
}
@@ -212,7 +210,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
* @return [MethodFinder.Result]
*/
fun method(initiate: MethodFinder.() -> Unit) = try {
hookAllMembers = HookAllMembers.HOOK_NONE
hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
isHookMemberSetup = true
MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
} catch (e: Throwable) {
@@ -230,7 +228,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
* @return [ConstructorFinder.Result]
*/
fun constructor(initiate: ConstructorFinder.() -> Unit = {}) = try {
hookAllMembers = HookAllMembers.HOOK_NONE
hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
isHookMemberSetup = true
ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
} catch (e: Throwable) {
@@ -432,7 +430,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}
}
}
if (hookAllMembers == HookAllMembers.HOOK_NONE)
if (hookMemberMode == HookMemberMode.HOOK_CONVENTIONAL)
if (member != null)
member.also { member ->
runCatching {
@@ -458,12 +456,12 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
)
}
else runCatching {
when (hookAllMembers) {
HookAllMembers.HOOK_ALL_METHODS ->
when (hookMemberMode) {
HookMemberMode.HOOK_ALL_METHODS ->
if (isReplaceHookMode)
XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent)
else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook)
HookAllMembers.HOOK_ALL_CONSTRUCTORS ->
HookMemberMode.HOOK_ALL_CONSTRUCTORS ->
if (isReplaceHookMode)
XposedBridge.hookAllConstructors(hookClass.instance, replaceMent)
else XposedBridge.hookAllConstructors(hookClass.instance, beforeAfterHook)
@@ -505,7 +503,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
*/
internal val isNotIgnoredNoSuchMemberFailure get() = onNoSuchMemberFailureCallback == null && isNotIgnoredHookingFailure
override fun toString() = "${hookClass.name}$allMethodsName$member$hookAllMembers$tag#YukiHookAPI"
override fun toString() = "[tag] $tag [class] $hookClass [member] $member $allMethodsName [mode] $hookMemberMode"
/**
* 监听 Hook 结果实现类