有人说安卓就是 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. Floyd —Warshall(最短路及其他用法详解)

    一.多元最短路求法 多元都求出来了,单源的肯定也能求. 思想是动态规划的思想:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设Dis(A ...

  2. 最新Idea超实用告别996插件,都是免费

    Idea告别996插件 在IntelliJ IDEA中,秉着IDEA自带能实现的快捷方式就不用插件的原则,少用些插件,运行性能也提升一些,虽然很少,哈哈.分享下我个人常用的插件,希望对大家有些帮助.插 ...

  3. SQLite使用(二)

    sqlite3_exec虽然好用,但是一般不推荐直接使用. 常用的一组操作是: 关于sqlite3_exec和sqlite3_prepare_v2的使用场景,建议如下: 一个小DEMO: #inclu ...

  4. 进程间通信之socketpair

    socketpair是进程间通信的一种方式. API: ]); DEMO: #include <stdio.h> #include <stdlib.h> #include &l ...

  5. Jmeter-接口测试参数化后循环断言不同内容的方法

    前言 各位小伙伴在做接口自动化有没遇到过这样的问题,CSV文件参数化测试数据后,只能通过人工的的方法去查看结果,不懂写代码去循环断言返回的结果.今天我们来学习一下,不用写代码,就用响应断言,怎么实现循 ...

  6. M - Little Pony and Harmony Chest 状压dp

    M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30   这里可以推出 b数组的范围 0~60 ...

  7. 远程登陆与数据CP

    1 SSH登陆原理   SSH,Secure Shell,是一套协议标准,可以用来实现两台机器之间的安全登陆以及安全的数据传送,其保证数据安全的原理是非对称加密.   传统的对称加密方式使用的是一套密 ...

  8. 3-JVM垃圾回收算法和垃圾收集器

    垃圾回收算法和垃圾收集器 1.什么是垃圾回收 对于内存当中无用的对象进行回收,如何去判断一个对象是不是无用的对象. 引用计数法: 每个对象中都会存储一个引用计数,每增加一个引用就+1,消失一个引用就- ...

  9. js前端获取当前日期,日期格式为yyyy-mm-dd HH:MM

    var date = new Date(); var year = date.getFullYear(); var month = date.getMonth()+1; var day = date. ...

  10. JS 面向对象封装 无限轮播 插件。

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...