Pourquoi utiliser le code armeabi-v7a sur 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 des fichiers. so est un 6MB et j'ai besoin de réduire la taille du fichier. Au lieu d'avoir un fichier Apk fat, je voudrais utiliser uniquement les fichiers armeabi et supprimer le dossier armeabi-v7a.

Selon la documentation NDK, le code armeabi-v7a est un code armeabi étendu qui peut contenir des instructions CPU supplémentaires. Tout cela va au-delà de mon expertise, mais je me demande pourquoi un aimerait avoir à la fois le code armeabi-v7a et armeabi. Il doit y avoir une bonne raison d'avoir les deux, droite?

Sur mes appareils de test, tout cela semble fonctionner correctement. Ceux-ci ont des processeurs ARM v7. est-il sûr de supposer que tout fonctionne maintenant?

129
demandé sur Sam Rad 2011-08-16 19:11:47

3 réponses

Dépend de ce que fait votre code natif, mais v7a prend en charge 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 profitera pas des capacités du processeur des nouveaux appareils. Prenez quelques benchmarks pour votre application particulière, mais supprimer les binaires armeabi-v7a n'est généralement pas une bonne idée. Si vous avez besoin de réduire la taille, vous voudrez peut-être avoir deux APK séparés pour les anciens (armeabi) et les plus récents (armeabi-v7a) dispositifs.

149
répondu Nikolay Elenkov 2011-08-16 17:07:19

EABI = interface binaire D'Application embarquée. Ce sont ces spécifications auxquelles un exécutable doit se conformer pour s'exécuter dans un environnement d'exécution spécifique. Il spécifie également divers aspects de la compilation et de la liaison nécessaires à l'interopération entre les chaînes d'outils utilisées pour L'Architecture ARM. Dans ce contexte, lorsque nous parlons de armeabi nous parlons de L'architecture ARM et du système D'exploitation GNU/Linux. Android suit le bras little-endian GNU / Linux ABI.

Application Armeabi fonctionnera sur ARMv5 (par exemple ARM9) et ARMv6 (par exemple 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 à 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 des arguments pour une fonction), mais les opérations FP dans HW sont toujours soutenu.

L'application Armeabi-v7a fonctionnera sur les périphériques Cortex a# tels que Cortex A8, A9 et A15. Il supporte les processeurs multi-core et il prend en charge -mfloat-abi=dur. Donc, si vous construisez votre application en utilisant - mfloat-abi = hard , Beaucoup de vos appels de fonction seront plus rapides.

58
répondu psihodelia 2013-02-19 10:43:53

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

Le contraire est une bien meilleure stratégie. Si vous avez {[0] } à 14 et téléchargez votre fichier 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 non. Par conséquent, il n'y a pas d'appareils avec Android 4 ou supérieur qui bénéficieraient de armeabi du tout.

C'est probablement pourquoi L'Android NDK n'a même pas soutien armeabi plus que par la révision r17b. 1

1
répondu Cristan 2018-06-26 06:57:48