編譯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文件,本文不討論如何編譯它。
    了解了這些,下面我們來試試如何編譯它們

准備

配置

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安裝所依賴的庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM