服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Xposed插件开发入门详解

Xposed插件开发入门详解

2022-10-25 14:28coderstory Android

这篇文章主要介绍了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'
}

Xposed插件开发入门详解

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的一些资源,比如布局文件什么的。

Xposed插件开发入门详解

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插件开发入门详解

新建xposed_init文件,类型选择Text

Xposed插件开发入门详解

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

Xposed插件开发入门详解

7.编译安装

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

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

成品apk

源码

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

原文链接:https://blog.coderstory.cn/xposed%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E5%85%A5%E9%97%A8/

延伸 · 阅读

精彩推荐
  • AndroidAndroid闪屏效果实现方法

    Android闪屏效果实现方法

    这篇文章主要介绍了Android闪屏效果实现方法,结合实例形式分析了Android闪屏效果的实现原理及相关功能与布局设置技巧,需要的朋友可以参考下...

    一剪梅7062021-05-18
  • AndroidListView的Adapter使用 之 初学ArrayAdapter String

    ListView的Adapter使用 之 初学ArrayAdapter String

    ListView是Android中经常会使用的东西,绑定数据对于初学者来说,尤其是刚接触编程的人来说,往往会觉得很难理解,我上大二的时候学的java,但是基本上相...

    Android开发网5482021-01-24
  • AndroidAndroid中实现监听ScrollView滑动事件

    Android中实现监听ScrollView滑动事件

    这篇文章主要介绍了Android中实现监听ScrollView滑动事件,本文用重写ScrollView类的方法实现了一些扩展功能,需要的朋友可以参考下...

    安卓之家5462021-03-19
  • AndroidAndroid 用SQLite实现事务的方法

    Android 用SQLite实现事务的方法

    本篇文章小编为大家介绍,Android用SQLite实现事务的方法。需要的朋友参考下...

    Android开发网11452021-01-11
  • Android详解Android中的Menu菜单键

    详解Android中的Menu菜单键

    本文给大家介绍Android中的设置按钮,长按或点击菜单键,涉及到menu菜单的基本用法,本文介绍非常详细具有参考价值,特此分享供大家学习...

    jerrylsxu6842021-07-24
  • AndroidAndroid中使用TextView实现图文混排的方法

    Android中使用TextView实现图文混排的方法

    向TextView或EditText中添加图像比直接添加文本复杂一点点,需要用到标签。接下来通过本文给大家介绍Android中使用TextView实现图文混排的方法,希望对大...

    susu的Dream12362021-05-31
  • Androidandroid ListView自动滚动方法

    android ListView自动滚动方法

    android ListView自动滚动方法,直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性...

    Android开发网9052021-01-05
  • Androidandroid的编译和运行过程深入分析

    android的编译和运行过程深入分析

    首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,此过程对了解android的编译和运行过程有很大的帮助...

    Android教程网5062020-12-26