xposed installer3.0版本以后,传统的xposed框架的使用方法是从官网上下载xposed installer.apk以及xposed-arm-sdk22.zip包。而后具体的使用方法是将xposed installer.apk安装到手机,而后在手机上进入recovery模式,将下载的xposed-arm-sdk22.zip刷入手机。完成以后xposed installer才能够正常使用。本文写了另外一种xposed框架的使用办法:编译xposed源码,生成xposed相关的应用程序和so库等文件,而后将这些应用程序和so库文件集成到android系统中,从新打包生成镜像文件,烧入手机。javascript
文档主要用于xposed源码的编译以及xposed的集成工做。在编译过程当中,主要是经过Xposed Tools进行编译;在集成过程当中,将xposed的编译以后生成的文件替换到android系统中,打包以后从新生成镜像文件,将镜像文件刷入到手机查看日志信息来判断是否成功。java
因为在集成过程当中是将xposed的编译生成文件打包到android5.1系统中从新生成镜像文件,而后将镜像文件烧入到nexus5手机,因此须要对android源码进行编译,并在执行lunch选择对应源码代号时选择nexus5对应的android源码代号。android
查看源码版本的方法:在源码路径下,查看
/build/core/build_id.mk
文件中的BUILD_ID即为源码的版本号。以下图所示。
git
BUILD ID
xposed源码版本须要是android5.1源码对应的版本。能够在github上进行下载,具体的下载方法后文中会详细说明。
android5.1源码编译须要使用openjdk,再也不使用oracle的jdk。github
文档主要经过以下六个步骤完成xposed源码的编译和集成ubuntu
为了将xposed框架集成到nexus5手机,须要先编译nexus5手机对应的android源码。具体步骤以下bash
下载android 5.1源代码
使用repo下载android5.1源代码。oracle
初始化编译环境
在源码目录下运行source ./build/envsetup.sh
。如图所示。
app
选择版本
执行命令lunch
,选择后续验证时使用的手机对应的版本。
因为我在验证xposed编译结果的时候是在nexus5上进行的,因此在选择版本的时候选择的是nexus5对应的版本。
框架
nexus5对应的是aosp_hammerhead_userdebug
make
命令编译源码。第一次编译android源码建议使用make命令进行编译。为了加快编译速度,能够开多个线程进行编译。例如make -j16
命令,开16线程编译android源码。make编译android源码的全部模块,mmm仅编译指定的模块。在使用mmm编译指定模块以前,须要保证以前使用make命令对整个源代码进行编译。
编译后会将编译结果放到out文件夹下。
其中img文件路径是out/target/product/hammerhead下。
sudo adb reboot bootloader
命令,手机进入fastboot模式。fastboot flash system system.img
建立system分区,将system.img文件刷入system分区中。因为fastboot对刷入的img文件大小有限制,因此可能存在由于img文件太大致使刷入失败,这是能够添加了-S 50M参数,将system.img分红小块来刷入到手机,完整的命令以下
fastboot -S 50M flash system system.img
运行结果以下图所示。
将system.img刷入到手机
从图中能够看到,添加了参数以后,分红了一些小块将system.img文件刷入到手机。
fastboot reboot
命令,从新启动手机,以后能够看到手机如今的系统的android5.1系统。刷机成功编写Android.mk文件
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、须要编译的.c/.cpp文件和.a静态库文件等。编写android.mk文件,将编译须要的源代码,编译生成的结果形式等信息告知ndk build编译系统。Android.mk文件内容以下所示。
移动Xposed Bridge工程
将Android.mk文件放到XposedBridge源码目录下,而后将整个工程放到Android源码目录下。以下图所示。
编译Xposed Bridge
由于在前边编译android5.1源码的时候,已经使用make命令进行了一次编译,因此在这里直接使用mmm命令编译XposedBridge模块。在android源码下使用mmm命令编译xposedbridge模块。命令形式为mmm [模块路径]。
/home/sakura/Android-5.1.1-r14-compiled/XposedBridge-art/是我电脑上Xposed Bridge源码路径
编译成功以后,生成XposedBridge.jar包,存放在/out/target/product/hammerhead/system/framework/
文件夹下。
[General]
outdir = /home/xposed/out [Build] version = 65(custom build by author ) makeflags = -j16 [AospDir] 22 = /home/Android-5.1.1
outdir指向的路径是xposed编译以后生成的文件的存放路径。
version的值和后边的参数是本身设置的。编译以后会写入到xposed.prop文件中。
makeflags是设置在后边编译过程当中使用的线程数。
AospDir指向的路径是android源码存放的路径,前边的值是源码对应的SDK的版本号。这里我指向的是android5.1.1的源码,对应的android sdk的版本是22。
在下载art时,要选择android 5.1对应的art分支。以下图红色部分
art下载
3.2 替换文件
用3.1中下载的art文件夹替换/home/Android-5.1.1目录下的art文件夹。
将3.1中下载的xposed文件夹移动到/home/Android-5.1.1/frameworks/base/cmds/文件夹下。
./build.pl -t arm:22
build arm files for SDK22(对应的是Android5.1系统)
在执行过程当中,可能会提示缺乏一些依赖包,例如可能会缺乏Config::IniFiles,使用apt-cache search Config::IniFiles
搜索,安装缺乏的包便可。
结果
build.pl -t运行结束以后,会将生成的xposed的可执行程序和so库等文件放入到build.conf配置文件中指定的输出目录下。包括lib文件夹下的五个so库和bin文件加下的四个可执行程序以及一个配置文件。以下图所示。
移动文件
将xposed.prop文件移动到system文件夹下。
source ./build/envsetup.sh lunch make snod
make snod命令的做用是从新生成镜像文件。
adb logcat | grep -i xposed