前言

编译安卓源码里面有很多坑,如果不注意的话,就会掉进去。

环境

Ubuntu 18.04.6 LTS , 内存空间100G+ ,cpu核数 8

mac 电脑

pixel3 二手 

在ubuntu机器上编译源码,在mac上安装。

步骤

1.拉android源代码

2.拉驱动脚本

3.编译系统

4.刷机

拉android源代码

参考:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorAOSP 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。icon-default.png?t=N7T8https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

下载repo工具:

repo工具就是一堆python脚本的集合,调用git命令去clone代码,所以要保证git已经配置好。

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

建立工作目录:

mkdir source
cd source

初始化仓库:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

如果这一步报错,连接超时,就执行

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

如果需要某个特定的 Android 版本(列表):

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r46	

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

repo sync

这里等待几个小时,如果失败了就多执行几次。

tips: 如果你老是链接失败,我建议换一下source.list .

路径:/etc/apt/source.list , 将原有的备份,换成清华源就好。

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

下载驱动 

因为是要真机运行,所以要下载驱动。如果说运行虚拟机的话,这个步骤可以跳过。

默认你已经下载好了源码,要不然后面说了白说,狗头哈哈。

根据Android系统版本与机型确定build ID

Build IDTagVersionSupported devices data
RQ3A.211001.001android-11.0.0_r46Android11Pixel 3、Pixel 3 XL、Pixel 3a、Pixel 3a XL、Pixel 4、Pixel 4 XL、Pixel 4a、Pixel 4a (5G)、Pixel 52021-10-01

在下面的网址里面找到对应的驱动。
https://developers.google.com/android/drivers#bluelinerq3a.211001.001icon-default.png?t=N7T8https://developers.google.com/android/drivers#bluelinerq3a.211001.001例如我找的:

Pixel 3 binaries for Android 11.0.0 (RQ3A.211001.001)

Hardware ComponentCompanyDownloadSHA-256 Checksum
Vendor imageGoogleLink845382bc012a70ae69b03be70a16532d1f92e759bc5c65e85ad1a3417c80f485
GPS, Audio, Camera, Gestures, Graphics, DRM, Video, SensorsQualcommLinkb12a986161e912e3afd71e57d31d2b4e5c682a8f70c31b37c064fe4bc08de5ad

生成vendor文件夹 

从上面的两个link,下载两个脚本到跟目录下,如本文中的 source 下,解压执行。

注意:执行过程中需要同意协议,到最后,要手动输入“I ACCEPT”, 如果手快了一直回车,最后默认就是不同意,这个地方真的是很狗啊,搞了好几次。

结束后,会生成vendor文件夹。

整体编译 

初始化环境

 $ source build/envsetup.sh 
 $ make clobber

lunch执行实例

#根据列表序号选择具体内容
#基于pixel编译则选择3
#如果是虚拟机可以选择aosp_x86_64-eng
$ lunch 
#或也可以直接选择 
$ lunch aosp_blueline-userdebug
#或也可以直接选择序号 
$ lunch 3

开始编译

make -j8 #根据 cpu 的核数来,核数越多编译越快,666

输出目录在:out/target/product/ 

开始等待,几个小时,去搞一杯茶,刷刷抖音,哈哈。

开始刷机

如果运行虚拟机的话,执行 emulator , 就会出现虚拟机界面。

将 out/target/product/blueline 这个目录压缩成zip文件,传输到mac电脑上装。

前提: 手机已经解BL锁(限制用户刷第三方ROM和第三方recovery以及限制root的“锁”)

不知道怎么解锁的话,买二手手机的时候,备注商家给你解锁,不要钱,哈哈。

export ANDROID_PRODUCT_OUT='out/target/product/blueline'
adb reboot bootloader
fastboot flashall -w 

偷偷告诉你不用一条一条的执行,一个一个img往进搞,上面的指令就可以了。

成功之后

 踩坑指南

 1. 拉代码老师失败,特别执行 repo init -u 的时候,timeout, 这个时候不妨执行以下指令

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

或者编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:

REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

之后再次执行 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest  。

2.刷完机之后。屏幕失灵。害,大爷的,白忙活。

原因是因为驱动版本没有对上,一定要下载 Build ID 对应的驱动。

重新下载之后,删除 out 目录,在重新编译。

这个时候在执行 adb reboot bootloader 的时候,如果没收手机连接,就手动同时按住电源+音量键(上或者下自己摸索,因为可能不一样)

进入fastboot 之后,通过音量键选择  reboot to bootloader .

 再次执行 fastboot flashall -w 。

手动签发系统签名参考:Android系统签名 - 简书

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐