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