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文件,本文不讨论如何编译它。

    了解了这些,下面我们来试试如何编译它们

准备

配置

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的更多相关文章

  1. xposed源码编译与集成

    xposed installer3.0版本之后,传统的xposed框架的使用方法是从官网上下载xposed installer.apk以及xposed-arm-sdk22.zip包.然后具体的使用方法 ...

  2. Xposed 集成 Android 6.0.1环境中,总结

    由于工作需要,需要将xposed集成到android源码中,生成新的ROM就自带xposed的功能. 下面大体上说一下步骤和遇到的问题. 1.下载,并编译android源码,成功. 2.下载 http ...

  3. Android5.1源码Xposed框架编译

    介绍 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作 . 对于Android5.1系统,官方提供 ...

  4. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  5. [转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式

    使用Android Studio创建的空项目作为Xposed Module App,对于Api Jar包的引用方式,一开始是按照傻瓜式Jar Lib的处理方式,复制XposedBridgeApi-54 ...

  6. [转载] Android.Hook框架xposed开发篇

    本文转载自: http://www.52pojie.cn/thread-396793-1-1.html 原帖:http://drops.wooyun.org/tips/7488 作者:瘦蛟舞 官方教程 ...

  7. [转载] Android Studio 上第一个 Xposed 模块

    本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...

  8. [转载] 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 ...

  9. android 反编译 逆向工具整理

    需要准备的道具需要哪些软件会在后面逆向过程中详细介绍,这里先大致罗列一下 android一台root并安装了xposed框架的手机(主要是为了脱壳) 类似[海马玩]这种模拟器 android-kill ...

随机推荐

  1. 数据分析之---Python可视化工具

    1. 数据分析基本流程 作为非专业的数据分析人员,在平时的工作中也会遇到一些任务:需要对大量进行分析,然后得出结果,解决问题. 所以了解基本的数据分析流程,数据分析手段对于提高工作效率还是非常有帮助的 ...

  2. Web开发:需收藏的JavaScript常用技巧

    原文来自:https://www.baidu.com/home/news/data/newspage?nid=4242707244478773456&n_type=0&p_from=1 ...

  3. 在Ubuntu16.04上配置.Net Core 2 环境

    一.安装.Net Core SDK 按照官方文档,执行以下命令安装SDK curl https://packages.microsoft.com/keys/microsoft.asc | gpg -- ...

  4. [ Java面试题 ]算法篇

    1.堆和栈在内存中的区别是什么? 概念: 栈(stack)是为执行线程留出的内存空间.当函数被调用的时候,栈顶为局部变量和一些 bookkeeping 数据预留块.当函数执行完毕,块就没有用了,可能在 ...

  5. ASP.NET Core 2 学习笔记(一)

    来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET,但相对于ASP.NET确实有许多架构上的差异,可以说除了 ...

  6. 使用jekyll和Github搭建个人博客

    一.使用jekyll和Github三步搭建个人博客 在 Github 上建一个库,库的名字是xxx.github.com,其中的xxx是你的github的账号名(图中标注的不要勾选) 注:如果没有Gi ...

  7. Spring Security Oauth2 permitAll()方法小记

    黄鼠狼在养鸡场山崖边立了块碑,写道:"不勇敢地飞下去,你怎么知道自己原来是一只搏击长空的鹰?!" 从此以后 黄鼠狼每天都能在崖底吃到那些摔死的鸡! 前言 上周五有网友问道,在使用s ...

  8. 第四天 Java语言基础

    一.函数的概念 1)什么函数 函数就是定义在类中的具有特定功能的一段独立小程序,并能被多次使用. 2)问题引入 在昨天讲述使用循环嵌套画出矩形.但有问题,每次要画矩形都要写很多重复性的代码,能不能将这 ...

  9. mysql binlog格式

    Binlog Event 对于一个 Binlog Event 来说,它分为三个部分,header,post-header 以及 payload.MySQL 的 Binlog Event 有很多版本,我 ...

  10. 本地广播 localBroadcastManager Android

    使用localBroadcastManager发出的广播只能在本应用程序的内部进行传递. App应用内广播可理解为一种局部广播,广播的发送者和接收者都同属于一个App. 相比于全局广播(普通广播),A ...