mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Update version to 1.0.69
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -12,7 +12,7 @@
|
|||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</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" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
[](https://t.me/XiaofangInternet)
|
[](https://t.me/XiaofangInternet)
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<img src="https://github.com/fankes/YuKiHookAPI/blob/master/img-src/icon.png" width = "100" height = "100"/>
|
<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/>
|
移除和修改 `MethodFinder`、`FieldFinder` 以及 `HookParam` 相关方法的调用;<br/>
|
||||||
增加更多 `Finder` 中的 `cast` 类型并支持 `cast` 为数组;<br/>
|
增加更多 `Finder` 中的 `cast` 类型并支持 `cast` 为数组;<br/>
|
||||||
整体的性能和稳定性提升;<br/>
|
整体的性能和稳定性提升;<br/>
|
||||||
修复上一个版本可能存在的 BUG。
|
修复上一个版本可能存在的 BUG。<br/><br/>
|
||||||
|
- 1.0.69 <br/>
|
||||||
|
添加并改进一些方法功能的注释;<br/>
|
||||||
|
增加 Demo 中的更多示例 Hook 内容;<br/>
|
||||||
|
修复在一个 Hook 实例中,`allMethods` 多次使用时只有最后一个生效的问题,感谢 [WankkoRee](https://github.com/WankkoRee) 的反馈。
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ ext {
|
|||||||
devUser = "fankesyooni"
|
devUser = "fankesyooni"
|
||||||
userEmail = "qzmmcn@163.com"
|
userEmail = "qzmmcn@163.com"
|
||||||
groupId = "com.highcapable.yukihookapi"
|
groupId = "com.highcapable.yukihookapi"
|
||||||
apiVersion = "1.0.68"
|
apiVersion = "1.0.69"
|
||||||
repoName = "YukiHookAPI"
|
repoName = "YukiHookAPI"
|
||||||
repoDescription = "An efficient Kotlin version of the Xposed Hook API."
|
repoDescription = "An efficient Kotlin version of the Xposed Hook API."
|
||||||
licenceName = "MIT License"
|
licenceName = "MIT License"
|
||||||
|
@@ -73,10 +73,10 @@ object YukiHookAPI {
|
|||||||
private var isXposedInitialized = false
|
private var isXposedInitialized = false
|
||||||
|
|
||||||
/** 获取当前 [YukiHookAPI] 的版本 */
|
/** 获取当前 [YukiHookAPI] 的版本 */
|
||||||
const val API_VERSION_NAME = "1.0.68"
|
const val API_VERSION_NAME = "1.0.69"
|
||||||
|
|
||||||
/** 获取当前 [YukiHookAPI] 的版本号 */
|
/** 获取当前 [YukiHookAPI] 的版本号 */
|
||||||
const val API_VERSION_CODE = 13
|
const val API_VERSION_CODE = 14
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块是否装载了 Xposed 回调方法
|
* 模块是否装载了 Xposed 回调方法
|
||||||
|
@@ -57,15 +57,15 @@ import java.lang.reflect.Member
|
|||||||
class YukiHookCreater(private val packageParam: PackageParam, private val hookClass: HookClass) {
|
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 操作 */
|
/** 是否对当前 [YukiHookCreater] 禁止执行 Hook 操作 */
|
||||||
private var isDisableCreaterRunHook = false
|
private var isDisableCreaterRunHook = false
|
||||||
|
|
||||||
/** 设置要 Hook 的方法、构造类 */
|
/** 设置要 Hook 的方法、构造类 */
|
||||||
private var hookMembers = HashMap<String, MemberHookCreater>()
|
private var hookMembers = HashSet<MemberHookCreater>()
|
||||||
|
|
||||||
/** [hookClass] 找不到时出现的错误回调 */
|
/** [hookClass] 找不到时出现的错误回调 */
|
||||||
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
|
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
|
||||||
@@ -87,9 +87,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
* @return [MemberHookCreater.Result]
|
* @return [MemberHookCreater.Result]
|
||||||
*/
|
*/
|
||||||
fun injectMember(tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
fun injectMember(tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
||||||
MemberHookCreater(tag).apply(initiate).apply {
|
MemberHookCreater(tag).apply(initiate).apply { hookMembers.add(this) }.build()
|
||||||
hookMembers[toString()] = this
|
|
||||||
}.build()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook 执行入口
|
* Hook 执行入口
|
||||||
@@ -104,7 +102,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
|
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
|
||||||
else Thread {
|
else Thread {
|
||||||
SystemClock.sleep(10)
|
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 (isDisableCreaterRunHook.not() && hookClass.instance == null)
|
||||||
if (onHookClassNotFoundFailureCallback == null)
|
if (onHookClassNotFoundFailureCallback == null)
|
||||||
yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
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 操作 */
|
/** 是否对当前 [MemberHookCreater] 禁止执行 Hook 操作 */
|
||||||
private var isDisableMemberRunHook = false
|
private var isDisableMemberRunHook = false
|
||||||
|
|
||||||
/** 是否 Hook 全部方法以及类型 */
|
/** Hook 当前模式类型 */
|
||||||
private var hookAllMembers = HookAllMembers.HOOK_NONE
|
private var hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
|
||||||
|
|
||||||
/** 全部方法的名称 */
|
/** 全部方法的名称 */
|
||||||
private var allMethodsName = ""
|
private var allMethodsName = ""
|
||||||
@@ -181,7 +179,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
*/
|
*/
|
||||||
fun allMethods(name: String) {
|
fun allMethods(name: String) {
|
||||||
allMethodsName = name
|
allMethodsName = name
|
||||||
hookAllMembers = HookAllMembers.HOOK_ALL_METHODS
|
hookMemberMode = HookMemberMode.HOOK_ALL_METHODS
|
||||||
isHookMemberSetup = true
|
isHookMemberSetup = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +196,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
*/
|
*/
|
||||||
fun allConstructors() {
|
fun allConstructors() {
|
||||||
allMethodsName = "<init>"
|
allMethodsName = "<init>"
|
||||||
hookAllMembers = HookAllMembers.HOOK_ALL_CONSTRUCTORS
|
hookMemberMode = HookMemberMode.HOOK_ALL_CONSTRUCTORS
|
||||||
isHookMemberSetup = true
|
isHookMemberSetup = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,7 +210,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
* @return [MethodFinder.Result]
|
* @return [MethodFinder.Result]
|
||||||
*/
|
*/
|
||||||
fun method(initiate: MethodFinder.() -> Unit) = try {
|
fun method(initiate: MethodFinder.() -> Unit) = try {
|
||||||
hookAllMembers = HookAllMembers.HOOK_NONE
|
hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
|
||||||
isHookMemberSetup = true
|
isHookMemberSetup = true
|
||||||
MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
|
MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@@ -230,7 +228,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
* @return [ConstructorFinder.Result]
|
* @return [ConstructorFinder.Result]
|
||||||
*/
|
*/
|
||||||
fun constructor(initiate: ConstructorFinder.() -> Unit = {}) = try {
|
fun constructor(initiate: ConstructorFinder.() -> Unit = {}) = try {
|
||||||
hookAllMembers = HookAllMembers.HOOK_NONE
|
hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL
|
||||||
isHookMemberSetup = true
|
isHookMemberSetup = true
|
||||||
ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
|
ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true)
|
||||||
} catch (e: Throwable) {
|
} 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)
|
if (member != null)
|
||||||
member.also { member ->
|
member.also { member ->
|
||||||
runCatching {
|
runCatching {
|
||||||
@@ -458,12 +456,12 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
else runCatching {
|
else runCatching {
|
||||||
when (hookAllMembers) {
|
when (hookMemberMode) {
|
||||||
HookAllMembers.HOOK_ALL_METHODS ->
|
HookMemberMode.HOOK_ALL_METHODS ->
|
||||||
if (isReplaceHookMode)
|
if (isReplaceHookMode)
|
||||||
XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent)
|
XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent)
|
||||||
else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook)
|
else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook)
|
||||||
HookAllMembers.HOOK_ALL_CONSTRUCTORS ->
|
HookMemberMode.HOOK_ALL_CONSTRUCTORS ->
|
||||||
if (isReplaceHookMode)
|
if (isReplaceHookMode)
|
||||||
XposedBridge.hookAllConstructors(hookClass.instance, replaceMent)
|
XposedBridge.hookAllConstructors(hookClass.instance, replaceMent)
|
||||||
else XposedBridge.hookAllConstructors(hookClass.instance, beforeAfterHook)
|
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
|
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 结果实现类
|
* 监听 Hook 结果实现类
|
||||||
|
Reference in New Issue
Block a user