欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

xposed 源代码编译和安装 - 第 2 步:编译 XposedBridge

最编程 2024-04-01 14:00:25
...

方式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源码的目录是:

 /media/weicheng/f3560f2c-f54a-467b-8784-26ef752e388e/android_source/android-7.1.2_r1/frameworks/base/cmds/xposed

 




  • 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