Xposed的编译须要在源码中编译,因此首先建议看看源码的编译。java
https://juejin.im/post/5c495897f265da612b13eab5
android
Xposed包含以下几个工程: git
XposedTools: 编译xposed的相关脚本与工具。 github
xposedbridge: xposed 框架的java层。bash
XposedInstaller: xposed 框架的独立apk,用于管理基于xposed的相关插件。app
Xposed : 修改以后的app_process,用于替代系统的。框架
app_process android_art: 对art_methods 进行改造后的art,用于替代系统的 art。
工具
https://github.com/rovo89/
一、下载XposedBridge和android_art工程
post
一、进入Android源码的/.repo目录。测试
二、在.repo目录下新建local_manifests目录。
三、把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同步到了咱们源码对应的目录下面。
二、使用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
# 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;
}
}
复制代码
# 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刷入手机
一、进入fastboot模式
终端执行sudo adb reboot bootloader命令,手机进入fastboot模式。
二、将img文件刷入到手机
在进入fastboot模式以后,在终端继续执行命令
fastboot flash system system.img
复制代码
三、重启手机
在将img文件所有刷入到手机以后执行fastboot reboot命令,从新启动手机,以后能够看到手机如今的系统的android6.0系统。刷机成功
四、查看结果
日志查看命令
adb logcat | grep -i xposed
复制代码
git clone https://github.com/rovo89/XposedInstaller
./gradlew
./gradlew build
复制代码
请使用java 1.8 进行编译
https://juejin.im/entry/5a092ee1f265da4304061d2e https://blog.csdn.net/xiaolli/article/details/58049210 https://www.jianshu.com/p/c731cd44e82b