1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Windows 10 下安装Ubuntu子系统 编译Android源码问题记录

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

时间:2022-04-08 04:08:55

相关推荐

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./wslblob/wsl_update_x64.msi

下载后直接运行 一直下一步安装完成即可

然后继续输入

wsl --set-default-version 2

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

3、安装Ubuntu

两种方式安装方式

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

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

下载链接: /zh-cn/windows/wsl/install-manual

选择需要安装的版本,进行下载安装

我这里下载的是Ubuntu-20.04

下载后是一个.AppxBundle格式的文件

解压得到

再对Ubuntu_..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./ubuntu/ focal main restricted universe multiverse# deb-src https://mirrors./ubuntu/ focal main restricted universe multiversedeb https://mirrors./ubuntu/ focal-security main restricted universe multiverse# deb-src https://mirrors./ubuntu/ focal-security main restricted universe multiversedeb https://mirrors./ubuntu/ focal-updates main restricted universe multiverse# deb-src https://mirrors./ubuntu/ focal-updates main restricted universe multiversedeb https://mirrors./ubuntu/ focal-backports main restricted universe multiverse# deb-src https://mirrors./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/binsudo ln -s python2.7 python

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

三、下载Android源码相关配置

1、安装并配置repo

先进入根目录环境

cd ~/

此时应该是这样:~$

创建bin文件,配置环境变量,链接repo,设置repo操作权限,配置repo国内源–清华源

mkdir binPATH=~/bin:$PATHcurl https://mirrors.tuna./git/git-repo -o ~/bin/repochmod a+x ~/bin/repovi .bashrc #这一步打开配置文件配置 源

打开之后长这样,在最后加一行

export REPO_URL='https://mirrors.tuna./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/android12cd aosp/android12/

选择版本分支进行初始化repo仓库

我这里选择的是Android12 r2

你可以在版本分支查看对应的分支

repo init -u https://mirrors.tuna./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.shmake clobber

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

2、 选择编译目标

输入命令:

lunch

lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译目标。

会有以下信息输出:

You're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. aosp_car_arm-userdebug8. aosp_car_arm64-userdebug9. aosp_car_x86-userdebug10. aosp_car_x86_64-userdebug11. mini_emulator_arm64-userdebug12. m_e_arm-userdebug13. m_e_mips64-eng14. m_e_mips-userdebug15. mini_emulator_x86_64-userdebug16. mini_emulator_x86-userdebug17. uml-userdebug18. aosp_cf_x86_auto-userdebug19. aosp_cf_x86_phone-userdebug20. aosp_cf_x86_tablet-userdebug21. aosp_cf_x86_tablet_3g-userdebug22. aosp_cf_x86_tv-userdebug23. aosp_cf_x86_wear-userdebug24. aosp_cf_x86_64_auto-userdebug25. aosp_cf_x86_64_phone-userdebug26. aosp_cf_x86_64_tablet-userdebug27. aosp_cf_x86_64_tablet_3g-userdebug28. aosp_cf_x86_64_tv-userdebug29. aosp_cf_x86_64_wear-userdebug30. cf_x86_auto-userdebug31. cf_x86_phone-userdebug32. cf_x86_tablet-userdebug33. cf_x86_tablet_3g-userdebug34. cf_x86_tv-userdebug35. cf_x86_wear-userdebug36. cf_x86_64_auto-userdebug37. cf_x86_64_phone-userdebug38. cf_x86_64_tablet-userdebug39. cf_x86_64_tablet_3g-userdebug40. cf_x86_64_tv-userdebug41. cf_x86_64_wear-userdebug42. aosp_marlin-userdebug43. aosp_marlin_svelte-userdebug44. aosp_sailfish-userdebug45. aosp_walleye-userdebug46. aosp_walleye_test-userdebug47. aosp_taimen-userdebug48. hikey-userdebug49. hikey64_only-userdebug50. hikey960-userdebugWhich 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.shlunch aosp_x86-engemulator

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

emulator

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

4、源码单编

比如我们要编译系统的Settings应用模块,

在AOSP根目录执行:

source build/envsetup.shlunch 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,运行模拟器查看。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。