Xposed源码编译踩坑实录

参考博文

编译Xposed

  • 参 考博文 https://www.jianshu.com/p/c731cd44e82b
  • 参考博文 https://www.cnblogs.com/luoyesiqiu/p/9524651.html

    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源码版本选择分支或者对应的标签,或者git checkout xposed-marshmallow 直接切换到对应的远程分支
  • 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
    • 将生成的jar导入aosp/out/target/product/hammerhead/system/framework/

这里jar文件存放的目录不同的博文是不一致的,但是觉得framework里面靠谱一点

注:如果想生成供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]
# 如果不编译XposedBridge,需要自行将XposedBridge.jar放置到输出目录的 java文件夹下
outdir = /home/misty/bin/WORKING_DIRECTORY/out
#javadir = /android/XposedBridge

[Build]
# Please keep the base version number and add your custom suffix
version = 86 (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
23 = /home/misty/bin/WORKING_DIRECTORY

# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox

#[BusyBox]
#arm = 23
#x86 = 23
#armv5 = 23

* 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 arm64:23

  • 编译生成供cpu架构为arm64,sdk为23平台使用的Xposed
  • 编译完成后,将在Android源码目录/out/sdk23/arm生成可刷入手机的zip文件

配置 perl 环境

  • XposedTools 依赖于 perl,所以我们要跑起来就要有一个 perl 环境。首次运行 perl 需要安装依赖 Config::IniFiles
    perl -MCPAN -e ‘install Config::IniFiles‘
  • 大概需要在安装下面的两个依赖(不同系统可能不同)
    perl -MCPAN -e ‘install File::Tail‘
    perl -MCPAN -e ‘install File::ReadBackwards‘
  • 如果还不成功,按照下面的方法安装所需的模块即可
    perl -MCPAN -e ‘install [ModuleName]‘

解决模块安装失败的问题

  • 执行build.pl的时候提示找不到函数,比如提示找不到Config::IniFiles. 可以通过下面的方式来寻找并安装依赖:

    • 执行apt-cache search Config::IniFiles寻找Config::IniFiles所依赖的库文件
    • 执行sudo apt install libconfig-inifiles-perl安装所依赖的库
      libconfig-inifiles-perl - Read .ini-style configuration files
  • 使用aptitude工具下载依赖
    • sudo aptitude install Config::IniFiles
    • sudo aptitude install File::Tail
    • sudo aptitude install File::ReadBackwards

      虽然可能会出现安装失败,但是会出现依赖提醒,按照提示安装依赖即可

根据提示安装依赖cpan -f Archive::Zip

Can't locate Archive/Zip.pm in @INC (you may need to install the Archive::Zip module) (@INC contains: /home/aosp/xposed/XposedTools /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at ./build.pl line 11.
BEGIN failed--compilation aborted at ./build.pl line 11.

[email protected]:/home/aosp/xposed/XposedTools# cpan -f Archive::Zip

常见问题

  • art更名替换导致如下错误,不可以在源码根目录下,需要移动到其他目录,本例移动到上级目录
    build/core/base_rules.mk:157: *** art_bak: MODULE.TARGET.FAKE.cpplint-art-phony already defined by art。 停止。

       #### make failed to build some targets (6 seconds) ####

编译XposedBridge问题

编译android6.0源码需要java1.7,而编译xposedbridge需要java1.8,所以这里为了切换方便临时指定java环境变量

[email protected]:~/bin/xposed/XposedTools$ ./build.pl -a java
Loading config file /home/misty/bin/xposed/XposedTools/build.conf...
Checking requirements...
Building the Java part...
Compiling...

FAILURE: Build failed with an exception.

  • Where:
    Build file ‘/home/misty/bin/xposed/XposedBridge/app/build.gradle‘ line: 3
  • What went wrong:
    A problem occurred evaluating project ‘:app‘.

    java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 0.682 secs

[email protected]:~/bin/xposed/XposedTools$ vim /etc/profile
[email protected]:~/bin/xposed/XposedTools$ export JAVA_HOME=/home/misty/MyFile/jdk1.8.0_211
[email protected]:~/bin/xposed/XposedTools$ export PATH=$PATH:$JAVA_HOME/bin
[email protected]:~/bin/xposed/XposedTools$ java -version

相关命令

getprop|grep arm 查看CPU相关的信息

小确幸

每一丝灵感都值得被记录,每一笔记录都是成长,每一点成长都值得欢呼

博主个人站: www.imisty.cn
CSDN博客: https://blog.csdn.net/lookinthefog
博客园 :https://imist.cnblogs.com/

希望能够认识一些热爱技术的小伙伴,欢迎友链接哟

原文地址:https://www.cnblogs.com/imist/p/11417360.html

时间: 2024-10-06 14:28:18

Xposed源码编译踩坑实录的相关文章

kibana 5.5 源码编译踩坑记录

由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行. 注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm start会因为无scripts目录报错. Setting Up kibana Development Environment Fork, then clone the kibana repo and change directory into it 下载kibana5.5源码解压后 cd kiban

Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10

在阅读unpv1时运行源代码的环境配置,这里简单记录一下 源代码里的README 写得挺详细的,但是在Linux 系统的下还是没办法直接编译通过的, 这里我使用的是ubuntu 19.10(在腾讯云ubuntu server 18.04.1也测试通过) 以下是简单的步骤: 1.下载源码并解压 2.解压源代码后得到unpv13e, 3.开始编译 cd unpv13e ./configure cd lib make cd ../libfree make 这时报错:inet_ntop.c: In fu

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录《第二部分:编译,安装,测试》

前言 GCC(GNU Compiler Collection,GNU编译器合集)是linux以及其他类UNIX平台上进行开源项目,软件开发等必不可少的工具链组成之一(工具链的其他成员包括 binutils,Glibc,libstdc++ 等) 另 外,对于程序员以及系统管理员而言,经常需要从软件的源码手动编译安装,而不论是configure脚本,还是make工具/makefile文件,最终 都需要调用gcc(或者其它编译器)来进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gc

CentOS6.5 从源码编译安装 GCC-4.9.1 全程实录,包含测试使用《图文教程》

前言 GCC(GNU Compiler Collection,GNU编译器合集)是linux以及其他类UNIX平台上进行开源项目,软件开发等必不可少的工具链组成之一(工具链的其他成员包括 binutils,Glibc,libstdc++ 等) 另外,对于程序员以及系统管理员而言,经常需要从软件的源码手动编译安装,而不论是configure脚本,还是make工具/makefile文件,最终都需要调用gcc(或者其它编译器)来进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gcc共

Docker环境下编译android源码|编译可运行xposed

前言 因为我的电脑是Ubuntu18的版本,成功编译xposed刷入手机之后无法启动,检查了所有的环境,没有问题,发现可能是Ubuntu系统的兼容库的问题,但是我不可能重新安装系统吧,毕竟有点蠢,所以最好的方式就是在docker的Ubuntu容器中编译,统一环境问题,也可以隔离环境平时 工作开发环境,下面开始操作 安装配置docker docker加速,采用对国人友好的镜像地址 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,执行以下命令: 您可以配置 D

【Python笔记】如何源码编译依赖LAPACK和ATLAS库的NumPy包

上篇笔记介绍了不依赖lapack和atlas库的NumPy包源码编译/安装方法,但"纯净版"的NumPy会损失性能,故本篇笔记说明如何源码编译安装依赖lapack和atlas库的NumPy包. 1. GCC版本要求 使用较新版本的GCC工具集(尽量不低于v4.7)且集成有gfortran编译器. 备注1:这里大写的"GCC"是指GNU Compiler Collection,它除包含C语言编译器gcc外,还包含很多其它语言的编译器(如g++/gfortran等) 备

【转载】Ogre3d 2.1 源码编译安装教程

原文:Ogre3d 2.1 源码编译安装教程 今年是3D手游年,今年也是游戏引擎战争进入白热的一年. 移动游戏的红海时代,让各大端游也忍不住纷纷伸出大白腿,Unreal.CryEngine纷纷宣布自己引擎免费,且不说效果怎么样,反正免费一个我就下过来折腾一下.今日在群里得知,两年没更新的Ogre3d更新了,从1.9版本直接更新到了2.1.于是又折腾了一番. 对于习惯了Unity3d一个安装包安装的人来说,Ogre3d 的编译安装也是够复杂的了.下面就一步一步,似爪牙吧. 首先我们来到Ogre3d

Linux 安装node.js ---- 源码编译的方式

一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rpm -q gcc-c++ 3.安装 gcc.gcc-c++ 命令: yum -y install gcc gcc-c++ kernel-devel 注意 :  如果是第一个安装,有可能 会报 错误:xxx is not in the sudoers file. This incident will

React Native Android入门实战及深入源码分析系列(2)——React Native源码编译

本文为老曾原创,转载需注明出处:http://blog.csdn.net/minimicall?viewmode=contents 在上一节中,我们通过一个相册的制作来学习了React Native编写.这一节我们需要开始学习React Native的源码. 学习源码,从编译源码开始. 首先,我们需要把代码从github中克隆下来. https://github.com/facebook/react-native.git 然后,我们可以切换到它的稳定分支,2016-03-30是我的操作时间,这个