本身動手編譯Android(LineageOS)源碼

準備

  • 設備:紅米3s
  • 設備代號:land
  • Android版本:7.1.1
  • 源碼提供:Lineage
  • PC配置:
    • 系統:Ubuntu16.04 x64
    • 至少12G RAM
    • 至少80GB 剩餘硬盤空間
    • 良好的網絡環境

1.下載並解壓SDK

sdk中包含fastboot和adb
下載
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
解壓
unzip platform-tools-latest-linux.zip -d ~html

添加到環境變量linux

gedit ~/.profileandroid

輸入:git

# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
    PATH="$HOME/platform-tools:$PATH"
fi

保存。github

使改動生效:shell

source ~/.profileapi

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 libesd0-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-devbash

安裝openjdk-8-jdk
sudo apt install -y openjdk-8-jdk網絡

3.配置源

建立repo存放目錄
mkdir -p ~/bincurl

建立源碼存放目錄
mkdir -p ~/android/lineage

× 注:請確保該目錄所在的磁盤有足夠的空間(至少80G)

安裝repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

~/bin放入環境變量

gedit ~/.profile

加入:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

保存。

使改動生效:
source ~/.profile

初始化repo

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b cm-14.1

× 注:這裏下載的是lineageOS的源碼,cm-14.1是分支名。更多分支請瀏覽:https://github.com/LineageOS/android

4.下載源碼

repo sync

5.配置源碼

cd ~/android/lineage

加入vendor源

gedit .repo/local_manifests/roomservice.xml

加入:
<project name="TheMuppets/proprietary_vendor_xiaomi" path="vendor/xiaomi" remote="github" revision="cm-14.1" />
× 注:其中name是遠程項目的路徑;path是本地目錄的路徑;revision是分支名(具體分支請看:https://github.com/TheMuppets/proprietary_vendor_xiaomi

更新源碼
repo sync

配置構建環境
source build/envsetup.sh

配置設備信息
breakfast land

6.配置構建工具

配置ccache

gedit ~/.bashrc

加入:

export USE_CCACHE=1

保存。

使改動生效:
source ~/.bashrc

執行:
ccache -M 50G
× 注:ccache默認在home目錄,請確保home目錄有足夠的空間。若是想自定義ccache的目錄,能夠在~/.bashrc文件里加入export CCACHE_DIR=<路徑>

配置jack
gedit ~/.bashrc
加入:
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"

保存。

使改動生效:
source ~/.bashrc

7. 構建

構建整個源碼

croot

brunch land

× 注:在源碼目錄執行cd $OUT進入編譯好的ROM的存放目錄。lineage-14.1-xxxxxxxx-UNOFFICIAL-land.zip爲編譯好的刷機包。

只構建某個模塊

mmm <模塊名>

例如構建frameworks中的base

mmm frameworks/base

打包成system.img

有時候咱們只修改system模塊裏不須要編譯的文件,不必從新編譯,只須要打包system.img
make snod

編譯system

有時候咱們只修改system裏的代碼,不必編譯整個Android源碼,只須要編譯system.img
make systemimage

編譯Linux內核

有時候咱們只修改內核裏的代碼,不必編譯整個Android源碼,只須要編譯boot.img
make bootimage

8.刷入手機(可選)

下載twrp
https://dl.twrp.me/land/

刷入trwp
在開機狀態下,打開USB調試。並且設備要先解鎖bootloader。

adb reboot bootloader

fastboot flash recovery twrp.img

fastboot reboot

刷入system.img

咱們調試系統源碼時,若是不想刷入整個ROM,能夠只刷入system.img

fastboot flash system $OUT/system.img

× 注:$OUT指向system.img生成目錄

刷入內核
咱們調試內核源碼時,若是不想刷入整個ROM,能夠只刷入boot.img
fastboot flash boot $OUT/boot.img

刷入ROM

將編譯好的刷機包,經過adb push命令將刷機包傳輸到手機存儲。進入twrp界面,擦除system分區,data分區。選擇手機存儲中的刷機包,刷入!!!

9.常見問題

adb命令提示沒有權限

lsusb

找到相似一行:
Bus 001 Device 005: ID 18d1:4ee7 Google Inc.

編輯51-android.rules:
sudo gedit /etc/udev/rules.d/51-android.rules

輸入:
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"

×注:idVendor,idProduct分別爲lsusb命令顯示的ID

更改文件權限:

chmod a+r /etc/udev/rules.d/51-android.rules

提示Out of space? the tree size of...

在device目錄下找到BoardConfig.mk文件,將其中BOARD_xxxx_PARTITION_SIZE字段後面的值調大點

10.參考

https://wiki.lineageos.org/devices/land/build
https://www.htcp.net/741.html
https://www.isthnew.com/archives/build-lineageos.html
http://blog.csdn.net/luoshengyang/article/details/6566662/

相關文章
相關標籤/搜索