由于忍受不了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发行版进行装置,装置完成后依照提示装备账号密码进入体系,如有其他问题请参阅官方文档

写给Windows用户的AOSP构建开发环境配置指南

修正WSL内存和CPU核心

默许状况下Windows给WSL的装备并不是很高,咱们能够在C:/Users//目录下创立.wslconfig文件(注意无后缀名,window或许自己增加txt后缀,请注意区分),

 [wsl2]
 processors=8
 memory=16GB
 nestedVirtualization=true

上述核心数和内存大小请依照本机实际状况编写,可是依照Google要求,内存至少为16G,修正成功后在Windwos指令行履行wsl --shutdown以生效,在重启后的Ubuntu指令行履行 free -hcat /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源码,以下是具体步骤

  1. 履行export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo',由于repo东西在履行前会先去https://gerrit.googlesource.com/git-repo下载更新,由于网络限制,所以将其替换成Tuna镜像会提高下载速率
  2. 创立存储目录,目录名随意mkdir aosp && cd aosp
  3. 初始化库房repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
    1. 上述库房下载的是master分支,假如你想下载某一特定版别能够依据这份文档传递-b参数指定分支,例如repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r23
    2. !注意!挑选陈腐tag或许不包括下文所述东西链,例如源码导入东西AIDEGen在Android10以上源码才可运用,Cuttlefish或许在旧版别中还未支持等,本文在Master分支测试通过
  4. 履行repo sync -j4,-j4代表了并发数,超越4镜像站会呈现503限制
  5. 拉取源码成功

上述操作仅仅是将镜像站的代码复制了下来,假如想要给AOSP提交奉献,或许获取今天内的改动,那么镜像站就不那么即时了,假如有这方面的要求能够挑选装备署理并设置官方源,这样就建立了和AOSP的交互环境

署理装备并设置官方源(可选)

以笔者运用的Clash为例,在WSL中装备署理分两种状况

  1. Windows装置Clash软件并在WSL中运用
    1. Windows发动软件并挑选支持局域网共享(ALL LAN)并记下软件设置的端口port(clash:7890)
    2. WSL中运用cat /etc/resolv.conf得到namespce的IP
    3. WSL中运用export ALL_PROXY="http://namespce_ip:port"设置署理
  2. WSL中装置clash软件
    1. 发动软件,并获取端口
    2. 运用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为例,展现构建流程

  1. 装备源码构建环境sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev bc
  2. 创立目录并下载源码 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
  3. 解压并将目录切换到源码目录tar -xvf linux-msft-wsl-5.15.83.1.tar.gz 并进入到解压后的目录cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.83.1/
  4. 运用微软的构建装备cp Microsoft/config-wsl .config
  5. 履行make menuconfig微调参数
    1. 修正Virtualization-> KVM for Intel/ KVM for AMD 两个全部点击M键将其编译成模块

      写给Windows用户的AOSP构建开发环境配置指南

    2. 修正Processor type and features -> Linux guest support -> KVM Guest support 点击Y选中

      写给Windows用户的AOSP构建开发环境配置指南

    3. 修正Device Drivers > VHOST drivers >vhost virtio-vsock driver 点击M将其编译成模块

      写给Windows用户的AOSP构建开发环境配置指南

    4. 运用左右键移动到Save,依照提示保存并最终Exit

  6. 履行make -j8编译内核
  7. 履行sudo make modules_install装置内核模块
  8. 将内核bzImage复制到C盘用户目录下和.wslconfig相同位置!别忘记修正! cp arch/x86/boot/bzImage /mnt/c/Users/<username>/bzImage
  9. 在Windows中修正.wslconfig装备内核,最终.wslconfig如下所示,!别忘记修正!
    [wsl2]
    processors=8
    memory=16GB
    nestedVirtualization=true
    kernel=C:\\Users\\<username>\\bzImage
    
  10. 在Windows指令行履行 wsl --shutdown并重启wsl
  11. 在Ubuntu中挂载内核模块sudo modprobe kvmsudo modprobe vhost_vsock以及sudo modprobe kvm_intel
  12. 再次检查kvm-oklsmod,会发现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

写给Windows用户的AOSP构建开发环境配置指南

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

写给Windows用户的AOSP构建开发环境配置指南

写给Windows用户的AOSP构建开发环境配置指南

写给Windows用户的AOSP构建开发环境配置指南

总结

至此,咱们现已成功编译并运转了AOSP,凭借Cuttlefish服务,咱们运用宿主的浏览器即可操作虚拟机,并且能够运用adb衔接服务。限于篇幅,下一篇文章将讲述怎么运用AIDEGen将源码导入Windows端的Android Studio,由于Wslg的功能和体会并不能让咱们满意,所以将Android Studio跑在WSL2并不是一个正确的挑选,何况他的渲染并不好。