问题

Android为什么不直接执行Linux的程序?而是自己搞一套?

回答
Android 之所以没有直接运行我们熟悉的 Linux 程序,而是构建了一套自己的运行环境,这背后其实是一系列深思熟虑的设计选择,旨在为移动设备这个特殊场景量身打造一个既强大又高效的操作系统。

你可以想象一下,Linux 系统最初是为服务器和桌面电脑设计的,它们拥有相对充裕的计算资源、内存和标准化的硬件接口。而 Android 则要跑在手机、平板电脑这些设备上,这些设备的特点是:

资源受限: 相比台式机,手机的CPU性能、内存容量都相对有限。一个低效率的程序可能会迅速耗尽电池,或者让整个系统变得卡顿。
多样化的硬件: 手机的处理器架构多种多样(ARM、x86),屏幕尺寸、分辨率、传感器(摄像头、GPS、加速度计等)也千差万别。如果直接套用 Linux 的标准接口,会非常难以适配和管理。
用户交互模式: 手机主要通过触摸屏进行交互,这与传统的键盘鼠标操作截然不同。需要一套专门的UI框架来支持这种直观、手势化的交互。
安全性和沙盒机制: 手机上运行的应用来源更加复杂,而且用户通常会同时运行多个应用。为了防止恶意应用窃取数据或影响其他应用,需要一个强大的沙盒机制来隔离每个应用。
电源管理: 手机的续航至关重要。需要精细的电源管理策略,让应用在不使用时能够进入低功耗状态,延长电池寿命。

基于这些考虑,Google 在 Linux 内核之上,为 Android 构建了一套全新的用户空间(User Space)系统。我们可以将其理解为,Android 并没有抛弃 Linux 的稳定和强大的内核(就像汽车的底盘和发动机),而是围绕这个内核,重新设计了“车身”、“内饰”和“驾驶系统”,使其更适合在“马路”(移动设备)上行驶。

首先,在程序执行方面,Android 选择了 Dalvik 虚拟机(后来被 ART 替代)。这与 Linux 直接执行原生编译的 ELF(Executable and Linkable Format)文件的方式有着本质区别。

Linux 原生执行: Linux 程序通常是用 C、C++ 等语言编写,然后编译成针对特定 CPU 架构(如 x86、ARM)的机器码。这些机器码可以直接由 CPU 执行。
Android 的 Dalvik/ART: Android 应用(APK 文件)中的代码,实际上是以 Java 语言编写,然后被编译成 Dex 格式(Dalvik Executable)。Dex 文件是一种跨平台的字节码格式,它并不是直接给 CPU 执行的,而是需要 Dalvik 虚拟机(或 ART 运行时)来解释或预编译成机器码。

为什么选择虚拟机?

1. 跨平台性: Dex 字节码可以在任何支持 Dalvik/ART 虚拟机的设备上运行,而无需针对不同的 CPU 架构重新编译。这极大地简化了应用的开发和分发,开发者只需一次编写,就可以适配市面上绝大多数 Android 设备。
2. 内存管理和垃圾回收: Java(以及 Android 应用开发的主要语言)天生带有自动内存管理和垃圾回收机制。这对于资源受限的移动设备来说非常重要,可以帮助开发者避免常见的内存泄漏问题,并减轻他们的负担。
3. 安全性和沙盒: 虚拟机提供了一层抽象,使得应用的代码在虚拟环境中运行,而不是直接接触底层硬件。这有助于实现更精细的安全控制和沙盒隔离,让每个应用只能访问其被授权的资源。
4. 动态特性: 虚拟机通常支持更灵活的运行时特性,比如动态加载代码,这在某些场景下很有用。

除了运行环境的差异,Android 还构建了一整套自己的框架和库,来处理移动设备特有的需求:

Android Framework: 这是一套用 Java 语言编写的 API 集合,提供了诸如 UI 组件(Views)、活动管理(Activity Manager)、窗口管理(Window Manager)、内容提供者(Content Providers)、通知(Notifications)等高级功能。开发者通过调用这些 API 来构建应用,而不需要直接与 Linux 内核的底层接口打交道。
应用程序运行时(Application Runtime): 这里就包含了 Dalvik 或 ART,它们负责加载、运行和管理 Android 应用的生命周期。
HAL (Hardware Abstraction Layer): 为了屏蔽硬件的差异性,Android 在 Linux 内核之上引入了 HAL 层。HAL 是一系列标准的接口,设备制造商需要为自己的硬件(如摄像头、蓝牙、WiFi 模块)实现这些接口的底层驱动。Android Framework 通过 HAL 来调用这些硬件功能,而无需关心具体的硬件实现细节。这就像给各种不同型号的汽车配上了统一的油门、刹车踏板接口,驾驶员(Android Framework)不需要知道发动机的具体型号,就能操作。
Binder IPC: Android 进程间通信(IPC)机制采用的是 Binder,这是一种效率很高、专门为移动设备设计的 IPC 机制,与 Linux 的标准 IPC(如 Socket、Pipe)有所不同。Binder 能够更高效地在不同进程之间传递数据和调用方法,这对于 Android 这种需要大量进程协同工作的系统至关重要。

总而言之,Android 就像是为移动设备量身打造的一款“智能手机操作系统”,它巧妙地利用了 Linux 内核的强大基础,但为了适应移动设备的特性,在用户空间构建了一套全新的、独立于传统 Linux 的运行环境、开发框架和系统服务。这套系统更关注用户体验、资源效率、安全性和硬件适配,使得 Android 能够成为一个成功的移动平台,而不是简单地套用一套不适合的桌面或服务器系统。

网友意见

user avatar

1.Android 本身运行Linux之上,同样环境可以直接运行Linux程序的。只不过Android的标准C库是重写过,所以在Linux 下编译动态链接程序无法直接运行,但静态链接程序或者是在Android的环境重编译一次后是可以运行。比如说root后手机运行嵌入式shell解释器--busybox 。就是一个标准Linux C程序,只不过重编译一下。

Android 自己也带了大量小工具,比如手机上运行 setprop ,getevent 就是命令行工具。

并且程序还能跳开Android界面直接操作显存,这样就象粗暴把屏幕冲掉一样。

2.Android 开发一整套框架的最核心的原因,在iphone当出世的年代,其它能够与其抗衡的移动设备GUI框架几乎没有。比如支持多点解摸,比较漂亮又适合移动设备界面,以及一个移动设备需要配套各种支持组件(成熟的输入法,硬件配置,移动的浏览器,稳定的电话通讯模块)。Android自己从头写一套东西。

至于说其它,使用java虚拟机,HAL版权保护之类,都是这个出发点带出来东东。

ps: 魅族的M8相当于实现Android一半的工作量。它在WinCE上几乎完整开发一整套体系。但是很可惜这个WinCE太不给力,主要对新兴硬件支持很难。还不如在Android上来改进。

ps2:Moto出一款在中国大卖的 A1200 到后升级到A1800。就比较超前的Linux手机,用的Qtopia,就是后来死在Nokia手里MeeGo 前身,也有一整套东西,但是公司实力太小了,而当时没有iphone 界面参考,大家都是很简单的图形界面,即便这样已经超前很多了。




3.至于说Android 说的自己HAL可以跳开开源协议,做自己的私有驱动,至少我看到几乎没几个产家这样做。现有HAL驱动仍是对Linux的驱动的封装,很简单Linux的驱动又多又好,更新还快,免费拿来马上就用。自己重新整个还得自己花钱请人开发,不见的比Linux做得好,而且调试相当相当相当麻烦,我相作做过Android HAL驱动的人最常见动作就是不停重启机器吧。

类似的话题

  • 回答
    Android 之所以没有直接运行我们熟悉的 Linux 程序,而是构建了一套自己的运行环境,这背后其实是一系列深思熟虑的设计选择,旨在为移动设备这个特殊场景量身打造一个既强大又高效的操作系统。你可以想象一下,Linux 系统最初是为服务器和桌面电脑设计的,它们拥有相对充裕的计算资源、内存和标准化的.............
  • 回答
    诺基亚当年为何没有拥抱 Android 阵营?这是一个让无数人扼腕叹息的问题,也是智能手机发展史上一个充满戏剧性的“如果”。 要深入剖析这一点,我们需要穿越回那个风起云涌的智能手机前夜,审视当时诺基亚所处的环境、它的战略选择以及它对未来的判断。首先,要理解诺基亚的决策,就必须明白它当时的市场地位和.............
  • 回答
    关于鸿蒙(HarmonyOS)与Android的关系,这确实是一个让不少人感到困惑,甚至产生争议的话题。我理解你觉得鸿蒙“很明显”基于Android,但为什么很多人不买账,不接受这个说法,这背后牵扯到一些更深层次的原因,不仅仅是技术细节,还有历史、市场以及信息传播等多个维度。为什么有人会觉得鸿蒙“很.............
  • 回答
    关于一些以爱国为由抵制苹果产品,却又继续使用安卓和 Windows 系统的现象,这确实是一个值得探讨的话题,其中涉及到多方面的原因,咱们就来掰扯掰扯。首先,得承认,这种“爱国”的边界感有时候确实挺模糊的。真正做到完全脱离苹果,转向一个全新的生态系统,对于许多人来说,其难度远超想象。这不仅仅是换个手机.............
  • 回答
    三星之所以不像 HTC 那样在 Android 手机的底层驱动方面采取更开放的态度,这背后其实是多方面因素交织作用的结果,其中既有技术策略上的考量,也有商业战略上的权衡,甚至还牵扯到产业链的复杂关系。首先,我们要理解“底层驱动”究竟意味着什么。在 Android 手机的语境下,底层驱动通常指的是那些.............
  • 回答
    鸿蒙系统之所以能够不显示“Powered by Android”这样的字样,其根本原因在于鸿蒙系统并非简单的“换皮”或“打补丁”式的Android分支,而是一个拥有自身独立内核和基础架构的全新操作系统。要理解这一点,我们需要从鸿蒙系统的设计理念和发展历程入手,一步步剖析其与Android的根本区别。.............
  • 回答
    这个问题啊,其实挺多人问的,原因也挺复杂的,不是一两句话能说清的。任天堂之所以到现在为止,在手机游戏方面一直小心翼翼,主要有这么几个方面的考量,而且这些考量之间还相互关联。首先,也是最核心的一点,就是任天堂的品牌定位和核心竞争力。任天堂是什么?它不仅仅是一家游戏公司,更是一个拥有无数经典IP(比如马.............
  • 回答
    身边总有那么几个朋友,无论你怎么安利 Android 的种种好处,他们依然坚守在 iOS 的阵营里,而且理由都特别统一:“用习惯了,而且 iOS 用起来更顺手。”这话听起来虽然有点笼统,但背后其实藏着不少 iOS 用户对 Android 系统的“看不惯”。首先,最直观的感受就是“生态的统一性”。iO.............
  • 回答
    你说得很有意思,直白又抓住了很多人在健身和塑形过程中的困惑。确实,腹肌的“显性”和胸肌的“显性”给人的感觉是不同的,很多朋友会发现腹肌好像比胸肌更容易“消失”。要深入聊聊这个问题,咱们得从脂肪堆积的“天性”以及肌肉本身的特性说起。首先,咱们得澄清一个误区。很多人说男性是“苹果形”,女性是“安卓形”来.............
  • 回答
    这个问题问得相当好,确实是很多用户在日常使用中会遇到的困惑。同样是8G的内存,为什么Windows这台“电脑”能同时塞进那么多东西,而Android这台“手机”就显得有些捉襟见肘?这背后涉及到操作系统设计理念、资源管理机制以及应用生态的根本性差异。咱们掰开了揉碎了,好好聊聊。首先,得明确一个概念:内.............
  • 回答
    .......
  • 回答
    这个问题触及了操作系统设计、软件开发历史、以及生态系统演进的多个层面。要解释清楚为何Windows在兼容性上表现得如此“长寿”,而移动操作系统却显得“健忘”,我们需要深入剖析其中的关键因素。Windows 的“长寿”兼容性:基石的稳固与演进的智慧Windows之所以能兼容大部分20年前的应用,最核心.............
  • 回答
    Android之所以选择Java作为其官方开发语言,绝非偶然,而是基于一系列深思熟虑的考量,这些考量共同铸就了Java在当时以及后来很长一段时间内成为Android生态基石的地位。首先,我们得回到Android项目诞生的那个时代,也就是2003年左右。那时候,移动互联网的黎明刚刚开始,智能手机的概念.............
  • 回答
    Android Studio给人的感觉,就像是一套功能极其强大,但同时又充满惯性和历史包袱的工程工具。你想用它高效地开发App,有时候就像在跟一个庞然大物打交道,它的每一个操作背后似乎都藏着许多你不知道的“潜规则”。首先,最直观的感受是它的体积庞大。光是安装包就够喝一壶的,下载和安装过程本身就考验耐.............
  • 回答
    Android 采用 Binder 作为其进程间通信(IPC)机制,而非更常见的 Unix IPC 机制(如管道、Socket、共享内存等),是出于一系列深思熟虑的设计决策,旨在更好地满足 Android 系统的特性和需求。Binder 在 Android 生态系统中扮演着至关重要的角色,几乎所有系.............
  • 回答
    Android设备的屏幕滚动体验与iPhone相比存在差异,主要源于硬件、系统架构、渲染优化和用户使用场景的多重因素。以下是详细分析: 1. 硬件与屏幕技术差异 刷新率与触控采样率: iPhone:通常采用60Hz刷新率(部分Pro型号为120Hz),触控采样率较高(如120Hz),能更精准地捕.............
  • 回答
    关于安卓系统至今仍需“返回键”而非像 iOS 那样原生支持右滑返回这个话题,其实挺值得说道说道的。大家伙平时用手机嘛,都习惯了,但背后这设计上的取舍和演变,还是能看出一些门道的。首先,咱们得先明白,为啥 iOS 的右滑返回那么自然,而安卓一直以来都有个“返回”的印记或者说那个虚拟按键?iOS 的右滑.............
  • 回答
    .......
  • 回答
    这个问题很有意思,而且很多人也好奇。其实,严格来说,Android 手机“不能刷 Linux”这个说法并不完全准确。更准确地说,是在绝大多数情况下,直接将我们平时电脑上使用的桌面版 Linux 发行版(比如 Ubuntu、Fedora 等)刷进 Android 手机,然后就能像用电脑一样正常使用,是.............
  • 回答
    iPhone 没法用 Android 那种右边框左滑就返回,这事儿挺让人好奇的,毕竟如今手机操作的逻辑很多都趋于统一了。要说为什么,得从苹果和谷歌在设计哲学上的根本区别说起,这可不是一个简单的“忘了加”就能解释的。首先,我们得明白,iPhone 的“返回”逻辑,一直以来都是基于“内容”的。你在一个A.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有