Xposed 入门- 第一个 Xposed App

第一个Xposed App

Xposed 环境说明:

  • 手机型号:XiaoMi Mix 2s
  • Android 版本:9.0
  • Xposed 搭建:
    1. Magisk (version:19.3)
    2. EdXposed Core (Magisk 模块内下载)
    3. EdXposed Manager (Magisk 模块内下载)
    4. Xposed Install (apk安装)

假设已搭建好 Xposed 环境(实际使用的是EdXposed, Xposed只支持到 android 8), 下面编写第一个Xposed App。

IDE:Android Studio

  1. 程序清单中,需要加入一些配置如下。写在这个标签下就行
<meta-data
    android:name="xposedmodule"
    android:value="true"/>     <!--表示是xpose模块,因此xpose框架能识别它-->
<meta-data
    android:name="xposeddescription"
    android:value="module test"/>  <!--对模块功能的描述信息-->
<meta-data
    android:name="xposedminversion"
    android:value="54"/><!--模块的api版本,要导jar包的,jar包啥版本就写啥版本-->
  1. 工程的Main目录上右键New->Folder->Assets Floder,新建一个Assets文件夹;在工程的左侧窗口里,要么用Project视窗要么用Android视窗,在视窗里找到Main目录新建就行。这个新建的Assets是放Xposed的文件信息的,当Assets目录新建完毕,就在里面再建一个文件,文件名xposed_init,注意没有后缀。这个文件里就写自定义的hook类的类名即可。因为自定义的模块也是一个apk,自然有包名,假设包名为 com.example.xxoo,且在此包中,hook的代码写在一个class里,class名为myhook,则hook类的完整名称为com.example.xxoo.myhook,则com.example.xxoo.myhook就是要写在xposed_init中的内容,就是这么简单
    Xposed 入门- 第一个 Xposed App_第1张图片

  2. 在java目录上右键New->Package,然后将新建的Package的目录名字改成libs,这个libs就是放Xposed的jar包的,jia包在附件的xposed压缩档里,直接复制粘贴进去就行了.jar包导入进去后,可能Android studio无法识别,则在jar包上右键,选择add as library,Androidstudio会去识别它。轻松,给力,愉快.jar包的名称里含有api版本号,第一步里填写的配置

  3. 运行App, hook 无效,查看Xposed Installer 模块日志,发现如下错误:

06-27 14:25:56.934 E/Xposed  (  318):   Cannot load module:
06-27 14:25:56.934 E/Xposed  (  318):   The Xposed API classes are compiled into the module's APK.
06-27 14:25:56.934 E/Xposed  (  318):   This may cause strange issues and must be fixed by the module developer.
06-27 14:25:56.934 E/Xposed  (  318):   For details, see: http://api.xposed.info/using.html

查资料发现app中引用的XposedBridgeApi与框架冲突,需编译时不打包进入APK,解决方案build.gradle这个文件中的dependencies 闭包里,已经可以看到针对Xposed导包的脚本语句,正如下面的代码块中的implementation files(‘src/main/java/libs/XposedBridgeApi-54.jar’),将implementation修改为provided

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    //implementation files('libs/XposedBridgeApi-54.jar')
    provided files('libs/XposedBridgeApi-54.jar')
}

再次编译软件,发现依旧提示该问题,一番折腾后发现 implementation fileTree(include: [’*.jar’], dir: ‘libs’) 此句话依旧会导致libs下的jar包代码编译进入apk当中,解决方案是取消该句声明,所有jar包手动引入。最后的dependencies

dependencies {
    //implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    //implementation files('libs/XposedBridgeApi-54.jar')
    provided files('libs/XposedBridgeApi-54.jar')
}

tips:对于“The Xposed API classes are compiled into the module’s APK”异常,可以查看编译好的APK包,如果里面包含Xposed相关代码文件夹则会有冲突。

你可能感兴趣的:(Xposed,框架开发学习)