Android12 系统源码编译及踩坑全攻略

环境:
Windows 11
虚拟机:VMware-workstation-full-17.6.2-24409262
Ubuntu:22.04

1. 代码下载

  • 在根目录下创建文件夹
mkdir ~/bin
  • 导入到环境变量
PATH=~/bin:$PATH
  • repo下载

Android源码包含数百个git库,光是下载这么多的git库就是一项繁重的任务,所以Google开发了repo,它是用于管理Android版本库的一个工具,使用了Python对git进行了一定的封装,简化了对多个Git版本库的管理。
下载AOSP前我们要先下载repo。

curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo

注意还要设置为清华源 (google官方的源访问不到的)

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
  • 设置linux读写权限
chmod a+x ~/bin/repo
  • 修改repo URL,替换 REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
vim ~/bin/repo
  • 配置git
git config --global user.name "####" 
git config --global user.email "####@example.com"
  • 新建代码存放目录
mkdir ~/code
cd ~/code
mkdir aosp_android12_r27
cd aosp_android12_r27
  • 知道对应的TAG,这里我们就可以repo init初始化仓库的所有配置信息,准备下载了
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 源码。你需要执行:

repo sync -j10

j10 代表使用10个线程下载,这个和你配置虚拟机的线程数和内存有关,线程数越多,相应占用内存越多,根据实际情况合理配置,-j$(nproc) 让 repo sync 使用所有可用 CPU 线程,加快同步速度。

如果遇到以下报错(未遇到忽略 # 中的内容):
#####################################################

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 工具:

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

设置 Repo 工具使用镜像源:

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

然后再重新执行 repo init...继续下载

如果下载过程中 卡住了(下载任务仍在执行,网速却像没有下载一样),可以终止下载,重新执行下载脚本即可

#####################################################

  • 下载有时候会出错,所以我们这里使用脚本进行自动下载,失败后会自动重新下载
    创建 download.sh下载脚本
touch download.sh

内容如下:

#!/bin/bash
repo sync -j4
while [ $? -ne 0 ]
do
echo "======sync failed ,re-sync again======"
sleep 3
repo sync -j4
done

授予文件执行权限

sudo chmod a+x download.sh

执行脚本 开始下载

./download.sh

等待下载完成即可…

2. 编译、模拟器

  • 配置编译环境
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文件

vim build/make/target/product/AndroidProducts.mk
  • 在最后一行添加
     aosp_x86_64-eng \
     aosp_x86-eng \
+    sdk_phone_x86_64-eng \
  • 初始化编译环境(尽量用 source 因为使用 . 在后续编译阶段可能会报错!)
source build/envsetup.sh

. build/envsetup.sh
  • 选择需要编译的机型
lunch sdk_phone_x86_64-eng
  • 最后开始执行编译,查看一下你的cpu现成最大数量,我的是16,这里不执行满,防止卡死

这里大概需要编译3-4个小时

make -j12

等待编译结束

  • 编译成功后执行,启动模拟器,加上-writable-system 参数可以成功执行 adb remount,后续修改系统文件能用到
emulator -writable-system

如果你能成功启动模拟器,甚好!But,如果启动失败 请继续往下看…

按照下面两个文章把自己的电脑配置一下,该关的关,该改的改 ↓

修改完,不出意外的话,就能正常打开模拟器了~


关于修改源码后再编译运行

要把 out/target/product/emulator_x86_64/ 下的一些镜像文件删除了:
product.imgsystem.imgsystem_ext.imgvendor.img
或者在 out/target/product/emulator_x86_64/ 目录下搜索 .img 全部删除
修改源码后 执行 m -j8 编译,然后继续启动模拟器看效果。

关闭虚拟机后,下次打开继续运行模拟器

//先初始化环境
source build/envsetup.sh

//选择上次编译过的机型
lunch sdk_phone_x86_64-eng

//启动模拟器
emulator -writable-system

注意不要lunch 错了,lunch 其他的要从头开始编译,而且还没有模拟器!!!
也不要执行make clean,这会把编译的文件全部清理了!!!

ok,开始愉快的 Android Framework 之旅吧 :)


再补充一个

Windows 如何与Ubuntu 传输文件

  1. 在Windows上下载 FileZilla
    https://filezilla-project.org/download.php?type=client#close
    然后傻瓜式安装完毕

  2. 在Ubuntu 安装SSH服务
    在虚拟机上安装SSH服务。对于Ubuntu系统,可以使用以下命令:

sudo apt-get install openssh-server

安装完成后,启动SSH服务:

sudo service ssh start

使用以下命令查看虚拟机的IP地址:

ifconfig

在这里插入图片描述

  1. 如何使用
  • 在 FileZilla 上方输入 主机IP 、用户名(@前面的是用户名,如上图我的是xaye)、密码、端口号 22
  • 连接,右键 右边文件下载,即可下载到左边的当前目录下,点击左边的文件右键上传,即可上传到Ubuntu的当前显示目录下

结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值