44 votes

Quelle est la différence entre armeabi-v7a, arm64-v8a, x86?

Je travaille sur une application Android sur Kivy. J'utilise Buildozer pour compiler un fichier APK. Dans le fichier de spécification Buildozer, il y a un paramètre android.arch = armeabi-v7a, je n'ai pas compris cela.

Aussi, lorsque j'ai généré le fichier APK en utilisant la commande buildozer -v android debug et que je l'ai installé en utilisant la commande adb install bin/.apk - il ne s'est pas ouvert sur mon téléphone Android.

52voto

inclement Points 6708

Il s'agit des ensembles d'instructions CPU. En général, vous n'avez pas à vous en soucier, le paramètre par défaut est bon, mais j'ai l'intention d'ajouter quelque chose à ce sujet dans la documentation en raison de certains changements récents.

Essentiellement, un appareil Android donné peut avoir un processeur arm ou x86 (ou même autre chose mais ce n'est pas important), ce sont simplement des types d'architecture différents de différents fabricants. Les processeurs Arm sont les plus courants, mais le x86 n'est pas inhabituel. Lorsque vous compilez du code, la sortie dépend de l'architecture cible. Lorsque vous construisez une application Kivy, vous spécifiez l'une des architectures, puis l'application ne fonctionnera que sur ce type d'appareil. Si vous voulez prendre en charge tous les appareils, vous pouvez compiler plusieurs APK pour les distribuer - le Play Store vous permettra de télécharger plus d'un, et enverra à chaque appareil le bon.

Dans un type d'architecture donné, il existe plusieurs versions. armeabi-v7a est la cible plus ancienne, pour les CPU arm 32 bits, presque tous les appareils arm prennent en charge cette cible. arm64-v8a est la cible 64 bits plus récente (similaire à la transition de 32 bits à 64 bits sur les ordinateurs de bureau). Je pense que la plupart des nouveaux appareils sont 64 bits, mais je ne suis pas sûr. Les appareils arm64-v8a peuvent exécuter du code compilé pour armeabi-v7a, c'est rétrocompatible.

À partir de plus tard cette année, le Play Store vous demandera de télécharger un APK arm64-v8a comme minimum, car cela offre le meilleur support pour les nouveaux appareils. Vous pourrez également télécharger d'autres APK pour prendre en charge d'autres types d'appareils.

Ce n'est pas tout à fait la histoire complète : certains appareils x86 ont une bibliothèque spéciale qui leur permet d'exécuter du code compilé pour des appareils arm. Je ne sais pas dans quelle mesure cela est répandu, mais cela semble assez courant.

Pour résoudre votre problème d'application, utilisez adb logcat pour voir ce qui ne va pas.

4voto

ZenBoat Points 488

Pour être clair, il ne s'agit pas de jeux d'instructions. Ce sont des ABI, qui se compilent en jeux d'instructions. La plupart des appareils aujourd'hui sont arm64-v8a, les appareils vraiment bon marché sont armeabi-v7a pour économiser les coûts, et presque aucun n'est x86 ou x86_64.

Par exemple, l'ABI armeabi-v7a se compile en jeu d'instructions armeabi, thumb-2 et VFPv3-D16, mais l'ABI arm64-v8a se compile en jeu d'instructions AArch64.

Supported ABIs table 1 from https://developer.android.com/ndk/guides/abis

Chaque combinaison de CPU et jeu d'instructions a sa propre Interface Binaire d'Application (ABI). Une ABI inclut les informations suivantes :

Le jeu d'instructions du CPU (et les extensions) qui peuvent être utilisés. L'endianité des opérations de stockage et de chargement en mémoire à l'exécution. Android est toujours en petit boutiste. Les conventions pour le passage de données entre les applications et le système, y compris les contraintes d'alignement, et comment le système utilise la pile et les registres lors de l'appel des fonctions. Le format des binaires exécutables, tels que les programmes et les bibliothèques partagées, et les types de contenu qu'ils prennent en charge. Android utilise toujours ELF. Pour plus d'informations, consultez l'interface binaire d'application système V ELF. Comment les noms C++ sont mangled. Pour plus d'informations, consultez Generic/Itanium C++ ABI. 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