(学习笔记)Xposed模块编写(一)

前提:需要已经安装Xposed Installer

1. 新建一个AS项目

并把MainActvity和activity_main.xml这两个文件删掉,然后在AndriodManifest.xml中去掉这个Activity的声明

2. 在settings.gralde文件中加上阿里云的仓库地址,否则Xposed依赖无法下载

maven { url 'https://maven.aliyun.com/repository/public/' }

settings.gradle 

pluginManagement {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        mavenCentral()
        maven {
            url 'https://jitpack.io'
        }
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        mavenCentral()
        maven {
            url 'https://jitpack.io'
        }
        google()
    }
}

rootProject.name = "MyFirstXposedPlugin"
include ':app'

3. 在app模块下的build.gradle文件中添加依赖

dependencies {
    // 必须使用compileOnly,否则Xposed Install会提示Cannot Load Module
    compileOnly "de.robv.android.xposed:api:82"

    ......
}

4. 新建一个MyXposedModule类,里面我们hook一个普通方法

package com.example.myfirstxposedplugin;

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

public class MyXposedModule implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        // 在这里添加你的钩子逻辑
        XposedBridge.log("当前应用的包名:" + loadPackageParam.packageName);
        if (loadPackageParam.packageName.equals("目标应用的包名")) {
            // hookTargetMethod();
        }
    }

    private void hookTargetMethod() {
        // 在这里添加目标应用的方法钩子逻辑
//        Class<?> targetClass = XposedHelpers.findClass("目标类的完整路径", null);
//        XposedHelpers.findAndHookMethod(targetClass, "目标方法名", 参数类型.class, new XC_MethodHook() {
//            @Override
//            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                // 在方法调用前执行的逻辑
//            }
//
//            @Override
//            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                // 在方法调用后执行的逻辑
//            }
//        });
    }
}

5. 在assets目录下新建一个名为xposed_init的文件,在里面添加刚刚新建的类的全类名

com.example.myfirstxposedplugin.MyXposedModule

6. 在AndriodManifest.xml文件中将该项目声明成Xposed模块,添加如下代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyFirstXposedPlugin"
        tools:targetApi="31">

        <!-- 添加 Xposed 模块入口 -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />

        <!-- Xposed 模块的入口类 -->
        <meta-data
            android:name="MyXposedModule"
            android:value="com.example.myfirstxposedplugin.MyXposedModule" />

        <!-- 指定最低支持的 Xposed 框架版本 -->
        <meta-data
            android:name="xposedminversion"
            android:value="82" /> <!-- 使用你模块所需的最低版本号 -->

        <!-- 提供模块的描述信息 -->
        <meta-data
            android:name="xposeddescription"
            android:value="这是我的 Xposed 模块,用于实现某某功能。" />

    </application>

</manifest>

最后将这个项目安装到实机或者模拟器中

你在Xposed Installer的侧边菜单栏中的模块标签页就能看到我们刚刚编写的模块了

勾选上然后重启手机

重启之后,如果能在日志界面看到如下的内容,则表示该模块激活了

希望对你有帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/213905.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:什么是向量数据库?

向量数据库定义 向量数据库是将信息存储为向量的数据库&#xff0c;向量是数据对象的数值表示&#xff0c;也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据&#xff08;例如图像、文本或传感器数据&#xff09;的海量数据集进行索引和搜索。 向…

操作系统相关--面试和笔试高频

操作系统 计算题 页面置换算法 先进先出&#xff08;FIFO&#xff09;更新算法&#xff1a;总是淘汰最先进入内存的页面。即目前出现次数最多的页面 最近最久未使用&#xff08;LRU&#xff09;更新算法&#xff1a;当需要更新一页时&#xff0c;选择在最近一段时间内最久没…

TensorRT安装及使用教程(ubuntu系统部署yolov7)

1 什么是TensorRT 一般的深度学习项目&#xff0c;训练时为了加快速度&#xff0c;会使用多 GPU 分布式训练。但在部署推理时&#xff0c;为了降低成本&#xff0c;往往使用单个 GPU 机器甚至嵌入式平台&#xff08;比如 NVIDIA Jetson&#xff09;进行部署&#xff0c;部署端也…

Xshell会话文件解密获取密码

Xshell会话文件解密获取密码 开发了一个小工具用于获取已存储的xshell会话密码功能简介截图展示下载地址 开发了一个小工具用于获取已存储的xshell会话密码 在日常开发中&#xff0c;服务器太多&#xff0c;密码记不住。使用xshell管理服务器会话&#xff0c;记住密码&#xf…

Docker容器(一)概述

一、虚拟化概述 1.1引⼊虚拟化技术的必要性 服务器只有5%的时间是在⼯作的&#xff1b;在其它时间服务器都处于“休眠”状态. 虚拟化前 每台主机⼀个操作系统; 软硬件紧密结合; 在同⼀个主机上运⾏多个应⽤程序通常会遭遇冲突; 系统的资源利⽤率低; 硬件成本⾼昂⽽且不够灵活…

开发猿的平平淡淡周末---2023/12/3

2023/12/3 天气晴 温度适宜 AM 早安八点多的世界&#xff0c;起来舒展了下腰&#xff0c;阳光依旧明媚&#xff0c;给平淡的生活带来了一丝暖意 日常操作&#xff0c;喂鸡&#xff0c;时政&#xff0c;洗漱&#xff0c;恰饭&#xff0c;肝会儿游戏 看会儿手机 ___看累…

【Windows】如何实现 Windows 上面的C盘默认文件夹的完美迁移

如何实现 Windows 上面的C盘默认文件夹的完美迁移 1. 遇到的问题 在我想迁移C盘的 下载 和 视频 文件夹的时候&#xff0c;遇到了这样的问题&#xff0c;在迁移之后&#xff0c;我显卡录像的视频还是保存到了C盘默认位置里&#xff0c;以及我迁移了 下载 之后下载的盘依然是在…

LeetCode刷题---反转链表

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

MDETR 论文报告

MDETR - Modulated Detection for End-to-End Multi-Modal Understanding MDETR - Modulated Detection for End-to-End Multi-Modal Understanding发现问题主要贡献和创新点主要方法和技术MDETR 的架构损失函数1. 框预测损失2. 软标记预测损失3. 对比对齐损失4. 总损失 实验和…

Linux网络之连接跟踪 conntrack

一 Linux网络之连接跟踪 conntrack k8s 有关conntrack的分析 ① 什么是连接跟踪 netfilter连接跟踪 conntrack 详述 思考&#xff1a;连接跟踪模块会对哪些协议进行跟踪?TCP、UDP、ICMP、DCCP、SCTP、GRE ② 为什么需要连接跟踪 没有连接跟踪有很多问题是不好解决的&a…

C语言-内存分配

内存分配 1. 引入 int nums[10] {0}; //对int len 10; int nums[len] {0}; //错是因为系统的内存分配原则导致的2. 概述 在程序运行时&#xff0c;系统为了 更好的管理进程中的内存&#xff0c;所以有了 内存分配机制。 分配原则&#xff1a; 2.1 静态分配 静态分配原…

解决top-k问题--堆排序

目录 TOP-K问题 堆排序 考虑以下情况&#xff1a; 1.在n个数里面找最大的一个数 2.在n个数里面找最大的两个数 3.在n个数中求前k大的数 为什么不用大根堆呢&#xff1f; 代码 时间复杂度 TOP-K问题 即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数…

使用Redis构建任务队列

文章目录 第1关&#xff1a;先进先出任务队列第2关&#xff1a;优先级任务队列第3关&#xff1a;定时任务队列 第1关&#xff1a;先进先出任务队列 编程要求 在Begin-End区域编写 add_task(task_name) 函数&#xff0c;实现将任务加入队列的功能&#xff0c;具体参数与要求如下…

论文阅读——Loss odyssey in medical image segmentation

Loss odyssey in medical image segmentation github&#xff1a;https://github.com/JunMa11/SegLossOdyssey 这篇文章回顾了医学图像分割中的20种不同的损失函数&#xff0c;旨在回答&#xff1a;对于医学图像分割任务&#xff0c;我们应该选择哪种损失函数&#xff1f; 首…

使用 Kettle 完成数据 ETL

文章目录 使用 Kettle 完成数据 ETL数据清洗数据处理 使用 Kettle 完成数据 ETL 现在我们有一份网站的日志数据集&#xff0c;准备使用Kettle进行数据ETL。先将数据集加载到Hadoop集群中&#xff0c;然后对数据进行清洗&#xff0c;最后加载到Hive中。 在本地新建一个数据集文…

解决vscode中html部分无法嵌套注释

不管是React项目还是Vue项目&#xff0c;相信你一定遇到过同样的问题&#xff0c;如果想要注释的结构内部也存在注释&#xff0c;那么编译器会报以下问题 使用 HTML-Comment 这个插件即可解决问题 选中需要注释的区域并根据系统输入快捷键&#xff0c;可以发现就算嵌套了注释…

【论文解读】角色动画的一致可控的图像到视频合成

论文&#xff1a;https://arxiv.org/pdf/2311.17117.pdf 代码&#xff1a;https://github.com/HumanAIGC/AnimateAnyone 图片解释&#xff1a;给定参考图像&#xff08;每组中最左边的图像&#xff09;的一致且可控的角色动画结果。我们的方法能够对任意角色进行动画处理&#…

人工智能原理复习--不确定推理

文章目录 上一篇不确定推理概述主观Bayes(贝叶斯)方法可信度方法证据理论下一篇 上一篇 人工智能原理复习–确定性推理 不确定推理概述 常识具有不确定性。 常识往往对环境有极强的依存性。 其中已知事实和知识是构成推理的两个基本要素&#xff0c;不确定性可以理解为在缺…

Makefile初学之谜之隐式规则

刚开始学习Make教程&#xff1a;https://makefiletutorial.vercel.app/#/docs/fancy-rules&#xff0c;里面有个sample: objects foo.o bar.o all.o all: $(objects)# These files compile via implicit rules foo.o: foo.c bar.o: bar.c all.o: all.call.c:echo "int…

python--自动化办公(Word)

python自动化办公之—Word python-docx库 1、安装python-docx库 pip install python-docx2、基本语法 1、打开文档 document Document() 2、加入标题 document.add_heading(总标题,0) document.add_heading(⼀级标题,1) document.add_heading(⼆级标题,2) 3、添加文本 para…
最新文章