由於工作需要,需要將xposed集成到android源碼中,生成新的ROM就自帶xposed的功能。
下面大體上說一下步驟和遇到的問題。
1、下載,並編譯android源碼,成功。
2、下載 https://github.com/rovo89/android_art 中,在release中找到當前6.0對應的sdk23版本。替換到android源碼,根目錄下的art文件夾中的內容。
3、下載 https://github.com/rovo89/XposedBridge ,得到Xposed文件夾XposedBridge-art,或者特定版本。將文件夾拷貝到,Android源碼根目錄和art同級。
3.1、XposedBridge-art源碼中,新建Android.mk用於編譯XposedBridge-art生成對應的XposedBridge.jar .Android.mk文件內容如下:

1 # Copyright 2007 The Android Open Source Project 2 # 3 LOCAL_PATH:= $(call my-dir) 4 include $(CLEAR_VARS) 5 LOCAL_DEX_PREOPT = false 6 LOCAL_MODULE := XposedBridge 7 8 LOCAL_SRC_FILES := \ 9 $(call all-java-files-under, src) \ 10 $(call all-java-files-under, lib/apache-commons-lang/external) \ 11 $(call all-java-files-under, hiddenapistubs/src) 12 13 include $(BUILD_JAVA_LIBRARY) 14 15 $(LOCAL_INTERMEDIA_TARGETS): PRIVATE_EXTRA_JAR_ARGS := -C "$(LOCAL_PATH)" \ 16 assets -C "#(LOCAL_PATH)" NOTICE.txt 17 18 include $(call all-makefiles-under, $(LOCAL_PATH))
你以為這里就結束了么?錯了,如果你用了。這種方式編譯出來的,jar。那么恭喜你,你后面回遇到一個不知所以的錯誤。
這里應該使用AndroidStudio,打開,XposedBridge項目,然后編譯,
執行gradle里面的。編譯 jar的task.
參考:https://blog.csdn.net/qq_22656473/article/details/103455162
3.2、Android源碼根目錄,執行命令(多個)
source build/envsetup.sh lunch 17 mmm XposedBridge-art
3.3、如果成功,會在out/target/product/angler/system/framework/XposedBridge.jar
3.4、如果失敗,可能出現錯誤如下:build/core/host_shared_library_internal.mk:44
需要在android源碼根目錄執行命令:
cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
make update-api
4、下載 https://github.com/rovo89/Xposed 得到Xposed C++的代碼,拷貝到 源碼根目錄下frameworks/base/cmds/xposed中。
5、下載 https://github.com/rovo89/XposedTools 得到 XposedTools工具,用於執行perl腳本,用於編譯xposed,下載保存的位置無特定要求,所以我沒有放到android源碼目錄中。
5.1、源碼外部,新建文件夾保存,XposedTools內容。
5.2、根據XposedTools源碼中的build.conf.sample新建一個文件build.conf。編輯內容,如下:

[General] # 注釋,可刪除:指定,輸出編譯結果目錄 outdir = /var/android_source/xposed/XposedTools-89/out [Build] # 版本無所謂 version = 1(custom build by author ) makeflags = -j16 [AospDir] # Android源碼根目錄 23 = /var/android_source/android6.0.1
5.3、拷貝,生成的XposedBridge.jar到XposedTools中,XposedTools-89/out/java/XposedBridge.jar 沒有的文件夾,請新建。
5.4、執行命令:./build.pl -t arm:23 可能會缺少環境,就需要安裝perl環境了。
先執行,三條命令如下,
apt-cache search Config::IniFiles libconfig-inifiles-perl - Read .ini-style configuration files sudo apt install libconfig-inifiles-perl
Perl環境需求,執行命令,1,2,3
perl -MCPAN -e 'install Config::IniFiles' perl -MCPAN -e 'install File::Tail' perl -MCPAN -e 'install File::ReadBackwards'
5.5、再次編譯,可以看到生成了,會在XposedTools的out/arm23中,找到我們生成的,正確的,app_process32_xposed,發現android源碼中也被拷貝了一份。。。
注意:
1、替換art之后,編譯可能還是會遇到CLANG錯誤,需要再次修改配置文件。art/build/Android.common_build.mk,解決CLANG錯誤
2、版本選擇一樣。
3、不同產品文件夾不一樣,請根據自己的版本和手機選擇。
資料:參考文獻
Xposed 編譯(二) - 編譯 Android 源碼 https://www.jianshu.com/p/c14eafe5e1d7
Xposed 編譯(二) - 編譯 Android 源碼 https://blog.csdn.net/weixin_33832340/article/details/87512976
編譯Xposed https://www.cnblogs.com/luoyesiqiu/p/9524651.html
xposed源碼編譯與集成 https://www.jianshu.com/p/6471bab49cb1
xposed源碼編譯&安裝--第2步編譯XposedBridge https://juejin.im/post/5be3afeae51d4535b07d0f4e // 朋友的文章,重點推薦,很有幫助。
ubuntu16.04 下android源碼編譯以及環境配置(含xposed)--交接筆記 https://blog.csdn.net/weixin_34392906/article/details/87531704
xposed源碼編譯與集成 https://blog.csdn.net/weixin_33726943/article/details/87195857
xposed源碼編譯與集成 https://www.cnblogs.com/coffee520/p/9648243.html
makefile中常見的錯誤—missing separator. Stop.—原因命令行缺少tab鍵 https://blog.csdn.net/dumgeewang/article/details/7709412
還有等等,參考了很多,已經窗口關閉,找不到了。。。