Xopsed的編譯與安裝

Xposed的編譯須要在源碼中編譯,因此首先建議看看源碼的編譯。java

https://juejin.im/post/5c495897f265da612b13eab5
android

1、Xposed工程

Xposed包含以下幾個工程: git

 XposedTools: 編譯xposed的相關腳本與工具。 github

xposedbridge: xposed 框架的java層。bash

XposedInstaller: xposed 框架的獨立apk,用於管理基於xposed的相關插件。app

Xposed : 修改以後的app_process,用於替代系統的。框架

app_process android_art: 對art_methods 進行改造後的art,用於替代系統的 art。 
工具

https://github.com/rovo89/

2、Xposed編譯

一、下載XposedBridge和android_art工程
post

一、進入Android源碼的/.repo目錄。測試

二、在.repo目錄下新建local_manifests目錄。

三、把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同步到了咱們源碼對應的目錄下面。

二、使用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/中。

3、從新生成鏡像文件

以前已經編譯了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命令的做用是從新生成鏡像文件。複製代碼

4、刷機測試

進入android-6.0.1_r77/out/target/product/hammerhead目錄執行下面命令,將system.img刷入手機

一、進入fastboot模式 

終端執行sudo adb reboot bootloader命令,手機進入fastboot模式。

二、將img文件刷入到手機

在進入fastboot模式以後,在終端繼續執行命令

fastboot flash system system.img
複製代碼

三、重啓手機 

在將img文件所有刷入到手機以後執行fastboot reboot命令,從新啓動手機,以後能夠看到手機如今的系統的android6.0系統。刷機成功

四、查看結果

日誌查看命令

adb logcat | grep -i xposed
複製代碼

5、下載,編譯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
相關文章
相關標籤/搜索