Xposed的編譯需要在原始碼中編譯,所以首先建議看看原始碼的編譯。
https://juejin.im/post/5c495897f265da612b13eab5
一、Xposed工程
Xposed包含如下幾個工程:
XposedTools: 編譯xposed的相關指令碼與工具。
xposedbridge: xposed 框架的java層。
XposedInstaller: xposed 框架的獨立apk,用於管理基於xposed的相關外掛。
Xposed : 修改之後的app_process,用於替代系統的。
app_process
android_art: 對art_methods 進行改造後的art,用於替代系統的 art。
https://github.com/rovo89/
二、Xposed編譯
1、下載XposedBridge和android_art工程
1、進入Android原始碼的/.repo目錄。
2、在.repo目錄下新建local_manifests目錄。
3、把XposedTools/local_manifests/下的目標檔案拷貝過去。local_manifests/目錄下是各種API版本(即SDK=19,21之類)對應的xml檔案。由於本例對應的SDK版本是23,所以需要把該目錄下xposed_sdk23.xml檔案拷貝到.repo/local_manifests/目錄下。
xposed_sdk23.xml指定了XposedBridge和android_art的專案地址。
配置好後,執行下面命令:
repo sync frameworks/base/cmds/xposed
repo sync art
複製程式碼
如果repo sync art出現下面錯誤
可以根據錯誤提示執行命令repo sync --force-sync art
這樣就將XposedBridge和android_art同步到了我們原始碼對應的目錄下面。
2、使用XposedTools編譯XposedBridge和Xposed
(1)下載XposedTools
git clone https://github.com/rovo89/XposedTools.git
複製程式碼
(2) 編譯XposedBridge
進入XposedTools目錄,根據build.conf.sample 模板,建立build.conf
修改 build.conf 檔案中的這幾個引數
outdir = XposedBridge.jar 的路徑
javadir = XposedBridge 原始碼路徑
[AospDir]
sdk版本 = 原始碼路徑複製程式碼
編譯XposedBridge.jar
./build.pl -a java
複製程式碼
XposedBridge.jar 將生成編譯到 /android-6.0.1_r77/out/java目錄下面。
編譯此jar包請使用jdk 1.8, 此jar包其實是一個apk,強制改名為jar包的。所以,可以使用AndroidStudio直接開發,編譯:./gradlew clean assembleRelease 編譯後生成的apk重新命名 XposedBridge.jar 即為上文XposedTools編譯的jar檔案。
在使用build.pl時,它還依賴一些Perl的類庫,請童鞋們按照下面步驟下載這些依賴庫:
sudo apt-get install libconfig-inifiles-perl
sudo apt-get install libio-all-perl
sudo apt-get install libfile-readbackwards-perl
sudo apt-get install libfile-tail-perl
sudo apt-get install libtie-ixhash-perl
複製程式碼
(3)編譯Xposed
- 修改XposedTools目錄下Xposed.pm檔案:
在get_lunch_mode 方法內 將 將預設 的 PRODUCT 更改自己對應工程
# Determines the mode that has to be passed to the "lunch" command
sub get_lunch_mode($$) {
my $platform = shift;
my $sdk = shift;
if ($platform eq 'arm' || $platform eq 'armv5' || $platform eq 'host' || $platform eq 'hostd') {
# return ($sdk <= 17) ? 'full-eng' : 'aosp_arm-eng';
return ($sdk <= 17) ? 'full-eng' : 'aosp_hammerhead-userdebug';//此處aosp_hammerhead-userdebug為lunch的裝置
} elsif ($platform eq 'x86') {
return ($sdk <= 17) ? 'full_x86-eng' : 'aosp_x86-eng';
} elsif ($platform eq 'arm64' && $sdk >= 21) {
return 'aosp_arm64-eng';
} else {
print_error("Could not determine lunch mode for SDK $sdk, platform $platform");
return undef;
}
}
複製程式碼
- 修改XposedTools目錄下Xposed.pm檔案:在get_outdir方法,將其返回目錄,改為自己 xposed 且實的生成目錄
# Determines the root directory where compiled files are put
sub get_outdir($) {
my $platform = shift;
if ($platform eq 'arm') {
# return 'out/target/product/generic';
return 'out/target/product/hammerhead';//此處hammerhead為Nexus5的代號
} elsif ($platform eq 'armv5') {
# return 'out_armv5/target/product/generic';
return 'out_armv5/target/product/hammerhead';//此處hammerhead為Nexus5的代號
} elsif ($platform eq 'x86' || $platform eq 'arm64') {
return 'out/target/product/generic_' . $platform;
} else {
print_error("Could not determine output directory for $platform");
return undef;
}
}
複製程式碼
編譯全工程
./build.pl -t arm:23 //表明我要編譯arm平臺上SDK=23版本的xposed框架
複製程式碼
app_process32_xposed檔案在目錄android-6.0.1_r77/out/sdk23/arm/files/system/bin/中。
xposed.prop檔案在目錄android-6.0.1_r77/out/sdk23/arm/files/system/中。
三、重新生成映象檔案
之前已經編譯了systme.img,那麼在android-6.0.1_r77/out/target/product/hammerhead目錄下面會有system目錄,將編譯後的檔案app_process32_xposed替換 system/bin/app_process32檔案,
複製xposed.prop到system/目錄 ,複製xposed.prop到system/目錄 ,複製XposedBridge.jar到system/frameworks目錄
複製完成之後,執行下面命令生成新的system.img
source ./build/envsetup.sh
lunch
make snod # make snod命令的作用是重新生成映象檔案。複製程式碼
四、刷機測試
進入android-6.0.1_r77/out/target/product/hammerhead目錄執行下面命令,將system.img刷入手機
1、進入fastboot模式
終端執行sudo adb reboot bootloader命令,手機進入fastboot模式。
2、將img檔案刷入到手機
在進入fastboot模式之後,在終端繼續執行命令
fastboot flash system system.img
複製程式碼
3、重啟手機
在將img檔案全部刷入到手機之後執行fastboot reboot命令,重新啟動手機,之後可以看到手機現在的系統的android6.0系統。刷機成功
4、檢視結果
日誌檢視命令
adb logcat | grep -i xposed
複製程式碼
五、下載,編譯apk
git clone https://github.com/rovo89/XposedInstaller
./gradlew
./gradlew build
複製程式碼
請使用java 1.8 進行編譯
https://juejin.im/entry/5a092ee1f265da4304061d2e
https://blog.csdn.net/xiaolli/article/details/58049210
https://www.jianshu.com/p/c731cd44e82b