前言
直接在虚拟机中编译硬盘耗不起,我扩到了200g编译到一半还是提示空间不足,建议直接上移动硬盘。
本文主要记录AOSP、lineage OS以及Kernel的编译。
lineage编译
安装必要依赖
sudo apt install bc bison build-essential ccache curl flex git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32z1-dev
报错可尝试apt换回原来的源然后
sudo apt install bc bison build-essential ccache curl flex git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
少了g++-multilib gcc-multilib lib32z1-dev (不知道是否有影响)
apt-get update && apt-get upgrade && apt-get dist-upgrade
配置platform-tool(可选)
具体参考官方wiki,其实自己安装一下adb和fastboot就可以跳过这一步了
下载repo
参考清华源
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
启用缓存加速(可选)
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
ccache -M 50G
ccache -o compression=true
下载源码
推荐用清华源
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-18.1
先别着急repo sync
提取专有 blob
这一步有不同情况有不同方式:
- 对于官方支持的机型,可以使用官方wiki的教程中提到的两种方式:从已经刷了lineage的手机中提取,或者从刷机包中提取,具体参考官方wiki。
- 对于所有机型,将vendor手动下载到根目录或者将其配置到repo中重新sync。
这里只介绍网上教程很少提到的第二种方式,参考如何给Xiaomi 4C编译LineageOS 18.1
对于小米8se,官方并未支持这台设备,需要民间提供设备配置和vendor,可以在github中找到相关项目
使用方法:
在“.repo”的目录下,创建local_manifests
目录,创建文件:“roomservice.xml”然后把github中的内容复制过去
注意如果原来的文件中使用了fetch=”ssh://git@github.com要将其改成fetch=”https://github.com
repo sync
顺便记下google设备的vendor
这种方法在官方wiki中并没有提到,所以知道的人相对少一些,我联系到一个负责维护lineageOS给google设备做适配的contributor,他告诉我这是因为公开这些官方vendor涉及到了法律的灰色地带。使用这种方式的好处是能够刷到最新版本的vendor,而不是从旧版本的lineage中去提取。我想编译一个lineage首先我得有一个现成的编译好的rom,这很怪,就好像我想吃鸡蛋首先我得养只鸡,但是我没有鸡蛋所以我养不出鸡(不太恰当的比喻)。
开始编译
source build/envsetup.sh
breakfast sirius # 换成自己的设备名
croot
brunch sirius # 换成自己的设备名
注意如果上一步没有完成的话这里直接breakfast sirius
会提示找不到相关文件,然后去lineage官网去自动同步,这时候他会去同步sony的sirius机型,而不是小米8se,因为两个设备重名了,而官方只支持sony的机子。如果发生了这个情况可能会污染repo,要去.repo/local_manifests/roomservice.xml
里把自动生成的sony的sirius记录给删掉,vendor和device目录下的sony文件夹也要删掉。
不出意外的话这样就编译完成了
改makefile
source build/envsetup.sh
mgrep BUILD_NUMBER
./vendor/lineage/build/core/main_version.mk
# 把endif下面的全注释
BF_BUILD_NUMBER
./build/make/core/Makefile:342
BUILD_NUMBER
./build/make/core/version_defaults.mk:297:
# 改成9b7fb2d329
./vendor/lineage/config/common.mk:240: LINEAGE_BUILDTYPE := RELEASE
签名安装包
参考官方文档
签名完成后可能会有故障。
subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack testkey; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done
breakfast <codename>
mka target-files-package otatools
croot
sign_target_files_apks -o -d ~/.android-certs \
$OUT/obj/PACKAGING/target_files_intermediates/*-target_files-*.zip \
signed-target_files.zip
ota_from_target_files -k ~/.android-certs/releasekey \
--block --backup=true \
signed-target_files.zip \
signed-ota_update.zip
刷机
不推荐用twrp的卡刷,可能会出奇奇怪怪的问题,使用twrp或者lineage官方recovery,进入adb sideload模式,然后使用命令
adb sideload rom.zip # 编译完成的rom的路径
如果刷以后出现wifi用不了或者其他什么故障可以尝试先给手机刷个最新版本的bootloader和radio。
aosp编译
环境配置
主要参考清华镜像源和Google官方教程
首先下载repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
也可以从清华源下载
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
同时将以下内容写入.bashrc
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
重启终端完成源的替换
源码同步
从这里查找自己的设备以及想要编译的安卓版本,记住”build ID”和”标记”,之后会用到。以pixel2xl为例,设备名为taimen,标记号为”android-11.0.0_r4”的版本支持pixel2xl,”build ID”为”RP1A.201005.004”。创建文件夹”android-11.0.0_r4”并进入该文件夹进行后续工作。
开始源码同步
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r4
这步2022/04/01亲测,使用清华源没问题但是使用中科大源或者google源会报一个”stable”啥啥啥的问题,原因没细看。这步完成后
repo sync
开始主要的同步进程,时间长短主要看网速,成功后也多sync几次,防止后续出现错误
下载驱动
从这里下载对应设备的驱动,搜索”build ID”,找到自己的设备名即可,这里我搜索”RP1A.201005.004”,找”taimen”。
有两个”link”,全部都wget到本地,然后”tar -xzvf”解压后执行就行,阅读一大串文本的时候按”Q”跳过,然后输入”I ACCEPT”开始驱动解压。会解压出一个vendor文件夹,放到”android-11.0.0_r4”目录,如果之前就已经在这个目录了就不需要操作
开始编译
source build/envsetup.sh
lunch
不出意外的话会出来很多选项,输入aosp_taimen-userdebug
的编号后回车,自动配置编译选项,然后
make -j20
开始漫长的等待,不出意外就成功了
内核编译
//TODO