听说win10合入了Linux作为一个子系统,起初只以为是类似虚拟机的实现机制,想必对性能的提高也很有限。但是稍微了解却发现是并不是虚拟机的那种机制,而是可以完全发挥Host机器的性能,这无疑是用虚拟机进行学习Linux平台上的东西的完美的替代品。但仍然担心这个子系统并不如我所期望的那样完美,所以尝试着编译一下Android这个系统吧,如果能够编译Android成功,那么基本上也可以作为完美的替代品。
由于之前对于win10各种各样传言的不喜欢,一直没有升级win10,生怕面临余生被强制更新所统治的恐怖。然而公司已经普遍采用win10了,用了一段发现有些地方的确是慢,但并没有达到传说中的无法忍受的程度,更何况,还有Linux子系统,所以下定决心,将自己的win7升级为win10.
这个小节稍微提一下如何最大可能“纯净的”升级win10。
必备工具:
(1)windows10系统镜像。
(2)一个U盘(容量随意)。
这里要注意,有人会选择GHOST镜像,但我一向是对GHOST镜像敬而远之。GHOST镜像会集成很多用不上的东西,各种自以为是的对系统配置的修改,还有各种乱七八糟的预装应用。不过现在想找到“纯洁”的windows10安装镜像也很难了,我也只找到了差强人意的iso镜像。不过好歹是个安装盘。
一句话概括,用老毛桃U盘启动工具将U盘制作成一个WInPE的启动U盘,之后在WinPE里面装载镜像,进行安装。建议最好格式化C盘,提前备份好一切:桌面,我的文档,C盘目录其他应用等等。
这里注意一下:制作U盘启动的时候,会提示你是否要加入UEFI引导,不要选。我一开始想试一下,结果就是一直停在了99%等了N久N久,然后强制关闭后U盘变砖了。想必这个UEFI并不是支持所有的U盘,而我们的场景也没有这个需要,还是别给自己引入额外的问题了。之后是用分区助手的分区表恢复才弄好的。
装好以后,激活,就不说了。不纯洁的镜像大概也会预装数个应用,先全删了。后面有需要再装。预装的应用由于版本的问题,一般都是需要更新的。而且鬼知道装到了哪里,索性先全卸了。
win10装好了,其他的细节就不多说了。
有什么问题可以留言询问,后面有空了我再完善细节。
这里我一开始是搜索CSDN和百度上的教程,但搜到的教程都已经过期了,很多步骤都不对。这里我的建议是:
我的教程也会过期,所以这里直接给出官方地址。
https://docs.microsoft.com/en-us/windows/wsl/install-manual
WSL:Windows Subsystem for Linux
简单的一句话概括:下载你喜欢的Linux发行版的安装包,放到你想要成为Linux根目录的文件夹,安装之。
我选择了Ubuntu18.04.
进入下载的文件所在的目录,这个目录也是你未来Linux系统的根目录。所以尽量避免目录路径太深,以及包含中文。虽然我也不知道包含中文有什么问题,不过能免则免吧。
然后进入命令行,用cd命令进入到这个目录,执行下面的命令:
Add-AppxPackage是win10的一个程序,这条命令直接调用。后面那个.\app_name.appx是你自己下载的发行版的名字,要注意替换成你自己上一步下载的那个文件。
装好以后,在终端中输入命令bash,即可进入Linux系统,无缝切换,完美。好了,你已经进入Linux世界了,就是这么简单。
不要以为这一段不重要,实际上Linux子系统的源跟我们平常配置的不是完全相同。为了安装一个g++我也是试了好几个源。阿里和阿里的源之间还有微小的不同。这不同就体现在一个能安装g++一个装不上。
这里直接给出我最后安装上g++的源:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
节省大家时间。
然后sudo apt update之类的我就不细说了。
为什么选择android 7呢,因为我之前对7比较熟悉,而且买的书也是用的这个版本。所以先尝试7.当然最终我并没有成功编译出来,不过把遇到的问题和解决方法做个记录,供大家参考吧。
首先是获取Android源码,由于众所周知的原因,使用清华源的:
https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
这里贴一下清华镜像的说明:
参考 Google 教程 https://source.android.com/setup/build/downloading, 将 https://android.googlesource.com/
全部使用 https://aosp.tuna.tsinghua.edu.cn/
代替即可。
由于使用 HTTPS 协议更安全,并且更便于我们灵活处理,所以强烈推荐使用 HTTPS 协议同步 AOSP 镜像。
由于 AOSP 镜像造成CPU/内存负载过重,我们限制了并发数量,因此建议:
-j
后面的数字不能太大,建议选择4。
如果需要某个版本的android代码,使用如下命令即可:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
这个-b的列表,大家可以参考“源代码标记和列表”网站,我这里给列一下:
https://source.android.com/source/build-numbers#source-code-tags-and-builds
细分版本 | 分支 | 版本 | 支持的设备 |
---|---|---|---|
OPR5.170623.007 | android-8.0.0_r17 | Oreo | Nexus 6P |
OPR4.170623.009 | android-8.0.0_r16 | Oreo | Nexus 5X |
OPR3.170623.008 | android-8.0.0_r15 | Oreo | Pixel XL、Pixel |
OPR1.170623.027 | android-8.0.0_r13 | Oreo | Pixel XL、Pixel、Pixel C |
OPR6.170623.021 | android-8.0.0_r12 | Oreo | Nexus Player |
OPR6.170623.019 | android-8.0.0_r11 | Oreo | Nexus 6P |
OPR4.170623.006 | android-8.0.0_r10 | Oreo | Nexus 5X |
OPR3.170623.007 | android-8.0.0_r9 | Oreo | Pixel XL、Pixel |
OPR1.170623.026 | android-8.0.0_r7 | Oreo | Pixel XL、Pixel、Pixel C |
OPR6.170623.013 | android-8.0.0_r4 | Oreo | Nexus 5X、Nexus 6P |
OPR6.170623.012 | android-8.0.0_r3 | Oreo | Pixel XL、Pixel |
OPR6.170623.011 | android-8.0.0_r2 | Oreo | Pixel XL、Pixel |
OPR6.170623.010 | android-8.0.0_r1 | Oreo | Pixel C |
NZH54D | android-7.1.2_r33 | Nougat | Pixel XL、Pixel |
最新的应该已经到了android11,不过这个网站还没更新,之后我再更新一下。我先选7.1的版本:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.2_r33
这里给出一个编译指导的网站:
https://developer.sony.com/develop/open-devices/guides/aosp-build-instructions/#build-aosp-nougat-7-1
其实应该第一时间查看这类网站的,我也是遇到问题解决不了到处搜索才找到的这个网站,这里先放出来。有不知道怎么编译Android的,先看下上面相对比较正规的文档,一步一步照着做吧。
这里我copy一下android 7的编译步骤:
To prevent errors generated by having the wrong version of Java installed on your computer, we will start by removing any conflicting Java version and adding the correct version. Java 8 is needed to build Android 7.x.x.
(人话:为了避免JAVA版本导致的问题,编译Android 7.x.x的版本需要Java 8的环境,而且要open-jdk,与早期版本不同。简单的说,下面的步骤先把已有的java给清除了,再按照open-jdk8)
sudo apt-get purge openjdk-* icedtea-* icedtea6-*
sudo apt-get update sudo apt-get install openjdk-8-jdk java -version
You should now see something similar to the following in your terminal window:
java version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Java环境装好了,还要安装编译所需要的各种工具库,有的能装成功,有的装不成功,有的需要更新源,有的需要找替代品,自己搜一下吧。
sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip liblz4-tool
编译的步骤就不多说了。编译的时候我还遇到一些问题:
有一个提示是:
/bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file: Exec format error
看起来像是无法执行这个prebuilt目录下的bison,我进去执行发现国真不行。原因是这个应用是32位程序,64位下运行需要安装运行库。猜测就是上面那个带386的东西。最后是在这里找到了解决方法:
https://www.cnblogs.com/JiuHuan/p/10073632.html
现在能够运行32位程序了。然后又编译,又报错,找不到好的解放办法,我觉得Linux子系统跟原生还是有些差距吧。这个先放着,我去试试编译android 10看看。
目前编译android 7的进展就到这里了,找不到好的解决办法,如果有大神知道怎么回事,还请点拨一下。
我想10毕竟新一些,没准一些过时的东西已经不用了,说不定能编的过呢。过了再更新这个教程。