使用docker编译LinegeOS

环境

docker ubuntu18.04

docker pull ubunut:18.04

docker run -it --privileged=true -v ulineageos:/root ubuntu:18.04 /bin/bash

docker容器中需要用到mount命令,所以需要将--privileged=true

ulineageos是本地的一个目录名,挂在到docker容器中的/root目录

docker容器内的命令:

apt-get update

apt-get upgrade -y

apt install -y wget vim p7zip p7zip-rar p7zip-full bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-8-jdk python file nano screen sudo tig python3-pip python-protobuf

pip3 install six google protobuf

cd ~/

wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip

7z x platform-tools-latest-linux.zip

vim ~/.profile

~/.profile中添加

if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi

source ~/.profile

mkdir -p ~/bin

mkdir -p ~/android/lineage

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

将repo设置为环境变量,编辑~/.profile

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

source ~/.profile

同步Lineage OS

cd ~/android/lineage

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-17.1 --repo-url=https://gerrit-googlesource.lug.ustc.edu.cn/git-repo

修改.repo/manifests/default.xml,将

  <remote  name="github"
           fetch=".."
           review="review.lineageos.org" />

改成

  <remote  name="github"
           fetch="https://github.com/" />

  <remote  name="lineage"
           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
           review="review.lineageos.org" />

  <remote  name="aosp"
           fetch="https://android.googlesource.com"

改成

  <remote  name="aosp"
           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"

  <default revision="..."
           remote="github"

改成

  <default revision="..."
           remote="lineage"

同步源码树(以后只需执行这条命令来同步):

防止文件太大同步过程中导致EOF

git config --global http.postBuffer 524288000
repo sync

这将根据网速来判断需要花费多长时间。

自己实践了下,虽然网速够快,但是清华源的一些东西都不是很全,所以如果能够进外网还是使用官方的教程来进行。

编译

source build/envsetup.sh

breakfast sailfish

然后就是提取blobs了,我这里使用基于OTA的方式来提取,其他的也可以参考官网。

wget https://mirrorbits.lineageos.org/full/sailfish/20201212/lineage-17.1-20201212-nightly-sailfish-signed.zip

sha256sum 20201212/lineage-17.1-20201212-nightly-sailfish-signed.zip

unzip 20201212/lineage-17.1-20201212-nightly-sailfish-signed.zip payload.bin

git clone https://github.com/LineageOS/scripts

python scripts/update-payload-extractor/extract.py payload.bin --output_dir ./

mkdir system/
mount system.img system/
mount vendor.img system/vendor/
mount product.img system/product/

回到源代码的根目录中执行extract-files.sh

./extract-files.sh ~/android/system_dump/
sudo umount -R ~/android/system_dump/system/
rm -rf ~/android/system_dump/
croot
brunch sailfish

参考

posted @ 2020-12-12 11:36  Tu9oh0st  阅读(512)  评论(0编辑  收藏  举报