Win10 Linux子系统编译Android系统源码

一、前言

听说win10合入了Linux作为一个子系统,起初只以为是类似虚拟机的实现机制,想必对性能的提高也很有限。但是稍微了解却发现是并不是虚拟机的那种机制,而是可以完全发挥Host机器的性能,这无疑是用虚拟机进行学习Linux平台上的东西的完美的替代品。但仍然担心这个子系统并不如我所期望的那样完美,所以尝试着编译一下Android这个系统吧,如果能够编译Android成功,那么基本上也可以作为完美的替代品。

二、从Windows7升级到Windows 10

由于之前对于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装好了,其他的细节就不多说了。

有什么问题可以留言询问,后面有空了我再完善细节。

三、在Windows10中安装Linux子系统

这里我一开始是搜索CSDN和百度上的教程,但搜到的教程都已经过期了,很多步骤都不对。这里我的建议是:

直接去官方看安装教程

我的教程也会过期,所以这里直接给出官方地址。

https://docs.microsoft.com/en-us/windows/wsl/install-manual

WSL:Windows Subsystem for Linux

简单的一句话概括:下载你喜欢的Linux发行版的安装包,放到你想要成为Linux根目录的文件夹,安装之。

我选择了Ubuntu18.04.

进入下载的文件所在的目录,这个目录也是你未来Linux系统的根目录。所以尽量避免目录路径太深,以及包含中文。虽然我也不知道包含中文有什么问题,不过能免则免吧。

然后进入命令行,用cd命令进入到这个目录,执行下面的命令:

Add-AppxPackage .\app_name.appx

Add-AppxPackage是win10的一个程序,这条命令直接调用。后面那个.\app_name.appx是你自己下载的发行版的名字,要注意替换成你自己上一步下载的那个文件。

最后再强调一下:这个目录,会成为你Linux系统中的根目录。

装好以后,在终端中输入命令bash,即可进入Linux系统,无缝切换,完美。好了,你已经进入Linux世界了,就是这么简单。Win10 Linux子系统编译Android系统源码_第1张图片

 

四、配置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.

为什么选择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/内存负载过重,我们限制了并发数量,因此建议:

  1. sync的时候并发数不宜太高,否则会出现 503 错误,即-j后面的数字不能太大,建议选择4。
  2. 请尽量选择流量较小时错峰同步。
  • 2017-08-28 : 更新镜像大小信息
  • 2016-06-24 : 关闭 git:// 协议,仅支持 HTTPS
  • 2016-04-03 : 删除每月初始化包中的冗余内容,使用方法更新
  • 2015-12-21 : 增加每月初始化包,少量修正文档错误
  • 2015-10-13 : 修复上游替换文档错误
  • 2015-10-13 : 修复次级镜像文档错误
  • 2015-10-09 : 恢复 git://aosp.tuna.tsinghua.edu.cn/aosp/ 访问
  • 2015-10-08 : 镜像地址更新为 https://aosp.tuna.tsinghua.edu.cn/ (结尾没有/android)

 

如果需要某个版本的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)

  1. On your computer: In a terminal window, enter the following command:
     
    sudo apt-get purge openjdk-* icedtea-* icedtea6-*
  2. A guide will appear on the screen. Follow the instructions to remove Java.
  3. Once Java is removed, install the correct version of Java by entering the following commands in a terminal window:
     
    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的进展就到这里了,找不到好的解决办法,如果有大神知道怎么回事,还请点拨一下。

Win10 Linux子系统编译Android系统源码_第2张图片

 

六、尝试编译android 10

我想10毕竟新一些,没准一些过时的东西已经不用了,说不定能编的过呢。过了再更新这个教程。

你可能感兴趣的:(Android开发,Linux)