xposed源码编译与集成

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系统中,重新打包生成镜像文件,烧入手机。

文档主要用于xposed源码的编译以及xposed的集成工作。在编译过程中,主要是通过Xposed Tools进行编译;在集成过程中,将xposed的编译之后生成的文件替换到android系统中,打包之后重新生成镜像文件,将镜像文件刷入到手机查看日志信息来判断是否成功。

由于在集成过程中是将xposed的编译生成文件打包到android5.1系统中重新生成镜像文件,然后将镜像文件烧入到nexus5手机,所以需要对android源码进行编译,并在执行lunch选择对应源码代号时选择nexus5对应的android源码代号。

环境配置

  1. 源码版本
    在整个过程中,使用到了android系统源码和xposed源码。
    android系统源码版本是 LYM48M

查看源码版本的方法:在源码路径下,查看/build/core/build_id.mk文件中的BUILD_ID即为源码的版本号。如下图所示。

BUILD ID

xposed源码版本需要是android5.1源码对应的版本。可以在github上进行下载,具体的下载方法后文中会详细说明。

  1. 系统环境
    电脑系统是ubuntu 14.04
    jdk安装的是openjdk-7-jdk具体信息如下图所示
    java版本信息
    fas

android5.1源码编译需要使用openjdk,不再使用oracle的jdk。

  1. 测试机环境
    测试机使用的是nexus 5手机,nexus5对应的android源码代号是aosp_hammerhead_userdebug

文档主要通过如下六个步骤完成xposed源码的编译和集成

  • 编译android源码
  • 将android 5.1的img文件刷入手机
  • 编译XposedBridge
  • 使用Xposed Tools
  • 将xposed框架集成到Android系统
  • 集成测试

一 编译android源码

为了将xposed框架集成到nexus5手机,需要先编译nexus5手机对应的android源码。具体步骤如下

  1. 下载android 5.1源代码
    使用repo下载android5.1源代码。

  2. 初始化编译环境
    在源码目录下运行source ./build/envsetup.sh。如图所示。

    envsetup

  3. 选择版本
    执行命令lunch,选择后续验证时使用的手机对应的版本。
    由于我在验证xposed编译结果的时候是在nexus5上进行的,所以在选择版本的时候选择的是nexus5对应的版本。

    lunch

nexus5对应的是aosp_hammerhead_userdebug

  1. 编译android源码
    接着在android源码目录下执行make命令编译源码。第一次编译android源码建议使用make命令进行编译。为了加快编译速度,可以开多个线程进行编译。例如make -j16命令,开16线程编译android源码。
    编译android源码

make编译android源码的所有模块,mmm仅编译指定的模块。在使用mmm编译指定模块之前,需要保证之前使用make命令对整个源代码进行编译。

编译后会将编译结果放到out文件夹下。


编译结果

其中img文件路径是out/target/product/hammerhead下。

img文件

二 将android5.1的img文件刷入手机

  1. 进入fastboot模式
    终端执行sudo adb reboot bootloader命令,手机进入fastboot模式。
  2. 将img文件刷入到手机
    在这一步会将boot.img,userdata.img,cache.img,system.img。
    以system.img为例。在进入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文件刷入到手机。

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

三 编译XposedBridge

  1. 下载XposedBridge的源代码
    从github上下载XposedBridge。点击右侧下载
    Xposed Bridge
  2. 编写Android.mk文件
    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。编写android.mk文件,将编译需要的源代码,编译生成的结果形式等信息告知ndk build编译系统。Android.mk文件内容如下所示。


    Android.mk
  3. 移动Xposed Bridge工程
    将Android.mk文件放到XposedBridge源码目录下,然后将整个工程放到Android源码目录下。如下图所示。


    xposedbridge
  4. 编译Xposed Bridge
    因为在前边编译android5.1源码的时候,已经使用make命令进行了一次编译,所以在这里直接使用mmm命令编译XposedBridge模块。在android源码下使用mmm命令编译xposedbridge模块。命令形式为mmm [模块路径]。


    编译XposedBridge

/home/sakura/Android-5.1.1-r14-compiled/XposedBridge-art/是我电脑上Xposed Bridge源码路径

编译成功之后,生成XposedBridge.jar包,存放在/out/target/product/hammerhead/system/framework/文件夹下。

四 使用xposed tools

  1. 下载xposed tools
    在github上下载xposed tools文件。点击xposed tools进入到github页面,如下图
    xposedtools下载
    点击上图中红色部分选择的按钮,下载xposed tools的zip包。
  2. 配置build.conf文件
    build.conf文件是一个配置文件,会被build.pl读取使用。build文件中主要定义了编译xposed的结果的存放路径,android源码的路径,还有一些版本信息之类的值。
    将下载的zip包解压,在文件夹下创建build.conf文件。然后编辑build.conf文件。build.conf内容如下图所示。
[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。

  1. 替换文件
    在进行文件替换之前,请将被替换的文件做一个备份,便于以后恢复时使用
    3.1 下载xposed相关文件
    从github上克隆xposed两个仓库到本地。分别是xposedart。点击下载zip包,解压压缩包得到xposed文件夹和art文件夹。xposed文件夹包括xposed修改之后的app_process等应用程序和libxposed_*.so等库文件的源码;art文件夹主要包括xposed修改之后的art虚拟机的文件。

在下载art时,要选择android 5.1对应的art分支。如下图红色部分


art下载

3.2 替换文件
用3.1中下载的art文件夹替换/home/Android-5.1.1目录下的art文件夹。


替换art文件夹

将3.1中下载的xposed文件夹移动到/home/Android-5.1.1/frameworks/base/cmds/文件夹下。


替换xposed文件夹

在build.conf文件中outdir目录下创建一个java文件夹,然后将第三部分中生成的XposedBridge.jar包放到java文件夹下。如下图所示。
移动XposedBridge.jar
  1. 使用build.pl编译xposed源码
    build.pl文件在xposed tools文件夹下。在文件中有对build.pl文件的参数的设置规则等信息,如下所示
    build.pl

    从上图可以看到build.pl主要可以完成的工作有四个,分别是编译生成xposed的可执行程序和库文件,将编译之后的文件拷贝到配置文件指定的输出路径下,创建xposed.prop文件,创建flashable ZIP文件。在参数中可以使用-t 针对指定的目标进行创建。在xposed tools目录下运行
    ./build.pl -t arm:22

build arm files for SDK22(对应的是Android5.1系统)
在执行过程中,可能会提示缺少一些依赖包,例如可能会缺少Config::IniFiles,使用apt-cache search Config::IniFiles搜索,安装缺少的包即可。

  1. 结果
    build.pl -t运行结束之后,会将生成的xposed的可执行程序和so库等文件放入到build.conf配置文件中指定的输出目录下。包括lib文件夹下的五个so库和bin文件加下的四个可执行程序以及一个配置文件。如下图所示。


    xposed结果

五 将xposed框架集成到Android系统

  1. 替换文件
    用第四部分中生成的bin文件夹和lib文件夹下的文件替换Android-5.1.1/out/target/product/hammerhead/system/文件夹下的bin文件和lib文件里的相同的文件。需要注意的是用xposed编译生成的app_process32_xposed替换system/bin文件夹下的app_process32
  2. 移动文件
    将xposed.prop文件移动到system文件夹下。


    移动xposed.prop
  3. 重新生成镜像文件
    替换完成之后在android源码目录执行一遍
source ./build/envsetup.sh
lunch
make snod

make snod命令的作用是重新生成镜像文件。

六 集成测试

  1. 将修改之后的img文件刷入手机
    具体步骤请看第二部分
  2. 查看结果
    重启手机,抓取日志,查看xposedbridge.jar包是否成功导入。
    日志查看命令
    adb logcat | grep -i xposed
    成功日志
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容