“ armeabi-v7a ”および“ x86 アーキテクチャ:SoCvs。プロセッサvs.ABI

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 X30Snapdragon 855の仕様を確認しました。HelioX30の仕様によるとデュアルをサポートしています-コアARMCortex-A73およびクアッドコアARMCortex-A53、ただしARM i Snapdragon 855の仕様には記載されていません。したがって、HelioX30はarmeabi-v7a Androidアプリをサポートし、Snapdragon855はarmeabi-v7aアプリ?

混乱を明確にしてください。

回答

これが私の不完全な要約メモです。件名ですが、質問に答えるには十分です。

命令セット:

プロセッサは半導体ダイ、通常は電子グレードの単結晶シリコンでできています。彼らは英語やその他の人間の言語を知らず、01しか理解していません。したがって、プロセッサの設計者は何を教えてくれますかゼロと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バージョンを実行できますか?

コメント

回答

x86を使用するハードウェアデバイスの数は決して多くはありませんでした。数年前、IntelにはいくつかのAndroidタブレット(Samsung Galaxy Tab 10.3など)で使用されていたx86プロセッサ(Intel Atom)がいくつかありました。

しかし、これらのタブレットは市場で大量に販売されることはありませんでした。また、x86CPUをまだ使用しているx86スマートフォンまたはタブレットが市場にあるかどうかはわかりません。

ただし、「x86Androidデバイス」に遭遇する非常に一般的な使用例が1つあります。それはAndroidです。エミュレーター。

エミュレーターを実行するPCは通常、x86イメージを実行するx86 CPUエミュレーターを使用するため(ARMv7またはARMv8 / ARM64ベースのイメージの代わりに)、CPU統合仮想化技術を利用できます。はるかに高速です。

コメント

  • 詳細に説明していただきありがとうございます。例を挙げたいと思います。私が正しければ、プロセッサであろうとSoCであろうと、x86という用語はIntelおよびAMDと相互に関連しています。例を挙げたいと思います。
  • リンク apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -Firefox androidapkをダウンロードするためのリリース。私はそこで2つの変種を見ました。 armeabi-v7aアーキテクチャ用のFirefoxandroidapkおよびx86アーキテクチャ用のFirefoxandroidapk。私の混乱はそこから始まりました。
  • 有名なAndroidデバイスのSoCは、Snapdragon、MediaTek、Exynos、Kirinなどです。したがって、ARM用のandroidapkをダウンロードする必要があると思います。私は正しいですか?
  • @ user741975現時点では、armeabi-v7aを選択すると、99%を超える確率で実行されます。現在のミッドクラスまたはハイエンドデバイスをお持ちの場合は、arm64-v8aもオプションになる場合があります。とにかく、あなたはそれをダウンロードしてインストールを試みることができます。アーキテクチャが間違っていると、インストールは失敗します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です