AOSP 初体验

AOSP 初体验

硬件准备

RAM:最低16GB,建议32GB,有条件64GB,内存越高,编译时间越短。

ROM:最低400GB,代码250GB+构建150GB,建议不低于500GB。

系统版本:Ubuntu 22.04.2 LTS。

笔者在 618 期间购置了如下配件,自己组装了主机,这电脑主要作为生产力工具使用!装了双系统:Win11 + Ubuntu。

电脑配置.png

希望未来不管过去了多长时间,当再看到这个配置时,都能不忘初心!

开发环境搭建

安装好 Ubuntu 系统后,需要安装必要的软件:

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python

此时,笔者碰到了如下错误:

开发环境搭建错误.png

大概的意思是说,在最新的 Ubuntu(22.04.2) 系统下,没有可选的 python 安装包。经过群里大佬指点,需要把命令中的 python 改为 python3,重新执行命令即可。

下载编译源码

1.下载 repo 工具

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo

repo 的运行过程中会尝试访问官方的 git 源更新自己,如果想使用 tuna 的镜像源进行更新,可以将如下内容复制到你的 ~/.bashrc 或者 ~/.zshrc 里面。

笔者实际操作中,在主目录下并没有找到 .bashrc ,后来发现需要打开“显示隐藏文件”开关即可。

bashrc文件.png

打开 .bashrc 文件,新增如下内容之后,保存即可。

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

bashrc新增tuna.png

然后 source 一下:

source ~/.bashrc
#如果使用的是 zsh
#source ~/.zshrc

2.初始化仓库并同步远程代码

git config --global user.email "[email protected]"
git config --global user.name "Your Name"
mkdir aosp 
cd asop
#初始化仓库,-b 指示分支,这里使用 android10
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41
#同步远程代码
repo sync

-b 后面的值参考 源代码标记和 build。这里选用了 android-10.0.0_r41 版本用于学习。Android 每年都会更新一个大版本,学习的角度来说,选择一个不太老的版本即可,不必追新。

笔者在同步远程仓库代码时,又碰到了如下错误。

repo错误.png

经过群里大佬指点,还是跟 python 的版本有关。

这里的解决方案是需要把 python3 软链接成 python,然后重复执行上面命令即可。

sudo ln -s /usr/bin/python3 /usr/bin/python

根据网络环境的不同,repo sync 这个过程可能会持续很久,耐心等待即可。笔者大概下载了 30 分钟左右。

3.编译源码

source build/envsetup.sh
lunch aosp_x86_64-eng
make -j16

源码编译时的画面如下所示:

源码编译中.png

笔者发现,在源码编译的过程中,内存占用内存使用率并没有超过 13 G(个人情况,仅供参考)。

正当笔者兴高采烈等待编译完成时,笔者又又遇到了如下错误。

编译错误.png

经过群里大佬指点,又又是因为 python 版本原因导致的。编译源码时需要使用 python2 版本。

经过上网查资料 ubuntu 22.04中安装 python2,一番折腾。最终终于配置好了 python2 为默认使用版本。

重复执行上面的编译命令重新编译系统源码。此过程根据电脑性能的不同,编译的时间各不相同。笔者的编译成功大概花费了 38 分钟。

aosp编译成功.png

4.运行模拟器

emulator -verbose -cores 4 -show-kernel

万里长征,只差最后一步!笔者心想:运行个模拟器还不简单!!!

接下来就是见证奇迹的时刻!输入指令,走你!!!

好吧!不出意外的又又又遇到了一个错误!

模拟器启动失败.png

这个问题经过群里大佬的指点,根据报错提示,可能是硬件性能不够的原因导致的。但是,笔者的电脑明显不属于这个情况。其它大佬也表示没遇到过这种情况......这就有点儿尴尬了。行百里者半九十!往往看似最简单的一步,就是卡的你寸步难行!

无奈只能自己查找相关资料,寻求解决方案。

在网上寻找到了一个解决思路:可能是显卡驱动的兼容性问题,尝试更新到显卡驱动为最新版。

经过一番折腾,笔者发现自己的电脑中,各种驱动都是最新的,不存在显卡驱动版本过低导致的问题。无奈只得暂时搁置该问题。

后续在不经意间发现了这两篇文章 Why won't my Android emulator start on Ubuntu 22.04?CentOS8或Ubuntu17.10以上系统无法通过向日葵被远控解决方案

这不禁让笔者产生了一些联想......

笔者的 Ubuntu 作为主力机一直开启在那里,通过 “向日葵” 进行远程连接。“向日葵” 在 Ubuntu 系统中,要想实现远程控制功能,需要修改显示服务器为 “Ubuntu on Xorg”。

ubuntu修改显示服务器.png

很有可能跟这里的显示服务器有关系,把显示服务器改回默认可能就好了!

说干就干,当我把显示服务器改回默认,重新执行启动模拟器的指令之后,模拟器正如我所设想的那样,正常启动了,没有任何异常!!!

当看到自己编译的系统源码正常运行到模拟器中时,还是有一些小激动的!

笔者作为一名 Android 开发人员,工作经验也有好多年了,之前一直在从事应用开发和一些自定义 View 相关的工作,至今还没有编译过 Android 系统源码,再怎么说都还是会有一些失落的。现在总算是稍微摸到了一点 Framework 的门框了!这会是一个全新的开始,绝不是终点!

总结

程序员这个行业,活到老,学到老!学到的知识越多,越是心虚,越需要学习更多的知识!

持续学习!持续输出!

参考资料:

玩转 AOSP 篇之极速上手

framework开发环境搭建

手把手一步步实现 Ubuntu20.04 编译 Android10 系统源码

解决:/usr/bin/env: ‘python’: No such file or directory

ubuntu 22.04中安装 python2

Why won't my Android emulator start on Ubuntu 22.04?

CentOS8或Ubuntu17.10以上系统无法通过向日葵被远控解决方案

猜你喜欢

转载自juejin.im/post/7249172199960674341