Guide to building your own Xposed/LSPosed modules.
# Clone template
git clone https://github.com/LSPosed/LSPosed.git
# Or use Android Studio:
# File β New β Project β use module template from LSPosedMyModule/
βββ app/
β βββ build.gradle
β βββ src/main/
β βββ AndroidManifest.xml
β βββ resources/
β βββ java/
β βββ com/example/MyModule.kt
βββ template/
β βββ system.prop
βββ build.gradle
package com.example.mymodule
import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedBridge
import de.robv.android.xposed.callbacks.XC_LoadPackage
class Hook : IXposedHookLoadPackage {
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
if (lpparam.packageName != "com.target.app") return
// Hook a method
val targetClass = lpparam.classLoader.loadClass("com.target.app.MainActivity")
XposedBridge.hookAllMethods(targetClass, "onCreate", object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
XposedBridge.log("onCreate called!")
}
override fun afterHookedMethod(param: MethodHookParam) {
// Modify the result if needed
param.result = null
}
})
}
}# Build
./gradlew build
# Output APK: app/build/outputs/apk/release/app-release.apk
# Install (must have Magisk + Zygisk + LSPosed)
adb install app/build/outputs/apk/release/app-release.apk
# Enable in LSPosed Manager
# Restart target appval settingsClass = lpparam.classLoader.loadClass("android.provider.Settings")
XposedBridge.hookMethod(settingsClass.getMethod("getString", ...)) { hook ->
// Intercept settings
}val pmClass = lpparam.classLoader.loadClass("android.app.ApplicationPackageManager")
XposedBridge.hookMethod(pmClass.getMethod("checkPermission", ...)) { hook ->
hook.result = android.content.pm.PackageManager.PERMISSION_GRANTED
}val urlClass = lpparam.classLoader.loadClass("java.net.URL")
XposedBridge.hookMethod(urlClass.getMethod("openConnection")) { hook ->
// Intercept network calls
}- Build release APK
- Upload to XDA or LSPosed Module Repo
- Users install through LSPosed Manager β Modules
- Select app scope, reboot, done
Resources: