Xposed模块开发入门教程

来源:互联网 发布:unity3d动态加载图片 编辑:程序博客网 时间:2024/05/17 07:43

           前言:在高手如云的XDA论坛上Xposed框架都被许多开发者誉为“安卓第一神器”。究竟是什么神奇的能力让它在众多APP中脱引而出呢?本文将指引大家完成一个Xposed上最简单的Demo,让大家感受一下Xposed的能力。

一、手机环境

1.ROOT过的Android手机(根据手机型号自行ROOT,本文不再详述)

2.安装了Xposed框架(没有Xposed框架的可从此处下载)

二、原理

       Xposed替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并执行一些初始化操作(XposedBridge的main方法),然后我们就可以在这个Zygote上下文中进行某些hook操作。

三、开发Xposed模块

1.加入jar包

将XposedBridgeApi-54.jar加入到libs文件夹下,没有jar包的可从此处下载:


2.导入jar包

在build.gradle的dependencies下加入语句:(单引号内内容为实际jar包所在路径)

compile files('libs/XposedBridgeApi-54.jar')

3.修改Androidmanifest.xml文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.administrator.xposeddemo">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <!-- 作为xposed模块 -->        <meta-data            android:name="xposedmodule"            android:value="true" />        <!-- 模块描述 -->        <meta-data            android:name="xposeddescription"            android:value="模块描述" />        <!-- XposedBridgeApi的最低版本号 -->        <meta-data            android:name="xposedminversion"            android:value="54" />    </application></manifest>

主要在application下加入三个元数据标签,

xposedmodule表示作为Xposed下的一个模块,value值为true。

xposeddescription表示对本模块的描述,该描述会显示在安装好后的程序名称下方。

xposedminversion表示jar包的最低版本号,我们使用的是54。

4.新建一个类Test,该类实现IXposedHookLoadPackage的接口,代码如下:

package com.example.administrator.xposeddemo;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XposedBridge;import de.robv.android.xposed.callbacks.XC_LoadPackage;/** * Created by Administrator on 2016/5/10. */public class Test implements IXposedHookLoadPackage {    @Override    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {        // 打印装载的apk程序包名        XposedBridge.log("Launch app: " + loadPackageParam.packageName);    }}

该类覆盖了接口中的handleLoadPackage方法,通过对该方法中的参数loadPackageParam执行某些操作可对实际运行的该apk进行劫持,这里我们只是简单地打印包名。

5.指定该模块的运行入口

在/app/src/main/下新建一个assets文件夹:


在该文件夹下新建一个名为"xposed_init"的文件:


在xposed_init中写上Test类的入口:


6.将程序进行key签名后生成apk,然后安装到手机上。

注:尽量签名后生成apk安装,debug运行有时候不行。

安装完成后通知栏会出现如下图通知,点击“激活并重启”


重启后Xposed框架的模块下会出现该Demo:


7.Android studio下查看Tag为“Xposed”的logcat信息:


结果如我们预想的那样,logcat下可以看到我们launch的各种app包名。


完整源码下载请点击这里。









2 0