环境: Windows 11
虚拟机:VMware-workstation-full-17.6.2-24409262
Ubuntu:22.04
1. 代码下载
- 在根目录下创建文件夹
bash
mkdir ~/bin
- 导入到环境变量
bash
PATH=~/bin:$PATH
- repo下载
Android源码包含数百个git库,光是下载这么多的git库就是一项繁重的任务,所以Google开发了repo,它是用于管理Android版本库的一个工具,使用了Python对git进行了一定的封装,简化了对多个Git版本库的管理。 下载AOSP前我们要先下载repo。
bash
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
注意还要设置为清华源 (google官方的源访问不到的)
bash
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
- 设置linux读写权限
bash
chmod a+x ~/bin/repo
- 修改repo URL,替换
REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
bash
vim ~/bin/repo
- 配置git
bash
git config --global user.name "####"
git config --global user.email "####@example.com"
- 新建代码存放目录
bash
mkdir ~/code
cd ~/code
mkdir aosp_android12_r27
cd aosp_android12_r27
- 知道对应的TAG,这里我们就可以repo init初始化仓库的所有配置信息,准备下载了
bash
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.1.0_r27
如果报错:/usr/bin/env: "python": 没有那个文件或目录, 如果系统中已经安装了 Python 3,但 repo 仍然找不到 python,可能是因为 repo 默认使用 python 而不是 python3。你可以创建一个符号链接来解决这个问题:
sudo ln -s /usr/bin/python3 /usr/bin/python
repo init
只是初始化仓库,并不会开始下载 AOSP 源码。你需要执行:
bash
repo sync -j10
j10
代表使用10个线程下载,这个和你配置虚拟机的线程数和内存有关,线程数越多,相应占用内存越多,根据实际情况合理配置,-j$(nproc)
让 repo sync 使用所有可用 CPU 线程,加快同步速度。
如果遇到以下报错(未遇到忽略 # 中的内容):
#####################################################
bash
Downloading Repo source from https://gerrit.googlesource.com/git-repo
fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable
fatal: cloning the git-repo repository failed, will remove '.repo/repo'
● 原因:gerrit.googlesource.com 在某些地区可能被限制访问。 ● 解决方法: 使用镜像源下载 Repo 工具:
bash
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
设置 Repo 工具使用镜像源:
bash
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
然后再重新执行 repo init...
继续下载
如果下载过程中 卡住了(下载任务仍在执行,网速却像没有下载一样),可以终止下载,重新执行下载脚本即可
#####################################################
- 下载有时候会出错,所以我们这里使用脚本进行自动下载,失败后会自动重新下载 创建
download.sh
下载脚本
bash
touch download.sh
内容如下:
bash
#!/bin/bash
repo sync -j4
while [ $? -ne 0 ]
do
echo "======sync failed ,re-sync again======"
sleep 3
repo sync -j4
done
授予文件执行权限
bash
sudo chmod a+x download.sh
执行脚本 开始下载
bash
./download.sh
等待下载完成即可....
2. 编译、模拟器
- 配置编译环境
bash
sudo apt-get install git-core gnupg flex bison gperf 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 python3
- 文本编辑器,或者vim打开,找到最后一行,添加
sdk_phone_x86_64-eng \
有些产品,比如bonito,在lunch选择之后,即使编译成功了执行emulator,也不会有模拟器出来,因为不带有模拟器的image。所以android12上,我们需要添加模拟器的选择,先修改mk文件
bash
vim build/make/target/product/AndroidProducts.mk
- 在最后一行添加
bash
aosp_x86_64-eng \
aosp_x86-eng \
+ sdk_phone_x86_64-eng \
- 初始化编译环境(尽量用 source 因为使用 . 在后续编译阶段可能会报错!)
bash
source build/envsetup.sh
或
bash
. build/envsetup.sh
- 选择需要编译的机型
bash
lunch sdk_phone_x86_64-eng
- 最后开始执行编译,查看一下你的cpu现成最大数量,我的是16,这里不执行满,防止卡死
这里大概需要编译3-4个小时
bash
make -j12
等待编译结束
- 编译成功后执行,启动模拟器,加上
-writable-system
参数可以成功执行adb remount
,后续修改系统文件能用到
bash
emulator -writable-system
如果你能成功启动模拟器,甚好!But,如果启动失败 请继续往下看...
按照下面两个文章把自己的电脑配置一下,该关的关,该改的改 ↓
修改完,不出意外的话,就能正常打开模拟器了~
关于修改源码后再编译运行
要把 out/target/product/emulator_x86_64/
下的一些镜像文件删除了: product.img
、system.img
、system_ext.img
、vendor.img
或者在 out/target/product/emulator_x86_64/
目录下搜索 .img
全部删除 修改源码后 执行 m -j8
编译,然后继续启动模拟器看效果。
关闭虚拟机后,下次打开继续运行模拟器
bash
//先初始化环境
source build/envsetup.sh
//选择上次编译过的机型
lunch sdk_phone_x86_64-eng
//启动模拟器
emulator -writable-system
注意不要lunch
错了,lunch
其他的要从头开始编译,而且还没有模拟器!!! 也不要执行make clean
,这会把编译的文件全部清理了!!!
ok,开始愉快的 Android Framework 之旅吧 :)
再补充一个
Windows 如何与Ubuntu 传输文件
-
在Windows上下载 FileZilla filezilla-project.org/download.ph... 然后傻瓜式安装完毕
-
在Ubuntu 安装SSH服务 在虚拟机上安装SSH服务。对于Ubuntu系统,可以使用以下命令:
bash
sudo apt-get install openssh-server
安装完成后,启动SSH服务:
bash
sudo service ssh start
使用以下命令查看虚拟机的IP地址:
bash
ifconfig
- 如何使用
- 在 FileZilla 上方输入 主机IP 、用户名(@前面的是用户名,如上图我的是
xaye
)、密码、端口号 22 - 连接,右键 右边文件下载,即可下载到左边的当前目录下,点击左边的文件右键上传,即可上传到Ubuntu的当前显示目录下
结束!