Xopsed的编译与安装

681 阅读3分钟

Xposed的编译需要在源码中编译,所以首先建议看看源码的编译。

https://juejin.cn/post/6844903766890643469

一、Xposed工程

Xposed包含如下几个工程: 

 XposedTools: 编译xposed的相关脚本与工具。 

xposedbridge: xposed 框架的java层。

XposedInstaller: xposed 框架的独立apk,用于管理基于xposed的相关插件。

Xposed : 修改之后的app_process,用于替代系统的。

app_process android_art: 对art_methods 进行改造后的art,用于替代系统的 art。 

https://github.com/rovo89/

二、Xposed编译

1、下载XposedBridge和android_art工程

1、进入Android源码的/.repo目录。

2、在.repo目录下新建local_manifests目录。

3、把XposedTools/local_manifests/下的目标文件拷贝过去。local_manifests/目录下是各种API版本(即SDK=19,21之类)对应的xml文件。由于本例对应的SDK版本是23,所以需要把该目录下xposed_sdk23.xml文件拷贝到.repo/local_manifests/目录下。

xposed_sdk23.xml指定了XposedBridge和android_art的项目地址。

配置好后,执行下面命令:

repo sync frameworks/base/cmds/xposed
repo sync art

如果repo sync art出现下面错误


可以根据错误提示执行命令repo sync --force-sync art

这样就将XposedBridge和android_art同步到了我们源码对应的目录下面。

2、使用XposedTools编译XposedBridge和Xposed

(1)下载XposedTools

git clone https://github.com/rovo89/XposedTools.git

(2) 编译XposedBridge 

进入XposedTools目录,根据build.conf.sample 模板,创建build.conf

修改 build.conf 文件中的这几个参数

outdir = XposedBridge.jar 的路径
javadir = XposedBridge 源码路径
[AospDir]
sdk版本 = 源码路径


编译XposedBridge.jar

./build.pl -a java

XposedBridge.jar 将生成编译到 /android-6.0.1_r77/out/java目录下面。

编译此jar包请使用jdk 1.8, 此jar包其实是一个apk,强制改名为jar包的。所以,可以使用AndroidStudio直接开发,编译:./gradlew clean assembleRelease 编译后生成的apk重命名 XposedBridge.jar 即为上文XposedTools编译的jar文件。

在使用build.pl时,它还依赖一些Perl的类库,请童鞋们按照下面步骤下载这些依赖库:

sudo apt-get install libconfig-inifiles-perl

sudo apt-get install libio-all-perl

sudo apt-get install libfile-readbackwards-perl

sudo apt-get install libfile-tail-perl

sudo apt-get install libtie-ixhash-perl

(3)编译Xposed

  • 修改XposedTools目录下Xposed.pm文件: 在get_lunch_mode 方法内 将 将默认 的 PRODUCT 更改自己对应工程

# Determines the mode that has to be passed to the "lunch" command
sub get_lunch_mode(?) {
    my $platform = shift;
    my $sdk = shift;

    if ($platform eq 'arm' || $platform eq 'armv5' || $platform eq 'host' || $platform eq 'hostd') {
        # return ($sdk <= 17) ? 'full-eng' : 'aosp_arm-eng';
        return ($sdk <= 17) ? 'full-eng' : 'aosp_hammerhead-userdebug';//此处aosp_hammerhead-userdebug为lunch的设备
    } elsif ($platform eq 'x86') {
        return ($sdk <= 17) ? 'full_x86-eng' : 'aosp_x86-eng';
    } elsif ($platform eq 'arm64' && $sdk >= 21) {
        return 'aosp_arm64-eng';
    } else {
        print_error("Could not determine lunch mode for SDK $sdk, platform $platform");
        return undef;
    }
}

  • 修改XposedTools目录下Xposed.pm文件:在get_outdir方法,将其返回目录,改为自己 xposed 且实的生成目录

# Determines the root directory where compiled files are put
sub get_outdir($) {
    my $platform = shift;

    if ($platform eq 'arm') {
        # return 'out/target/product/generic';
        return 'out/target/product/hammerhead';//此处hammerhead为Nexus5的代号
    } elsif ($platform eq 'armv5') {
        # return 'out_armv5/target/product/generic';
        return 'out_armv5/target/product/hammerhead';//此处hammerhead为Nexus5的代号
    } elsif ($platform eq 'x86' || $platform eq 'arm64') {
        return 'out/target/product/generic_' . $platform;
    } else {
        print_error("Could not determine output directory for $platform");
        return undef;
    }
}

编译全工程

./build.pl -t arm:23   //表明我要编译arm平台上SDK=23版本的xposed框架

app_process32_xposed文件在目录android-6.0.1_r77/out/sdk23/arm/files/system/bin/中。

xposed.prop文件在目录android-6.0.1_r77/out/sdk23/arm/files/system/中。

三、重新生成镜像文件

之前已经编译了systme.img,那么在android-6.0.1_r77/out/target/product/hammerhead目录下面会有system目录,将编译后的文件app_process32_xposed替换 system/bin/app_process32文件, 复制xposed.prop到system/目录 ,复制xposed.prop到system/目录 ,复制XposedBridge.jar到system/frameworks目录

复制完成之后,执行下面命令生成新的system.img

source ./build/envsetup.sh
lunch
make snod # make snod命令的作用是重新生成镜像文件。

四、刷机测试

进入android-6.0.1_r77/out/target/product/hammerhead目录执行下面命令,将system.img刷入手机

1、进入fastboot模式 

终端执行sudo adb reboot bootloader命令,手机进入fastboot模式。

2、将img文件刷入到手机

在进入fastboot模式之后,在终端继续执行命令

fastboot flash system system.img

3、重启手机 

在将img文件全部刷入到手机之后执行fastboot reboot命令,重新启动手机,之后可以看到手机现在的系统的android6.0系统。刷机成功

4、查看结果

日志查看命令

adb logcat | grep -i xposed

五、下载,编译apk

git clone https://github.com/rovo89/XposedInstaller
./gradlew
./gradlew build
请使用java 1.8 进行编译


https://juejin.cn/post/6844903510778232840
https://blog.csdn.net/xiaolli/article/details/58049210
https://www.jianshu.com/p/c731cd44e82b