Skip to content

AOSP代码环境配置

1.前情提要

记录一下一次AOSP编译过程,以下是编译前的基础设施

  • Windows10
  • Ubuntu 18.04 (安装在Hyper-V虚拟机中)
    • 12核 40g内存 1T硬盘
  • Pixel 3 手机
    • Android版本: 12
    • 版本号: SP1A.210812.016.C2
    • AOSP Tag: android-12.0.0_r34

提示

最低内存好像是16G 第一次配置32G 8线程编译 内存不够会经常出错


2.系统装好后配置ssh远程

安装ssh

sh
#配置代理
export ALL_PROXY="http://192.168.2.12:7890"
sudo apt update
sudo apt-get install ssh
service ssh start
service ssh status
#安装网络工具
sudo apt install net-tools
#查看本机IP
ifconfig

连接ssh

打开 Window终端(推荐下载Window商店的 Windows Terminal )
对于正在运行的虚拟机 可以
ctrl+alt+f2 切换桌面模式
ctrl+alt+f3 切换终端模式

ssh kpa@172.17.171.130

配置ssh免密登录

ps1
# windows电脑 查看公钥 
PS C:\Users\Kpa\.ssh> cat .\id_rsa.pub

#登录到linux
ssh kpa@172.17.171.130
cd ~
mkdir -p .ssh && echo "上面公钥内容" > .ssh/authorized_keys
chmod 700 .ssh && chmod 600 .ssh/authorized_keys

#配置链接信息(Windows)

打开 C:\Users\Kpa\.ssh\config 文件 加入一行 rsa私钥
Host 172.17.171.130
  HostName 172.17.171.130
  User kpa
  IdentityFile C:\Users\Kpa\.ssh\id_rsa

Hyper-V ubuntu 18.04 开启增强会话

  • 后续需要用AndroidStdio 开发 但是虚拟机有点卡顿,需要开启增强会话 原文教程
sh
wget https://raw.githubusercontent.com/Microsoft/linux-vm-tools/master/ubuntu/18.04/install.sh
sudo chmod +x install.sh
sudo ./install.sh

#如果您在安装脚本结束时收到错误,则还需要做一件事。使用您喜欢的编辑器打开/etc/xrdp/xrdp.ini(需要 sudo)并添加或编辑以下行:
port=vsock://-1:3389
use_vsock=false

#保持配置文件,关闭虚拟机,用powsershell 执行以下脚本(管理员权限)
#Set-VM -VMName <your_vm_name>  -EnhancedSessionTransportType HvSocket
Set-VM -VMName ubuntu18.04-android-aosp  -EnhancedSessionTransportType HvSocket

安装AOSP编译环境

sh
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

配置GIT

sh
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

下载Repo工具

sh
sudo apt install repo -y
#安装好后执行 repo -h 检查一下

配置科大源下载

sh
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo

#下载一个80G初始文件
wget --continue https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar
tar xf aosp-latest.tar
cd AOSP
repo sync

配置内存交换空间

配置了32G内存完全不够用,编译到一半 编译被kill

sh

sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

#配置永久交换
#/etc/fstab
#最后一行插入  进入后按i进入编辑模式 修改好按ESC :wq
sudo apt-get install vim
sudo vim /etc/fstab
/swapfile swap swap defaults 0 0

#配置交换规则
#/etc/sysctl.conf
sudo vim /etc/sysctl.conf
vm.min_free_kbytes=1500000 #大致1.5G 启用交换

#重启虚拟机

源代码调试阅读工具

  1. 配置Android Studio for Platform (只用来调试,远程桌面真是太卡了)
sh
#需要设置代理访问
wget https://dl.google.com/android/asfp/asfp-2023.2.1.20-linux.deb
cd ~
sudo dpkg -i asfp-2023.2.1.20-linux.deb
  1. 安装vscode
    安装Remote插件

驱动下载

下载驱动和官方刷机包 https://developers.google.cn/android/drivers

机型和代号关联https://source.android.google.cn/docs/setup/build/running?hl=zh-cn#selecting-device-build

Pixel3 代号:blueline 我现在使用的版本:android-12.0.0_r34 版本号:SP1A.210812.016.C2

sh
export ALL_PROXY="http://192.168.2.12:7890"

cd ~/aosp_driver

wget https://googledownloads.cn/dl/android/aosp/google_devices-blueline-sp1a.210812.016.c2-47172864.tgz
wget https://googledownloads.cn/dl/android/aosp/qcom-blueline-sp1a.210812.016.c2-7c544085.tgz

tar xf google_devices-blueline-sp1a.210812.016.c2-47172864.tgz
tar xf qcom-blueline-sp1a.210812.016.c2-7c544085.tgz

cp extract-google_devices-blueline.sh ../aosp
cp extract-qcom-blueline.sh ../aosp

cd ~/aosp

# 按D翻页 输入 I ACCEPT 同意协议
./extract-google_devices-blueline.sh
./extract-qcom-blueline.sh

编译

https://source.android.com/docs/setup/reference/repo?hl=zh-cn 查看repo命令用法

之前拉取的都是最新的aosp代码
切换到自己的分支 注意 aosp/.repo不能被删除,不然相当于重新下载了

sh
#查看分支列表
cd ~/aosp/.repo/manifests
git branch -a | cut -d / -f 3


cd ~/aosp/
#删除最新版本 
#不知道要不要删除
#rm -rfv *

#切换到指定分支
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.0.0_r34
repo sync

# 检查当前分支
cd ~/aosp/.repo/manifests
git branch -av


#加载shell环境变量 只有加载了变量后,对应的命令才可以使用。
source ./build/envsetup.sh 

#选择编译哪种版本。执行 **lunch** 命令,输出一个菜单,它列出了当前Android源码支持的所有设备代号和编译类型。输入相应数字选择编译类
lunch
#或者
lunch aosp_sailfish-user

# 设置编译线程 12代表12个线程同时编译
make -j12

#遇到错误后执行清理在重新编译
make clean
简要说明编译的类型:
  • user:限制所有权限,用于发布给用户使用的最终版本。
  • userdebug: 开放部分权限,允许root。
  • eng:工程师模式,开放所有权限并且有额外的调试工具。

启动模拟器

如果是虚拟机,需要在设置中开启硬件加速

sh
#安装kvm
sudo apt-get install cpu-checker
sudo chmod 777 -R /dev/kvm

#测试kvm
egrep -c '(vmx|svm)' /proc/cpuinfo
kvm-ok

cd ~/aosp
source ./build/envsetup.sh
lunch aosp_x86_64-eng
emulator

刷机

编译好之后下面开始刷机,以我的测试机器 Pixel 3 为例,依次执行下面的命令

sh

adb reboot fastboot

# 等待手机进入 fastboot 界面之后
fastboot flashall -w

# 刷机完成之后,执行 fastboot reboot 长期系统即可
fastboot reboot

提示

fastboot flashall -w命令如果在工程外面执行,要配置$ANDROID_PRODUCT_OUT目录环境

单独编译

sh
#设置环境
source ./build/envsetup.sh
lunch aosp_x86_64-eng

#单独编译framework
make framework-minus-apex

#使用make snod命令,重新生成 system.img,运行模拟器查看。
make snod

#清数据启动
emulator -wipe-data

其他相关编译命令

sh
# 部分编译
mmm frameworks/base # 编译指定目录且不编译依赖
mm #编译当前路径下的模块且不编译依赖
mmma frameworks/base # 编译指定目录且编译依赖

# 修改隐藏API:@hide,必须先执行以下命令
make update-api

# 将部分编译后的模块打包进img
make snod


# 创建分支
repo start YOURBRANCH --all

# 遍历并执行git命令
repo forall -c git xxx 

# 切换分支
repo forall -c git checkout default

# 丢弃分支
repo forall -c git git reset --hard HEAD

# 查看每个目录下的分支并且打印目录路径
repo forall -p -c git branch  # -p参数在遍历到每个仓库的时候先打印出当前的路径再执行git命令

# 查看分支
repo branch 

# add
# commit...

参考