简述
基于Android系统作为一个庞大的开源项目,除了一些谷歌自带服务之外,其他所有代码均以AOSP(Android Open Source Project)的形式开源。对于框架开发者来说,熟悉AOSP是必不可少的知识。即使是普通开发者,为了优化代码或者是调用一些系统底层API,有时也需要参考底层源码。那么就需要搭配一个合适的源码阅读环境了。
WSL2环境装置 (Windows)
*CPU虚拟化是装置的前提环境,能够在使命管理器-功能-CPU检查是否显示虚拟化已启用
*wsl默许会装置到C盘,假如C盘容量不行300G,则自行查阅资料将其迁移到其他契合条件的硬盘
初度运用WSL能够运用wsl --install直接初始化默许装置Ubuntu体系,假如现已装置过其他发行版别,能够运用wsl --list --online + wsl --install -d挑选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分支测试通过
- 履行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//.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//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并不是一个正确的挑选,何况他的渲染并不好。
网友评论