Windows 10 下安装Ubuntu子系统 编译Android源码问题记录

一、Ubuntu子系统安装

1、启用WSL

Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

  • 打开控制面板,查看方式为类别;
  • 点开程序,点击启用或关闭windows功能;
  • 将虚拟机平台和适用于Linux的windows子系统勾选,此时若不需要使用WSL2 可直接重启 看步骤3,否则继续看 步骤2
    在这里插入图片描述
    在这里插入图片描述

2、升级WSL到WSL2

此时默认wsl版本为1需要升级到wsl2
打开Windows PowerShell 输入命令
将WSL 2 设置为默认版本

wsl --set-default-version 2

此时会提示缺少wsl相关文件,需要下载手动升级
下载链接:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
下载后直接运行 一直下一步安装完成即可
然后继续输入

wsl --set-default-version 2

稍等片刻即能转换为wsl2,此时需要重启电脑才能生效

3、安装Ubuntu

两种方式安装方式

1、直接在Microsoft Store商店搜索Ubuntu进行安装,默认安装在c盘建议预留120G空间

在这里插入图片描述

2、下载发行版安装包手动进行安装

下载链接: https://docs.microsoft.com/zh-cn/windows/wsl/install-manual
选择需要安装的版本,进行下载安装
在这里插入图片描述

我这里下载的是Ubuntu-20.04

下载后是一个.AppxBundle格式的文件
在这里插入图片描述
解压得到
在这里插入图片描述
再对Ubuntu_2004.2021.825.0_x64.appx进行解压得到
在这里插入图片描述
将install.tar.gz和Ubuntu.exe文件复制到你想要安装的路径下
比如我这里是E:\WSL\Linux\Ubuntu-20.04
用管理员打开PowerShell 进到当前目录使用命令

ubuntu.exe

如果报错说 命令无法执行但是存在文件 会让你执行下面的命令

./ubuntu.exe

执行完后 即可安装成功进入Ubuntu环境 新建用户 让你输入用户名和密码
在这里插入图片描述
此时可以看到已经在自定义文件下创建了硬盘映像文件,安装成功
在这里插入图片描述

二、搭建环境为下载Android源码做准备

1、更换源替换为国内镜像

将系统源文件复制备用

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

此时需要使用命令用vi编辑器打开源文件,进行修改

sudo vi /etc/apt/sources.list

打开文件后 直接键盘输入 dG 清除所有内容
更换为以下地址:

# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

输入完毕后按Esc 退出编辑 输入:wq 即可保存并退出vi

注意 有的版本可能此时无法使用复制粘贴快捷键,毕竟这么多内容 纯手打有点受不了
此时可以使用命令查看

vim --version | grep clipboard

情况一
如果结果里你找到加号开头的+clipboard, 恭喜你,你的vim没问题,是你姿势问题。
例如我需要复制vim --version | grep clipboard这一段代码到vimrc文件中使用,

选中需要复制内容进行复制,

情况二
如果找到的是负号开头的-clipboard,说明你的vim不支持系统剪切板,需要先重新安装vim,Linux系统,
先同步源的索引,才能获取到最新的软件包

apt-get update

然后下载 剪切板 包

sudo apt install vim-gtk

此时可以使用复制粘贴了。把上面步骤走完
修改 sources.list后再使用命令更新一下信息

apt-get update

2、下载Python 并配置环境变量

下载Python2.7

sudo apt-get install python2.7

按提示操作,确认好之后,等一下,安装好之后,关键的步骤来了,我们需要把python命令软链接到2.7

cd /usr/bin
sudo ln -s python2.7 python

此时输入python 即可进入到python解释器中

三、下载Android源码相关配置

1、安装并配置repo

先进入根目录环境

cd ~/

此时应该是这样:~$
在这里插入图片描述
创建bin文件,配置环境变量,链接repo,设置repo操作权限,配置repo国内源–清华源

mkdir bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
vi .bashrc                  #这一步打开配置文件配置 源

打开之后长这样,在最后加一行
在这里插入图片描述

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

:wq退出
使用命令更新一下使其生效

source .bashrc

2、配置git

git config --global user.name xxx(你的git用户名)
git config --global user.email xxx(你的git邮箱)

3、初始化仓库文件为拉取代码做准备

创建一个文件夹用于存放 源码 我这里创建了 aosp/android12

mkdir aosp/android12
cd aosp/android12/

选择版本分支进行初始化repo仓库
我这里选择的是Android12 r2
你可以在版本分支查看对应的分支

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r2 

4、拉取Android源码

上一步执行完后即可使用命令拉取Android源码

repo sync -j8         ##j8代表 开启8线程进行同步

同步完后
大概半小时同步完成,正常完成 会有repo sync finished successfully提示

Android源码编译

1、安装jdk环境

sudo apt-get install openjdk-8-jdk

2、如果Ubuntu版本是14+,需要安装依赖包

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

3、源码整编

整编就是编译整个Android 源码,整编主要有三个步骤,下面分别就行介绍。

1、初始化环境

在AOSP的根目录,输入如下的命令:

source build/envsetup.sh
make clobber

使用 build目录中的envsetup.sh 脚本初始化环境,这个脚本会引入其他的执行脚本。make clobber用于清除缓存。

2、 选择编译目标

输入命令:

lunch

lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译目标。
会有以下信息输出:

You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. aosp_car_arm-userdebug
     8. aosp_car_arm64-userdebug
     9. aosp_car_x86-userdebug
     10. aosp_car_x86_64-userdebug
     11. mini_emulator_arm64-userdebug
     12. m_e_arm-userdebug
     13. m_e_mips64-eng
     14. m_e_mips-userdebug
     15. mini_emulator_x86_64-userdebug
     16. mini_emulator_x86-userdebug
     17. uml-userdebug
     18. aosp_cf_x86_auto-userdebug
     19. aosp_cf_x86_phone-userdebug
     20. aosp_cf_x86_tablet-userdebug
     21. aosp_cf_x86_tablet_3g-userdebug
     22. aosp_cf_x86_tv-userdebug
     23. aosp_cf_x86_wear-userdebug
     24. aosp_cf_x86_64_auto-userdebug
     25. aosp_cf_x86_64_phone-userdebug
     26. aosp_cf_x86_64_tablet-userdebug
     27. aosp_cf_x86_64_tablet_3g-userdebug
     28. aosp_cf_x86_64_tv-userdebug
     29. aosp_cf_x86_64_wear-userdebug
     30. cf_x86_auto-userdebug
     31. cf_x86_phone-userdebug
     32. cf_x86_tablet-userdebug
     33. cf_x86_tablet_3g-userdebug
     34. cf_x86_tv-userdebug
     35. cf_x86_wear-userdebug
     36. cf_x86_64_auto-userdebug
     37. cf_x86_64_phone-userdebug
     38. cf_x86_64_tablet-userdebug
     39. cf_x86_64_tablet_3g-userdebug
     40. cf_x86_64_tv-userdebug
     41. cf_x86_64_wear-userdebug
     42. aosp_marlin-userdebug
     43. aosp_marlin_svelte-userdebug
     44. aosp_sailfish-userdebug
     45. aosp_walleye-userdebug
     46. aosp_walleye_test-userdebug
     47. aosp_taimen-userdebug
     48. hikey-userdebug
     49. hikey64_only-userdebug
     50. hikey960-userdebug

Which would you like? [aosp_arm-eng]

意思就是要你选择编译目标的格式,编译目标的格式组成为BUILD-BUILDTYPE,比如aosp_arm-eng的BUILD为aosp_arm,BUILDTYPE为eng。

其中BUILD表示编译出的镜像可以运行在什么环境,aosp代表Android开源项目,arm表示系统是运行在arm架构的处理器上。
更多参考官方文档。
BUILDTYPE 指的是编译类型,有以下三种:

user:用来正式发布到市场的版本,权限受限,如没有 root 权限,不能 dedug,adb默认处于停用状态。
userdebug:在user版本的基础上开放了 root 权限和 debug 权限,adb默认处于启用状态。一般用于调试真机。
eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置。一般用于模拟器。
如果你没有Nexus /ˈneksəs/ 设备,只想编译完后运行在模拟器查看,那么BUILD可以选择aosp_x86,BUILDTYPE选择eng,Which would you like? [aosp_arm-eng]后面直接输入对应序号5就可以。(我这个版本实际上是39)

3、 开始编译

通过-jN参数来设置编译的并行任务数,以提高编译速度,在此前我的CPU核心数为6,这里N值最好选在6到12之间,这里我们设置6个并行任务进行编译:

make -j6

整编成功后会打印类似如下内容:
在这里插入图片描述
由于采用的是虚拟机整编,编译速度会慢一些,这里花费了2小时5分钟.
最终会在 out/target/product/generic_x86/目录生成了三个重要的镜像文件: system.img、userdata.img、ramdisk.img。大概介绍着三个镜像文件:
system.img:系统镜像,里面包含了Android系统主要的目录和文件,通过init.c进行解析并mount挂载到/system目录下。
userdata.img:用户镜像,是Android系统中存放用户数据的,通过init.c进行解析并mount挂载到/data目录下。
ramdisk.img:根文件系统镜像,包含一些启动Android系统的重要文件,比如init.rc。
运行模拟器
在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:

source build/envsetup.sh
lunch aosp_x86-eng
emulator

如果是在编译完后运行虚拟机,由于之前已经执行过source和lunch命令了,可以直接运行:

emulator

如果不出意外就会启动模拟器,如果出现报错,网上也有很多的解决方案。

4、源码单编

比如我们要编译系统的Settings应用模块,
在AOSP根目录执行:

source build/envsetup.sh
lunch aosp_x86-eng

进入Settings的目录:

cd packages/apps/Settings

mm编译当前目录下的模块,不编译依赖模块。

mm

编译成功后会有提示生成文件的存放路径。

在这里插入图片描述
除了Settings.odex文件,还会在out/target/product/generic_x86/system/priv-app/Settings目录下生成Settings.apk。

此外还有以下命令可以进行单编:

mmm:编译指定目录下的模块,不编译它所依赖的其它模块。
mma:编译当前目录下的模块及其依赖项。
mmma:编译指定路径下所有模块,并且包含依赖。
如果你修改了源码,想查看生成的APK文件,有两种方式:

通过adb push或者adb install 来安装APK。
使用make snod命令,重新生成 system.img,运行模拟器查看。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值