有人说安卓就是 Linux,也有人说安卓是安卓、Linux 是 Linux,两者没什么关系,还有人说安卓用的是 Linux 的内核,那么它们之间到底是什么关系呢。要想得到这个问题的答案,我们要先弄清楚几个概念。

Linux 与 Linux 内核

Linux 与 Linux 内核其实是不一样的,关于这个问题,我在之前的一篇文章中讲过(《Linux,Unix,GNU 到底有什么样的渊源?》)。Linux 的内核是由 Linus Torvalds 在1991年首次编写。它是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等。但是操作系统光有内核,用户是没有办法操作的,所以很多厂商和 Linux 社区就在内核之上开发了很多工具,比如我们常用的 GNome桌面,FireFox浏览器、GIMP 图片编辑器等等。Linux 内核和这些应用一起打包后就被称作 Linux 发行版本。Linux 有很多的发行版本,我在之前的文章中(《这么多Linux版本,你究竟该怎么选择?》),对不同的版本做过比较。

所以我们常说的 Linux 有两个含义:

1) Linux 内核,这个严格来说应该叫 GNU/Linux,因为它是 GNU 计划的一部分

2) Linux 发行版本,比如 Debian、Ubuntu、Mint、RedHat等等

那么安卓和 Linux 内核或者 Linux 发行版本有什么关系吗?

安卓与 Linux 的关系

安卓实际上用到的是 Linux 的内核。因为 Linux 本身是开源的,所以谷歌的工程师们选择了在 Linux 内核基础之上做裁剪定制,这样他们就不需要从头开始来开发一个全新的系统。BTW,这在大厂当中也是一种比较常用的做法,比如 Playstation 的操作系统用的是 FreeBSD的内核,XBox 用的是 Windows NT 的内核。在安卓的手机上,在系统信息中你可以看到 Linux 内核的版本。

既然安卓用的是 Linux 的内核,那是不是可以说它就是 Linux的一个发行版本呢?先看一下安卓和其他 Linux 发行版本开发架构上有何不同。

大家都知道 Linux 内核是用 C语言开发的,安卓在 Linux 的内核之上用 C/C++ 开发了Dalvik ,后来改叫 Android Run Time,其实本身就是安卓的 Java 虚拟机。我们做的安卓应用都要用 Java开发,运行在 ART 上面。Linux 其他发行版本也可以用 Java 开发应用,只要运行在 Linux 的 Java 虚拟机上就可以了。除此之外我们也可以在 Linux 内核之上使用其他框架开发,比如 GTK 框架的 Gnome、QT 框架的 LXQT,这些跟 ART 都是一个层次的东西。所以我觉得安卓和其他 Linux 发行版本本质上没有太大区别,只不过安卓对 Linux 的内核做了一些裁减,并且在上面跑了一个 Dalvik / ART,而其他 Linux 发行版本跑了很多个 “Dalvik / ART”而已。

解释清楚了安卓与 Linux 内核的关系以及与 Linux 其他发行版本的区别后,我们再来看下小伙伴们经常问到的两个问题:

1) 可以在安卓上运行 Linux 的桌面应用吗?

因为安卓有很多标准的 GNU 库没有安装,也没有安装图形 X server,所以答案是不能。不过有一些应用尝试让我们在安卓环境中使用 Shell,安卓终端模拟器还有busybox,感兴趣的同学可以去了解一下。

2) 可以在Linux 桌面上运行安卓的应用吗?

因为其他 Linux 发行版本也没有 Dalvik / ART,所以安卓的应用在 Linux 桌面上不能直接运行。不过我们只需要将 Dalvik / ART 移植到 Linux 桌面环境就可以了。正是基于这个原理,市场上有很多安卓手机模拟器,不仅可以用在 Linux 桌面,还可以用在 Windows 以及 Mac 上。

总结

安卓的操作系统核心是在 Linux 内核上做了一些裁减和定制,并且在内核之上运行了一个 Dalvik / ART 虚拟机,所有的应用必须运行在这个虚拟机上,所以安卓的应用都是用 Java 来开发的。在 Linux 的发行版本中,我们可以使用 Java 虚拟机,也可以使用其他框架,比如 GTK, QT等等,它们编译出来的二进制代码可以直接运行在 Linux 内核上,它们和 Dalvik / ART 是一个层次上的东西,所以安卓和 Linux 的发行版本本质上是一样的。

推荐阅读:

《在 Linux 系统中如何管理 systemd 服务》

《Linux的运行级别与目标》

《软链接 vs. 硬链接》

《Linux 目录详解》

《虚拟机安装 Linux 最完整攻略》

《Xshell 与 Xftp 的安装与使用》

- The End -

安卓到底是不是Linux的更多相关文章

  1. 闲置安卓设备搭建Linux服务器实现外网访问

    title: 闲置安卓设备搭建Linux服务器实现外网访问 这是我搭过的第一个博客系统,写贴纪念一下 待博主整理好思路,将今天所用到的全部分享! 好吧,我就是穷.富人靠科技,穷人靠变异.我这种穷人是真 ...

  2. 如何选安卓android|linux系统开发板,简化学习难度,缩短开发进程

    平台一:iTOP-4412精英版 系统支持:Android 4.0.3系统  / Android 4.4系统 / Linux + Qt系统 / Ubuntu12.04系统 开发板特点:Cortex-A ...

  3. 安卓安装kali linux之Termux

    解决安装kali无模组问题 https://blog.csdn.net/weixin_44690490/article/details/108599693?utm_source=app 步骤 1.获取 ...

  4. 一篇文章看清楚 Linux 的职业发展方向

    手机.汽车.甚至宇宙飞船,在今天的科技世界中,你几乎到处都能看到 Linux 的身影.前两天 SpaceX 成功将宇航员送入太空的猎鹰9号火箭与龙飞船用的也是 Linux的操作系统.身处与 Linux ...

  5. 安卓运行linux应用程序

    安卓是可以运行linux应用程序的,安卓系统原来就基于Linux.但是安卓已经把linux改头换面了.具体方法是安装Termux软件,然后就可以运行pkg命令安装软件包了,希望可以帮助到大家.

  6. React++ node.js ++SQL Sever ++MySQL++ python ++ php ++ java ++ c++ c#++ java ++ android ++ ios ++Linux+

    "C语言在它诞生的那个年代,是非常不错的语言,可惜没有OOP.当项目臃肿到一定程度,人类就不可控了. 为了弥补这个缺陷,C++诞生了.而为了应对各种情况,C++设计的大而全,太多复杂的特性, ...

  7. 在你的andorid设备上运行netcore (Linux Deploy)

    最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下,真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/ ...

  8. 1,linux基础知识以及新建虚拟机

    1,Windows图形界面只是在个人电脑上普及(dos界面):lunix是在服务器领域,服务器上绝对不出现图形化界面(命令行). 2,2.6.18  主板本,次版本,末版本 如果末版本积累到一定程序就 ...

  9. 关于“学习Linux用什么系统”的解答

    首先,阐述一下,我个人的观点——这个问题我曾经也想了很久了,这绝不是长篇大论后就是简单一句,适合你的就是最好的.其实,很多人看到这一句,心里已经有成千上万个奔腾了(至少我当时是这样的),为什么?因为我 ...

随机推荐

  1. CodeForces - 224C. Bracket Sequence (栈模拟)简单做法

    A bracket sequence is a string, containing only characters "(", ")", "[&quo ...

  2. Arduino编程基础1.1

    Arduino编程语言是建立在C/C++语言基础上的,即以C/C++语言为基础,把AVR单片机(微控制器)相关的一些寄存器参数设置等进行函数化,以利于开发者更加快速地使用.其主要使用的函数包括数字I/ ...

  3. 题目分享T

    题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...

  4. 记一次jackson序列化Boolean的坑

    @Data public class CouponTemplateDto { /** * 优惠券类型id */ private Long couponTypeId; /** * 优惠券模板id */ ...

  5. FOC 电流采样方案对比(单电阻/双电阻/三电阻)

    如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你,帮忙点个赞: 创作不易 谢谢支持 文章目录 1 电流采样的作用 2 硬件架构 3 采样关键 4 采样方案 5 三电阻采 ...

  6. [C#] StringFormat详解之文本方向、对齐

    在使用GDI方式处理文本时,往往会用到StringFormat.里面的某些点有点反直觉,不够直观,所以本篇就通过图文的方式去讲解一下. 本篇内容仅涉及到文本方向.对齐的相关内容. 如有错误.不妥之处, ...

  7. spring junit--基础配置

    spring官方文档总提示要进行SpringJunit测试必须先配置两个信息: 1.使用Spring IOC功能配置 2.配置正确的JDBC或ORM框架连接数据库 下面进行spring3和hibern ...

  8. 黑马程序员_毕向东_Java基础视频教程——变量(随笔)

    变量 变量 就是将不确定的数据进行存储.也就是需要在内存中开辟一块空间. 内存就是一块运算区域.内存越大.内存中装的数位就越多.运算就越快 ============================== ...

  9. 如何搭建一个WEB服务器项目(三)—— 实现安卓端联网登录

    安卓端调用服务器登录函数进行验证登录 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验 ...

  10. sh: react-scripts: command not found after running npm start

    今天遇到一堆bug,从早上10点到现在8成的时间都像是浪费了..... https://stackoverflow.com/questions/40546231/sh-react-scripts-co ...