前言

Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件。

至于如何开发一个XPosed的插件,官方给出的答案如下:

看完这篇文章,基本能写出一个最简单的demo。

现在先讲讲这个最简单的demo怎么写

1.先新建一个android project(推荐用android studio)

这个project不需要任何activity,相关的组件引用也可以删光,这样编译后的apk就很小了。

2.修改项目的build.gradle

追加2个配置

repositories {

jcenter();

}

dependencies {

provided ‘de.robv.android.xposed:api:82'

}

3.修改AndroidManifest.xml 让xposed能识别这个插件

正常情况下,xposed是无法识别我们的应用是不是xposed插件的,我们必须在manifest上打上一个标签来声明自己。

官方给的例子如下

package="de.robv.android.xposed.mods.tutorial"

android:versionCode="1"

android:versionName="1.0" >

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

android:name="xposedmodule"

android:value="true" />

android:name="xposeddescription"

android:value="Easy example which makes the status bar clock red and adds a smiley" />

android:name="xposedminversion"

android:value="53" />

简单的讲,就是application配置段内添加如下3个属性就好了

android:name="xposedmodule"

android:value="true" />

android:name="xposeddescription"

android:value="Easy example which makes the status bar clock red and adds a smiley" />

android:name="xposedminversion"

android:value="53" />

4.实现xposed的接口

空白的class如下

package cn.coderstory.xposeddemo;

public class Demo {

}

如果我们想要这个类有hook各种代码的能力,我们需要让这个类实现一些xposed框架提供的接口。

具体实现什么接口,需要看我们具体的需求。

常见的额接口如下

IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources 等

IXposedHookZygoteInit接口实现了ZygoteInit阶段的hook能力,用于在Zygote进程启动之前执行相关代码,framework里的东西一般再这里改。

IXposedHookLoadPackage接口实现了加载app阶段的hook能力,用于hook app的代码

IXposedHookInitPackageResources接口实现了加载app资源时的hook能力,用于修改app的一些资源,比如布局文件什么的。

5.写具体的代码逻辑

现在我们写一个功能,比如隐藏MIUI下拉菜单里面的搜索框

package cn.coderstory.xposeddemo;

import de.robv.android.xposed.IXposedHookInitPackageResources;

import de.robv.android.xposed.callbacks.XC_InitPackageResources;

/**

* Created by cc on 2017/1/3.

* 隐藏MIUI下拉菜单搜索框

*/

//IXposedHookInitPackageResources接口实现修改资源app的资源文件

public class Demo implements IXposedHookInitPackageResources{

@Override

public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) {

//如果当前处理的是systemui

if (resparam.packageName.equals("com.android.systemui")) {

//调用setReplacement方法替换名为config_show_statusbar_search的变量值为false

resparam.res.setReplacement(resparam.packageName, "bool", "config_show_statusbar_search", false);

}

}

}

这样,功能就写好了。

6.创建和编辑xposed_init配置文件

接下来我们需要再项目里新建一个名为assets的目录,然后在目录里新建一个名为xposed_init的文件,文本类型的。

这个文件主要记录了app里所有实现xposed功能的类,在开机的时候,xposed会依次加载这些类。

新建assets目录

新建xposed_init文件,类型选择Text

xposed_init里写当前类的路径 如果存在多个类,那么每行写一个,多个写多行

7.编译安装

编译的时候需要关闭android studio的instant run 功能。

手机上安装后 需要在xposed install上勾选启用模块并重启。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android xposed如何写,Xposed插件开发入门详解相关推荐

  1. xposed模块编写教程_Xposed插件开发入门详解,

    Xposed插件开发入门详解, 前言 Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件. 至于如何开发一个XPosed的插件,官方给出的答案如下: https: ...

  2. xposed模块编写教程_Xposed插件开发入门详解

    前言 Xposed的用处不必言说,能hook任意java写的代码,修改替换apk内部的资源文件. 至于如何开发一个XPosed的插件,官方给出的答案如下: 看完这篇文章,基本能写出一个最简单的demo ...

  3. Xposed源码剖析——app_process作用详解

    Xposed源码剖析--app_process作用详解 首先吐槽一下CSDN的改版吧,发表这篇文章之前其实我已经将此篇文章写过了两三次了.就是发表不成功.而且CSDN将我的文章草稿也一带>删除掉 ...

  4. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  5. Jetpack Compose入门详解(实时更新)

    Jetpack Compose入门详解 前排提醒 前言(Compose是什么) 1.实战准备 一.优势与缺点 二.前四课 三.标准布局组件 1.Column 2.Row 3.Box 四.xml和com ...

  6. [论文阅读] (01) 拿什么来拯救我的拖延症?初学者如何提升编程兴趣及LATEX入门详解

    又是在凌晨三点赶作业,又是在Deadline前去熬夜,一次次无眠,一次次抱怨.为什么三年前.两年前.一年前,甚至是昨天,我都下定决心"从现在开始读顶会论文",却又悄悄选择逃避:为什 ...

  7. FFmpeg入门详解之87:HLS直播协议详解

    引言与效果演示 ----------------------------------------- FFmpeg431的官方地址已经无法打开, 我将ffmepg4.3.1的开发包和源码上传到了百度云: ...

  8. FFmpeg入门详解之102:HLS直播协议详解

    引言与效果演示 ----------------------------------------- FFmpeg431的官方地址已经无法打开, 我将ffmepg4.3.1的开发包和源码上传到了百度云: ...

  9. linux 日志按大小切割_nginx入门详解(六)- 日志切割

    上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密​zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...

最新文章

  1. 机器学习中的EM算法具体解释及R语言实例(1)
  2. Google 都在用的 6 个休息小技巧,让你工作效率翻倍
  3. java存储过程示例_安全密码存储–请勿做的事和Java示例
  4. 64位浮点数_C语言常见面试题解析(1)——浮点数的比较
  5. 中科院-杨力祥视频教程 04课程
  6. python分行政区域汇总_python:编写行政区域三级菜单(day 1)
  7. 计算机的存储容量1kb表示什么,存储容量1kb等于多少字节
  8. IE查看源文件重定向到 桌面的解决方法
  9. 【原创】笔记本键盘故障的心得一二
  10. 关于低功耗车牌识别摄像机,你知道多少
  11. 关于织梦后台dedecms管理员后台权限、新增后台管理员的功能
  12. 将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
  13. [xhr4412][extension 4] u-boot-2020.07 DM9621 网卡驱动移植
  14. 5分钟弄懂语音识别技术原理
  15. 学术论文投稿与Rebuttal经验分享
  16. 计算机能力挑战2021,2021WER能力挑战赛——“人工智能”竞赛规则.docx
  17. AAB 扶正!APK 将退出历史舞台
  18. 硕士论文免费查重网站不靠谱,最好用知网!
  19. 什么是BEPI认证?
  20. JavaWeb学习:servlet

热门文章

  1. hp服务器系统管理软件,惠普raid管理软件
  2. remixpacks.club无法访问解决方案(基于Python的base64磁力链接地址解析)
  3. Leetcode 675. 为高尔夫比赛砍树 C++
  4. 一站式移动办公SaaS将成为未来企业管理平台的最佳选择
  5. PHP服务器端API原理及示例讲解(接口开发)
  6. 应我校园0.8.3上线
  7. 知道网址怎么转HTML文件,网页链接怎么转换成文件
  8. 把数据库的表结构导出Excel格式
  9. LQFP144封装尺寸图
  10. 2021年高压电工考试报名及高压电工考试总结