编译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 ...
随机推荐
- 玩转zookeeper命令
zkCli 是 zookeeper 原生的与 zk服务群连接的客户端的程序. 1.如何使用zkCli,sh 连接server 与参数 2.zkCli 下的增删查改指令 与 配额 quota 1.如何使 ...
- Hibernate Validator 6.0.9.Final - JSR 380 Reference Implementation: Reference Guide
Preface Validating data is a common task that occurs throughout all application layers, from the pre ...
- Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
How to configure Spring Security to allow Swagger URL to be accessed without authentication @Configu ...
- 用react重构个人网站 3-22
问题一:import React from 'react'这个写法是怎么回事? 答案:require是common.js的写法,import是ES6的写法,主要功能都是引入模块,写法上: var mo ...
- 如何将数据库中存的树转化为树形列表(以easyui的tree为例)
很多时候,我们会把一棵树存放到数据库中,当前台需要展示一个树形列表时,将这棵树读取出来并显示,这个过程是怎么实现的呢? 这篇文章是以构造一棵easyui前台框架的一个树形列表为例,后台框架是sprin ...
- 电脑不识别U盘
最近遇到这样一个问题,现把具体问题和解决方案给大家分享一下: 系统:win10 症状:插入U盘,系统提示插入U盘的声音提示,磁盘不显示,360 无图标 原因:USB驱动出现问题 对症下药: 插入U盘右 ...
- sonyflake.go
time := id >> (BitLenSequence + BitLenMachineID) sequence := id & maskSequence > ...
- .net core下使用Thrift
因网站组(.net)与游戏服务端(c++)原来使用REST API通讯效率稍显低下,准备下期重构时改用rpc方式,经比较Thrift和gRPC两者的优劣(参照网上的对比结果),最终决定使用Thrift ...
- 【最小生成树】UVA1494Qin Shi Huang's National Road System秦始皇修路
Description During the Warring States Period of ancient China(476 BC to 221 BC), there were seven ki ...
- BZOJ_1260_[CQOI2007]涂色paint _区间DP
BZOJ_1260_[CQOI2007]涂色paint _区间DP 题意: 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字 ...