LineageOS 源代碼編譯筆記

保證您更舒適的閱讀體驗和持續更新,本文已轉移至我的個人博客,請您訪問http://anemone.top/以確保您閱讀的文章是最新版本,以及看到新的文章

在研究安卓安全時,很多情況下我們需要修改安卓源代碼(如動態調試時過掉反調試機制)。LineageOS是根據Android官方源碼修改后的版本,對很多手機都適配,因此編譯該版本的源碼比直接編譯AOSP的更加有意義。本文簡要說明一下編譯LineageOS的步驟。更詳細的步驟說明請參考官方文檔: https://wiki.lineageos.org/build_guides.html

首先說明一下我這的操作系統和需要編譯的LineageOS版本
操作系統版本:

Linux anemone-VirtualBox 4.13.0-26-generic #29~16.04.2-Ubuntu SMP Tue Jan 9 22:00:44 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

編譯的LineageOS版本

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=7.1.2
LINEAGE_VERSION=14.1-20180325-UNOFFICIAL-mako
TARGET_PRODUCT=lineage_mako
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.13.0-26-generic-x86_64-with-Ubuntu-16.04-xenial
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=NJH47F
OUT_DIR=/media/anemone/lineage/lineageOS/out
WITH_SU=true
============================================

順帶可以看到我這里需要編譯的Android版本是7.1.1, 目標設備是Nexus4手機。

第一步:搭建編譯環境

安裝jdk

sudo apt-get update
sudo apt-get install openjdk-8-jdk

安裝編譯時需要依賴的庫

sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-8-jdk lib32readline6-dev

下載源代碼

安裝repo工具

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo

為了方便可以將其拷貝到你的PATH里。

使用repo命令下載源代碼(可能涉及到科學上網)

repo init -u git://github.com/LineageOS/android.git -b cm-14.1
repo sync -f --force-sync --no-clone-bundle

提取設備文件

雖然Android是開源的,但是有些設備的文件不是通用的(如不開源的驅動文件),有2種方法提取:1,從刷好相同版本的LineageOS設備中獲取,2,從已經編譯好的LineageOS卡刷包中獲取。這里介紹第二種,假設我們已經下好的卡刷包為path/to/lineage-xxx.zip

mkdir ~/android/system_dump/
cd ~/android/system_dump/
unzip path/to/lineage-*.zip system.transfer.list system.new.dat
git clone https://github.com/xpirt/sdat2img
python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img
mkdir system/
sudo mount system.img system/
./extract-files.sh ~/android/system_dump/

將system_dump文件下的文件復制到~/android/lineage/vendor/lge文件夾下。

編譯

準備工作做完后就可以開始愉快的編譯啦~~,不過在由于Android工程巨大,請確保編譯的機器擁有不低于10G的內存(親測虛擬機內存8G,swap 8G可以編譯),一個速度足夠快的硬盤(再來一個固態當緩沖就更好啦),當然還有一個好的CPU(我這用的是i7-4700HQ, 應該算比較差的編譯環境了,整個編譯過程需要3個小時)。

. build/envsetup.sh
export WITH_SU=true    #自帶root
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx10G"    #設置編譯內存
breakfast lineage_mako-userdebug #選擇設備內核
export USE_CCACHE=1 #使用緩存
export CCACHE_DIR=/media/anemone/anemone_ssk/ccache #緩存地址
./prebuilts/misc/linux-x86/ccache/ccache  -M 100G    #使用100G作為緩存空間
brunch lineage_mako-userdebug
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容