環境
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
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使用jarStubsSorce
和jarStubs
生產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