编译Xposed
Xposed是Android平台上的有名的Hook工具,用它可以修改函数参数,函数返回值和类字段值等等,也可以用它来进行调试。Xposed有几个部分组成:
- 修改过的android_art,这个项目修改部分art代码,使Hook成为可能
- Xposed native部分,该部分主要提供给XposedBridge可调用api和调用修改过的android_art的api,还有生成可替换的app_process程序
- XposedBridge,该项目是主要功能是提供给Xposed的模块开发者api,它将编译成XposedBridge.jar
- XposedInstaller,该项目是Xposed安装器,使得普通用户在使用Xposed更方便,同时,它还可以管理手机上已经安装的Xposed模块,它编译完成后将生成apk文件,本文不讨论如何编译它。
了解了这些,下面我们来试试如何编译它们
准备
- Ubuntu系统,推荐16.04及以上,本文用的18.04
- Android Studio
- Android源码(下载链接,请百度)
- 修改过的android_art:https://github.com/rovo89/android_art
- Xposed native部分:https://github.com/rovo89/Xposed
- XposedBridge:https://github.com/rovo89/XposedBridge
- Xposed构建工具,XposedTools:https://github.com/rovo89/XposedTools
配置
Android ART
将Android源码下的art目录移动到其他路径备份,比如Android源码的上层路径。在Android源码目录执行git clone https://github.com/rovo89/android_art -b xposed-nougat-mr2 art
,将修改过的android art下载到Android源码根目录。
注:请注意上面选择的分支是
xposed-nougat-mr2
,我使用的是 Android7.1.2的源码,所以选择该分支。请根据Android源码版本选择分支。
Xposed Native
转到frameworks/base/cmds
目录,执行git clone https://github.com/rovo89/Xposed xposed
,将Xposed Native部分的源码下载。
XposedBridge
在任意目录执行git clone https://github.com/rovo89/XposedBridge -b art
,然后导入Android Studio中,点Build->Rebuild Project,会在app/build/intermediates/transform/preDex/release
目录下生成.jar文件,将生成的jar文件重命名为XposedBridge.jar
,放入Android源码目录下的out/java/
下。也可以直接生成apk,然后将生成的apk后缀改为jar
注:如果想生成供Xposed模块调用的XposedBridge.jar,则在Android Studio的右侧打开Gradle Project,双击
jarStubs
就会在app/build/api
生成api.jar
XposedTools
在任意目录执行git clone https://github.com/rovo89/XposedTools
,将XposedTools目录下的build.conf.sample
复制一份,并将它重命名为build.conf
,build.conf文件用于配置构建环境,我们来看他的内容:
[General]
outdir = /android/out
javadir = /android/XposedBridge
[Build]
# Please keep the base version number and add your custom suffix
version = 65 (custom build by xyz / %s)
# makeflags = -j4
[GPG]
sign = release
user = 852109AA!
# Root directories of the AOSP source tree per SDK version
[AospDir]
19 = /android/aosp/440
21 = /android/aosp/500
# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox
[BusyBox]
arm = 21
x86 = 21
armv5 = 17
- outdir:指定Android源码中的out目录
- javadir:指定XposedBridge目录,如果你不需要编译XposedBridge.jar可以不指定
- version:Xposed版本,这个版本号将显示在XposedInstaller上
- ApospDir下的数字:设置sdk版本对应的Android源码
- [BusyBox]标签:busybox,可以不指定
配置完成后,就可以执行build.pl编译了,以下有几个例子:
./build.pl -a java
编译XposedBridge.jar,需要在build.conf
里指定javadir
./build.pl -t arm:25
编译生成供cpu架构为arm,sdk为25平台使用的Xposed
编译完成后,将在Android源码目录/out/sdk25/arm
生成可刷入手机的zip文件
常见问题
1.执行build.pl的时候提示找不到函数,比如提示找不到Config::IniFiles
.
可以通过下面的方式来寻找并安装依赖:
(1)执行apt-cache search Config::IniFiles
寻找Config::IniFiles所依赖的库文件:
libconfig-inifiles-perl - Read .ini-style configuration files
(2)执行sudo apt install libconfig-inifiles-perl
安装所依赖的库
编译Xposed的更多相关文章
- xposed源码编译与集成
xposed installer3.0版本之后,传统的xposed框架的使用方法是从官网上下载xposed installer.apk以及xposed-arm-sdk22.zip包.然后具体的使用方法 ...
- Xposed 集成 Android 6.0.1环境中,总结
由于工作需要,需要将xposed集成到android源码中,生成新的ROM就自带xposed的功能. 下面大体上说一下步骤和遇到的问题. 1.下载,并编译android源码,成功. 2.下载 http ...
- Android5.1源码Xposed框架编译
介绍 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作 . 对于Android5.1系统,官方提供 ...
- [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- [转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
使用Android Studio创建的空项目作为Xposed Module App,对于Api Jar包的引用方式,一开始是按照傻瓜式Jar Lib的处理方式,复制XposedBridgeApi-54 ...
- [转载] Android.Hook框架xposed开发篇
本文转载自: http://www.52pojie.cn/thread-396793-1-1.html 原帖:http://drops.wooyun.org/tips/7488 作者:瘦蛟舞 官方教程 ...
- [转载] Android Studio 上第一个 Xposed 模块
本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...
- [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...
- android 反编译 逆向工具整理
需要准备的道具需要哪些软件会在后面逆向过程中详细介绍,这里先大致罗列一下 android一台root并安装了xposed框架的手机(主要是为了脱壳) 类似[海马玩]这种模拟器 android-kill ...
随机推荐
- 在Windows下同时安装Python2.x和Python3.x
前言: Python现在是两个版本共存,Python2.x和Python3.x都同时在更新.但是Python2.x和Python3.x的区别还是很多的(以后我可能会写一篇文章列举一下Python2.x ...
- TensorFlow 常用函数汇总
本文介绍了tensorflow的常用函数,源自网上整理. TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU.一般你不需要显式指定使用 CPU ...
- 使用OAuth2的SSO分析
参考:https://github.com/spring-guides/tut-spring-security-and-angular-js/blob/master/oauth2-vanilla/RE ...
- ReactNative(三)——WebStorm的基本配置
设置.js文件默认以jsx的语法打开 在没有进行设置的情况下,每次打开WebStorm的时候打开包含jsx语法的.js文件都会有以下提示: 当然我们点击转换后就可以了,但是每次都会提示,所以还是来一个 ...
- poj 1696 极角排序求最长逆时针螺旋线
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4970 Accepted: 3100 Descrip ...
- pdf在线加载·
https://yq.aliyun.com/articles/40197 在线例子是这个
- js中函数的写法
js提供了灵活的函数写法,我们常见的函数写法和调用可能是: function ask(){ console.log(1); } ask(); 这样就完成了函数的定义和调用,司空见惯. 还有js里面的匿 ...
- 在Windows Server 2008 R2下搭建jsp环境(二)-mysql的下载安装
个人推荐java开发过程中的数据库首选MYSQL,MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保 ...
- 【NOIP2011】 聪明的质监员
小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1. 给定 m个区间[Li,Ri]: 2. ...
- CF_229E_Gift_概率DP+组合数学
CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这 ...