15. WSL编译安卓系统源码

一、前言

安卓系统是完全开源的,你可以直接去其官方网站查看该系统的源码:Android Code Search

因此我们是完全可以修改该系统源码、并对其进行重新编译并安装的。

事实上国内很多系统都是基于该源码进行修改而来,比如近些年华为的鸿蒙系统,为了能够兼容安卓生态、运行安卓程序,其内部就嵌入了安卓系统。

但随着鸿蒙生态逐渐完善,或许很快其就会彻底将安卓系统源码从鸿蒙系统中移除,到那时鸿蒙系统才是真正和安卓划分界限的时候。

说远了,本文主要关注的是我们如何在本地也尝试编译一下安卓系统,并让其运行起来。

最佳的方式其实是安装了linux系统后再编译、运行,但我更习惯于使用windows系统,所以便想尝试一下使用windows系统下的wsl来编译安装系统。

事实上这确实是可行的方式,因为网上已经有相应的教程了。

而本文便是在这些文章的基础之上,更加详细的对整个编译、安装过程介绍一下。

二、环境搭建

想要编译安卓系统,首先你必须要有linux环境,windows系统下比较好用的其实就是官方推出的wsl,不会安装的可以查看文章:

  1. Linux系统入门
  2. WSL更改安装位置

第一篇为安装wsl的教程,第二篇为将wsl安装位置更改的教程,因为安卓源码大概有100G左右,编译需要50G左右,所以最好你的硬盘有200G左右,不然可能会导致空间不足而出错。

然后你需要配置你的git工具,默认ubuntu自带了该工具,如果没有你就需要自己手动安装。

首先更新一下apt数据、并更新现有软件:

sudo apt update
sudo apt upgrade

安装git工具:

sudo apt install git

配置git用户数据:

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

注意上面两条命令的最后YourNameyou@example.com要换为你自己的用户名和邮箱。

然后是安装python2,默认情况下ubuntu-22.04已经安装了python3,但本文将要编译的安卓系统版本为10,它使用的是python2。

sudo apt install python2
which python2

第二条命令会打印出当前python2的安装位置:

/usr/bin/python2

所以创建链接时就是下面这个命令:

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

该命令的目的是为python2程序创建一个软连接,以后我们可以直接使用python这个名字调用python3程序,因为安卓系统编译的时候默认使用的python这个名,所以这里需要为其创建软链接。

然后我们还需要安装编译安卓系统所需要的依赖项:

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 libncurses5

以及java的jdk:

sudo apt install openjdk-8-jdk

至此我们就完成了安卓源码编译的环境搭建流程。

三、源码下载与编译

由于安卓系统官方源码放在国外,国内很难下载,所以我们需要使用镜像源。

为了方便说明,我们首先回到当前用户的家目录:

cd ~

注意,不要使用root用户,否则最后编译大概率会失败的。

然后执行下面的命令:

mkdir bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > bin/repo
cd bin
chmod +x repo

上面命令的作用是从清华源下载了一个repo工具,并将其设置为可执行,放在了bin目录下。

repo是多个git仓库的管理工具,后面我们便是通过这个工具拉取指定版本安卓系统源码的。

然后回到家目录,编辑.bashrc文件:

cd ~
vim .bashrc

将下面两条语句放在该文件的最后:

PATH=~/bin:$PATH
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

然后保存、退出,并重新应用该文件,使其生效:

source ~/.bashrc

这两个命令的作用是将前面下载的repo工具放在PATH变量中,这样我们就可以在任何地方使用命令repo了,并同时设置了repo的源,也就是换为了清华源。

然后创建一个目录用来存放安装源码:

mkdir aosp
cd aosp

进入该目录后,就可以初始化源码:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r40 --depth=1

这里使用的是android-10.0.0_r40版本,完成初始化后,执行命令拉取代码:

repo sync -j8

最后的j8代表8个工作线程,因为我的电脑是4核8线程,如果你的电脑配置更好,那么可以适当的增加工作线程,提高其拉取速度。

我总共耗费了大概16分钟完成源码拉取。

然后就可以执行编译步骤了:

source build/envsetup.sh
lunch sdk_phone_x86_64
make -j8

其中第一个命令用于应用安装构建时所需要的环境变量,第二个命令用于设置你想要构建的平台架构,第三个命令是正式开始构建。

这个过程大概要持续数个小时,电脑性能好的话就会快一点,性能差就会慢一点。

如果出现xxx: No such file or directory这样的错误,那么一般就是有库没有装上,自己搜一搜、装上后再运行make -j8即可。

而如果是莫名出现这样的错误:

ninja: build stopped: subcommand failed.

这大概率就是你的wsl分配的内存不够用,可以先推出wsl、然后运行命令:

wsl -t Ubuntu
wsl --shutdown

关闭该子系统,然后进入windows系统当前用户目录:

C:\Users\it_yu

创建文件.wslconfig,然后复制下面的内容进入该文件:

[wsl2]
memory=16GB
swap=16GB
localhostForwarding=true

这就是在分配内存,保存后退出,然后重新启动wsl再编译一般就可以了。

四、运行安卓系统

wsl2暂时无法直接运行安卓系统,所以只能通过模拟器实现。

首先你需要安装好Android Studio环境,创建一个相应版本的虚拟机:

image-20240423223711629

然后选择一个手机型号:

image-20240423223751935

唯一需要注意的就是这里,要选择x86_64、并且为android 10:

image-20240423223426466

最后还可以给它改个名字:

image-20240423223927321

点击完成后,找到android SDK的安装位置,使用emulator工具擦除该系统的数据,比如在我的系统中,它的安装位置为:

C:\Users\it_yu\AppData\Local\Android\Sdk\emulator

在终端中进入该路径,运行命令:

.\emulator.exe -avd wsl2_android_x86_64 -wipe-data

该命令清除后会启动安卓系统,可以直接按Ctrl+C终止。

为了方便使用,你可以将前面编译好的安卓系统镜像:system.img以及userdata.img复制到D盘根目录。

其编译后的镜像在下面位置:

yu@HUAWEL:~/aosp/out/target/product/generic$ cp system.img /mnt/d
yu@HUAWEL:~/aosp/out/target/product/generic$ cp userdata.img /mnt/d/

最后,执行命令使用我们自行编译好的镜像:

.\emulator.exe -avd wsl2_android_x86_64 -system "D:\system.img" -data "D:\userdata.img"

效果如下:

image-20240423225735828

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux