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中的文案已经被替换了。

相关推荐
00后程序员张5 小时前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
悠哉清闲7 小时前
不同车型drawable不同
android·开发语言
00后程序员张10 小时前
在 iOS 设备上同时监控 CPU、GPU 与内存的方法
android·ios·小程序·https·uni-app·iphone·webview
测试_AI_一辰10 小时前
项目实践笔记 9:打卡/日报Agent项目Bug 修改与稳定性收口(v1.0)
android·开发语言·人工智能·功能测试·ai编程·ab测试
马 孔 多 在下雨10 小时前
Kotlin协程进阶王炸之作-Kotlin的协程到底是什么
android·开发语言·kotlin
冬奇Lab10 小时前
【Kotlin系列15】多平台开发实战:一次编写,多端运行
android·开发语言·kotlin
Dxy123931021610 小时前
告别默认排序:MySQL自定义排序的“炼金术”
android·数据库·mysql
请叫我大虾11 小时前
发现一个jdk中ArrayList的小BUG
android·java·bug
一起养小猫11 小时前
Flutter for OpenHarmony 实战:双控制系统实现(按钮+键盘)
android·flutter·计算机外设·harmonyos
_李小白11 小时前
【Android 美颜相机】第十八天:GPUImageChromaKeyBlendFilter 解析
android·数码相机