Migrate to YukiHookAPI 1.2.x
YukiHookAPI
has undergone a lot of adjustments since version 1.2.0
, you can read on to see what are the notes and new features.
Default Behavior Changes
Since version 1.2.0
, the isUsingResourcesHook
function in @InjectYukiHookWithXposed
is no longer enabled by default, please enable it manually if necessary.
Notice
Resources Hook will be removed in version 2.0.0 and is now marked LegacyResourcesHook.
You can use @OptIn(LegacyResourcesHook::class) to eliminate the warning, continue to use version 1.x.x.
New API
YukiHookAPI
introduced the New Hook Code Style (New API) of 2.0.0
in the 1.2.0
version, it is now in the experimental stage.
You can before the 2.0.0
version is officially released, start migrating and experience the New API.
Notice
All legacy APIs have been marked LegacyHookApi, you can use @OptIn(LegacyHookApi::class) to eliminate the warning and continue to use the legacy API.
For example, we want to Hook the test
method in the com.example.Test
class.
Legacy API
findClass("com.example.Test").hook {
injectMember {
method {
name = "test"
}
beforeHook {
// Your code here.
}
afterHook {
// Your code here.
}
}
}
New API
"com.example.Test".toClass()
.method {
name = "test"
}.hook {
before {
// Your code here.
}
after {
// Your code here.
}
}
The Hook object of the New API has been migrated from Class
to Member
, which will be more intuitive.
Differential Functions
The following are some of the different functions of connecting to the new version of the API.
New Multi-Hook Usage
Previously we needed to hook all methods that match conditions like this.
The following example
injectMembers {
method {
name { it.contains("some") }
}.all()
afterHook {
// Your code here.
}
}
Now, you can use the following method instead.
The following example
method {
name { it.contains("some") }
}.hookAll {
after {
// Your code here.
}
}
allMembers(...)
Usage
New Previously we needed to hook all methods and constructors like this.
The following example
injectMembers {
allMembers(MembersType.METHOD)
afterHook {
// Your code here.
}
}
injectMembers {
allMembers(MembersType.CONSTRUCTOR)
afterHook {
// Your code here.
}
}
Now, you can use the following method instead.
The following example
method().hookAll {
after {
// Your code here.
}
}
constructor().hookAll {
after {
// Your code here.
}
}
When the find conditions are not filled in, all members in the current Class
are obtained by default.
If you want to hook MembersType.ALL
, there is currently no direct method, but you can concatenate all members and then hook.
The following example
(method().giveAll() + constructor().giveAll()).hookAll {
after {
// Your code here.
}
}
But we do not recommend this approach, too many hook members at one time are uncontrollable and problems may occur.