xposed模块检测自身是否启用(kotlin)

Author Avatar
Sora 5月 29, 2021

作为一个xposed模块,检测自身是否启用显然是最基础的功能了。本教程使用kotlin,Java应该差不多。
原理是Hook自身,修改状态语以提示用户。

  • 1.在准备显示启用状态的Activity中定义函数isEnabled
     fun isEnabled(): String{
         return "模块未启用!"
     }
    
  • 2.创建窗口时将状态文本控件的值设为isEnabled函数的返回值:
     // 假设已经定义名为status的TextView控件并创建ViewBinding
     binding.status.text = isEnabled()
    
  • 3.在hook函数中篡改isEnabled函数的返回值
    public class Hook: IXposedHookLoadPackage{
     override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?){
         when(lpparam?.packageName){
             "com.example.xposed.module" -> { // 将这里的包名更改为自己的xposed模块
                 val clazz = lpparam.classLoader?.loadClass("com.example.xposed.module.MainActivity") // 将这里的Activity名称更改为显示状态的Activity名称
                 XposedHelpers.findAndHookMethod(clazz, "isEnabled", object : XC_MethodHook() {
                     override fun beforeHookedMethod(param: MethodHookParam?) {
                         super.beforeHookedMethod(param)
                     }
                     override fun afterHookedMethod(param: MethodHookParam?) {
                         param?.result = "模块已启用!"
                     }
                 })
             }
         }
     }
    }
    

效果图

  • 未启用时:

  • 已启用时: