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 启用交换
#重启虚拟机
源代码调试阅读工具
- 配置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
- 安装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...
参考