Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
此时默认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,此时需要重启电脑才能生效
下载链接: 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环境 新建用户 让你输入用户名和密码
此时可以看到已经在自定义文件下创建了硬盘映像文件,安装成功
将系统源文件复制备用
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
下载Python2.7
sudo apt-get install python2.7
按提示操作,确认好之后,等一下,安装好之后,关键的步骤来了,我们需要把python命令软链接到2.7
cd /usr/bin
sudo ln -s python2.7 python
此时输入python 即可进入到python解释器中
先进入根目录环境
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
git config --global user.name xxx(你的git用户名)
git config --global user.email xxx(你的git邮箱)
创建一个文件夹用于存放 源码 我这里创建了 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
上一步执行完后即可使用命令拉取Android源码
repo sync -j8 ##j8代表 开启8线程进行同步
同步完后
大概半小时同步完成,正常完成 会有repo sync finished successfully提示
sudo apt-get install openjdk-8-jdk
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
整编就是编译整个Android 源码,整编主要有三个步骤,下面分别就行介绍。
在AOSP的根目录,输入如下的命令:
source build/envsetup.sh
make clobber
使用 build目录中的envsetup.sh 脚本初始化环境,这个脚本会引入其他的执行脚本。make clobber用于清除缓存。
输入命令:
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)
通过-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
如果不出意外就会启动模拟器,如果出现报错,网上也有很多的解决方案。
比如我们要编译系统的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,运行模拟器查看。