タイトルはほとんど自明です。Androidは32ビットまたは64ビットのOSですか? 32ビットと64ビットの両方のバイナリがGooglePlayでホストされるようになるため、両方ではなく、どちらか一方であると思います。これは単純な質問であり、他の人から質問されていることは知っていますが、私の人生ではWebで答えを見つけることができず、このSEには確かに答えがありません。
回答
共通の要素であるARMチップセットの領域では、Androidスタック全体が、ほぼ同一のカーネルに基づいています。 Linuxは、実際には32ビットであり、通常は32ビット/ 64ビットのホスト環境からクロスコンパイルされます。ホスト環境は通常、Linuxのディストリビューションの1つです。 Androidの構築とクロスコンパイルにGoogleが推奨するディストリビューションは、 Ubuntu です。
Androidランタイムライブラリ(メディア、グラフィックス、ファイルシステムなど)は次のとおりです。これも32ビットですが、dalvikvmのレイヤーに到達すると、この時点ではビット数は無関係になり、Google Playストアからのapkはネイティブバイトコード(コンパイルされた生成されたJavaコードの「副産物」)です。 DalvikVM(仮想マシン)をターゲットとするポータブルバイトコードに変換します。DalvikVM(仮想マシン)は、生のARM命令セットをターゲットとするバイトコードを解釈および変換します。
Froyoは、32ビットのホスト環境でコンパイルを可能にした最後のAndroidでした。 ARMチップセットを対象にクロスコンパイルされました。
Gingerbreadは、3年前頃、それが構築された64ビットのホスト環境を使用する要件を導入した「未来の」Androidの最初のものでした。 。 Gingerbreadを32ビットホスト環境で構築するための多くのハックがありました。
ICSとJB、およびそれ以降では、コンパイルを高速化し、ビルドのターンアラウンドタイムを短縮するために、64ビット環境が確実に必要になります。
要約すると、Playストアに表示される内容は、32ビットと64ビットのどちらが使用されているかには関係がないため、関係ありません。
補足:通常の16GB RAM /クアッドコア/ 64ビットLinuxディストリビューション(ICSを最初から構築するのにかかる時間)は最大30分かかります。これが32ビットLinuxディストリビューションの場合、もっと時間がかかります。実際、CPUがメルトダウンする可能性があります。クロスコンパイルされたコードを解約してクランクアウトするための処理能力。は非常に要求が厳しく、負担のかかるプロセスです。
これの証明。
/system/bin
または/system/xbin
にあるネイティブARMバイナリをプルします。 、たとえば、/system/bin/dalvikvm
、これはJavaとAPKの上位層を担当するDalvikVMバイナリです。
次に、これを発行してバイナリを調べます。コマンド: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)、動的にリンク、削除
ここでも、32ビットELFはARMにクロスコンパイルされており、共有ライブラリです。
ホストのクロスコンパイルはAOSPソースにあります。つまり、Gingerbreadビルドは元々64ビットホストシステムでビルドする必要がありました。ニュースグループ linky スクリプトにパッチを適用して32ビットホスト上にビルドする方法 build/core.mk
およびbuild/main.mk
(結合)、AOSPのGerritレビュー。
後続としてその結果、このパッチはICSのビルドスクリプトに適用され、ビルドに3日かかった32ビットプラットフォームでICSをコンパイルする特権がありました(これはZteBladeのICSの移植版でした em>)。これで、要件が強化されました。ICSからAOSPを構築するクロスコンパイルを有効にするには、 do に64ビットホストが必要です。 )
コメント
- つまり、32ビットのAndroid OSでのコンパイルと実行には、64ビットよりも時間がかかるということですか? Kitkat や L などの最新のAndroidOSではすべて64ビットであることが一般的な要件ですか?
- 64ビットのARMデバイスがあります。 64ビットAndroidを実行しています。
- '答えのほとんどは、Androidをコンパイルするために使用される環境に関するものであるため、反対票を投じています。これは、Androidとはまったく関係ありません。質問。
- @DanHulmeこの回答は4年近く前に投稿されました…はい、それ以来、風景は大きく変化しました。 🙂
- はい、その'は真実です。私は、'について新しい回答を投稿します。今日の状況ですが、コンパイル環境は常に赤ニシンでした。
回答
元々、Androidは作成されました32ビットプロセッサのみ:具体的には、32ビットARMプロセッサ。その後、IntelとMIPSは、Androidが自社のアーキテクチャをサポートするようにするために多くの投資を行いましたが、それでも32ビットプロセッサしかサポートしていません。ほとんどのアプリはバイナリとして出荷されていないため、(多くの)互換性の問題なしにこれを行うことができました。Javaで記述され、代わりに仮想マシンであるバイトコードとして出荷されます。電話のem>は、アプリの実行時に電話のアーキテクチャにコンパイルされます。一部のアプリには、バイナリとして出荷されるネイティブコンポーネントが含まれています。これは、一部の種類のアプリ(特にゲーム)を高速化するため、またはアプリがJavaで使用できないCライブラリにアクセスできるようにするために行われます。これらのアプリには、ネイティブコード部分に複数のバイナリを含めて、実行できるようにすることができます。それでも、アプリの大部分はJavaのみであるため、どのアーキテクチャでも機能します。
この質問(および他のほとんどの回答)があった時点で、上記はすべて当てはまりました。 Lollipopは、新しい64ビットARMプロセッサ( ARMv8 )と、IntelおよびAMDのx86_64プロセッサのサポートを導入しました。これは、Androidが32ビットと64ビットプロセッサ。 Nexus 9は、最初のフラッグシップ64ビットAndroidデバイスでした。 64ビットのサポートは、新しい命令セット拡張へのアクセスを提供するだけでなく、アプリが4GBを超えるRAMを使用できることを意味します。ほとんどのアプリはそれほど必要ではありませんが、ハイエンドのゲームや写真/ビデオ作成ソフトウェアは確かにそれを利用できます。Androidをコンソール品質のゲーム(VRゲームを含む)およびコンテンツ作成のプラットフォームに押し上げます。Javaアプリ仮想マシンは常にそれらを電話のアーキテクチャにコンパイルするため、これを利用するために更新する必要はありませんが、ネイティブコードを使用するアプリは更新します。
ARMv8は32と下位互換性があるためビットコード(x86_64がx86コードを実行できるのと同じ方法)、32ビットプロセッサのネイティブコードを含むアプリでも64ビットAndroidで実行できます。したがって、アプリにネイティブが含まれている場合にのみ、64ビット用にコンパイルする必要があります。コードおよびは、RAMの上限またはアーキテクチャの新機能を利用したいと考えています。
回答
すべてのARMチップは現在32ビットです。このため、Androidは現在を実行します 32ビット環境のすべてのコード。
64ビットプロセッサ 2014年に発売予定。
コメント
- その'は、サーバーについて話していたため、正確に信頼できるソースではありません。「スマートフォンは少し離れています」とフォーサイス氏は述べています。 、' Android /スマートフォン/タブレットのコンテキストでARMについて話します。
回答
Androidは32ビットまたは64ビットのOSですか? 32ビットと64ビットの両方のバイナリがGooglePlayでホストされるため、両方ではなく、どちらかであると思います。
実際にはどちらでもありません。 AndroidはDalvikVMベースのOSであり、GooglePlayはDalvikアプリケーションをホストします。 Dalvik VM自体は、Java VMと同様に、物理マシンのビット数に関係なく常に32ビットです。
ご想像のとおり、ネイティブバイナリに付属するアプリケーションとNDKアプリケーションには、すべてのアーキテクチャ用にコンパイルされたバイナリが付属している必要があります。で実行することを目的としています。 Androidが実行される最も一般的なアーキテクチャはARM32ビットです。ただし、x86とMIPSで動作するデバイスもあります。
回答
推測しているだけですが、これも説明していると思います。シンプル。使用しているデバイスによって異なりますが、ARM、ARM 64、X84、X84_64の4種類のOSがあります。 ARMは人気のある32ビットプラットフォームです。ARM64も人気がありますが64ビットプラットフォームです。X84は珍しいプラットフォームでZenfonesで使用され、X84_64は珍しくAndroidエミュレータで使用されます。 OpenGappsでこのOS情報を入手しました