Androidアプリをダウンロードしているときに、およびx86
アーキテクチャ。
armeabi-v7a
およびx86
アーキテクチャ。しかし、最終的に、どのモバイルプロセッサとアーキテクチャがarmeabi-v7a
に属し、どのモバイルプロセッサとアーキテクチャがx86
に属するかを確定できませんでした。
私の知る限り、Androidデバイスで一般的に使用されているモバイルプロセッサはSnapdragon(Qualcomm製)、MediaTek、Exynos(Samsung製)、Kirin(Huawei製)です。ほとんどすべてのブランドがスマートフォンの仕様を説明しており、ほとんどすべての仕様がモバイルプロセッサは64ビットかどうか。64ビットのモバイルプロセッサ(Snapdragon、MediaTek、Exynos、またはKirin)はARMアーキテクチャに属していると結論付ける必要がありますか?
編集:
どのSoCがarmeabi-v7a
Android apkをサポートし、どのSoCがx86
Android apk、MediaTek Helio X30
とSnapdragon 855
の仕様を確認しました。HelioX30の仕様によるとデュアルをサポートしています-コアARMCortex-A73およびクアッドコアARMCortex-A53、ただしARM i Snapdragon 855の仕様には記載されていません。したがって、HelioX30はarmeabi-v7a
Androidアプリをサポートし、Snapdragon855はarmeabi-v7a
アプリ?
混乱を明確にしてください。
回答
これが私の不完全な要約メモです。件名ですが、質問に答えるには十分です。
命令セット:
プロセッサは半導体ダイ、通常は電子グレードの単結晶シリコンでできています。彼らは英語やその他の人間の言語を知らず、0
と1
しか理解していません。したがって、プロセッサの設計者は何を教えてくれますかゼロと1のシーケンスは、その特定のプロセッサに指示できます。この命令の数値言語はMachine Language
として標準化されており、マシン命令のセットは。プロセッサは特定のタイプの命令セットにのみ作用できます。
命令セットは8/16/32/64ビット(プロセッサが一度に処理できる命令の数を定義)にすることができます。 )、最近は最後の2つが一般的です。
低レベルの言語:
しかし、プログラムコード(命令)を機械言語(実行可能ファイル)で直接記述することは、かなり大きなプログラム(最近では数時間で記述できる)の記述とデバッグに何年もかかるため、ほぼ不可能です。プログラマーを安心させるために、Assembly Languag eが開発されましたが、それでもプロセッサ固有の言語ですが、比較的理解しやすいものです。アセンブリ言語で記述されたコードは、Assembler
(機械語で記述されたプログラム)によって機械語に変換されます。これらは両方とも低水準言語と呼ばれます。
高水準言語:
ハードウェアとの通信における人的労力をさらに削減するために、特定の命令セット(特定のアーキテクチャを示す)にバインドされていない高級言語が開発されました。これらは人間の言語と同一であるため、記述、理解、デバッグ、および複数のアーキテクチャへの適用が容易です。高水準言語で書かれたコードは、Compiler
(低水準言語で書かれたプログラム)によって低水準言語に変換されます。最も一般的に使用される高級言語の1つはCです。ただし、コードがマシンコードにプリコンパイルされず、代わりにInterpreter
によって直接実行(または実行中にコンパイル)される場合があります。 Javaは、「一度書けばどこでも実行」(WORA)言語の1つであり、byte-code
にコンパイルされ、-再びコンパイルされたプログラム。
アプリケーションバイナリインターフェイス(ABI):
アーキテクチャに依存しないプログラム(コード)は、どのプロセッサでもアーキテクチャに依存するコードに変換できるため、特定のアーキテクチャのすべての要件を処理するのはコンパイラの義務です。アプリケーションバイナリインターフェイス(ABI)が定義します。簡単に言うと、ABIは1つ以上の特定のアーキテクチャを表します。組み込みABIの詳細には、アセンブルとコンパイルの段階に関する洞察が必要です。オブジェクトコード、Executable and Linkable Format(ELF)、ライブラリの静的(アーカイブ)および動的リンクなど。
次に質問があります:
x86
およびARM
とは何ですか?
x86は、主にIntelとAMDによって開発および製造された命令セットのファミリーです。 ARMは別のファミリであり、単一のエンティティARM Holdings
によって設計され、Qualcomm、Mediatek、Samsung、Huaweiなどの多くの組み込みソリューションメーカーにライセンス供与されています。 Snapdragon、Exynos、Kirinがブランド名です。彼らはプロセッサメーカーではありませんが、独自のシステムオンチップ(SoC)回路を備えたARMプロセッサを含めるためのライセンスを持っています。
SoCとは?
システムオンチップ(SoC)は、GPU、RAM、Flash / eMMC(HDDまたはSSDと同等)などの他のコンポーネントとともにプロセッサを含む小さな回路です。 、WiFiおよびbluetoothモジュール、USB接続、UART(シリアルポート)、JTAG(非常に低レベルのシリアル通信プロトコル)、GPS、モデム(セルラー接続用)など。
ARM ABI:
Androidアプリの大部分はJavaで記述されていますが、CやCなどのネイティブ言語でプログラミングできます。コンパイルする必要があるC ++。 Androidは、(ライブラリ、ヘッダーファイル、および)iv id = “5d5237dd7eを含む複数のABIのコードをコンパイルできるコンパイラ)を含む独自のネイティブ開発キット( NDK )を提供します”>
(Linuxコミュニティではarmhf
)およびx86
。
Android(Java)アプリ自体アーキテクチャに固有のものではありません。アプリのビルドプロセス中に、Android SDKはJavaソースをバイトコード(.class
ファイル)に変換してから、 D alvik EX ecutable(.dex
).apk
ファイルがパックされたファイル。このDalvikバイトコードは、Dalvik Virtual Machine
/ 別のインスタンスで解釈および実行されます。 Zygote
という名前のプロセスによって、すべてのアプリのdiv id = “14cc0215fd”>
。または、ネイティブマシンコード(.odex
または)アプリのインストール中のデバイスのアーキテクチャ(または後で)に応じて。ただし、apk(zip)ファイルにELFバイナリ/ライブラリが追加で含まれている場合、それらはアーキテクチャ固有です。開発者は通常、アプリに複数のアーキテクチャ用のネイティブライブラリを含めます。
ARM Embedded ABI v7a
(
armeabi-v7a )は、Application profile of 7th version of ARM processors
( Armv7-A )。
他のベンダーが提供するツールチェーンでコンパイルされたコードで、同じアーキテクチャ(ABI名は異なります)をターゲットにする場合も、Androidデバイスで実行する必要があります。
32ビットVS。 64ビット:
ARMプロセッサは32ビットまたは64ビットです。組み込みシステムで何を構築したいかは、SoCメーカーによって異なります。 Snapdragonは32ビットまたは64ビットにすることができます。 32ビットARMプロセッサのパフォーマンスが改善され、バージョン2からバージョン7に新しい機能が追加されました。ARMv8では64ビットのサポートが導入されました。
デバイスが32ビットか64ビットかを確認するため。ビット、あなたはそのSoCとそのプロセッサの仕様をチェックする必要があります。たとえば、 Redmi Note 4 のSoCは Qualcomm Snapdragon 625(MSM 8953)であり、プロセッサCortex-A53
。 Cortex-53の技術仕様から、処理可能なARMv8
アーキテクチャに基づいていることが明らかです。 2種類の命令セット:aarch64
(Androidの arm64-v8a ABIが使用)とaarch32
(Androidの armeabi-v7a ABIが使用する、つまりARMv7
との下位互換性。
したがって、これらのABIの両方用にコンパイルされたバイナリ/ライブラリを実行できますが、 x86 または(Linuxコミュニティでは armel と呼ばれ、アーキテクチャARMv5/v6
を対象とし、
削除 NDK r17
)。
関連: 64ビットのハードウェアデバイスで32ビットのAndroidバージョンを実行できますか?
armeabi
について言及しています。