Template for creating your own Xposed/LSPosed module.
MyModule/
βββ common/
β βββ system.prop # optional system properties
β βββ service.sh # optional post-fs-data script
βββ src/main/
β βββ AndroidManifest.xml
β βββ java/com/example/mymodule/
β βββ MainHook.java
βββ module.prop # metadata
βββ build.gradle
βββ README.md
id=my_xposed_module
name=My Cool Module
version=1.0
versionCode=1
author=YourName
description=Does something cool with Xposed
minApi=31package com.example.mymodule;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XposedHelpers;
public class MainHook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
if (!lpparam.packageName.equals("com.example.targetapp")) {
return;
}
// Hook a method
XposedHelpers.findAndHookMethod(
"com.example.targetapp.MainActivity",
lpparam.classLoader,
"onCreate",
android.os.Bundle.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) {
// Your code here
XposedHelpers.callMethod(param.thisObject, "setTitle", "Hooked!");
}
}
);
}
}<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mymodule">
<application
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher">
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposedminversion"
android:value="90" />
<meta-data
android:name="xposeddescription"
android:value="@string/module_description" />
</application>
</manifest>plugins {
id 'com.android.application'
}
android {
compileSdk 33
defaultConfig {
applicationId "com.example.mymodule"
minSdk 31
targetSdk 33
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
}
}
}
dependencies {
compileOnly 'de.robv.android.xposed:api:82'
}./gradlew build
adb install build/outputs/apk/release/app-release.apk
# Then enable in LSPosed ManagerXposedHelpers.findAndHookConstructor(
"com.example.Class",
lpparam.classLoader,
String.class,
new XC_MethodHook() {
protected void afterHookedMethod(MethodHookParam param) {
// param.args[0] = first String arg
}
}
);XposedHelpers.findAndHookMethod(
"com.example.Class",
lpparam.classLoader,
"isRooted",
new XC_MethodReplacement() {
protected Object replaceHookedMethod(MethodHookParam param) {
return false; // Always return false
}
}
);XposedHelpers.findAndHookMethod(
"android.app.Activity",
lpparam.classLoader,
"onCreate",
Bundle.class,
new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) {
// Run before onCreate
}
protected void afterHookedMethod(MethodHookParam param) {
// Run after onCreate
}
}
);- Create test app with target activities
- Enable module in LSPosed
- Reload Xposed scope
- Verify hook fires via logcat
- Check
XposedBridge.log()for debug output