Android是32位还是64位操作系统?


46

标题几乎是不言而喻的:Android是32位还是64位操作系统?我认为这是一个或另一个,而不是两者兼而有之,因为这将迫使32位和64位二进制文​​件都托管在Google Play上。我知道这是一个简单的问题,并且其他人也一直在问这个问题,但是对于我的一生,我一直无法在网络上找到答案,并且肯定没有这个SE。

Answers:


48

在常见的ARM芯片组领域中,整个Android堆栈(来自基于Linux的几乎相同的内核)实际上是32位的,通常是从32位/ 64位主机环境(即主机环境)交叉编译的通常是Linux的发行版之一。Google推荐的用于构建和交叉编译Android的发行版是Ubuntu

Android运行时库(媒体,图形,文件系统,仅举几例)也是32位的,但是当我们到达dalvikvm的层时,此时的位数变得无关紧要, Google Play商店中的本地字节码(生成的Java代码的“副产品”,被编译为可移植字节码)针对DalvikVM(虚拟机),DalvikVM(虚拟机)依次解释和转换以原始ARM指令集为目标的字节码。

Froyo是最后一个在32位托管环境下启用编译的Android,在该环境中,它针对ARM芯片集进行了交叉编译。

Gingerbread是“未来” Android的第一个,大约在三年前,当时提出了使用构建它的64位托管环境的要求。有很多技巧可以使Gingerbread在32位托管环境下构建。

ICS和JB以及更高版本现在肯定需要64位环境才能加快编译速度并减少构建的周转时间。

综上所述,在Play商店中看到的内容与使用32位还是64位无关,因此无关紧要。

旁注:典型的16GB RAM / Quad core / 64bit Linux发行版,从头开始构建ICS所花费的时间最多为30分钟,如果这是32bit Linux发行版,则需要更长的时间,实际上,这可能会导致CPU崩溃简而言之,没有足够的处理能力来搅动和处理交叉编译的代码,这一个非常艰巨且费力的过程!

证明这一点。

拉入在/system/bin或中找到的任何本机ARM二进制文件/system/xbin,例如/system/bin/dalvikvmDalvik VM二进制文件,负责Java和APK的上层。

现在,通过发出以下命令检查二进制文件:file dalvikvm它给出了文件类型的摘要,预期的输出为:

dalvikvm:ELF 32位LSB可执行文件,ARM,版本1(SYSV),动态链接(使用共享库),已剥离

注意,对32位ELF的引用是交叉编译到ARM的,并且是二进制可执行文件。

继续,让我们检查在中找到的本机共享库/system/lib,例如/system/lib/libandroid_runtime.so,now issue file libandroid_runtime.so,预期输出为:

libandroid_runtime.so:ELF 32位LSB共享库,ARM,版本1(SYSV),已动态链接,已剥离

再次注意,它的32位ELF被交叉编译到ARM,并且是一个共享库。

主机交叉编译的关键可以在AOSP源代码中找到,即Gingerbread构建最初要求在64位主机系统上进行构建,这里是新闻组的链接,指的是如何修补脚本以使其得以构建。 32位主机具有两个修补程序,在此处找到,用于AOSP的Gerrit审查build/core.mkbuild/main.mk合并)。

随后的结果是,此补丁进入了ICS的构建脚本,在该脚本中,我确实有幸在32位平台上编译了ICS,该平台花了3天的时间进行构建(这是Zte Blade的ICS移植)。现在,要求斜坡上升,你一定需要64位主机,以便从ICS建设AOSP向上的交叉编译:)


2
有趣的东西,但是在答案中包含一些信息会很好。
花生

2
+1,因为即使没有资料来源,也至少要进行一半的研究工作,以帮助寻找所需的信息。不要-1为在帮助和回答问题上做得体面的家伙而努力……
haylem

1
现在有运行64位Android的64位ARM设备。

1
我之所以投票,是因为大多数答案都是关于用来编译 Android的环境,这与问题完全无关。
Dan Hulme'6

1
是的,的确如此,我将就今天的情况发布一个新的答案,但是编译环境一直是一个麻烦。
Dan Hulme'6

8

最初,Android仅用于32位处理器;特别是32位ARM处理器。后来,英特尔和MIPS也投入了很多资金来使Android也支持其架构:但仍然只有32位处理器。他们能够做到这一点而没有(很多)兼容性问题,因为大多数应用程序都不是二进制文件。它们以Java语言编写,而是以字节码形式交付,运行应用程序时,手机上的虚拟机将编译为手机的体系结构。一些应用程序包括本机组件,以二进制形式提供。这样做是为了使某些类型的应用程序(尤其是游戏)更快,或者使该应用程序访问Java中不可用的C库。这些应用程序可以为本地代码部分包含多个二进制文件,以允许它们在不同的体系结构上运行。即便如此,大多数应用程序仅使用Java,因此它们可以在任何体系结构上运行。

在编写此问题(以及其他大多数答案)时,以上内容都是正确的,但不再适用。Lollipop引入了对新的64位ARM处理器(ARMv8)以及Intel和AMD的x86_64处理器,这意味着Android现在支持32位和64位处理器。Nexus 9是第一款旗舰64位Android设备。除了提供对新指令集扩展的访问权限之外,64位支持还意味着应用程序可以使用超过4 GB的RAM。大多数应用程序并不需要那么多,但是高端游戏和照片/视频创建软件肯定可以利用它:将Android推向控制台质量游戏(包括VR游戏)和内容创作平台。无需更新Java应用程序即可利用此优势,因为虚拟机始终将其编译为手机的体系结构,但是具有本机代码的应用程序将进行编译。

因为ARMv8向后兼容32位代码(x86_64仍可以运行x86代码的方式相同),所以即使包含32位处理器的本机代码的应用程序仍可以在64位Android上运行。因此,只有包含本地代码并且想要利用更高的RAM限制或体系结构的新功能的应用程序才需要针对64位进行编译。


5

当前所有ARM芯片均为32位。因此,Android当前在32位环境中执行所有代码。

64位处理器定于2014年推出


1
Forsyth说,在谈论服务器时,这并不是一个可靠的消息来源,我们是在Android /智能手机/平板电脑的背景下谈论ARM。
t0mm13b 2013年

2

Android是32位还是64位操作系统?我认为这是一个或另一个,而不是两者兼而有之,因为这将迫使32位和64位二进制文​​件都托管在Google Play上。

两者都不是。Android是基于Dalvik VM的操作系统,而Google Play托管Dalvik应用程序。Dalvik VM本身与Java VM一样,始终为32位,而不管物理计算机的位数如何。

如您所怀疑的,本机二进制文件附带的应用程序和NDK应用程序必须附带针对要运行的每种体系结构编译的二进制文件。Android上最常见的架构是ARM 32位。但是,也有一些设备可以在x86和MIPS上运行。


0

我只是在猜测,但我认为这也可以解释它很简单。这取决于您使用的设备,有四种操作系统,分别是ARM,ARM 64,X84和X84_64。ARM是流行的32位平台,ARM 64也是流行的但64位平台,X84是罕见的平台,在Zenfones上使用,与X84_64罕见的平台,在Android Emulators上使用一样。我在Open Gapps上获得了此操作系统信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.