Android系统开发 使用windows系统的WSL编译Android10系统

这篇具有很好参考价值的文章主要介绍了Android系统开发 使用windows系统的WSL编译Android10系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版权声明

本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/17815468.html

本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

前言

  在自学framework的时候,最大的难题就是如何动手实践修改framework并且看到实践效果。但是Android系统是需要linux环境下编译的,我们一般的个人电脑都是windows系统,所以为了学习framework重装电脑为linux系统有点不太实际。个人也试过虚拟机,但是系统资源开销太大了,而且也非常繁琐。 最后发现了Windows系统下的WSL可以满足编译Android系统的需求,并且效果十分不错,也比虚拟机更加高效。

参考官方文档

https://source.android.google.cn/docs/setup/build/building?hl=zh-cn

硬件要求

电脑要求内存最少32G/ 硬盘空间600GB以上 (Aosp的代码量庞大), 请注意,这里说的32GB内存在wsl虚拟机里会打对折变成16GB,这刚好够用。

Windows系统相关准备

1.首先要求windows10以上,并且有微软商城。

Android系统开发 使用windows系统的WSL编译Android10系统

2.设置电脑相关配置

Android系统开发 使用windows系统的WSL编译Android10系统

3.在商城中搜索 linux 关键字, 选择下载ubn-18.04.6版本

Android系统开发 使用windows系统的WSL编译Android10系统

更新wsl内核

Linux 内核更新包会安装最新版本的 WSL 2 Linux 内核,以便在Windows 操作系统映像中运行 WSL。(若要运行 Microsoft Store 中的 WSL并更频警地推送更新请使用 wsl.exe --install 或 wsl.exe --update)

初始化linux系统

打开后创建账号与密码(这个密码很重要是sudo权限的密码,请牢记)

Android系统开发 使用windows系统的WSL编译Android10系统

迁移WSL到其他盘中

因为wsl是默认在c盘安装的,但是后续我们还需要拉取aosp,c盘空间无法承载。这里我们需要将wsl搬迁到其他硬盘中(个人是建议用一个1TB的移动硬盘,这样你就可以不受限制的在各种设备上进行编译)。

打开cmd命令行,如下步骤操作:

第一步,查看状态并且停止

Android系统开发 使用windows系统的WSL编译Android10系统
如果Running运行状态,关掉它(注意如果你的wsl正在运行,先将wsl关闭在输入下面的命令)

wsl --shutdown

第二步,搬迁位置

wsl --export Ubuntu-18.04 Z:\Ubuntu_WSL_18046\Ubuntu.tar   

第三步,注销原来的wsl

wsl --unregister Ubuntu-18.04

第四步,重新导入新位置的wsl

wsl --import Ubuntu-18.04 Z:\Ubuntu_WSL_18046 Z:\Ubuntu_WSL_18046\Ubuntu.tar   -->> 注意这里有2个路径

生成成功会在目录下多一个虚拟磁盘ext4.vhdx 文件

第五步,重新设置默认名称

Ubuntu1804 config --default-user zhou

编译环境

首先更新全部的软件

cd ~/ && sudo apt-get update

安装git和python

sudo apt install git python

配置repo环境

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
cp repo ~/bin

配置repo环境变量

vim   ~/.bashrc
#添加下面两行环境变量配置 !wq 保存退出
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
#环境变量生效
source ~/.bashrc

下载代码

创建目录并下载aosp代码

mkdir aosp && cd aosp
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r36
repo sync -c

编译Android 10

#安装依赖工具链

sudo apt-get install  libncurses5   libgl1-mesa-dev g++-multilib flex bison gperf build-essential  tofrodos python-markdown libxml2-utils xsltproc  dpkg-dev libsdl1.2-dev git-core gnupg flex bison gperf  zip curl zlib1g-dev gcc-multilib   libc6-dev-i386  x11proto-core-dev libx11-dev  libgl1-mesa-dev libxml2-utils xsltproc unzip m4 ccache

#进入源代码根目录,编译

source build/envsetup.sh

#选择合适版本的模拟器,我电脑是x86-64  CPU,
#需要编译一个流畅运行的x86-64架构模拟器系统,这里最好编译选择24. aosp_x86_64-eng ,
#编译arm架构的模拟器在WINDOW上运行会非常慢,不建议。

lunch 24
make -j10

通常编译需要3小时,编译成功如下图:

Android系统开发 使用windows系统的WSL编译Android10系统

编译成功后在out/下生成相应的img,如下图

Android系统开发 使用windows系统的WSL编译Android10系统

如果你要编译其他平台

可以通过只输入lunch 查看可以编译的各个平台

zhou@DESKTOP-9QKQBJG:~/aosp$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_blueline-userdebug
     4. aosp_bonito-userdebug
     5. aosp_car_arm-userdebug
     6. aosp_car_arm64-userdebug
     7. aosp_car_x86-userdebug
     8. aosp_car_x86_64-userdebug
     9. aosp_cf_arm64_phone-userdebug
     10. aosp_cf_x86_64_phone-userdebug
     11. aosp_cf_x86_auto-userdebug
     12. aosp_cf_x86_phone-userdebug
     13. aosp_cf_x86_tv-userdebug
     14. aosp_coral-userdebug
     15. aosp_crosshatch-userdebug
     16. aosp_flame-userdebug
     17. aosp_marlin-userdebug
     18. aosp_sailfish-userdebug
     19. aosp_sargo-userdebug
     20. aosp_taimen-userdebug
     21. aosp_walleye-userdebug
     22. aosp_walleye_test-userdebug
     23. aosp_x86-eng
     24. aosp_x86_64-eng
     25. beagle_x15-userdebug
     26. car_x86_64-userdebug
     27. fuchsia_arm64-eng
     28. fuchsia_x86_64-eng
     29. hikey-userdebug
     30. hikey64_only-userdebug
     31. hikey960-userdebug
     32. hikey960_tv-userdebug
     33. hikey_tv-userdebug
     34. m_e_arm-userdebug
     35. mini_emulator_arm64-userdebug
     36. mini_emulator_x86-userdebug
     37. mini_emulator_x86_64-userdebug
     38. poplar-eng
     39. poplar-user
     40. poplar-userdebug
     41. qemu_trusty_arm64-userdebug
     42. uml-userdebug

如果需要重编system.img文件

make snod  # 快速打包生成最新的system.img文件

启动模拟器,验证编译成果

编译完成系统后,我们需要一个模拟器去启动验证编译完成的系统。这里建议是直接使用wsl下aosp自带的模拟器。有些人可能会疑惑wsl下的linux是纯命令行的啊,怎么能支持图形下的模拟器呢?没错不用怀疑,wsl支持打开一个Android模拟器。

而且用aosp自带的模拟器还有一些好处,首先可以不需要去将编译后的庞大的代码拷贝到windows上了,其次直接拷贝到windows不等于Android studio上的模拟器能启动(而且经常错误启动到avd创建的模拟器上)。

首先需要设置下源

zhou@DESKTOP-9QKQBJG:~/aosp$ source build/envsetup.sh

然后,继续配置目标版本

zhou@DESKTOP-9QKQBJG:~/aosp$ lunch 24

接着,设置下要启动的系统路径

zhou@DESKTOP-9QKQBJG:~/aosp$ export ANDROID_PRODUCT_OUT=~/aosp/out/target/product/generic_x86_64/

然后启动模拟器

zhou@DESKTOP-9QKQBJG:~/aosp$ emulator

请注意!直接执行emulator是默认热启动(热启动会让一些修改看不到效果),如果你修改了framework重新编译了,请使用emulator -wipe-data ,直接擦除data数据,让模拟器重新冷启动加载系统。

如果出现需要权限:

zhou@DESKTOP-9QKQBJG:~/aosp$ emulator
emulator: WARNING: Couldn't find crash service executable /home/zhou/aosp/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: WARNING: system partition size adjusted to match image file (3083 MB > 800 MB)

emulator: ERROR: x86_64 emulation currently requires hardware acceleration!
Please ensure KVM is properly installed and usable.
CPU acceleration status: This user doesn't have permissions to use KVM (/dev/kvm)

给它权限,然后在执行emulator

zhou@DESKTOP-9QKQBJG:~/aosp$ sudo chmod -R 777 /dev/kvm

启动后的效果图

Android系统开发 使用windows系统的WSL编译Android10系统

 

AOSP常用编译和查找命令

与查找相关的命令

  • cgrep:对C/C++文件执行 grep (只搜寻C/C++文件类型,也包括.h类型)。
  • jgrep:只对Java文件执行 grep (只搜寻Java文件类型)。
  • resgrep:只匹配 /res 目录下的 xml 文件。
  • sepgrep:只查找sepolicy文件。

与重新编译相关的命令

  • m :等同于 make ,进行一次完整编译。
  • mm:在当前目录下编译所有模块,但不包括依赖项。
  • mmm [目录]:编译指定目录下的所有模块,但不包括依赖项。只编译指定模块:mmm [dir/:target1,target2]
  • mma:在当前目录下编译所有模块,包括依赖项。
  • mmma [目录]:编译指定目录下的所有模块,包括依赖项。
  • make snod:当重新编译部分模块完成后,快速生成img文件。
  • make update-api:更新API,在framework API改动后需执行该指令,Api记录在目录frameworks/base/api

与清除相关的命令

  • make clean:删除整个 out/ 目录,等价于rm -rf out/
  • make clobber:用于清除编译缓存,与make clean一样
  • make clean-<local_module> : 单独清除某个模块,例如 make clean-SystemUI ,就是删除 SystemUI 模块的编译产物和中间件
  • make dataclean :会删除out目录下对应板级目录中data分区相关文件
  • make installclean : 常用的编译命令,用于清除编译过程中生成的所有文件,包括编译生成的二进制文件、中间文件以及编译日志等. 为什么需要使用 make installclean ?在Andd编译时程中,编译过程会生成大量的临时文件和中间文件,这些文件不仅会占用磁盘空间,还可能导致编译过程出错,或者在编译新的代码时发生冲突。因此,为了保证编译的正常进行,我们需要定期清除这些临时文件和中间文件。会删除如下文件:
    out/target/product/<product_name>/data/nativetest
    out/target/product/<product_name>/data/nativetest64
    out/target/product/<product_name>/apusys.img
    out/target/product/<product_name>/cam_vpu1-verified.img
    out/target/product/<product_name>/cam_vpu1.img
    out/target/product/<product_name>/cam_vpu2-verified.img
    out/target/product/<product_name>/cam_vpu2.img
    out/target/product/<product_name>/cam_vpu3-verified.img
    out/target/product/<product_name>/cam_vpu3.img
    out/target/product/<product_name>/dpm-verified.img
    out/target/product/<product_name>/dpm.img
    out/target/product/<product_name>/mcupm.img
    out/target/product/<product_name>/spmfw-verified.img
    out/target/product/<product_name>/spmfw.img
    out/target/product/<product_name>/sspm.img
    out/target/product/<product_name>/tee-verified.img
    out/target/product/<product_name>/tee.img
    out/target/product/<product_name>/data
    out/target/product/<product_name>/obj/PACKAGING
    out/target/product/<product_name>/ramdisk
    out/target/product/<product_name>/debug_ramdisk
    out/target/product/<product_name>/vendor_ramdisk
    out/target/product/<product_name>/recovery
    out/target/product/<product_name>/root
    out/target/product/<product_name>/system
    out/target/product/<product_name>/system_dlkm
    out/target/product/<product_name>/vendor
    out/target/product/<product_name>/vendor_dlkm
    out/target/product/<product_name>/obj/FAKE
    out/target/product/<product_name>/odm_dlkm
    out/target/product/<product_name>/testcases
    out/target/product/<product_name>/symbols

替换ext4.vhdx的方式

ext4.vhdx就是linux的虚拟硬盘,我们下载完成aosp后,在其他电脑上如果需要实现系统编译,在下载一次aosp的海量代码,不太现实,可以通过替换ext4的方式实现

使用copy命令,或者在文件管理器里复制粘贴进行覆盖 (也可以是直接操作文件复制黏贴替换,但是要求对ext4.vhdx这个名称不做修改)

copy D:\Ubuntu-18.04-wsl-old\ext4.vhdx D:\Ubuntu-18.04-wsl\ext4.vhdx

编译中可能会出现问题

内存不足或者swap空间不足

Android系统开发 使用windows系统的WSL编译Android10系统

内存不足解决思路一

有可能真的是你的电脑内存不足够提供编译时所需的内存(最少16G只是建议,但是有可能16G都是不够使用的),这里建议直接增加内存条

内存不足解决思路二

配置内存

export MAVEN OPTS="-Xms8192m -Xmx8192m"

swap空间不足解决思路--增加空间

创建swap文件
安装操作系统分区时需创建swap分区
安装的时候如果没有创建分区,需要手动创建。

1. 查看内存情况

命令是free -h (h显示的是G, m 显示的是M) 或者free -m

2. 创建swap 分区

dd if=/dev/zero of=/tmp/swapfile1 bs=1024 count=10240000

其中 if=/dev/zero: 输入/dev/zero文件。/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件。就像使用临时交换文件.

of=/tmp/swapfile1: 输出到/tmp.swapfile1文件

bs=1024: 定义块大小为1024bytes,默认单位是bytes

count=10240000,总数大小为10240000个bs即10240000kb,换算的话是10G。

3. 指定分区类型为swap

mkswap /tmp/swapfile1

4. 设置swap 分区有效

swapon /tmp/swapfile1

5. 设置扩展的swap分区为自动挂载

vim /etc/fstab 进去之后自动挂载分区命令 编辑这个 /tmp/swapfile1 swap swap defaults 0 0也就是设置为这个命令之后保存就可以。

6. 测试添加是否成功

使用命令 free -h, 如果看到swap 分区中内存增加了,就表示成功啦。

如果刚才创建的想要关闭,删除创建的文件的话,就是用命令 swapoff /tmp/swapfile1, 就表示关闭这个分区了,然后删除的命令是 rm /tmp/swapfile1 。

python版本问题

如下问题是缺少python2.7版本

Android系统开发 使用windows系统的WSL编译Android10系统
解决
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 10

end文章来源地址https://www.toymoban.com/news/detail-746646.html

到了这里,关于Android系统开发 使用windows系统的WSL编译Android10系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Windows系统上使用WSL和Docker

    Windows 的 Linux 子系统(Windows Subsystem for Linux,简称 WSL)是一种 Windows 10 操作系统的特性,它允许用户在 Windows 系统中运行 Linux 应用程序。WSL 实际上是一个兼容层,可以在 Windows 系统上运行 Linux 应用程序,包括命令行工具、脚本和应用程序。WSL 提供了一个 Linux 内核 API 的实

    2024年01月17日
    浏览(42)
  • Windows 下使用 WSL 安装 Kali Linux 子系统

    使用 WSL 安装 Kali,方便快捷使用。 类似于 Cygwin 不过听说通过 WSL 安装的做了隔离,不能够访问硬件,也就无法进行硬件相关的渗透,具体有待核实。 环境:Windows 10 21H2 教育版 参考:

    2024年02月04日
    浏览(50)
  • Windows 自带的 Linux 子系统(WSL)安装与使用

    WSL官网安装教程: https://learn.microsoft.com/zh-cn/windows/wsl/install Windows 自带的Linux子系统,比用VM什么的香太多了。可以自己看官方教程,也可以以下步骤完成。 如果中间遇到我没遇到的问题百度,可以在评论区评论,或者自己百度其他教程解决。 搜索powerShell, 然后右键以管理

    2024年02月21日
    浏览(49)
  • 在Windows中使用WSL和VS Code搭建出友好的终端开发环境

             使用WSL(Windows Subsystem for Linux)这一适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置的开销。         VS Code(Visual Studio Code)是由微软开发且跨平台的

    2024年02月04日
    浏览(49)
  • windows10安装wsl2

    注意: 在安装wsl_update.msi前要重启一次 https://zhuanlan.zhihu.com/p/355276815

    2024年02月11日
    浏览(47)
  • 如何在 Windows 10 上安装 WSL

    第 1 步,启用 WSL 不管您想要使用哪个版本的 WSL,都首先需要启用它。为此,请以 管理员身份打开 PowerShell 工具并运行以下命令 。小心不要在命令中输入错误或遗漏任何字符: 第 2 步,启用“虚拟机平台” WSL 2 需要启用 Windows 10 的 “虚拟机平台” 特性。它独立于 Hyper-V,

    2024年02月04日
    浏览(31)
  • WSL2的安装与使用-Windows与Linux双系统的新选择

    既要使用Windows系统满足日常生活,协作办公,又要使用Linux系统满足开发工作,双系统来回重启好麻烦,双主机成本高,远程服务器好多限制,WSL也许是更好的解决方案,可以摆脱以上困扰 1. WSL是什么 WSL全称 Windows Subsystem for Linux ,适用于Linux的Windows子系统 WSL就是Windows系统

    2024年03月14日
    浏览(47)
  • 手把手教学基于Windows11的wsl2使用ubuntu子系统

    打开“控制面板“-“程序“-“程序和功能“-“启用或关闭windows功能“(侧边栏)-勾选“hyper-v“、“适用于Linux的Windows子系统“、“虚拟机平台“ 控制面板:开始菜单中搜索打开即可 选择“程序”,进入后选择“程序和功能” 选择“启用或关闭windows功能” 勾选“Hyper-V“

    2024年01月20日
    浏览(48)
  • windows10安装wsl2,centos内核

    检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】【程序】【程序和功能】【启用或关闭Windows功能】 二、下载Linux内核更新包 下载 双击安装 三、设置WSL2为默认版本 四、下载安

    2024年02月12日
    浏览(40)
  • windows10(家庭版)和windows11(家庭版)开启WSL2

    WSL 是什么? WSL的全称为Windows Subsystem for Linux。翻译成中文的意思就是“适用于Windows的Linux子系统”。WSL是一个在Windows 1011上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。 注:如果是windows10,需确保 Windows 10 版本号为 22H2 或更高,操作系统内部版本为 19045.2311 或

    2023年04月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包