wsl 编译 android AOSP 13 源码

安装WSL

  1. Windows 11 版本如下:
    image

  2. 首先在 microsoft store 里面安装ubuntu版本,我选择的是 ubuntu 22.04:
    image

  3. 安装完成后,打开"控制面板" --> "程序和功能" --> "启动或关闭 Windows功能",打开下面的选项:
    image

  4. 安装成功后
    image

迁移WSL到一个可用空间至少300G的磁盘

wsl 默认安装在C盘,因为Android AOSP 13 系统源码比较庞大,下载加编译需要100多G空间,而且文件系统必须要用linux的,必须在wsl unbutu系统内部的文件夹下载编译AOSP,不要下载到window 的文件系统里,比如下载到挂载点 /mnt/d 也就是对应window文件系统的D盘,下载是成功的,但是编译过程会因为跨了window和linux文件系统交叉,会编译出错。系统源码要下载到wsl 虚拟机内部空间中,所以需要做一个操作:把WSL迁移到一个空间至少有300G剩余的磁盘里

  1. 打开CMD,输入wsl -l -v查看wsl虚拟机的名称与状态。
    image
    了解到本机的WSL全称为Ubuntu-22.04,以下的操作都将围绕这个来进行。
    输入 wsl --shutdown 使其停止运行,再次使用wsl -l -v确保其处于stopped状态。
  2. 在E盘创建一个目录用来存放新的WSL,比如我创建了一个 E:\wsl_2204
  • 导出它的备份(比如命名为Ubuntu-22.04.tar)
wsl --export Ubuntu-22.04 E:\wsl_2204\Ubuntu-22.04.tar
  • 确定在此目录下可以看见备份Ubuntu.tar文件之后,注销原有的wsl
wsl --unregister Ubuntu-22.04
  • 将备份文件恢复到E:\wsl_2204中去
wsl --import Ubuntu-22.04 E:\wsl_2204 E:\wsl_2204\Ubuntu-22.04.tar
  1. 在CMD中,输入 Linux发行版名称.exe config --default-user 原本用户名
Ubuntu2204 config --default-user stlong

这时候再次打开WSL,你会发现一切都恢复正常了

更换国内源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

image

安装git,配置 email 与 name:

sudo apt-get install  git
git --version

image

配置 email 与 name(有效无效均可)

git config --global user.name YourName
git config --global user.email you@example.com

image

安装python3
Ubuntu 2204中python3默认已经安装,使用下列命令查看程序的安装位置,同时建立软连接

which python3

sudo ln -s /usr/bin/python3 /usr/bin/python

image
安装相关依赖

sudo apt install unzip zip libssl-dev  libffi-dev gnupg flex bison gperf build-essential  curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc 

sudo apt-get install openjdk-8-jdk

下载android源码

我选择的是 android-13.0.0_r35

  • 初始化repo环境:
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
cd bin
chmod +x repo
  • 设置环境变量:
vim ~/.bashrc
添加下面两行环境变量配置:
PATH=~/bin:$PATH
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
使环境变量生效:
source ~/.bashrc

  • 初始化源码目录(因为我不需要源码的 commit ,所以设置了 —depth=1):
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r35 --depth=1

成功如下图:
image

  • 同步源码
repo sync -j8

image

  • 编译
source build/envsetup.sh
lunch sdk_phone_x86_64
make -j8

image

  • 启动模拟器,验证编译成果
    wsl2由于是没有界面的unbutu 环境集成,不支持linux下的虚拟机kvm,并不能直接启动带界面的模拟器,我们需要用我们自己windows android sdk环境下的emulater.exe去加载编译产物img来进行调试。
  1. 在android studio中启动avd manager,创建一个和你编译指定版本一致的模拟器,这里是android 13, x86_64的镜像,起个名字如 wsl-android-13R5,下面要用到这个名字
    image
  2. 加载wsl2编译好的img到window模拟器中,一般调试只需要system.img和userdata.img
#擦除已有的avd数据
D:\AndroidSdk\emulator\emulator.exe   -avd wsl-android-13R5   -wipe-data
#模拟器重新加载android image
D:\AndroidSdk\emulator\emulator.exe  -avd wsl-android-13R5   -system "\\wsl$\Ubuntu-22.04\home\stlong\android13r35\out\target\product\emulator_x86_64\system.img" -data "\\wsl$\Ubuntu-22.04\home\stlong\android13r35\out\target\product\emulator_x86_64\userdata.img"

image

说明

  • -system指定system.img
  • -data指定userdata.img
  • -ramdisk指定ramdisk.img
  • -kernel指定内核映像

AOSP常用编译和查找命令

  • m :等同于 make ,进行一次完整编译。
  • mm:在当前目录下编译所有模块,但不包括依赖项。
  • mmm [目录]:编译指定目录下的所有模块,但不包括依赖项。只编译指定模块:mmm [dir/:target1,target2]
  • mma:在当前目录下编译所有模块,包括依赖项。
  • mmma [目录]:编译指定目录下的所有模块,包括依赖项。
  • make clean:删除整个 out/ 目录。
  • make clobber:用于清除编译缓存。
  • make snod:当重新编译部分模块完成后,快速生成img文件。
  • cgrep:对C/C++文件执行 grep (只搜寻C/C++文件类型,也包括.h类型)。
  • jgrep:只对Java文件执行 grep (只搜寻Java文件类型)。
  • resgrep:只匹配 /res 目录下的 xml 文件。
  • sepgrep:只查找sepolicy文件。

参考

posted @ 2023-08-25 14:39  suntl  阅读(1186)  评论(1编辑  收藏  举报