sudo apt 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 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-9-jdk git vim repo
如果您的 Ubuntu 版本低于 20.04 则还需要安装 libwxgtk3.0-dev
如果您的 Ubuntu 版本低于 16.04 则还需要安装 libwxgtk2.8-dev
这里的工作区指 LineageOS 源码的存放文件夹
mkdir ~/lineage
# 进入工作区
cd ~/lineage
# 配置 git
git config --global user.email "您的邮箱"
git config --global user.name "您的名字"
# 使用 repo 初始化仓库
repo init -u https://github.com/LineageOS/android.git -b lineage-17.1
# 同步源码
repo sync
由于 LineageOS 官方并未支持 OnePlus 7T (hotdogb)
因此我们需要手动配置设备树
前往 GitHub 进行搜索 device_oneplus_hotdogb
这里的 device 指设备树 oneplus 指设备制造商 hotdogb 指机型代号
我选择了该设备树进行编译 (AOSiP-Devices/device_oneplus_hotdogb)[https://github.com/AOSiP-Devices/device_oneplus_hotdogb]
发现该仓库存在 lineage-17.1 分支 便直接 clone 到了本地
# 进入到设备树文件夹
cd ~/lineage/device
# 创建文件夹,以存放 OnePlus 机型的设备树
mkdir oneplus
cd oneplus
# clone 远程设备树到本地
git clone https://github.com/AOSiP-Devices/device_oneplus_hotdogb -b lineage-17.1
# 重命名 clone 下来的设备树文件夹名
mv device_oneplus_hotdogb hotdogb
检查设备树内的 .dependencies
文件,发现其依赖于 device_oneplus_sm8150-common
便前往LineageOS 的官方 GitHub 仓库获取
(LineageOS/android_device_oneplus_sm8150-common)[https://github.com/LineageOS/android_device_oneplus_sm8150-common]
# 进入到 OnePlus 设备树文件夹
cd ~/lineage/device/oneplus
# clone 设备树所需依赖
git clone https://github.com/LineageOS/android_device_oneplus_sm8150-common -b lineage-17.1
# 重命名 clone 下来的通用树文件夹名
mv android_device_oneplus_sm8150-common sm8150-common
检查通用树内的 .dependencies
文件,发现其依赖于 android_kernel_oneplus_sm8150
和 android_device_oneplus_common
便前往LineageOS 的官方 GitHub 仓库获取
(LineageOS/android_kernel_oneplus_sm8150)[https://github.com/LineageOS/android_kernel_oneplus_sm8150]
(LineageOS/android_device_oneplus_common)[https://github.com/LineageOS/android_device_oneplus_common]
# 进入内核树配置文件夹
cd ~/lineage/kernel
# 创建文件夹,以存放 OnePlus 机型的内核树
mkdir oneplus
cd oneplus
# clone 远程内核树到本地
git clone https://github.com/LineageOS/android_kernel_oneplus_sm8150 -b lineage-17.1
# 重命名 clone 下来的内核树文件夹名
mv android_kernel_oneplus_sm8150 sm8150
# 进入到 OnePlus 设备树文件夹
cd ~/lineage/device/oneplus
# clone 远程通用树到本地
git clone https://github.com/LineageOS/android_device_oneplus_common -b lineage-17.1
# 重命名 clone 下来的通用树文件夹名
mv android_device_oneplus_common common
由于我第一次编译时报错失败,给出的错误提示是找不到预编译内核
因此我们需要配置设备树,让其使用内核源码编译内核
# 使用 vim 编辑配置文件
vim ~/lineage/device/oneplus/hotdogb/BoardConfig.mk
然后将文件中的
PRODUCT_COPY_FILES += $(DEVICE_PATH)-kernel/kernel:kernel
BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive
替换成
TARGET_KERNEL_CONFIG := vendor/sm8150-perf_defconfig
然后使用 :wq 保存
# 进入 Vendor Tree 文件夹
cd ~/lineage/vendor
# clone OnePlus 设备 Vendor Tree
git clone https://github.com/AOSiP-Devices/vendor_oneplus -b ten
# 重命名 clone 下来的 Vendor Tree 文件夹名
mv vendor_oneplus oneplus
# 进入 LineageOS 源码所在文件夹
cd ~/lineage
# 初始化编译环境
. build/envsetup.sh
# 初始化设备
lunch lineage_hotdogb-userdebug
# 开始编译
mka bacon