146 votes

Pourquoi utiliser le code armeabi-v7a plutôt que le code armeabi ?

Dans mon projet actuel, j'utilise plusieurs fichiers .so. Ceux-ci sont situés dans le dossier armeabi et armeabi-v7a. Malheureusement, l'un de ces fichiers .so pèse 6 Mo et je dois réduire sa taille. Au lieu d'avoir un gros fichier APK, je voudrais utiliser uniquement les fichiers armeabi et supprimer le dossier armeabi-v7a.

Selon la documentation du NDK, le code armeabi-v7a est un code armeabi étendu qui peut contenir des instructions CPU supplémentaires. Tout ceci dépasse mes compétences, mais je me demande pourquoi on voudrait avoir à la fois le code armeabi-v7a et le code armeabi. Il doit y avoir une bonne raison d'avoir les deux, non ?

Sur mes appareils de test, tout semble fonctionner correctement. Ils ont des processeurs ARM v7. Peut-on supposer que tout fonctionne maintenant ?

2 votes

Vous pourriez vouloir lire cet article maintenant. Il est complet et actualisé : androidbycode.wordpress.com/tag/armeabi-v7a

2 votes

Et maintenant le docteur dit : armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.

1 votes

Pour ceux qui viendront plus tard, jetez un coup d'œil à aquí .

164voto

Nikolay Elenkov Points 32843

Cela dépend de ce que fait votre code natif, mais la v7a supporte les opérations matérielles en virgule flottante, ce qui fait une énorme différence. armeabi fonctionnera bien sur tous les appareils, mais sera beaucoup plus lent, et ne tirera pas avantage des capacités des CPU des appareils plus récents. Prenez quelques benchmarks pour votre application particulière, mais supprimer les binaires d'armeabi-v7a n'est généralement pas une bonne idée. Si vous avez besoin de réduire la taille, vous pouvez avoir deux apks séparés pour les appareils plus anciens (armeabi) et plus récents (armeabi-v7a).

0 votes

Merci pour votre réponse claire. Ce sera une bonne idée de faire un benchmarking ainsi que de diviser l'application en 2 fichiers APK. Ce dernier point est en fait une très bonne idée ! Merci beaucoup !

2 votes

Où puis-je trouver la différence entre les deux ABI ? J'ai très envie de comprendre les vraies différences...

8 votes

60voto

psihodelia Points 6658

EABI = Embedded Application Binary Interface. Il s'agit de telles spécifications auxquelles un exécutable doit se conformer afin de s'exécuter dans un environnement d'exécution spécifique. Elle spécifie également divers aspects de la compilation et de la liaison nécessaires à l'interopérabilité entre les chaînes d'outils utilisées pour l'architecture ARM. Dans ce contexte, lorsque nous parlons de armeabi nous parlons d'architecture ARM et de système d'exploitation GNU/Linux. Android suit l'ABI little-endian ARM GNU/Linux.

L'application armeabi fonctionnera sur ARMv5 (ex. ARM9) et ARMv6 (ex. ARM11). Vous pouvez utiliser du matériel à virgule flottante si vous construisez votre application en utilisant les options GCC appropriées comme -mfpu=vfpv3 -mfloat-abi=softfp qui indique au compilateur de générer des instructions en virgule flottante pour le matériel VFP et active les conventions d'appel soft-float. armeabi ne supporte pas les conventions d'appel hard-float (cela signifie que les registres FP ne sont pas utilisés pour contenir les arguments d'une fonction), mais les opérations FP dans HW sont toujours supportées.

L'application armeabi-v7a fonctionnera sur les appareils Cortex A# comme les Cortex A8, A9 et A15. Elle prend en charge les processeurs multi-cœurs et elle supporte -mfloat-abi=hard . Ainsi, si vous construisez votre application en utilisant -mfloat-abi=hard la plupart de vos appels de fonction seront plus rapides.

1 votes

Según developer.Android.com/ndk/guides/abis.html : The armeabi-v7a ABI uses the -mfloat-abi=softfp switch . Alors, qu'est-ce que vous entendez par supporte -mfloat-abi=hard ?

9voto

Cristan Points 398

Au lieu d'avoir un gros fichier APK, je voudrais utiliser uniquement les fichiers armeabi et supprimer le dossier armeabi-v7a.

Le contraire est une bien meilleure stratégie. Si vous avez minSdkVersion à 14 et téléchargez votre apk sur le play store, vous remarquerez que vous prendrez en charge le même nombre d'appareils, que vous preniez en charge armeabi ou pas. Par conséquent, aucun appareil équipé d'Android 4 ou d'une version plus récente ne peut bénéficier des avantages suivants armeabi du tout.

C'est probablement la raison pour laquelle le NDK Android ne supporte même pas armeabi plus selon la révision r17b. [ source ]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X