Skip to content

Latest commit

Β 

History

History
100 lines (79 loc) Β· 2.21 KB

File metadata and controls

100 lines (79 loc) Β· 2.21 KB

🧩 Develop Your Own LSPosed Module

Template + walkthrough for building a custom Xposed module.

Setup

# Install LSPosed framework first (via Magisk)
# Then grab the LSPosed API

git clone https://github.com/LSPosed/LSPosed-Xposed_New_API.git
# or just the API JAR from releases

Basic Module Structure

MyModule/
β”œβ”€β”€ build.gradle
β”œβ”€β”€ src/main/
β”‚   β”œβ”€β”€ AndroidManifest.xml
β”‚   β”œβ”€β”€ assets/xposed_init
β”‚   └── java/com/example/mymodule/
β”‚       β”œβ”€β”€ HookEntry.kt
β”‚       └── MainActivity.kt
└── module.prop

module.prop

id=my_example_module
name=My Custom Module
version=1.0
versionCode=100
author=YourName
description=Does something cool with LSPosed
updateJson=https://raw.githubusercontent.com/.../update.json

Hook Example (Kotlin)

package com.example.mymodule

import de.robv.android.xposed.IXposedHookLoadPackage
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.XposedHelpers
import de.robv.android.xposed.callbacks.XC_LoadPackage

class HookEntry : IXposedHookLoadPackage {
    override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
        if (lpparam.packageName != "com.example.app") return

        // Hook a method
        XposedHelpers.findAndHookMethod(
            "com.example.app.MainActivity",
            lpparam.classLoader,
            "onCreate",
            android.os.Bundle::class.java,
            object : XC_MethodHook() {
                override fun afterHookedMethod(param: MethodHookParam) {
                    XposedHelpers.callMethod(
                        param.thisObject,
                        "setTitle",
                        "Hooked!"
                    )
                }
            }
        )
    }
}

Compile & Test

./gradlew build
# Output: build/outputs/apk/release/app-release.apk

# Install as Magisk module
adb install app-release.apk
# Open Magisk β†’ Modules β†’ Install from storage
# Select APK, reboot

Debugging

Enable logcat output in your hook:

import de.robv.android.xposed.XposedBridge

XposedBridge.log("DEBUG: Method called with $param")

Then view:

adb logcat | grep "DEBUG:"