前言
做Android应用好多年,一直对AOSP无所知,都不知道什么东西,目前车载那么火,就想介入进去,开始尝试去编译一下系统源码,然后去看了一下Android官网,目前最新的版本还不支持mac和window,只支持ubuntu,去整了个硬盘准备刷个系统,可能是Macmini原因,一直没能成功,很尴尬,最后整了虚拟机。
整个过程挺麻烦的,我下载是Android13最新的源码,因为源码需要,我用清华的镜像,下载倒是挺快,没有像别人说的两三天,但也有半天,编译也用了半天,过程有很多很多坑,记录下来给大家分享一下,一起学习。
一、构建环境搭建
1.1、准备工作
VMWare:https://www.vmware.com/products/fusion/fusion-evaluation.html Ubuntu镜像:http://mirrors.aliyun.com/ubuntu-releases/
1.2、VMWare安装Ubuntu
1.2.1、我的电脑是Mac,所以下载的是VMWare Fusion虚拟机,Android官网建议ubuntu版本选择18.0.4,给的内存大小尽量给大一些,我是16G,给了12G,磁盘大小给了500G
1.2.2、如果是Mac的话,给了一个新的硬盘,格式化的话选择区分大小写,不然Androidstudo去跑源码会莫名的报错
1.3、下载git与Python3
1.3.1、git安装与下载
安装git:
安装依赖工具:
设置git身份,添加自己的邮箱和姓名:
1.3.2、Python3的安装与切换
下载Python3:
配置update-alternatives,用于切换当前使用的python版本,需要设置软链:
切换Python版本:
二、源码下载与编译
AOSP(Android Open Source Project)是Google开放的Android 开源项目,中文官网为:source.android.google.cn/ AOSP通俗来讲就是一个Android系统源码项目,通过它可以定制 Android 操作系统,国内手机厂商都是在此基础上开发的定制系统。因为要墙,如果无法连接Google服务器获取AOSP源码,可以从 清华大学镜像站或者 中科大镜像。我用的是中科的例子
2.1、下载 repo 工具
创建bin,并加入到PATH中:
安装curl库:
下载repo并设置权限
2.2、下载源码
然后建立一个工作目录(名字任意)
初始化仓库:
如果需要某个特定的 Android 版本(Android 版本列表 ):
同步源码树(以后只需执行这条命令来同步):
等待漫长的好几个小时,终于完成,成功会有这样提示
2.3、安装构建环境
安装 jdk8
安装依赖:
安装 sudo apt-get install libesd0-dev 会报 Unable to locate package libesd0-dev 这个错,解决办法
2.4、编译
使用envsetup.sh脚本初始化环境:
选择用lunch构建哪个目标,根据设备选择需要的目标,该设备可以是google官方提供的,根据google提供的驱动地址下载:developers.google.cn/android/dri…或者可以用电脑模拟器“sdk_phone_x86_64”,我这边没有设备使用的是电脑模拟器
构建代码
其他指令说明
启动模拟器
模拟器关闭时候,其实在后台还存在,需要自行关闭
三、自定义ROM真机刷机
USB 调试配置:(设备USB能连上电脑虚拟机则不用管,如果不是用虚拟机能连上电脑也忽略)developer.android.google.cn/studio/run/…
驱动下载:developers.google.cn/android/drivers#angleropr6.170623.019
下载完对应的驱动,并将压缩包放入已经下载好的源码根目录,解压后得到两个脚本文件,从源代码树的根目录运行附带的自解压脚本,然后确认您同意附带的许可协议的条款。二进制文件及其对应的 makefile 将会安装在源代码树的 vendor/ 层次结构中
为了确保新安装的二进制文件在解压后能被有效采用,请使用以下命令删除所有之前 build 的已有输出:
进入Bootloader模式:(解BL锁)
查看连接设备:
刷机:
四、过程报错收集
无法安装libesd0-dev
内存不够,新版本要求16G,可能是你开的线程太多了。比如make -j8 这种。还有一种原因是可能没有设置swap交换区,就是把磁盘空间当作临时内存,注意的点是,设置完成需要重启虚拟机或电脑。
KVM的虚拟化需要硬件支持报错
make完不能直接emulator启动电脑模拟器,会报错,lunch aosp_x86-eng这个版本不行,Android12改掉了会报错
感谢