由于忍受不了Ubuntu在4K下的Fractional Scaling
体会,最近将开发环境切换到了Windows11,并测验在Windows11 + WSL2上建立AOSP编译开发环境,并取得了以下体会
- 成功编译AOSP
- 源码导入Source Insight
- Cuttlefish成功运转编译镜像
- 源码导入宿主Android Studio并能够单步调试
本文标题看起来仅将Windows体系包括在内,假如在Mac中找到WSL2的平等替代(例如:Docker),或许远程服务器替代WSL2的效果,那么本文也会获益于其他体系
Windows11供给了嵌套虚拟化技术,假如是非Windows11不能成功运转Cuttlefish虚拟机,只能取得代码编译,阅览源码的体会,读者假如无需运转Cuttlefish或许具有Pixel系列真机,则能够运用Windows10体系
WSL2环境装置 (Windows)
*CPU虚拟化是装置的前提环境,能够在使命管理器-功能-CPU检查是否显示虚拟化已启用
*wsl默许会装置到C盘,假如C盘容量不行300G,则自行查阅资料将其迁移到其他契合条件的硬盘
初度运用WSL能够运用wsl --install
直接初始化默许装置Ubuntu体系,假如现已装置过其他发行版别,能够运用wsl --list --online
+ wsl --install -d <DistroName>
挑选Ubuntu发行版进行装置,装置完成后依照提示装备账号密码进入体系,如有其他问题请参阅官方文档
修正WSL内存和CPU核心
默许状况下Windows给WSL的装备并不是很高,咱们能够在C:/Users//目录下创立.wslconfig文件(注意无后缀名,window或许自己增加txt后缀,请注意区分),
[wsl2]
processors=8
memory=16GB
nestedVirtualization=true
上述核心数和内存大小请依照本机实际状况编写,可是依照Google要求,内存至少为16G,修正成功后在Windwos指令行履行wsl --shutdown
以生效,在重启后的Ubuntu指令行履行 free -h
和 cat /proc/cpuinfo| grep "processor"| wc -l
分别检查内存和cpu是否契合
修正软件源
装备软件源能够让你更快的下载编译所需的东西,在Ubuntu中运用下面的指令进行软件源的替换
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
然后运转 sudo apt-get update
更新索引以生效。
AOSP编译环境建立以及下载源码(Ubuntu)
装备环境
在Ubuntu中履行下述指令以装备建立环境
sudo apt-get install git-core gnupg flex bison 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
履行 sudo apt-get install repo
来装置Repo东西
履行sudo ln -s /usr/bin/python3 /usr/bin/python
将python链接到python3
装备账号
运用下面的指令以装备环境,读者对google的奉献会以以下账号信息提交,Google要求Email信息有必要是Google账号。
git config --global user.name Your_Name
git config --global user.email you@gmail.com
下载源码
由于网络限制,咱们假如直接下载Android源码会遇见各式各样的网络问题,即便是咱们有一个”通道”能够处理网络问题,可是由于Android源码太大,”通道”流量不行等也会阻止下载。所以咱们要利用好国内的镜像服务,运用镜像下载全量的数据,之后假如想及时的获取增量或许想要repo upload
提交源码,能够运用咱们的”通道”进行,假如没有”通道”那只能等候镜像站定时更新机制,并且不能提交源码。
咱们挑选运用Tuna镜像站下载AOSP Master源码,以下是具体步骤
- 履行
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
,由于repo东西在履行前会先去https://gerrit.googlesource.com/git-repo
下载更新,由于网络限制,所以将其替换成Tuna镜像会提高下载速率 - 创立存储目录,目录名随意
mkdir aosp && cd aosp
- 初始化库房
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
- 上述库房下载的是master分支,假如你想下载某一特定版别能够依据这份文档传递
-b
参数指定分支,例如repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r23
- !注意!挑选陈腐tag或许不包括下文所述东西链,例如源码导入东西AIDEGen在Android10以上源码才可运用,Cuttlefish或许在旧版别中还未支持等,本文在Master分支测试通过
- 上述库房下载的是master分支,假如你想下载某一特定版别能够依据这份文档传递
- 履行
repo sync -j4
,-j4代表了并发数,超越4镜像站会呈现503限制 - 拉取源码成功
上述操作仅仅是将镜像站的代码复制了下来,假如想要给AOSP提交奉献,或许获取今天内的改动,那么镜像站就不那么即时了,假如有这方面的要求能够挑选装备署理并设置官方源,这样就建立了和AOSP的交互环境
署理装备并设置官方源(可选)
以笔者运用的Clash为例,在WSL中装备署理分两种状况
- Windows装置Clash软件并在WSL中运用
- Windows发动软件并挑选支持局域网共享(ALL LAN)并记下软件设置的端口port(clash:7890)
- WSL中运用
cat /etc/resolv.conf
得到namespce的IP - WSL中运用
export ALL_PROXY="http://namespce_ip:port"
设置署理
- WSL中装置clash软件
- 发动软件,并获取端口
- 运用
export ALL_PROXY="http://localhost:port"
署理装备成功后理论上咱们就能够访问 https://android.googlesource.com/platform/manifest
了,咱们能够运用vim修正 .repo/manifests.git/config
文件,将其下的一切https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
替换成 https://android.googlesource.com/platform/manifest
然后再次履行repo sync
即可
构建源码(Ubuntu)
以下指令全部在aosp根目录下运转
设置环境
运用envsetup.sh脚本初始化环境:source build/envsetup.sh
该脚本为当时环境注入了东西,编译目录,编译产品等变量,关闭终端后会失效,之后介绍的一切指令都是履行
source build/envsetup.sh
指令之后,进入aosp目录之后,您应该一直履行一下该脚本
挑选方针
履行lunch
弹出菜单挑选合适的类型
-
假如您具有Pixel系列手机,请遵从官方文档挑选类型,并需要下载私有驱动到aosp目录(!重要!),请参阅文档
-
假如是跟随本教程运转虚拟机,请挑选
lunch aosp_cf_x86_64_phone-userdebug
类型,其间cf就代表Cuttlefish,说明本次构建的产品是专门给Cuttlefish来运用的
构建
履行m
指令构建Android,并等候成功构建,这里会十分慢十分慢…
运转
请确保您的电脑体系是Windwos11,假如非Windows11请疏忽本章,并关注下一篇文章源码开发检查环境建立相关
检查嵌套虚拟化(Ubuntu)
1.请检查 nestedVirtualization=true 是否存在WindowsC:/Users/<Username>/.wslconfig
文件中
2.在Ubuntu中运用sudo apt install cpu-checker
并运用kvm-ok
指令检查是否可用,假如不可用,或许WSL版别或许Windows版别不对。
构建WSL2内核以支持Cuttlefish(Ubuntu)
WSL2-Linux-Kernel是开源的,咱们能够很简单的获取他,下面以linux-msft-wsl-5.15.83.1为例,展现构建流程
- 装备源码构建环境
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc
- 创立目录并下载源码
mkdir ~/kernel_wsl && cd ~/kernel_wsl && wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.83.1.tar.gz
,其他版别请检查WSL2-Linux-Kernel Github Release - 解压并将目录切换到源码目录
tar -xvf linux-msft-wsl-5.15.83.1.tar.gz
并进入到解压后的目录cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.83.1/
- 运用微软的构建装备
cp Microsoft/config-wsl .config
- 履行
make menuconfig
微调参数-
修正Virtualization-> KVM for Intel/ KVM for AMD 两个全部点击M键将其编译成模块
-
修正Processor type and features -> Linux guest support -> KVM Guest support 点击Y选中
-
修正Device Drivers > VHOST drivers >vhost virtio-vsock driver 点击M将其编译成模块
-
运用左右键移动到Save,依照提示保存并最终Exit
-
- 履行
make -j8
编译内核 - 履行
sudo make modules_install
装置内核模块 - 将内核bzImage复制到C盘用户目录下和.wslconfig相同位置!别忘记修正!
cp arch/x86/boot/bzImage /mnt/c/Users/<username>/bzImage
- 在Windows中修正.wslconfig装备内核,最终.wslconfig如下所示,!别忘记修正!
[wsl2] processors=8 memory=16GB nestedVirtualization=true kernel=C:\\Users\\<username>\\bzImage
- 在Windows指令行履行
wsl --shutdown
并重启wsl - 在Ubuntu中挂载内核模块
sudo modprobe kvm
和sudo modprobe vhost_vsock
以及sudo modprobe kvm_intel
- 再次检查
kvm-ok
和lsmod
,会发现kvm不报错lsmod包括vhost_vsock和kvm即可
运转Cuttlefish
再次将目录切换到aosp目录下,履行source build/envsetup.sh
以及lunch aosp_cf_x86_64_phone-userdebug
,
然后履行launch_cvd --start_webrtc=true
即可敞开服务,检查日志在Windwos浏览器输入网址,即可操作Cuttlefish
ADB服务发现
由于Adb服务默许检测5555端口,而Cuttlefish敞开的服务纷歧定是5555,
1.Ubuntu Shell履行adb devices
取得port,然后将其转发到5555端口adb forward tcp:5555 tcp:6520
,Windows端即可发现服务
2.Ubuntu Shell履行adb devices
取得port, 然后在Windows端指定端口adb connect localhost:6520
总结
至此,咱们现已成功编译并运转了AOSP,凭借Cuttlefish服务,咱们运用宿主的浏览器即可操作虚拟机,并且能够运用adb衔接服务。限于篇幅,下一篇文章将讲述怎么运用AIDEGen将源码导入Windows端的Android Studio,由于Wslg的功能和体会并不能让咱们满意,所以将Android Studio跑在WSL2并不是一个正确的挑选,何况他的渲染并不好。