參考博文
編譯Xposed
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文件,本文不討論如何編譯它。
編譯準備
- Ubuntu系統,推薦16.04及以上,本文用的18.04
- Android Studio
- Android源碼(下載連接,請百度)
- 修改過的android_art:https://github.com/rovo89/android_art
- Xposed native部分:https://github.com/rovo89/Xposed
- XposedBridge:https://github.com/rovo89/XposedBridge
- Xposed構建工具,XposedTools:https://github.com/rovo89/XposedTools
配置
-
Android-ARTgithub
- 將Android源碼下的art目錄移動到其餘路徑備份,好比Android源碼的上層路徑
- 在Android源碼路徑執行
git clone https://github.com/rovo89/android_art -b xposed-nougat-mr2 art
,注意根據Android源碼版本選擇分支或者對應的標籤,或者git checkout xposed-marshmallow
直接切換到對應的遠程分支
-
Xposed Nativeubuntu
- 轉到frameworks/base/cmds目錄,執行git clone https://github.com/rovo89/Xposed xposed,將Xposed Native部分的源碼下載
-
XposedBridgevim
- 在任意目錄執行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
- 將生成的jar導入
aosp/out/target/product/hammerhead/system/framework/
這裏jar文件存放的目錄不一樣的博文是不一致的,可是以爲framework裏面靠譜一點api
注:若是想生成供Xposed模塊調用的XposedBridge.jar,則在Android Studio的右側打開Gradle Project,雙擊jarStubs就會在app/build/api生成api.jarbash
- XposedTools
- 在任意目錄執行
git clone https://github.com/rovo89/XposedTools
,將XposedTools目錄下的build.conf.sample複製一份,並將它重命名爲build.conf,build.conf文件用於配置構建環境,咱們來看他的內容:
- 在任意目錄執行
[General] # 若是不編譯XposedBridge,須要自行將XposedBridge.jar放置到輸出目錄的 java文件夾下 outdir = /home/misty/bin/WORKING_DIRECTORY/out #javadir = /android/XposedBridge [Build] # Please keep the base version number and add your custom suffix version = 86 (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 23 = /home/misty/bin/WORKING_DIRECTORY # SDKs to be used for compiling BusyBox # Needs https://github.com/rovo89/android_external_busybox #[BusyBox] #arm = 23 #x86 = 23 #armv5 = 23 * 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 arm64:23
-
編譯生成供cpu架構爲arm64,sdk爲23平臺使用的Xposed
-
編譯完成後,將在Android源碼目錄/out/sdk23/arm生成可刷入手機的zip文件
配置 perl 環境
-
XposedTools 依賴於 perl,因此咱們要跑起來就要有一個 perl 環境。首次運行 perl 須要安裝依賴 Config::IniFiles
perl -MCPAN -e 'install Config::IniFiles'
-
大概須要在安裝下面的兩個依賴(不一樣系統可能不一樣)
perl -MCPAN -e 'install File::Tail'
perl -MCPAN -e 'install File::ReadBackwards'
-
若是還不成功,按照下面的方法安裝所需的模塊便可
perl -MCPAN -e 'install [ModuleName]'
解決模塊安裝失敗的問題
- 執行build.pl的時候提示找不到函數,好比提示找不到Config::IniFiles. 能夠經過下面的方式來尋找並安裝依賴:
- 執行apt-cache search Config::IniFiles尋找Config::IniFiles所依賴的庫文件
- 執行sudo apt install libconfig-inifiles-perl安裝所依賴的庫
libconfig-inifiles-perl - Read .ini-style configuration files
- 使用aptitude工具下載依賴
- sudo aptitude install Config::IniFiles
- sudo aptitude install File::Tail
- sudo aptitude install File::ReadBackwards
雖然可能會出現安裝失敗,可是會出現依賴提醒,按照提示安裝依賴便可
根據提示安裝依賴cpan -f Archive::Zip
Can't locate Archive/Zip.pm in @INC (you may need to install the Archive::Zip module) (@INC contains: /home/aosp/xposed/XposedTools /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at ./build.pl line 11. BEGIN failed--compilation aborted at ./build.pl line 11. root@a03e3a9cc004:/home/aosp/xposed/XposedTools# cpan -f Archive::Zip
常見問題
- art改名替換致使以下錯誤,不能夠在源碼根目錄下,須要移動到其餘目錄,本例移動到上級目錄
build/core/base_rules.mk:157: *** art_bak: MODULE.TARGET.FAKE.cpplint-art-phony already defined by art。 中止。 #### make failed to build some targets (6 seconds) ####
編譯XposedBridge問題
編譯android6.0源碼須要java1.7,而編譯xposedbridge須要java1.8,因此這裏爲了切換方便臨時指定java環境變量
misty@ubuntu:~/bin/xposed/XposedTools$ ./build.pl -a java Loading config file /home/misty/bin/xposed/XposedTools/build.conf... Checking requirements... Building the Java part... Compiling...
FAILURE: Build failed with an exception.
-
Where: Build file '/home/misty/bin/xposed/XposedBridge/app/build.gradle' line: 3
-
What went wrong: A problem occurred evaluating project ':app'.
java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0
- Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 0.682 secs
misty@ubuntu:~/bin/xposed/XposedTools$ vim /etc/profile misty@ubuntu:~/bin/xposed/XposedTools$ export JAVA_HOME=/home/misty/MyFile/jdk1.8.0_211 misty@ubuntu:~/bin/xposed/XposedTools$ export PATH=$PATH:$JAVA_HOME/bin misty@ubuntu:~/bin/xposed/XposedTools$ java -version
相關命令
getprop|grep arm
查看CPU相關的信息
小確幸
每一絲靈感都值得被記錄,每一筆記錄都是成長,每一點成長都值得歡呼
博主我的站: www.imisty.cn CSDN博客: https://blog.csdn.net/lookinthefog 博客園 :https://imist.cnblogs.com/
但願可以認識一些熱愛技術的小夥伴,歡迎友連接喲