云梦
www.htcp.net

Ubuntu 20.04 LTS 下编译 LineageOS 源码

0x01 介绍

在 Ubuntu 20.04 下编译 LineageOS/CM 等 AOSP 源码可能会踩到很多坑。下面就跟我一起来配置避免入坑吧。Ubuntu 20.04 LTS 请选择 64 位的。

硬件设施最低要求

CPU: Core i3 530 及以上的 CPU(推荐 Intel Core i7 6 代以上或 AMD Ryzen 系列 CPU)
RAM: 8GB 及以上的 RAM(推荐 16GB 及以上)
HDD: HDD 120GB 及以上剩余存储空间(推荐 SSD 256GB 及以上)

当然 CPU 差点没事,只不过是浪费时间与电费而已。源码所在目录最低剩余空间不要小于 100GB。

操作系统

Ubuntu 20.04 64bit

0x02 安装依赖组件

主要组件:

sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

额外组件,可能会使用到:

sudo apt install -y imagemagick libbz2-dev libssl-dev lzma ncftp bash-completion
sudo apt install -y python

0x03 安装 JDK

Lineage 16.0 及以上已经集成 JDK,无需手动安装。

CM 14.1 及 LineageOS 14.1-15.1,需要手动安装 JDK 8,直接安装即可,不要添加 PPA 源。

使用如下命令:

sudo apt install -y openjdk-8-jdk

安装完毕后不需要设置 JAVA 环境变量,是直接可以用的。

0x04 设置 repo

Google 可能无法下载。建议爬墙访问。PS:如果有 TZ 需要,可以找我哦(发邮件到 admin@htcp.net)。

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

cat >> ~/.bashrc <<_EOF

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

source ~/.bashrc

0x05 设置 git

1. 设置 git 用户名和邮箱
示例如下:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

双引号中的 "you@example.com" 填写您的 github 所使用的邮箱。注意格式,不要把双引号去掉。
双引号中的 "Your Name" 填写您的 github 用户名,不要把双引号去掉。

2. 生成 ssh 并添加到 github:

您可以参考官方的文档:

https://help.github.com/articles/connecting-to-github-with-ssh/

如果您不将 ssh 添加到 github 的话,您可能会遭遇下载受限,从而导致接下来的同步源码失败。

0x06 下载源码

注:千万不要使用中文路径!千万不要包含空格或一些特殊字符!不要将使用 Windows 的坏习惯带入到 Linux 中来!

6.1 新建源码目录:

(目录随意指定,不要带空格中文特殊字符)

mkdir -p ~/android/los/los-17

cd ~/android/los/los-17

6.2 初始化源码:

(假如想使用 Lineage 16.0,则将 lineage-17.1 改为 lineage-16)

repo init -u https://github.com/LineageOS/android.git -b lineage-17.1

Enable color display in this user account (y/N)? y

6.3 正式同步源码:

<1> 使用如下命令:
在过程中可能会提示 clone 失败的信息,可以添加参数 --no-clone-bundle 到命令末尾。

repo sync -j4 -c --no-clone-bundle

由于国内环境不太好。网络比较差的同学,可以试试自动化 repo 同步脚本。

复制粘贴如下代码到终端中,回车将会保存为 repo.sh。注意将源码的路径改成您设置的源码路径。

cat > repo.sh <<_EOF
#!/bin/bash
echo "======start repo sync======"
~/bin/repo sync -j4 -c --no-clone-bundle
while [ $? == 1 ]; do
echo "======sync failed, re-sync again======"
sleep 3
~/bin/repo sync -j4 --no-clone-bundle
done
_EOF

假如您在服务器上编译,建议使用 screen 开启一个新的窗口,避免 ssh 掉线后导致同步终止。
假如 ssh 断掉,使用 screen -r 窗口名 即可恢复这个窗口。在 ssh 断掉的时候,这个窗口始终会保持程序的运行。具体的使用方法您可以使用 Google 搜索看一下文档。

安装 screen:

sudo apt install screen -y

开启窗口:

screen -S sync

<2> 然后执行这个脚本:

chmod a+x repo.sh
bash repo.sh

网速很慢的话(50M 带宽以下),估计要下个几小时。

当同步源码接近完毕后,会提示 Syncing work tree,直到同步完毕后会自动退出这个脚本。

0x07 编译源码

7.1 设置编译机型的 device tree、kernel 和私有文件。在这里以 nash(Moto Z2 Force)为例。其他机型请参照对应机型的相关设备源码来设置。

以下仅供参考,您需要根据设备的具体依赖自行修改:

(请将这里的 los-17 修改为您自己使用的源码目录)

mkdir ~/android/los/los-17/.repo/local_manifests
vim nash.xml



  
  
  

再加一些别的东西:

vim others.xml



  
  

7.2 再次 repo sync。

repo sync --no-clone-bundle

7.3 设置 ccache 提高编译效率。

echo export USE_CCACHE=1 >> ~/.bashrc
prebuilts/misc/linux-x86/ccache/ccache -M 50G

7.4 设置编译变量

. ./build/envsetup.sh
lunch lineage_nash-userdebug

假如是其它设备,请修改对应的编译机型。

7.5 开始编译

使用如下命令,会将编译过程中的所有屏幕输出保存至 build.log 文件中,方便排错。

make bacon -j$(($(nproc) + 1)) 2>&1 | tee build.log

假如只需要编译 recovery,则:

make recoveryimage -j$(($(nproc) + 1)) 2>&1 | tee build.log

提示:j 后面的是线程数,一般是 CPU 核心数的 2 倍。不要设置的太大,否则会适得其反并且炸内存。

0x08 编译完成

编译完成后,会在 源码目录/out/target/product/您的机型 文件夹生成对应的刷机包、镜像和一些编译出来的文件。

假如在编译过程中遇到报错,尝试 Google 对应的报错内容,不建议使用国内搜索引擎。

每次重新编译,可执行清理步骤:

make clean

然后重新执行 0x07 分段中的第 7.6 和 7.7 步。

文章最后修订于:2020 年 06 月 04 日 16:34 CST。

赞(8) 打赏
文章通过 CC 4.0 BY-NC-ND 协议发布,转载请注明出处:云梦 » Ubuntu 20.04 LTS 下编译 LineageOS 源码

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

如果您觉得文章有用,可以支持一下本站

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏