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系統中,從新打包生成鏡像文件,燒入手機。javascript
文檔主要用於xposed源碼的編譯以及xposed的集成工做。在編譯過程當中,主要是經過Xposed Tools進行編譯;在集成過程當中,將xposed的編譯以後生成的文件替換到android系統中,打包以後從新生成鏡像文件,將鏡像文件刷入到手機查看日誌信息來判斷是否成功。java
因爲在集成過程當中是將xposed的編譯生成文件打包到android5.1系統中從新生成鏡像文件,而後將鏡像文件燒入到nexus5手機,因此須要對android源碼進行編譯,並在執行lunch選擇對應源碼代號時選擇nexus5對應的android源碼代號。android
查看源碼版本的方法:在源碼路徑下,查看
/build/core/build_id.mk
文件中的BUILD_ID即爲源碼的版本號。以下圖所示。
git
xposed源碼版本須要是android5.1源碼對應的版本。能夠在github上進行下載,具體的下載方法後文中會詳細說明。
android5.1源碼編譯須要使用openjdk,再也不使用oracle的jdk。github
文檔主要經過以下六個步驟完成xposed源碼的編譯和集成ubuntu
爲了將xposed框架集成到nexus5手機,須要先編譯nexus5手機對應的android源碼。具體步驟以下bash
下載android 5.1源代碼
使用repo下載android5.1源代碼。oracle
初始化編譯環境
在源碼目錄下運行source ./build/envsetup.sh
。如圖所示。
app
選擇版本
執行命令lunch
,選擇後續驗證時使用的手機對應的版本。
因爲我在驗證xposed編譯結果的時候是在nexus5上進行的,因此在選擇版本的時候選擇的是nexus5對應的版本。
框架
nexus5對應的是aosp_hammerhead_userdebug
make
命令編譯源碼。第一次編譯android源碼建議使用make命令進行編譯。爲了加快編譯速度,能夠開多個線程進行編譯。例如make -j16
命令,開16線程編譯android源碼。make編譯android源碼的全部模塊,mmm僅編譯指定的模塊。在使用mmm編譯指定模塊以前,須要保證以前使用make命令對整個源代碼進行編譯。
編譯後會將編譯結果放到out文件夾下。
其中img文件路徑是out/target/product/hammerhead下。
sudo adb reboot bootloader
命令,手機進入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文件刷入到手機。
fastboot reboot
命令,從新啓動手機,以後能夠看到手機如今的系統的android5.1系統。刷機成功編寫Android.mk文件
Android.mk是Android提供的一種makefile文件,用來指定諸如編譯生成so庫名、引用的頭文件目錄、須要編譯的.c/.cpp文件和.a靜態庫文件等。編寫android.mk文件,將編譯須要的源代碼,編譯生成的結果形式等信息告知ndk build編譯系統。Android.mk文件內容以下所示。
移動Xposed Bridge工程
將Android.mk文件放到XposedBridge源碼目錄下,而後將整個工程放到Android源碼目錄下。以下圖所示。
編譯Xposed Bridge
由於在前邊編譯android5.1源碼的時候,已經使用make命令進行了一次編譯,因此在這裏直接使用mmm命令編譯XposedBridge模塊。在android源碼下使用mmm命令編譯xposedbridge模塊。命令形式爲mmm [模塊路徑]。
/home/sakura/Android-5.1.1-r14-compiled/XposedBridge-art/是我電腦上Xposed Bridge源碼路徑
編譯成功以後,生成XposedBridge.jar包,存放在/out/target/product/hammerhead/system/framework/
文件夾下。
[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。
在下載art時,要選擇android 5.1對應的art分支。以下圖紅色部分
3.2 替換文件
用3.1中下載的art文件夾替換/home/Android-5.1.1目錄下的art文件夾。
將3.1中下載的xposed文件夾移動到/home/Android-5.1.1/frameworks/base/cmds/文件夾下。
./build.pl -t arm:22
build arm files for SDK22(對應的是Android5.1系統)
在執行過程當中,可能會提示缺乏一些依賴包,例如可能會缺乏Config::IniFiles,使用apt-cache search Config::IniFiles
搜索,安裝缺乏的包便可。
結果
build.pl -t運行結束以後,會將生成的xposed的可執行程序和so庫等文件放入到build.conf配置文件中指定的輸出目錄下。包括lib文件夾下的五個so庫和bin文件加下的四個可執行程序以及一個配置文件。以下圖所示。
移動文件
將xposed.prop文件移動到system文件夾下。
source ./build/envsetup.sh lunch make snod
make snod命令的做用是從新生成鏡像文件。
adb logcat | grep -i xposed