基础环境
虚拟机:VMware® Workstation 16 Pro 16.0.0 build-16894299
Linux版本:ubuntu-16.04.7-desktop-amd64
设备:pixel 6a;代号:bluejay;
基础软件安装
安装 Git
命令:sudo apt install git
安装 Python 3.7
1、下载 python 3.7
命令:wget Python Release Python 3.8.17 | Python.org
2、解压 python 3.7
命令:tar xvf python.tar.gz
3、配置 python 3.7
a)进入解压好的 python 3.7 目录
命令:cd Python-3.7.17
b)执行 configure 脚本:
命令:./configure
如果执行结果中包含以下报错信息,则需要安装 openSSL:
报错:checking whether compiling and linking against OpenSSL works... no
c)安装 openSSL 相关依赖包:
命令:sudo apt install git-core libssl-dev libffi-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
安装完 openSSL 后再次执行 configure 文件可以看到此信息:
checking whether compiling and linking against OpenSSL works... yes
4、编译与安装Python3:
命令:sudo make install
配置update-alternatives
--将 python 交给 update-alternatives 管理,可随时切换软件版本
a)将 python3.7 和 phthon2.7 加入快捷管理
命令:
update-alternatives --install /usr/bin/python python python3的安装地址(/usr/local/bin/python3.7 3(权重号))
update-alternatives --install /usr/bin/python python python2的安装地址(/usr/bin/python2.7 2(权重号))
b)切换Python版本:
命令:update-alternatives --config python
repo 管理工具的下载与使用
下载安装repo
直接参考清华或中科大镜像网站的教程:
清华:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
中科大:AOSP 镜像使用帮助 — USTC Mirror Help 文档
错误集锦
1)Downloading Repo source from https://gerrit-googlesource.proxy.ustclug.org/git-repo
fatal: unable to access 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
repo: error: "git" failed with exit status 128
cwd: /home/jacinth/WORKING_DIRECTORY/.repo/repo.tmp
cmd: ['git', 'fetch', '--quiet', '--progress', 'origin', '+refs/heads/*:refs/remotes/origin/*', '+refs/tags/*:refs/tags/*']
fatal: double check your --repo-rev setting.
fatal: cloning the git-repo repository failed, will remove '.repo/repo'
这个错误需要关闭 git 配置里的 ssl 校验,共执行两行命令:
git config --global http.sslverify false
git config --global https.sslverify false
下载及同步 AOSP 源码
初始化源码仓库
具体教程查看清华或中科大镜像网站
1、下载源码(安卓版本代号可查看网址:https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn)
命令:repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b 安卓版本代号
错误集锦
1)无法连接到 gerrit.googlesource.com,
解决:
编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
2、同步源码
命令:repo sync
错误集锦
1)同步过程提示某些文件 not found,如下图:
解决:
两个镜像源互相切换使用,配置文件路径:WORKING_DIRECTORY/.repo/manifests.git/config,修改其中 url 指定的镜像地址
华科大镜像:url = git://mirrors.ustc.edu.cn/aosp/platform/manifest
清华镜像:url = https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
b)GitCommandError: read-tree: [Errno 12] Cannot allocate memory
解决:内存不足导致,调高虚拟机分配的内存
编译驱动下载及源码的编译
驱动文件下载及执行
1、找到源码对应的 ID
2、找到你的真机机型以及该 ID 对应的驱动文件(二进制)
3、下载并解压驱动文件(有些比较旧的机型,比如 Nexus,驱动可能是多个)
a)下载
命令:wget Link(驱动文件对应的链接)
b)解压
命令:tar zxvf 驱动文件.tar.gz
4、执行解压出来的 shell 脚本(如有多个脚本,需注意执行顺序,执行完成会在 vender 目录下生成对应该设备,如:bluejay 的相关文件)
命令:./extract-google_devices-bluejay.sh
源码编译
1、执行环境准备脚本
命令:source build/envsetup.sh
2、选择对应设备镜像(只输入 lunch 的话,会提供一个设备名称列表供选择,我的设备是 pixel 6a,代号“bluejay”,所以应该输入代号 4)
命令:lunch
3、开始编译
命令:make -j6(6 为进程数,根据自己的内存和处理器自行选择)
错误集锦
1)fatal error: runtime: out of memory
解决:内存不足,最开始设置虚拟机为 8g 内存,编译开始时中断已有提示最少要 16g,否则会导致某些文件配置失败,调到 21g 后还有一次出现了编译失败,后来将内存调至 24g。
刷机
1、检查设备是否连接
命令:adb devices
错误集锦
1)error: insufficient permissions for device(其实在 adb devices 启动服务时就可以明显看到 no permissions 的提示了,如图)
解决:
a)在终端查看插入设备 usb 的 ID,命令:lsusb,找到我们的设备 usb ID ,如图
b)进入到 /etc/udev/rules.d/ 目录下,命令:cd /etc/udev/rules.d/
c)新建一个 51-android.rules 文件,命令:sudo vim 51-android.rules
d)编辑内容,命令:sudo gedit 51-android.rules
e)加上以下内容并保存:SUBSYSTEM=="usb", ATTRS{idVendor}==" 18d1", ATTRS{idProduct}=="4ee7",MODE="0666"
f)赋予文件权限:命令:sudo chmod a+x 51-android.rules
g)拔掉usb重新插上就可以了
2、设备进入 fastboot 状态
命令:adb reboot bootloader
3、检查处于 fastboot 状态的已连接设备
命令:fastboot devices
4、解锁(包括 oem 解锁、fastboot 解锁)
相关教程参考官网:运行版本 | Android 开源项目 | Android Open Source Project
Tip:解锁后是会清除原先的用户数据的,unlock 之后我的汉化包、一些设置都被还原了。
a)oem 解锁在开发者选项里
b)fastboot 解锁(通过手机屏幕的提示按音量键进行选择、电源键确认)
命令:fastboot flashing unlock
备注:如果要退出 fastboot mode,命令:fastboot reboot
5、切换到 su 用户
命令:sudo -i
6、进入 fastboot 所在目录
a)查看 fastboot 目录路径
命令:which fastboot
b)进入目录,如图
命令:cd /home/jacinth/WORKING_DIRECTORY/out/host/linux-x86/bin
7、刷入
首次全部模块刷入
命令:fastboot flashall -w(-w 表示清空设备)
8、执行成功会自动重启,如图,查看手机版本为我们下载的源码版本
错误集锦
1)waiting for devices
解决:首次执行 fastboot flashall 的时候,设备还未解锁,所以尽管在 fastboot devices 下可以看到,但未解锁执行 fastboot flashall 刷机时就检测不到设备,按照步骤正常 unlock 即可。
2)error: neither -p product specified nor ANDROID_PRODUCT_OUT set
解决:
配置好环境变量
a)打开 profile 文件,命令:sudo gedit /etc/profile
b)在末尾加上环境变量的配置并保存(路径则是你下载源码的 out 目录下):
export ANDROID_PRODUCT_OUT=/home/jacinth/WORKING_DIRECTORY/out/target/product/bluejay
c)使改动生效,命令:source /etc/profile
d)使刷机环境生效,命令:source build/envsetup.sh
备注:即便设置了该环境变量,如果没有在 su 用户下执行 flashall 命令,还会报同样的错误。
3)Device product is 'bluejay'.Update requires 'oriole' or 'raven' or 'slider' or 'whitefin'.
解决:下载的驱动出错了,我在淘宝下单的是 pixel6,所以本来下载的 oriole 驱动,到货了我也没仔细看,结果到编译报错了才知道手上的是 bluejay,即 pixel6a,所以重新下载驱动文件。
4)FAILED (remote: partition (boot) not found)
解决:进入 su 用户之后,还要进入到 fastboot 目录执行 flash,否则就会出现类似的错误。这个错误查了很久百思不得其解,后来参考一篇博客才知道自己没有进入到 fastboot 目录。
博客地址:编译AOSP刷入nexus5-蒲公英云