Dans mon projet actuel, j'utilise plusieurs fichiers .so. Ceux-ci se trouvent dans les dossiers armeabi et armeabi-v7a. Malheureusement, l'un des fichiers .so fait 6 Mo et je dois réduire la taille du fichier. Au lieu d'avoir un gros fichier APK, 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 on aimerait avoir à la fois le code armeabi-v7a et armeabi. Il doit y avoir une bonne raison d'avoir les deux, non?
Sur mes appareils de test, tout semble fonctionner correctement. Ceux-ci ont des processeurs ARM v7. Est-il prudent de supposer que tout fonctionne maintenant?
la source
armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Réponses:
Cela dépend de ce que fait votre code natif, mais la 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 CPU des nouveaux appareils. Prenez quelques points de repère 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 apks séparés pour les appareils plus anciens (armeabi) et plus récents (armeabi-v7a).
la source
EABI = Interface binaire d'application intégrée. Ce sont de telles 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 compilation et de liaison requis pour l'interopérabilité entre les chaînes d'outils utilisées pour l'architecture ARM. Dans ce contexte, lorsque nous parlons d' armeabi, nous parlons d'architecture ARM et de système d'exploitation GNU / Linux. Android suit le petit boutiste ARM GNU / Linux ABI.
L'application armeabi fonctionnera sur ARMv5 (par exemple ARM9) et ARMv6 (par exemple ARM11). Vous pouvez utiliser du matériel en 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 prend pas en charge les conventions d'appel flottantes (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 prises en charge.
L'application armeabi-v7a fonctionnera sur les appareils Cortex A # tels que Cortex A8, A9 et A15. Il prend en charge les processeurs multicœurs et prend en charge -mfloat-abi = hard . Donc, si vous créez votre application en utilisant -mfloat-abi = hard , beaucoup de vos appels de fonction seront plus rapides.
la source
The armeabi-v7a ABI uses the -mfloat-abi=softfp switch
. Alors qu'entendez-vous par support -mfloat-abi = hard ?Le contraire est une bien meilleure stratégie. Si vous devez
minSdkVersion
14 et télécharger votre apk sur le Play Store, vous remarquerez que vous prendrez en charge le même nombre d'appareils, que vous le preniez en chargearmeabi
ou non. Par conséquent, il n'y a aucun appareil avec Android 4 ou supérieur qui en bénéficieraitarmeabi
.C'est probablement pourquoi Android NDK ne prend même
armeabi
plus en charge selon la révision r17b. [ source ]la source