xposed源碼編譯與集成


xposed installer3.0版本之后,傳統的xposed框架的使用方法是從官網上下載xposed installer.apk以及xposed-arm-sdk22.zip包。然后具體的使用方法是將xposed installer.apk安裝到手機,然后在手機上進入recovery模式,將下載的xposed-arm-sdk22.zip刷入手機。完成之后xposed installer才可以正常使用。本文寫了另一種xposed框架的使用辦法:編譯xposed源碼,生成xposed相關的應用程序和so庫等文件,然后將這些應用程序和so庫文件集成到android系統中,重新打包生成鏡像文件,燒入手機。

文檔主要用於xposed源碼的編譯以及xposed的集成工作。在編譯過程中,主要是通過Xposed Tools進行編譯;在集成過程中,將xposed的編譯之后生成的文件替換到android系統中,打包之后重新生成鏡像文件,將鏡像文件刷入到手機查看日志信息來判斷是否成功。

由於在集成過程中是將xposed的編譯生成文件打包到android5.1系統中重新生成鏡像文件,然后將鏡像文件燒入到nexus5手機,所以需要對android源碼進行編譯,並在執行lunch選擇對應源碼代號時選擇nexus5對應的android源碼代號。

環境配置

  1. 源碼版本
    在整個過程中,使用到了android系統源碼和xposed源碼。
    android系統源碼版本是 LYM48M

查看源碼版本的方法:在源碼路徑下,查看/build/core/build_id.mk文件中的BUILD_ID即為源碼的版本號。如下圖所示。

 
BUILD ID

xposed源碼版本需要是android5.1源碼對應的版本。可以在github上進行下載,具體的下載方法后文中會詳細說明。

 

  1. 系統環境
    電腦系統是ubuntu 14.04
    jdk安裝的是openjdk-7-jdk具體信息如下圖所示
     
    java版本信息
    fas

android5.1源碼編譯需要使用openjdk,不再使用oracle的jdk。

  1. 測試機環境
    測試機使用的是nexus 5手機,nexus5對應的android源碼代號是aosp_hammerhead_userdebug

文檔主要通過如下六個步驟完成xposed源碼的編譯和集成

  • 編譯android源碼
  • 將android 5.1的img文件刷入手機
  • 編譯XposedBridge
  • 使用Xposed Tools
  • 將xposed框架集成到Android系統
  • 集成測試

一 編譯android源碼

為了將xposed框架集成到nexus5手機,需要先編譯nexus5手機對應的android源碼。具體步驟如下

  1. 下載android 5.1源代碼
    使用repo下載android5.1源代碼。

  2. 初始化編譯環境
    在源碼目錄下運行source ./build/envsetup.sh。如圖所示。

     
    envsetup

     

  3. 選擇版本
    執行命令lunch,選擇后續驗證時使用的手機對應的版本。
    由於我在驗證xposed編譯結果的時候是在nexus5上進行的,所以在選擇版本的時候選擇的是nexus5對應的版本。

     
    lunch

     

nexus5對應的是aosp_hammerhead_userdebug

  1. 編譯android源碼
    接着在android源碼目錄下執行make命令編譯源碼。第一次編譯android源碼建議使用make命令進行編譯。為了加快編譯速度,可以開多個線程進行編譯。例如make -j16命令,開16線程編譯android源碼。
     
    編譯android源碼

make編譯android源碼的所有模塊,mmm僅編譯指定的模塊。在使用mmm編譯指定模塊之前,需要保證之前使用make命令對整個源代碼進行編譯。

編譯后會將編譯結果放到out文件夾下。


 
編譯結果

其中img文件路徑是out/target/product/hammerhead下。

 
img文件

二 將android5.1的img文件刷入手機

  1. 進入fastboot模式
    終端執行sudo adb reboot bootloader命令,手機進入fastboot模式。
  2. 將img文件刷入到手機
    在這一步會將boot.img,userdata.img,cache.img,system.img。
    以system.img為例。在進入fastboot模式之后,在終端繼續執行命令
    fastboot flash system system.img

創建system分區,將system.img文件刷入system分區中。由於fastboot對刷入的img文件大小有限制,所以可能存在因為img文件太大導致刷入失敗,這是可以添加了-S 50M參數,將system.img分成小塊來刷入到手機,完整的命令如下
fastboot -S 50M flash system system.img
運行結果如下圖所示。

 
將system.img刷入到手機

 

從圖中可以看到,添加了參數之后,分成了一些小塊將system.img文件刷入到手機。

  1. 重啟手機
    在將img文件全部刷入到手機之后執行fastboot reboot命令,重新啟動手機,之后可以看到手機現在的系統的android5.1系統。刷機成功

三 編譯XposedBridge

  1. 下載XposedBridge的源代碼
    從github上下載XposedBridge。點擊右側下載
     
    Xposed Bridge
  2. 編寫Android.mk文件
    Android.mk是Android提供的一種makefile文件,用來指定諸如編譯生成so庫名、引用的頭文件目錄、需要編譯的.c/.cpp文件和.a靜態庫文件等。編寫android.mk文件,將編譯需要的源代碼,編譯生成的結果形式等信息告知ndk build編譯系統。Android.mk文件內容如下所示。


     
    Android.mk
  3. 移動Xposed Bridge工程
    將Android.mk文件放到XposedBridge源碼目錄下,然后將整個工程放到Android源碼目錄下。如下圖所示。


     
    xposedbridge
  4. 編譯Xposed Bridge
    因為在前邊編譯android5.1源碼的時候,已經使用make命令進行了一次編譯,所以在這里直接使用mmm命令編譯XposedBridge模塊。在android源碼下使用mmm命令編譯xposedbridge模塊。命令形式為mmm [模塊路徑]。


     
    編譯XposedBridge

/home/sakura/Android-5.1.1-r14-compiled/XposedBridge-art/是我電腦上Xposed Bridge源碼路徑

編譯成功之后,生成XposedBridge.jar包,存放在/out/target/product/hammerhead/system/framework/文件夾下。

四 使用xposed tools

  1. 下載xposed tools
    在github上下載xposed tools文件。點擊xposed tools進入到github頁面,如下圖
     
    xposedtools下載
    點擊上圖中紅色部分選擇的按鈕,下載xposed tools的zip包。
  2. 配置build.conf文件
    build.conf文件是一個配置文件,會被build.pl讀取使用。build文件中主要定義了編譯xposed的結果的存放路徑,android源碼的路徑,還有一些版本信息之類的值。
    將下載的zip包解壓,在文件夾下創建build.conf文件。然后編輯build.conf文件。build.conf內容如下圖所示。
[General]
outdir = /home/xposed/out [Build] version = 65(custom build by author ) makeflags = -j16 [AospDir] 22 = /home/Android-5.1.1 

outdir指向的路徑是xposed編譯之后生成的文件的存放路徑。
version的值和后邊的參數是自己設置的。編譯之后會寫入到xposed.prop文件中。
makeflags是設置在后邊編譯過程中使用的線程數。
AospDir指向的路徑是android源碼存放的路徑,前邊的值是源碼對應的SDK的版本號。這里我指向的是android5.1.1的源碼,對應的android sdk的版本是22。

  1. 替換文件
    在進行文件替換之前,請將被替換的文件做一個備份,便於以后恢復時使用
    3.1 下載xposed相關文件
    從github上克隆xposed兩個倉庫到本地。分別是xposedart。點擊下載zip包,解壓壓縮包得到xposed文件夾和art文件夾。xposed文件夾包括xposed修改之后的app_process等應用程序和libxposed_*.so等庫文件的源碼;art文件夾主要包括xposed修改之后的art虛擬機的文件。

在下載art時,要選擇android 5.1對應的art分支。如下圖紅色部分


 
art下載

3.2 替換文件
用3.1中下載的art文件夾替換/home/Android-5.1.1目錄下的art文件夾。


 
替換art文件夾

將3.1中下載的xposed文件夾移動到/home/Android-5.1.1/frameworks/base/cmds/文件夾下。


 
替換xposed文件夾

在build.conf文件中outdir目錄下創建一個java文件夾,然后將第三部分中生成的XposedBridge.jar包放到java文件夾下。如下圖所示。
 
移動XposedBridge.jar
  1. 使用build.pl編譯xposed源碼
    build.pl文件在xposed tools文件夾下。在文件中有對build.pl文件的參數的設置規則等信息,如下所示
     
    build.pl

    從上圖可以看到build.pl主要可以完成的工作有四個,分別是編譯生成xposed的可執行程序和庫文件,將編譯之后的文件拷貝到配置文件指定的輸出路徑下,創建xposed.prop文件,創建flashable ZIP文件。在參數中可以使用-t 針對指定的目標進行創建。在xposed tools目錄下運行
    ./build.pl -t arm:22

build arm files for SDK22(對應的是Android5.1系統)
在執行過程中,可能會提示缺少一些依賴包,例如可能會缺少Config::IniFiles,使用apt-cache search Config::IniFiles搜索,安裝缺少的包即可。

  1. 結果
    build.pl -t運行結束之后,會將生成的xposed的可執行程序和so庫等文件放入到build.conf配置文件中指定的輸出目錄下。包括lib文件夾下的五個so庫和bin文件加下的四個可執行程序以及一個配置文件。如下圖所示。


     
    xposed結果

五 將xposed框架集成到Android系統

  1. 替換文件
    用第四部分中生成的bin文件夾和lib文件夾下的文件替換Android-5.1.1/out/target/product/hammerhead/system/文件夾下的bin文件和lib文件里的相同的文件。需要注意的是用xposed編譯生成的app_process32_xposed替換system/bin文件夾下的app_process32
  2. 移動文件
    將xposed.prop文件移動到system文件夾下。


     
    移動xposed.prop
  3. 重新生成鏡像文件
    替換完成之后在android源碼目錄執行一遍
source ./build/envsetup.sh lunch make snod 

make snod命令的作用是重新生成鏡像文件。

六 集成測試

  1. 將修改之后的img文件刷入手機
    具體步驟請看第二部分
  2. 查看結果
    重啟手機,抓取日志,查看xposedbridge.jar包是否成功導入。
    日志查看命令
    adb logcat | grep -i xposed
     


作者:sakuradream
鏈接:https://www.jianshu.com/p/6471bab49cb1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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