Framework -- wsl编译安卓系统

Framework -- wsl编译安卓系统

最近在研究研究android系统源码,打算在编译一个room验证下自己的想法,在windows上折腾很久,终于算是在windows上把安卓系统编译出来了。

一、环境准备

1.1 硬件环境

要求  |  Android 开源项目  |  Android Open Source Project
1、windows11
2、至少16g内存

1.2 配置ubuntu 22.04

1、升级wsl 到wsl2
使用wsl -l -v 查看自己的wsl版本,如果是wsl1,请升级到wsl2

2、配置ubuntu虚拟内存
WSL2 默认可以使用的内存大小为主机的 80%, 打开 Windows 资源管理器, 地址栏输入 %UserProfile% 回车, 在该目录下创建一个文件, 名字为 .wslconfig , 写入内容示例如下 (我电脑 32GB 内存, 分给 WSL 内存 20GB, 另外设置交换分区 4GB)

[wsl2]
memory=20GB
swap=4GB
localhostForwarding=true

执行 wsl –shutdown 关闭 WSL, 再重新打开即可

1.3 下载源码

Framework – 下载Android系统源码 | 水沝淼 (laoyuyu.me)

1.4 软件环境准备

进入wsl,安装编译需要的软件

1、安装jdk

sudo apt-get update
sudo apt-get install openjdk-8-jdk

2、设置输出目录(可不用,默认是在out 目录下)

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

3、使用ccache 优化编译速度

sudo apt install ccache

# 临时环境变量
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache

# 永久变量
vim ~/.bashrc
# 添加
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache

ccache -M 50G

4、安装一些依赖库

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

二、配置编译环境

2.1 使用AOSP源代码目录下的../build/envsetup.sh脚本初始化环境:

android 13 版本,envsetup.sh文件时在build/make目录下了

如果找不到该文件,自行下载envsetup.sh,并将文件放到<AOSP>/build文件夹下
注意后面的lunch命令等都跟这一步有没有执行有关。如果没有执行后面会提示找不到lunch命令。

source build/make/envsetup.sh

2.2 选择编译目标

用lunch命令选择编译目标.额外的配置可以用参数传递。例如:

lunch aosp_arm-eng

所有的编译目标的格式都是:BUILD-BUILDTYPE,BUILD指的是指定特性的结合。其中BUILDTYPE是下面列出的其中一个:

Buildtype		用途
user 有限的权限;适合一般用户
userdebug 类似user模式,但有root权限和debug能力,适合debug
eng 带有额外的debug工具的开发配置。

build 号列表

这儿因为选取的是pixel 5,所以代号为redfi,对应的编译选项为:

lunch aosp_redfin-userdebug

当然也可以编译x86的镜像)

lunch aosp_x86
lunch aosp_x86_64-eng # x86_64
lauch aosp_arm # arm32
lauch aosp_arm64

输出结果为:

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=13
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.10.16.3-microsoft-standard-WSL2-x86_64-Ubuntu-22.04.1-LTS
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=TP1A.221005.003
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera device/generic/goldfish device/generic/goldfish-opengl
============================================

2.3 如果想在电脑上使用模拟器调试,需要编译模拟器镜像

使用 Android 模拟器虚拟设备  |  Android 开源项目  |  Android Open Source Project

lunch sdk_phone_x86_64 #64位
sdk_phone_x86 # 32 位

编译命令:https://source.android.com/docs/setup/build/building#build-the-code
其中mmake的缩写

完成上面的步骤后,就直接make好了,然后将日志写入到文件中,方便查看记录和排查错误。

make -j4 >> compile.log

编译成功后:

out/target/product/generic_x86_64 目录中可以看到编译出来的文件(这里我编译的是x86_64),可以看到下面这些关键文件:

android-info.txt
boot.img
cache.img
ramdisk.img
recovery.img
system.img
userdata.img

三、启动模拟器

启动模拟器,查看效果

cd aosp 
./prebuilts/android-emulator/linux-x86_64/emulator -system ./out/target/product/emulator_x86_64/system-qemu.img -data ./out/target/product/emulator_x86_64/userdata.img -ramdisk ./out/target/product/emulator_x86_64/ramdisk-qemu.img -vendor ./out/target/product/emulator_x86_64/vendor-qemu.img -verbose -show-kernel -gpu swiftshader_indirect

   Vector Landscape Vectors by Vecteezy
作者

AriaLyy

发布于

2022-12-08

许可协议

CC BY-NC-SA 4.0

评论