AOSP的下载与编译
PC端硬件及系统
- CPU AMD7700x
- 内存 32G*2
- 硬盘 FANXINAG S790 2TB(支持国产)
- 网络 ~~公司的网络是真的快啊80-100mb每秒。感觉这是我硬盘的极限了而不是网络的极限~~ 使用软件VMware Workstation Pro安装系统ubuntu-22.04.3-desktop
安装git
第 1 步,执行安装指令
sudo apt install git
第 2 步,配置 Git 全局环境
git config --global user.name "用户名"
git config --global user.email "邮箱"
第 3 步, 生成 ssh 秘钥(可选配置)~~我没配置~~
ssh-keygen
一直按回车,生成的秘钥文件会在 ~/.ssh目录,我们将~/.ssh目录下的id_rsa.pub 里面的内容复制到仓库管理系统相应的SSH Key中,在后续的代码下载时就不需要再输入用户名和密码。
下载AOSP
-
下载方式 下载 AOSP 有两种方式
-
使用初始化源码包 中科大和清华大学提供了AOSP源码的压缩包,现在的包大约有60GB左右,可以使用命令行或迅雷等下载工具下载。 清华大学文档:mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 中科大文档:https://mirrors.ustc.edu.cn/help/aosp.html
-
使用 repo 直接同步源码 使用repo直接同步源码,是Android官方文档中使用的方式。但是这里我们不使用这种方式,~~因为我们没有下载repo~~ android官方文档 https://source.android.google.cn/docs/setup/download/downloading?hl=zh-cn 由于下载Android源码非常消耗服务器的带宽和I/O,中科大和清华大学的文档中都强烈要求我们使用第一种方式同步源代码。
这里我们选择第一种方式。至于第二种方式,如果我没记错的话大锯哥就是用的第二种方式。~~记错了不要打我~~
第 1 步,建立工作目录
这一步大家就根据爱好来吧。
个人创建的文件夹
mkdir AOSP
cd AOSP
第 2 步,下载AOSP初始化包
下载AOSP初始化包也有两种方式 我这里是使用的wget命令
wget -cU NoSuchBrowser/1.0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
使用-c指令可以进行断点续传 第二种,使用下载工具下载源码包。下载工具可以是浏览器,也可以是迅雷等专用下载工具 反正大家都是带桌面的ubuntu虚拟机,有工具用不用白不用。
第 3 步,解压初始化包
下载后的初始化包是一个.tar的压缩包,既可以使用命令行解压,也可以用操作系统的图形化工具解压。解压命令如下:
tar xf aosp-latest.tar
我这里是直接使用的文件管理器进行解压,如果使用命令解压压缩包无法查看进度,并且控制台会卡住你也不知道是电脑卡住了还是在进行解压任务。 解压完成后进入.repo/manifests目录,使用git fetch命令同步一下远程代码仓库
cd .repo/manifests
git fetch --all
第 4 步 安装并配置repo
同步完成后我们再去./repo/repo目录中找到repo文件。将它复制到~/bin目录中并添加到环境变量中
cd .repo/repo
cp repo ~/bin
cd
sudo gedit .bashrc
在打开的文件中添加PATH
export PATH=~/bin:$PATH
source .bashrc
更新当前环境后可以查看repo
repo --version
使用repo需要python环境,我们需要设置一下当前系统中python环境。
whereis python
#不一定是该目录大家要根据自己的python环境目录来
cd /usr/bin/
#查看python,如果大家是ubuntu桌面系统肯定会有python3的
ll | grep "python"
sudo ln -s ./python3.1 python
repo只认python这个变量,所以指定一下就行了至于我为什么会知道ubuntu桌面系统一定会有python3,~~大家可以尝试一下删除python3~~。
第 5 步,同步指定分支的源码
进入源码包中的.repo/manifests目录,切换指定分支
repo init -b android-13.0.0_r20
git branch -vv
不知道分支可以通过git branch -r查看 最后,执行repo sync 同步源码,就可以得到完整的aosp源码了。
repo sync
编译aosp
- 配置编译环境
编译Android源码会用到很多第三方库,我们需要先将这些库配置好,指令如下
sudo apt update
sudo apt install flex bison build-essential 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 fontconfig -y
sudo apt install make git-core gnupg zip unzip curl python3 openjdk-11-jdk -y
sudo apt clean && sudo apt autoremove -y
- 编译 Android 镜像
第 1 步,加载环境变量、
在Android源码根目录执行source build/envsetup.sh,该指令会将lunch以及其他程序和变量添加到shell环境中。
cd aosp
source build/envsetup.sh
第 2 步,选择编译的目标
因为是在电脑上调试编译出的版本,所以这里我们选择 x86_64指令的系统。 lunch 打开选择菜单,选择x86_64-userdebug。 这里我建议选择sdk开头的目标。我编译了2版aosp开头的目标。都跑不起来...
lunch
52(目标编号)
第 3 步,执行编译
make 指令是aosp的编译指令,支持并发编译。可以使用-j指定并发编译的线程数。电脑的CPU核心数越多,可以设定的线程数就越大,编译速度也就越快,一般可以设为CPU核心数*4。如果不指定,构建系统会自动选择当前操作系统最适合的并行线程数。
make
在调用 make 命令时,如果没有指定任何目标,则将使用默认的名称目标,该目标会编译出完整的 Android 系统镜像。
第 4 步,启动模拟器
编译的时长取决于电脑的性能,首次编译约需要耗时约2-5个小时,控制台提示 build completed successfully则表示编译成功了。然后执行emulator就可以启动模拟器了。
emulator
如果emulator指令无法正常运行,可以尝试调整虚拟机内存大小后再次运行
emulator -partition-size 1024
虚拟机硬件加速
- 下载kvm,官方文档 https://developer.android.com/studio/run/emulator-acceleration?hl=zh-cn
- 打开虚拟机中的硬件加速功能 虚拟机->设置->处理器->虚拟化引擎->虚拟化Intel VT-X/EPT或AMD-V/RVI
转载文章
【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 还有b站视频但是感觉没有文章详细...