Xposed 模块开发的环境搭建,基于 Android Studio 和 Xposed API:82;

引入API

新建一个AS项目,导入Xposed开发API;

方法1:gradle自动构建

目录结构:

3460975762

build.gradle中引入Xposed API;

dependencies {
    provided 'de.robv.android.xposed:api:82'
    ...
}

重新 Sync Project with Gradle Files

AS会自动下载,编译时引入此API。

方法2:导入jar包

目录结构:

1704745014

下载xposed api api-82.jar包:https://bintray.com/rovo89/de.robv.android.xposed/api

导入libs目录下,在build.gradle引入:

dependencies {
    provided files('libs/api-82.jar')
    provided fileTree(dir: 'libs', include: ['*.jar'])
    ...
}

重新 Sync Project with Gradle Files

注意,fileTree前需要将compile改为provided,因为provided是libs只在编译时使用,只参与编译,不打包到最终apk,这里不修改会导致handleLoadPackage无回调。

声明模块

在AndroidManifest.xml中的application标签内添加注册信息:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposeddescription"
            android:value="我是Xposed模块" />
        <meta-data
            android:name="xposedminversion"
            android:value="52" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

xposedmodule:声明此应用为Xposed模块

xposeddescription:对模块的描述

xposedminversion:表示适合模块的最低版本号

创建hook类

新建hook类:

3140065177

IXposedHookLoadPackage:Xposed API接口

handleLoadPackage()方法用于在加载应用程序的包的时候执行用户的操作;

loadPackageParam参数包含了加载的应用程序的一些基本信息;

这段代码仅是打开应用,返回含应用包名的log,可在pc上查看log;

声明入口

为了让hook类被Xposed框架找到,需要声明入口;

assets 目录下建立 xposed_init 文件,写入文件引用:

509823489

安装应用

激活并重启设备;

动态查看tag为“iHook”的log日志:

1913922225

成功hook;

注意

1、禁用 Instant Run(File -> Settings -> Build, Execution, Deployment -> Instant Run)