温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么开发入门Xposed插件

发布时间:2021-10-13 11:32:50 来源:亿速云 阅读:130 作者:柒染 栏目:编程语言

本篇文章为大家展示了怎么开发入门Xposed插件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

前言

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

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

https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

看完这篇文章,基本能写出一个最简单的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上打上一个标签来声明自己。官方给的例子如下

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.robv.android.xposed.mods.tutorial" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" /> <application  android:icon="@drawable/ic_launcher"  android:label="@string/app_name" >  <meta-data   android:name="xposedmodule"   android:value="true" />  <meta-data   android:name="xposeddescription"   android:value="Easy example which makes the status bar clock red and adds a smiley" />  <meta-data   android:name="xposedminversion"   android:value="53" /> </application></manifest>

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

<meta-data   android:name="xposedmodule"   android:value="true" />  <meta-data   android:name="xposeddescription"   android:value="Easy example which makes the status bar clock red and adds a smiley" />  <meta-data   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上勾选启用模块并重启。

上述内容就是怎么开发入门Xposed插件,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI