編譯Xposed並魔改去特徵

環境

ubuntu 16.04

aosp7.1.2r8源碼

編譯Xposed

首先需要將xposed相關項目都clone到本地

https://github.com/rovo89/Xposed.git

https://github.com/rovo89/XposedBridge.git

https://github.com/rovo89/android_art.git

https://github.com/rovo89/XposedTools.git

https://github.com/rovo89/XposedInstaller.git

XposedBridge

使用AS打開XposedBridge項目,直接build,在項目的app/build/outputs/apk下將app-release-unsigned.apk重命名爲XposedBridge.jar

將這個jar包放在aosp源碼目錄下的/out/target/product/sailfish/system/framework/目錄下。

/out/java/

android_art

將該項目直接替換源碼目錄的art目錄

Xposed

將xposed目錄複製到aosp712r8/frameworks/base/cmds/目錄下

XposedTools

複製build.conf.sample並重命名爲build.conf

修改其中內容:

[General]
outdir = /home/tg/Desktop/COMPILE/aosp712r8/out
javadir = /home/tg/Desktop/COMPILE/aosp712r8/out/java

[Build]
# Please keep the base version number and add your custom suffix
version = 89 (custom build by TG / %s)
# makeflags = -j4

[GPG]
sign = release
user = 852109AA!

# Root directories of the AOSP source tree per SDK version
[AospDir]
25 = /home/tg/Desktop/COMPILE/aosp712r8
# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox
[BusyBox]
arm = 25
x86 = 25
armv5 = 25

outdir指向的路徑是xposed編譯之後生成的文件的存放路徑。
version的值和後邊的參數是自己設置的。編譯之後會寫入到xposed.prop文件中。
makeflags是設置在後邊編譯過程中使用的線程數。
AospDir指向的路徑是android源碼存放的路徑,前邊的值是源碼對應的SDK的版本號。這裏我指向的是android5.1.1的源碼,對應的android sdk的版本是22。

修改完之後需要下載一些perl的庫。

sudo apt-get install libauthen-ntlm-perl libclass-load-perl libcrypt-ssleay-perl libdata-uniqid-perl libdigest-hmac-perl libdist-checkconflicts-perl libfile-copy-recursive-perl libfile-tail-perl

perl -MCPAN -e 'install File::ReadBackwards'

使用build.pl進行編譯./build.pl -t arm:25

將生成的xposed.zip發佈到web上,以供XposedInstall安裝使用。

XposedInstall

修改de.robv.android.xppsed.installer.util.DownloadsUtil其中的setUrl函數

public Builder setUrl(String url) {
            //mUrl = url;
    		// 改成XposedTools生成的XPosed.zip
            mUrl = "";
            return this;
        }

然後安裝,installXposed即可。

魔改去特徵

XposedInstall

直接修改包名即可。

全局替換de.robv.android.xposed.installer,改爲de.robv.android.xppsed.installer

de.robv.android.xppsed.installer.XposedApp中的XPOSED_PROP_FILES內容改爲:

private static final String[] XPOSED_PROP_FILES = new String[]{
            "/su/xposed/xppsed.prop", // official systemless
            "/system/xppsed.prop",    // classical
    };

再build->clean project。

XposedBridge-art.jar

替換包名爲de.robv.android.xppsed,全局替換de.robv.android.xposed,改爲de.robv.android.xppsed`。

生成出來的jar包也改爲XppsedBridge.jar

gradle使用jarStubsSorcejarStubs生產api.jar包,給自己編寫Xposed插件使用。

Xposed

libxposed_art.cpp改爲libxppxosed_art.cpp

xposed.h

#define XPOSED_PROP_FILE "/system/xppsed.prop"
#define XPOSED_LIB_ART           XPOSED_LIB_DIR "libxppsed_art.so"

...
#define XPOSED_CLASS_DOTS_ZYGOTE "de.robv.android.xppsed.XposedBridge"
#define XPOSED_CLASS_DOTS_TOOLS  "de.robv.android.xppsed.XposedBridge$ToolEntryPoint"

libxposed_common.h

#define CLASS_XPOSED_BRIDGE  "de/robv/android/xppsed/XposedBridge"
...
#define CLASS_ZYGOTE_SERVICE "de/robv/android/xppsed/services/ZygoteService"
#define CLASS_FILE_RESULT    "de/robv/android/xppsed/services/FileResult"

xposed_service.cpp

IMPLEMENT_META_INTERFACE(XposedService, "de.robv.android.xppsed.IXposedService");

xposed_shared.h

#define XPOSED_DIR "/data/user_de/0/de.robv.android.xppsed.installer/"

...
    
#define XPOSED_DIR "/data/data/de.robv.android.xppsed.installer/"

ART.mk

LOCAL_SRC_FILES += \
  libxposed_common.cpp \
  libxppsed_art.cpp

...
LOCAL_MODULE := libxppsed_art

並將libxposed_art.cpp文件名改爲libxppsed_art.cpp

XposedTools

build.pl中的xposed.prop改爲xpposed.prop,將libxposed_art改爲libxppsed_art,將XposedBridge.jar改爲XppsedBridge.jar

zipstatic/_all/META-INF/com/google/android/flash-script.sh中將xposed.prop改爲xpposed.prop,將libxposed_art改爲libxppsed_art,將XposedBridge.jar改爲XppsedBridge.jar

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章