自己动手编译Android(LineageOS)源码
一、編譯LineageOS源碼
準(zhǔn)備
設(shè)備:小米 MIX2
設(shè)備代號(hào):chiron
Android版本:9.0
PC配置:
系統(tǒng):Ubuntu18.04
至少12G RAM
至少200GB 剩余硬盤空間
良好的網(wǎng)絡(luò)環(huán)境
1.下載并解壓SDK
sdk中包含fastboot和adb
下載
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
解壓
unzip platform-tools-latest-linux.zip -d ~
添加到環(huán)境變量
gedit ~/.profile
輸入:
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
保存。
使改動(dòng)生效:
source ~/.profile
2.安裝依賴
安裝必要庫和工具
sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
安裝openjdk-8-jdk
sudo apt install -y openjdk-8-jdk
3.配置源
創(chuàng)建repo存放目錄
mkdir -p ~/bin
創(chuàng)建源碼存放目錄
mkdir -p ~/android/lineage
× 注:請(qǐng)確保該目錄所在的磁盤有足夠的空間(至少200G)
安裝repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
將~/bin放入環(huán)境變量
gedit ~/.profile
加入:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
使改動(dòng)生效:
source ~/.profile
初始化repo
cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-16.0
× 注:這里的lineage-16.0是分支名,對(duì)應(yīng)Android 9.0。更多分支請(qǐng)瀏覽:https://github.com/LineageOS/android
4.拉取源碼
repo sync
5.配置源碼
cd device/xiaomi
git clone https://github.com/LineageOS/android_device_xiaomi_chiron -b lineage-16.0 chiron
提取vendor信息
提取手機(jī)廠商的庫。這一步將手機(jī)連接電腦,并保證手機(jī)能被adb
命令操控,還需要手機(jī)授予adb root權(quán)限。
adb shell su -c setenforce 0
cd chiron
./extract-files.sh
提取需要點(diǎn)時(shí)間,需耐心等待
拉取kernel
cd kernel/qcom
git clone https://github.com/LineageOS/android_kernel_qcom_msm8998 -b lineage-16.0 msm8998
配置構(gòu)建環(huán)境
source build/envsetup.sh
配置設(shè)備信息
breakfast chiron
6.配置構(gòu)建工具
配置ccache
gedit ~/.bashrc
加入:
export USE_CCACHE=1
使改動(dòng)生效:
source ~/.bashrc
執(zhí)行:
ccache -M 50G
來設(shè)置緩存大小
× 注:ccache默認(rèn)在home目錄,請(qǐng)確保home目錄有足夠的空間。如果想自定義ccache的目錄,可以在~/.bashrc文件里加入export CCACHE_DIR=/path/to/.ccache。緩存大小根據(jù)自己硬盤大小設(shè)置,設(shè)置25G以上可以顯著提高源碼的構(gòu)建速度。
配置jack
gedit ~/.bashrc
加入:
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8G"
使改動(dòng)生效:
source ~/.bashrc
7. 構(gòu)建
構(gòu)建整個(gè)源碼
croot
brunch chiron
× 注:構(gòu)建成功后,在源碼目錄執(zhí)行cd $OUT進(jìn)入編譯好的ROM的存放目錄。lineage-16.0-xxxxxxxx-UNOFFICIAL-chiron.zip為編譯好的刷機(jī)包。
只構(gòu)建某個(gè)模塊
mmm <模塊名>
例如構(gòu)建frameworks中的base
mmm frameworks/base
打包成system.img
有時(shí)候我們只修改system里的模塊,沒必要編譯整個(gè)源碼,就只打包system.img
make snod
編譯system
make systemimage
8.刷入手機(jī)(可選)
下載twrp
https://dl.twrp.me/chiron/
刷入trwp
刷入recovery前,要先解鎖手機(jī)的bootloader,如何解鎖,各個(gè)廠商不太一樣,這里就不闡述了。
adb reboot bootloader
fastboot flash recovery twrp.img
fastboot reboot
刷入system.img
我們調(diào)試源碼時(shí),如果不想刷入整個(gè)ROM,可以只刷入system.img。以下命令將system.img刷入system分區(qū)
fastboot flash system system.img
刷入ROM
將編譯好的刷機(jī)包,通過adb push命令將刷機(jī)包傳輸?shù)绞謾C(jī)存儲(chǔ)。進(jìn)入twrp界面,擦除system分區(qū),data分區(qū)。選擇手機(jī)存儲(chǔ)中的刷機(jī)包,刷入!!!
9.常見問題
(1) 編譯目標(biāo)設(shè)備為emulatorx86時(shí)在編譯時(shí)出錯(cuò),提示yasm找不到。
安裝yasm
sudo apt-get install yasm
(2) adb命令提示沒有權(quán)限
lsusb
找到類似一行:
Bus 001 Device 005: ID 18d1:4ee7 Google Inc.
編輯51-android.rules:
sudo gedit /etc/udev/rules.d/51-android.rules
輸入類似的內(nèi)容:
# MIX2 normal
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"
# MIX2 fastboot
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d00d",MODE="0666",GROUP="plugdev"
×注:idVendor,idProduct分別為lsusb命令顯示的ID。開機(jī)狀態(tài)和fastboot模式都需要添加權(quán)限,所以,需要增加兩行。
更改文件權(quán)限:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
二、模擬器使用LineageOS
將emulator所在的目錄加入環(huán)境變量
在源碼目錄,cd $OUT
設(shè)置模擬器路徑
# 設(shè)置模擬器目錄
if [ -d "/android_source_path/prebuilts/android-emulator/linux-x86_64" ] ; then
PATH="/android_source_path/prebuilts/android-emulator/linux-x86_64:$PATH"
fi
設(shè)置OUT目錄
export ANDROID_PRODUCT_OUT=/android_source_path/out/target/product/emulatorx86
使用編譯好的鏡像啟動(dòng)(arm):
emulator64-arm -kernel ./prebuilts/qemu-kernel/arm64/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img
使用編譯好的鏡像啟動(dòng)(x86):
emulator64-x86 -kernel ./prebuilts/qemu-kernel/x86/kernel-qemu -sysdir $ANDROID_PRODUCT_OUT -system $ANDROID_PRODUCT_OUT/system.img -data $ANDROID_PRODUCT_OUT/userdata.img -ramdisk $ANDROID_PRODUCT_OUT/ramdisk.img
參考
https://wiki.lineageos.org/devices/chiron/build
https://www.htcp.net/741.html
https://www.isthnew.com/archives/build-lineageos.html
http://blog.csdn.net/luoshengyang/article/details/6566662/
總結(jié)
以上是生活随笔為你收集整理的自己动手编译Android(LineageOS)源码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux配置/etc/resolv.c
- 下一篇: IE的"Kiosk"