Xpose 初探

Xpose 初探

github地址:https://github.com/rovo89/XposedInstaller

1:新建项目

新建工程XposeTest .修改manifest.xml

``

复制代码
<meta-data android:name="xposedmodule" android:value="true"></meta-data>
<meta-data android:name="xposeddescription" android:value="我是个test111"></meta-data>
<meta-data android:name="xposedminversion" android:value="30"></meta-data>

2:添加依赖

``

复制代码
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

注意:这里不要使用implementation。

3:添加测试代码

``

复制代码
public class MainActivity extends AppCompatActivity {
    private TextView tvDesc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvDesc=findViewById(R.id.tv_desc);
        tvDesc.setText("我是test");
    }
}

4:编写hook代码

新建HookModule类,继承IXposedHookLoadPackage,实现 handleLoadPackage方法。

测试实现效果:找到对应的按钮,替换文案。

``

复制代码
public class HookModule implements IXposedHookLoadPackage {

    public static final String TAG = "HookModule";

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        Log.e(TAG, "handleLoadPackage");
        XposedHelpers.findAndHookMethod("com.zh.xpose.MainActivity", lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                Log.e(TAG, "handleLoadPackage beforeHookedMethod ");
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                Log.e(TAG, "handleLoadPackage afterHookedMethod ");
                Class<?> aClass = lpparam.classLoader.loadClass("com.zh.xpose.MainActivity");
                Field field = aClass.getDeclaredField("tvDesc");
                field.setAccessible(true);
                TextView tvDesc = (TextView) field.get(param.thisObject);
                tvDesc.setText("我是hook后的test");
            }
        });
    }
}

5:运行

安装成功后会提示Xpose未激活,点击激活Xpose,选择某个应用,强制停止后重启该应用,会发现demo中的文案已经被替换了。

相关推荐
Kapaseker3 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴3 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭13 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab14 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe19 小时前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少1 天前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker1 天前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋1 天前
Android 协程时代,Handler 应该退休了吗?
android
火柴就是我2 天前
让我们实现一个更好看的内部阴影按钮
android·flutter