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 de 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 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

Ce sont des ensembles d'instructions de CPU. La plupart du temps, vous n'avez pas à vous en soucier, le paramètre par défaut est bon, mais j'avais l'intention d'ajouter quelque chose à la documentation à ce sujet en raison de certains changements récents.

Fondamentalement, 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 différents types d'architectures de fabricants différents. Les processeurs arm sont les plus courants, mais le x86 n'est pas rare. 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 de périphérique. 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.

À l'intérieur d'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 dans 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é contre armeabi-v7a, c'est rétrocompatible.

À partir de 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 l'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 suis pas sûr de la fréquence de cela, 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 d'ensembles d'instructions. Ce sont des ABI, qui se compilent en ensembles d'instructions. La plupart des appareils aujourd'hui sont arm64-v8a, les appareils vraiment bon marché sont armeabi-v7a pour économiser des 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.

Tableau des ABI pris en charge 1 de https://developer.android.com/ndk/guides/abis

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

Le jeu d'instructions du CPU (et ses extensions) qui peuvent être utilisés. L'endianness des opérations de stockage et de chargement de mémoire lors de l'exécution. Android est toujours en little-endian. Les conventions pour le passage des 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 lorsqu'il appelle 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, voir l'Interface Binaire d'Application Système V ELF. Comment les noms C++ sont mangles. Pour plus d'informations, voir ABI C++ générique/Itanium. 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