参考博文
编译Xposed
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-ARTgithub
- 将Android源码下的art目录移动到其余路径备份,好比Android源码的上层路径
- 在Android源码路径执行
git clone https://github.com/rovo89/android_art -b xposed-nougat-mr2 art
,注意根据Android源码版本选择分支或者对应的标签,或者git checkout xposed-marshmallow
直接切换到对应的远程分支
-
Xposed Nativeubuntu
- 转到frameworks/base/cmds目录,执行git clone https://github.com/rovo89/Xposed xposed,将Xposed Native部分的源码下载
-
XposedBridgevim
- 在任意目录执行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里面靠谱一点api
注:若是想生成供Xposed模块调用的XposedBridge.jar,则在Android Studio的右侧打开Gradle Project,双击jarStubs就会在app/build/api生成api.jarbash
- 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. root@a03e3a9cc004:/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环境变量
misty@ubuntu:~/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
misty@ubuntu:~/bin/xposed/XposedTools$ vim /etc/profile misty@ubuntu:~/bin/xposed/XposedTools$ export JAVA_HOME=/home/misty/MyFile/jdk1.8.0_211 misty@ubuntu:~/bin/xposed/XposedTools$ export PATH=$PATH:$JAVA_HOME/bin misty@ubuntu:~/bin/xposed/XposedTools$ java -version
相关命令
getprop|grep arm
查看CPU相关的信息
小确幸
每一丝灵感都值得被记录,每一笔记录都是成长,每一点成长都值得欢呼
博主我的站: www.imisty.cn CSDN博客: https://blog.csdn.net/lookinthefog 博客园 :https://imist.cnblogs.com/
但愿可以认识一些热爱技术的小伙伴,欢迎友连接哟