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源码代号。
环境配置
- 源码版本
在整个过程中,使用到了android系统源码和xposed源码。
android系统源码版本是 LYM48M
查看源码版本的方法:在源码路径下,查看
/build/core/build_id.mk
文件中的BUILD_ID即为源码的版本号。如下图所示。BUILD IDxposed源码版本需要是android5.1源码对应的版本。可以在github上进行下载,具体的下载方法后文中会详细说明。
- 系统环境
电脑系统是ubuntu 14.04
jdk安装的是openjdk-7-jdk具体信息如下图所示java版本信息fas
android5.1源码编译需要使用openjdk,不再使用oracle的jdk。
- 测试机环境
测试机使用的是nexus 5手机,nexus5对应的android源码代号是aosp_hammerhead_userdebug
文档主要通过如下六个步骤完成xposed源码的编译和集成
- 编译android源码
- 将android 5.1的img文件刷入手机
- 编译XposedBridge
- 使用Xposed Tools
- 将xposed框架集成到Android系统
- 集成测试
一 编译android源码
为了将xposed框架集成到nexus5手机,需要先编译nexus5手机对应的android源码。具体步骤如下
下载android 5.1源代码
使用repo下载android5.1源代码。初始化编译环境
在源码目录下运行source ./build/envsetup.sh
。如图所示。envsetup选择版本
执行命令lunch
,选择后续验证时使用的手机对应的版本。
由于我在验证xposed编译结果的时候是在nexus5上进行的,所以在选择版本的时候选择的是nexus5对应的版本。lunch
nexus5对应的是aosp_hammerhead_userdebug
- 编译android源码
接着在android源码目录下执行make
命令编译源码。第一次编译android源码建议使用make命令进行编译。为了加快编译速度,可以开多个线程进行编译。例如make -j16
命令,开16线程编译android源码。编译android源码
make编译android源码的所有模块,mmm仅编译指定的模块。在使用mmm编译指定模块之前,需要保证之前使用make命令对整个源代码进行编译。
编译后会将编译结果放到out文件夹下。
其中img文件路径是out/target/product/hammerhead下。
二 将android5.1的img文件刷入手机
- 进入fastboot模式
终端执行sudo adb reboot bootloader
命令,手机进入fastboot模式。 - 将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文件刷入到手机。
- 重启手机
在将img文件全部刷入到手机之后执行fastboot reboot
命令,重新启动手机,之后可以看到手机现在的系统的android5.1系统。刷机成功
三 编译XposedBridge
- 下载XposedBridge的源代码
从github上下载XposedBridge。点击右侧下载Xposed Bridge 编写Android.mk文件
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。编写android.mk文件,将编译需要的源代码,编译生成的结果形式等信息告知ndk build编译系统。Android.mk文件内容如下所示。Android.mk移动Xposed Bridge工程
将Android.mk文件放到XposedBridge源码目录下,然后将整个工程放到Android源码目录下。如下图所示。xposedbridge编译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
- 下载xposed tools
在github上下载xposed tools文件。点击xposed tools进入到github页面,如下图xposedtools下载点击上图中红色部分选择的按钮,下载xposed tools的zip包。
- 配置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。
- 替换文件
在进行文件替换之前,请将被替换的文件做一个备份,便于以后恢复时使用
3.1 下载xposed相关文件
从github上克隆xposed两个仓库到本地。分别是xposed和art。点击下载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文件夹。
将3.1中下载的xposed文件夹移动到/home/Android-5.1.1/frameworks/base/cmds/文件夹下。
在build.conf文件中outdir目录下创建一个java文件夹,然后将第三部分中生成的XposedBridge.jar包放到java文件夹下。如下图所示。
- 使用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
搜索,安装缺少的包即可。
结果
build.pl -t运行结束之后,会将生成的xposed的可执行程序和so库等文件放入到build.conf配置文件中指定的输出目录下。包括lib文件夹下的五个so库和bin文件加下的四个可执行程序以及一个配置文件。如下图所示。xposed结果
五 将xposed框架集成到Android系统
- 替换文件
用第四部分中生成的bin文件夹和lib文件夹下的文件替换Android-5.1.1/out/target/product/hammerhead/system/文件夹下的bin文件和lib文件里的相同的文件。需要注意的是用xposed编译生成的app_process32_xposed替换system/bin文件夹下的app_process32 移动文件
将xposed.prop文件移动到system文件夹下。移动xposed.prop- 重新生成镜像文件
替换完成之后在android源码目录执行一遍
source ./build/envsetup.sh
lunch
make snod
make snod命令的作用是重新生成镜像文件。
六 集成测试
- 将修改之后的img文件刷入手机
具体步骤请看第二部分 - 查看结果
重启手机,抓取日志,查看xposedbridge.jar包是否成功导入。
日志查看命令
adb logcat | grep -i xposed
作者:sakuradream
链接:https://www.jianshu.com/p/6471bab49cb1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
xposed源码编译与集成的更多相关文章
- World Wind .NET源码编译问题处理
World Wind .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- nginx源码编译以及源码编译过程中遇到的问题
本文主要讲nginx安装以及安装过程中遇到的问题. 谈到nginx 必须聊聊它的起源和发展. nginx是由俄罗斯工程师Igor Sysoev 用C语言开发的一个免费开源的Web服务器软件,于2004 ...
- 解决Tomcat10.0.12源码编译问题进而剖析其优秀分层设计架构
概述 Tomcat.Jetty.Undertow这几个都是非常有名实现Servlet规范的应用服务器,Tomcat本身也是业界上非常优秀的中间件,简单可将Tomcat看成是一个Http服务器+Serv ...
- Android 5.0源码编译问题
如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...
- Android stdio Apktool源码编译
Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...
- SSH/SSL 源码编译安装简易操作说明
环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- 源码编译安装 MySQL 5.5.x 实践
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
随机推荐
- 【NOIP2016】蚯蚓(单调队列)
题意: 思路: 我们发现,对于任意两次切割i和j,i<j,在进行完第j次切割后,第i次切割的u/v部分一定大于等于第j次切割的u/v部分,第i次的1-u/v部分也一定大于等于第j次的1-u/v部 ...
- 【BZOJ2142】礼物(扩展lucas定理,中国剩余定理合并方程)
题意:有n件礼物,m个人,每个人分别需要w[i]件礼物,求分礼物的不同方案数 mod P 提示:设P=p1^c1 * p2^c2 * p3^c3 * … *pt ^ ct,pi为质数. 1≤n≤10^ ...
- 欧拉 路径&&回路
不管 欧拉回路 还是 欧拉路径 无向图或者有向图(删除方向后)要联通 欧拉路径存在的判定条件 1 无向图 度数为奇数的点最多有两个 2 有向图 最多只能有两个点的入度不等于出度 ...
- [bzoj3630][JLOI2014]镜面通道_计算几何_网络流_最小割
镜面通道 bzoj-3630 JLOI-2014 题目大意:题目链接. 注释:略. 想法: 我们发现,只要上下界没有被完全封死,我们就一定有一条合法的光路. 所以只需要将上界和下界拆开即可. 拆点,把 ...
- AtCoder Grand Contest 012 D Colorful Balls
题意: 有N个球排成一行,第i个球颜色为ci, 权为wi, 如果两个同色球权值和 <= X 则它们可以交换: 如果两个异色球权值和 <= Y 则它们可以交换:不限制交换次数,求能到达的颜色 ...
- 利用try-catch代码检查用户输入数据是否是有效的浮点数超级详细
package chapter6; //数据输入格式检查 import java.io.IOException; import java.util.InputMismatchException; im ...
- Ubuntu 16.04出现:qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
没有安装qt4-qmake,安装即可: sudo apt-get install qt4-qmake 参考: https://stackoverflow.com/questions/23703864/ ...
- test markdown 写博客
欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想 ...
- 基于MFC的一个简单计算器
写一个简单的计算器并不是什么很难的事,主要目的是要通过这个程序来学习和分析其中的核心算法.这个简易计算器的核心部分就是对输入的表达式的正确性判断与求值,其中包括对表达式的解析.中缀表达式转后缀表达式. ...
- node+vue-cli+webpack搭建教程
链接:https://segmentfault.com/a/1190000009160934?_ea=1849098 链接:https://www.jianshu.com/p/2769efeaa10a ...