安卓到底是不是Linux

来源:https://www.cnblogs.com/jfzhu/archive/2020/05/29/12986863.html
-Advertisement-
Play Games

有人說安卓就是 Linux,也有人說安卓是安卓、Linux 是 Linux,兩者沒什麼關係,還有人說安卓用的是 Linux 的內核,那麼它們之間到底是什麼關係呢。要想得到這個問題的答案,我們要先弄清楚幾個概念。 Linux 與 Linux 內核 Linux 與 Linux 內核其實是不一樣的,關於這 ...


有人說安卓就是 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 -


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇文章(https://www.cnblogs.com/meowv/p/12961014.html)集成了定時任務處理框架Hangfire,完成了一個簡單的定時任務處理解決方案。 本篇緊接著來玩一下AutoMapper,AutoMapper可以很方便的搞定我們對象到對象之間的映射關係處理,同時a ...
  • docker容器把資源抽象成對象;作為客戶端,docker這個命令其實就是在對這些抽象出來的資源對象做增刪查改的操作;docker的API是RESTful風格的API,所以它支持類似像http協議里的GET、POST、PUT、DELETE等操作;RESTful風格的API有這樣的特點;1、每一個U... ...
  • 樹莓派版本: Raspberry Pi 4B 操作系統 : Ubuntu Server 20.04_x64 使用 ip a 查看無線網卡名稱: ubuntu@ubuntu:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue st ...
  • 步驟說明: <步驟1:打開控制面板> <步驟2:設置日期,時間> 操作截圖: ...
  • 一、Ubuntu安裝: 為什麼用Ubuntu,作為伺服器初學者開發,如果真的要買蘋果系統電腦性價比不高,所以在window系統中安裝Linux虛擬機是不二之選。為什麼用Ubuntu不多說了,開始安裝吧。 以window 10 為例: 1)點擊控制面板->搜索"開發者設置"->設置開發者模式 2)點擊 ...
  • Linux 下如果我們進入到了一個比較長的路徑,比如: /home/alvin/projects/blogdemos/linux-system-programming/thread /home/alvin/projects/blogdemos/diff /home/harry/study/亞洲文化/ ...
  • linux命令tr: (Translate/ Text Replacer):可以對來自標準輸入的內容進行字元替換,字元刪除,以及重覆字元壓縮。 ***只從stdin標準輸入接收數據: 格式:tr [options] set1 set2 將輸入按照位置從set1映射到set2,然後將輸出寫到stdou ...
  • chronyd時間伺服器,和之前NTP的功能一樣,提供時間的。基礎概念我就不說了,不擅長。chronyd是NTP之後誕生的。最近下載了最新的Centos Linux 8.1,發現裡面沒有ntp服務了,百度一搜發現改為了Chronyd,這篇文章就是部署一個伺服器+客戶端測試。1、伺服器端Centos ... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...