xposed 源代码编译和安装 - 第 2 步:编译 XposedBridge
方式3:用XposedTools(好没有搞定)
- XposedBridge-art :github上rovo89/XposedBridge
https://github.com/rovo89/XposedBridge
主要用于生成:XposedBridge.jar包(在写Xposed插件时,需要用到这个jar包)
编译Xposed Native层代码
- Xposed:github上rovo89/xposed
下载
https://github.com/rovo89/Xposed
移动或copy到Android源码目录
/android-7.1.2_r1/frameworks/base/cmds/
或克隆方式
#切换目录
cd android源码/frameworks/base/cmds/
#git克隆
git clone https://github.com/rovo89/Xposed.git xposed
这部分代码将被放置到Android源码目录,采用mmm编译,后会生成必要的so文件,主要是修改app_process等应用程序和libxposed_*.so等库文件
out/.../system/bin/app_process32_xposed ---> /system/bin/app_process32
比如我的Android源码的目录是:
- android_art:gitHub上rovo89/和art
主要作用:对art_methods 进行改造后的art,用于替代系统的 art。主要包括xposed修改之后的art虚拟机的文件
https://github.com/rovo89/android_art/tree/xposed-lollipop-mr1
#git 克隆
git clone https://github.com/rovo89/android_art.git
android studio方式编译XposedBridge.jar
如果你希望自己编译 XposedBridge.jar
,请克隆 github.com/rovo89/Xpos… 并设置相应的javadir
变量。 确保Gradle构建工作正常,需要安装安卓SDK和它的他依赖项。 然后你可以调用 ./build.pl -a java
来构建和复制 jar 。
如果要使用预构建文件,请将它的复制到你在 build.conf
中配置的outdir
中的java
子文件夹。 例如如果 outdir
设置为 /android/out
,那么文件应该存储在 /android/out/java/XposedBridge.jar
中。
- 1、下载XposedBridge-art的源代码,并解压
从github上下载rovo89/XposedBridge。点击Clone 或download
XposedBridge-art加压后的情况,你是不是看到你经常用的XposedHelpers和XC_MethodHook之类的java文件?
- 2、编写Android.mk文件(在XposedBridge-art的解压目录)
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。编写android.mk文件,将编译需要的源代码,编译生成的结果形式等信息告知ndk build编译系统。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_DEX_PREOPT = false
LOCAL_MODULE := XposedBridge
LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
$(call all-java-files-under, lib/apache-commons-lang/external) \
$(call all-java-files-under, hiddenapistubs/src)
include $(BUILD_JAVA_LIBRARY)
$(LOCAL_INTERMEDIA_TARGETS): PRIVATE_EXTRA_JAR_ARGS := -C "$(LOCAL_PATH)" \
assets -C "#(LOCAL_PATH)" NOTICE.txt
include $(call all-makefiles-under, $(LOCAL_PATH))
- 3.用Android Studio导入XposedBridge,点Build->Rebuild Project。XposedBridge编译生成不签名的apk,然后把apk重命名XposedBaieBridge.jar,放到android源码生成的out目录中的out/target/product/generic_x86(或者是generic_arm64或者generic)/system/framework/java中。 注:这主要时为了在Android源码重编译带xposed功能的img用。
- 4、如果提供给app调用的api,需要执行android studio的gradle project的other中的generateAPI选项,会在目录build/api中生成apk.jar
到这里关于XposedBridge编译的工作基本上告一个段落。
XposedTools
- 需要Perl环境,如果没有则需要安装
- 1、下载XposedTools
git clone https://github.com/rovo89/XposedTools
XposedTools的使用文档参考github上对应的READM.md文件
XposedTools的Build script (build.pl)
This script can perform the following steps:
- Compile the native executables (
app_process
), libraries (libxposed_*.so
) and the modified ART runtime. - Collect these files and put them into a common output directory.
- Create the
xposed.prop
file that serves as label for the published package. - Create a flashable ZIP file to install the Xposed framework.
It can also compile the Java part of the framework, called XposedBridge.jar
.
You can call ./build.pl --help
to get a list of allowed options. Usually, it's enough to specify the -t
option, e.g ./build.pl -t arm,x86:21
to build ARM and x86 files for SDK 21 (Android 5.0).
2、创建Build.conf(基本与XposedTools目录中的build.conf.sample一致)
- outdir:指定Android源码中的out目录
- javadir:指定XposedBridge目录,如果你不需要编译XposedBridge.jar可以不指定
- version:Xposed版本,这个版本号将显示在XposedInstaller上
- ApospDir下的数字:设置sdk版本对应的Android源码
- [BusyBox]标签:busybox,可以不指定
我的如下:
[General]
outdir = ../android-7.1.2_r1/out/target/product/generic_arm64/system/framework
javadir = ../android-7.1.2_r1/frameworks/base/cmds/xposed
[Build]
# Please keep the base version number and add your custom suffix
version = 89 (custom build by zch / %s)
makeflags = -j16
[GPG]
sign = release
user = 852109AA!
# Root directories of the AOSP source tree per SDK version
[AospDir]
25 = ../android-7.1.2_r1/
# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox
[BusyBox]
arm = 25
x86 = 25
armv5 = 25
配置完成后,就可以执行build.pl编译了
3、编译XposedBridge.jar(由于前面通过Android stuido编译通过,这步可以省略)
./build.pl -a java
很遗憾的是,这里我编译出了问题,还好前面通过Android Stuido编译过了,这里先不做理会。
这里把错误信息展示一下,等找到问题原因后,我会把解决办法做个特别说明。
4、编译生成供cpu架构为arm,sdk为25平台使用的Xposed
./build.pl -t arm:25
编译完成后,将在Android源码目录/out/sdk25/arm
生成可刷入手机的zip文件
对应的zip 文件包括内容如下
编译好的Xposed 安装到手机中的4种方式
方式:之前已经编译号的system.img,那么将编译好的xposedcopy到对应的目录
- XposedBridge.jar 放到system目录下
- app_process32_xpose&&app_process64_xposed 替换对应的app_process
out/outdir/sdk23/arm64/files/system/xposed.prop 放到system中
之后调用make snod, 从新快速打包system.img
- 刷入手机中即可,在手机上进入recovery模式,然后将(或下载)的xposed-arm-sdk22.zip刷入手机。
替换之后在Android 源码目录再次执行一遍,make snod命令会重新生成镜像文件system.img
source ./build/envsetup.sh
lunch
make snod
方式2:找到对应文件将起放到手机的如下目录
out/.../system/bin/app_process32_xposed ---> /system/bin/app_process32
/system/bin/app_process64_xposed ---> /system/bin/app_process64
/system/bin/dex2oat
/system/bin/oatdump
/system/bin/patchoat
out/outdir/java/XposedBridge.jar ---> /system/framework/XposedBridge.jar
/system/lib/libart-compiler.so
/system/lib/libart.so
/system/lib/libsigchain.so
/system/lib/libxposed_art.so
/system/lib64/libart-disassembler.so
/system/lib64/libart.so
/system/lib64/libsigchain.so
/system/lib64/libxposed_art.so
out/outdir/sdk23/arm64/files/system/xposed.prop ----> /system/xposed.prop
---------------------
方式3:直接将编译出来的xposed框架的zip 文件,刷入手机中
方式4:编译自己的XposedInstall,用自己XposedInstall安装到手机
XposedInstall.apk的编译参见
XposedTools的create_uninstaller.pl脚本
用于编译uninstall
./create_uninstaller.pl
大神们的常见问题见github
https://github.com/rovo89/XposedTools/issues
下一篇: 今日银幕改编计划》终极版正式发布!