Androidは32ビットまたは64ビットのOSですか?


46

タイトルはほとんど一目瞭然です。Androidは32ビットまたは64ビットOSですか?32ビットと64ビットの両方のバイナリをGoogle Playで強制的にホストするため、両方ではなく、いずれかであると想定します。これは単純な質問であり、他の人が質問していることは知っていますが、私の人生ではウェブ上で答えを見つけることができず、このSEには確かに答えがありません。

回答:


48

一般的な要因であるARMチップセットの領域では、Linuxベースのほぼ同一のカーネルからのAndroidスタック全体が、実際には32ビットであり、通常は32ビット/ 64ビットホスト環境、ホスト環境のいずれかからクロスコンパイルされます通常、Linuxのディストリビューションの1つです。Androidのビルドおよびクロスコンパイル用に推奨されているGoogleの配布はUbuntuです。

Androidランタイムライブラリ(メディア、グラフィックス、ファイルシステムなど)も32ビットですが、dalvikvmのレイヤーに到達すると、この時点でビット数は無関係になり、apksが来ますGoogle Playストアからは、ネイティブバイトコード(ポータブルバイトコードにコンパイルされた生成されたJavaコードの「副産物」)がDalvikVM(仮想マシン)をターゲットにしています。

Froyoは、ARMチップセットを対象にクロスコンパイルされた32ビットホスト環境でのコンパイルを可能にした最後のAndroidです。

Gingerbreadは、3年前の当時の「未来の」Androidの最初のものであり、それが構築された64ビットホスト環境を使用する要件を導入しました。32ビットのホスト環境でGingerbreadを構築するには、多くのハックがありました。

ICSおよびJB以降では、コンパイルを高速化し、ビルドの所要時間を短縮するために、64ビット環境が確実に必要になりました。

要約すると、Playストアで表示される内容は、32ビットと64ビットのどちらが使用されているか、つまり無関係であるかどうかには関係ありません。

サイドノート:典型的な16GB RAM / Quadコア/ 64ビットLinuxディストリビューション、ICSをゼロから構築するのにかかる時間、最大で30分かかります。これが32ビットLinuxディストリビューションだった場合、実際には時間がかかり、CPUのメルトダウンを引き起こす可能性があります単純に、クロスコンパイルされたコードをチャーンアウトおよびクランクアウトするのに十分な処理能力がないため、非常に要求多く、負担のかかるプロセスです!

これの証明。

/system/binまたはにある任意のネイティブARMバイナリを取得します。/system/xbinたとえば/system/bin/dalvikvm、これは、JavaおよびAPKの上位層を担当するDalvik VMバイナリです。

ここで、次のコマンドを発行してバイナリを調べfile dalvikvmます。ファイルの種類の概要が表示され、予想される出力は次のようになります。

dalvikvm:ELF 32ビットLSB実行可能ファイル、ARM、バージョン1(SYSV)、動的リンク(共有ライブラリを使用)、削除

32ビットELFへの参照に注意してください。これはARMにクロスコンパイルされており、バイナリ実行可能ファイルです。

さて、/system/lib次に、/system/lib/libandroid_runtime.soで見つかったネイティブの共有ライブラリを調べてみましょう。たとえば、今号を発行するfile libandroid_runtime.soと、予想される出力は次のようになります。

libandroid_runtime.so:ELF 32ビットLSB共有オブジェクト、ARM、バージョン1(SYSV)、動的リンク、削除

繰り返しますが、ARMにクロスコンパイルされた共有ライブラリである32ビットELFに注目してください。

ホストのクロスコンパイルはAOSPのソースで見つけることができるの鍵となるのは、すなわち、ジンジャーブレッドのビルドは、もともと64ビットのホストシステム上に構築する必要性があったが、ここではニュースグループだLinkyはを参照することがで構築するために取得するためのスクリプトにパッチを適用する方法は、 AOSPのGerritレビューのためのbuild/core.mk、およびbuild/main.mk結合された)2つのパッチを備えた32ビットホスト

その後の結果として、このパッチはICSのビルドスクリプトに到達しましたそこでは、ビルドに3日かかった32ビットプラットフォームでICSをコンパイルする特権がありました(Zte BladeのICSの移植でした)。これで、要件が強化されました。ICSからAOSPをビルドするクロスコンパイルを有効にするには、64ビットホスト必ず必要です。


2
おもしろいものですが、答えにいくつかの情報源があるといいでしょう。
ピーナッツ

2
+1。情報源がなくても、探し物を見つけるために、研究の少なくとも半分の作業が行われたため。質問を手伝って答えるのにまともな試みをした人を-1にしないでください
...-ヘイレム

1
64ビットAndroidを実行する64ビットARMデバイスがあります。
マシュー

1
答えのほとんどはAndroid をコンパイルするために使用される環境に関するものであり、これは質問とはまったく関係がないため、私は賛成です。
ダンヒューム

1
はい、それは真実です。今日の状況について新しい答えを投稿しますが、コンパイル環境は常に赤いニシンでした。
ダンヒューム

8

もともと、Androidは32ビットプロセッサのみ、具体的には32ビットARMプロセッサ向けに記述されていました。後に、IntelとMIPSは、Androidがそれらのアーキテクチャをサポートするようにするために多大な投資をしました。ほとんどのアプリはバイナリとして出荷されていないため、彼らは(多くの)互換性の問題なくこれを行うことができました。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で実行できます。だから、アプリは、それがネイティブコードが含まれている場合は、64ビット用にコンパイルする必要がありますし、それが高いRAMの上限またはアーキテクチャの新機能を利用したいと考えています。


5

すべてのARMチップは現在32ビットです。このため、Androidは現在32ビット環境ですべてのコードを実行します。

2014年に発売予定の 64ビットプロセッサ。


1
Forsyth氏は、「スマートフォンはもう少し先だ」と言って、サーバーについて話していたので、正確な信頼できる情報源ではありません。、Android /スマートフォン/タブレットのコンテキストでARMについて説明しています。
t0mm13b

2

Androidは32ビットまたは64ビットのOSですか?32ビットと64ビットの両方のバイナリをGoogle Playで強制的にホストするため、両方ではなく、いずれかであると想定します。

どちらでもない。AndroidはDalvik VMベースのOSであり、Google PlayはDalvikアプリケーションをホストしています。Dalvik VM自体は、Java VMと同様に、物理マシンのビット数に関係なく常に32ビットです。

ご想像のとおり、ネイティブバイナリとともに出荷されるアプリケーションとNDKアプリケーションは、実行対象のすべてのアーキテクチャ用にコンパイルされたバイナリとともに出荷する必要があります。Androidが実行される最も一般的なアーキテクチャは、ARM 32ビットです。ただし、x86およびMIPSで実行されるデバイスもあります。


0

私はただ推測しますが、これもそれを簡単に説明していると思います。使用しているデバイスに依存します。ARM、ARM 64、X84、X84_64の4種類のOSがあります。ARMは人気のある32ビットプラットフォームであり、ARM 64も人気がありますが64ビットプラットフォームです。X84は珍しいプラットフォームであり、Zenfonesで使用されます。Open GappsでこのOS情報を取得しました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.