mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 01:35:17 +08:00
Fix allMethods hooking replace bug
This commit is contained in:
@@ -47,6 +47,10 @@ class MainActivity : AppCompatActivity() {
|
||||
appDemoFourthText.text = getRegularText(string = "Have fun day")
|
||||
appDemoFifthText.text = getDataText()
|
||||
appDemoSixthText.text = getArray(arrayOf("apple", "banana")).let { "${it[0]}, ${it[1]}" }
|
||||
appDemoSeventhText.text = Main().getTestResultFirst()
|
||||
appDemoEighthText.text = Main().getTestResultFirst(string = "Find something interesting")
|
||||
appDemoNinthText.text = Main().getTestResultLast()
|
||||
appDemoTenthText.text = Main().getTestResultLast(string = "This is the last sentence")
|
||||
appDemoButton.setOnClickListener { toast() }
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,15 @@
|
||||
*/
|
||||
package com.highcapable.yukihookapi.demo_app.utils
|
||||
|
||||
class Main(private val string: String) {
|
||||
class Main(private val string: String = "") {
|
||||
|
||||
fun getString() = string
|
||||
|
||||
fun getTestResultFirst() = "The world is beautiful"
|
||||
|
||||
fun getTestResultFirst(string: String) = string
|
||||
|
||||
fun getTestResultLast() = "The world is fantastic"
|
||||
|
||||
fun getTestResultLast(string: String) = string
|
||||
}
|
@@ -40,7 +40,31 @@
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_demo_fifth_text"
|
||||
android:id="@+id/app_demo_seventh_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="sample"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_demo_eighth_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="sample"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_demo_ninth_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="sample"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_demo_tenth_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
@@ -55,6 +79,14 @@
|
||||
android:text="sample"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_demo_fifth_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="sample"
|
||||
android:textSize="20sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/app_demo_button"
|
||||
android:layout_width="wrap_content"
|
||||
|
@@ -154,6 +154,18 @@ class HookEntry : YukiHookXposedInitProxy {
|
||||
args().set("I am hook constructor param")
|
||||
}
|
||||
}
|
||||
// 注入要 Hook 的方法
|
||||
injectMember {
|
||||
allMethods(name = "getTestResultFirst")
|
||||
// 执行替换 Hook
|
||||
replaceTo("I am hook all methods first")
|
||||
}
|
||||
// 注入要 Hook 的方法
|
||||
injectMember {
|
||||
allMethods(name = "getTestResultLast")
|
||||
// 执行替换 Hook
|
||||
replaceTo("I am hook all methods last")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -170,6 +170,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
||||
/**
|
||||
* 查找并 Hook [hookClass] 中指定 [name] 的全部方法
|
||||
*
|
||||
* 在同一个 [injectMember] 中
|
||||
*
|
||||
* 你只能使用一次 [allMethods]、[allConstructors]、[method]、[constructor] 方法 - 否则结果会被替换
|
||||
*
|
||||
* - ❗警告:无法准确处理每个方法的返回值和 param - 建议使用 [method] 对每个方法单独 Hook
|
||||
*
|
||||
* - ❗如果 [hookClass] 中没有方法可能会发生错误
|
||||
@@ -184,6 +188,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
||||
/**
|
||||
* 查找并 Hook [hookClass] 中的全部构造方法
|
||||
*
|
||||
* 在同一个 [injectMember] 中
|
||||
*
|
||||
* 你只能使用一次 [allMethods]、[allConstructors]、[method]、[constructor] 方法 - 否则结果会被替换
|
||||
*
|
||||
* - ❗警告:无法准确处理每个构造方法的 param - 建议使用 [constructor] 对每个构造方法单独 Hook
|
||||
*
|
||||
* - ❗如果 [hookClass] 中没有构造方法可能会发生错误
|
||||
@@ -197,7 +205,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
||||
/**
|
||||
* 查找 [hookClass] 需要 Hook 的方法
|
||||
*
|
||||
* 你只能使用一次 [method] 或 [constructor] 方法 - 否则结果会被替换
|
||||
* 在同一个 [injectMember] 中
|
||||
*
|
||||
* 你只能使用一次 [allMethods]、[allConstructors]、[method]、[constructor] 方法 - 否则结果会被替换
|
||||
* @param initiate 方法体
|
||||
* @return [MethodFinder.Result]
|
||||
*/
|
||||
@@ -213,7 +223,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
||||
/**
|
||||
* 查找 [hookClass] 需要 Hook 的构造方法
|
||||
*
|
||||
* 你只能使用一次 [method] 或 [constructor] 方法 - 否则结果会被替换
|
||||
* 在同一个 [injectMember] 中
|
||||
*
|
||||
* 你只能使用一次 [allMethods]、[allConstructors]、[method]、[constructor] 方法 - 否则结果会被替换
|
||||
* @param initiate 方法体
|
||||
* @return [ConstructorFinder.Result]
|
||||
*/
|
||||
@@ -493,7 +505,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
||||
*/
|
||||
internal val isNotIgnoredNoSuchMemberFailure get() = onNoSuchMemberFailureCallback == null && isNotIgnoredHookingFailure
|
||||
|
||||
override fun toString() = "${hookClass.name}$member$tag#YukiHookAPI"
|
||||
override fun toString() = "${hookClass.name}$allMethodsName$member$hookAllMembers$tag#YukiHookAPI"
|
||||
|
||||
/**
|
||||
* 监听 Hook 结果实现类
|
||||
|
Reference in New Issue
Block a user