armeabiコードよりもarmeabi-v7aコードを使用する理由


141

現在のプロジェクトでは、複数の.soファイルを使用しています。これらは、armeabiおよびarmeabi-v7aフォルダーにあります。残念ながら、.soファイルの1つは6MBで、ファイルサイズを小さくする必要があります。ファットなAPKファイルを作成する代わりに、armeabiファイルのみを使用してarmeabi-v7aフォルダーを削除します。

NDKドキュメントによると、armeabi-v7aコードは、追加のCPU命令を含むことができる拡張armeabiコードです。これはすべて私の専門知識を超えていますが、なぜarmeabi-v7aとarmeabiの両方のコードが必要なのか疑問に思います。両方を持っている正当な理由があるに違いありませんよね?

私のテストデバイスでは、これはすべて正常に動作するようです。これらにはARM v7 CPUがあります。現在すべてが機能していると想定しても安全ですか?


2
このブログ投稿を今すぐ読んでみてください。完全かつ最新です:androidbycode.wordpress.com/tag/armeabi-v7a
IgorGanapolsky

2
そして今、文書は言う:armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
アミールRezazadeh '15

1
後で来る人のために、ここを見てください
アミールRezazadeh 2018

回答:


163

ネイティブコードの機能によって異なりますが、v7aはハードウェアの浮動小数点演算をサポートしているため、大きな違いがあります。armeabiはすべてのデバイスで正常に動作しますが、速度が大幅に低下し、新しいデバイスのCPU機能を利用できません。特定のアプリケーションについていくつかのベンチマークを取る必要がありますが、armeabi-v7aバイナリを削除することは、一般的には良い考えではありません。サイズを小さくする必要がある場合は、古い(armeabi)デバイスと新しい(armeabi-v7a)デバイス用に2つの個別のAPKを用意することをお勧めします。


1
両方のABIの違いはどこにありますか?私は本当の違いを理解することに非常に熱心です...
webshaker


1
これら2つの異なるAPKをアップロードできるようにGoogle Playを取得するための優れたソリューションに関するアイデアはありますか?マニフェストが異なるということを区別する方法はないので、Google Playは単に1つを別のものに置き換えたいだけです(バージョンコードが異なる)
Dean Wild

11
:@DeanWild Googleは今、Playストア、複数のAPK機能で異なるCPUアーキテクチャをターゲティングするためのサポートを追加したdeveloper.android.com/guide/google/play/publishing/...
チャールズ・ハーレーを

1
@IgorGanapolsky、指摘してくれてありがとう。:これは正しいリンクですdeveloper.android.com/google/play/publishing/...
チャールズ・ハーレー

60

EABI = Embedded Application Binary Interface。これは、特定の実行環境で実行するために実行可能ファイルが準拠しなければならない仕様です。また、ARMアーキテクチャで使用されるツールチェーン間の相互運用に必要なコンパイルとリンケージのさまざまな側面を指定します。この文脈で、armeabiについて話すときは、ARMアーキテクチャとGNU / Linux OSについて話します。Androidは、リトルエンディアンのARM GNU / Linux ABIに準拠しています。

armeabiアプリケーションは、ARMv5(ARM9など)およびARMv6(ARM11など)で実行されます。-mfpu = vfpv3 -mfloat-abi = softfpなどの適切なGCCオプションを使用してアプリケーションをビルドする場合は、浮動小数点ハードウェアを使用できます。これは、VFPハードウェア用の浮動小数点命令を生成し、ソフト浮動呼び出し規約を有効にするようコンパイラーに指示します。armeabiはハードフロート呼び出し規約をサポートしていません(つまり、FPレジスタは関数の引数を含めるために使用されていないことを意味します)が、HWでのFP操作は引き続きサポートされています。

armeabi-v7aアプリケーションは、Cortex A8、A9、A15などのCortex A#デバイスで実行されます。マルチコアプロセッサをサポートし、-mfloat-abi = hardをサポートします。したがって、-mfloat-abi = hardを使用してアプリケーションを構築すると、関数呼び出しの多くが高速になります。


1
するためによるとdeveloper.android.com/ndk/guides/abis.htmlThe armeabi-v7a ABI uses the -mfloat-abi=softfp switch。では、-mfloat-abi = hardをサポートするとはどういう意味ですか?
IgorGanapolsky 16

8

ファットなAPKファイルを作成する代わりに、armeabiファイルのみを使用してarmeabi-v7aフォルダーを削除します。

反対ははるかに良い戦略です。minSdkVersion14でAPKをPlayストアにアップロードする必要がある場合、サポートするかどうかに関係armeabiなく、同じ数のデバイスをサポートすることに気付くでしょう。したがって、Android 4以降を搭載したデバイスはまったくメリットがありませんarmeabi

これがおそらく、Android NDKがarmeabiリビジョンr17bでサポートしなくなった理由です。[ ソース ]

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