Xopsed的編譯與安裝

DroidMind發表於2019-01-30

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出現下面錯誤

Xopsed的編譯與安裝

可以根據錯誤提示執行命令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版本 = 原始碼路徑複製程式碼

Xopsed的編譯與安裝

編譯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


相關文章