Quelle est la raison de l'erreur "L'appareil prend en charge x86, mais l'APK ne prend en charge que armeabi-v7a"


90

Je joue avec Android Studio en testant certains projets depuis GitHub et lorsque j'essaie d'émuler l'apk, cela ne me laisse pas choisir un émulateur.

Cela me dit:

L'appareil prend en charge x86, mais l'APK ne prend en charge que armeabi-v7a

Pourquoi fait-il cela?


Quel AVD avez-vous utilisé? Quelle image système? Quel projet GitHub?
OneCricketeer

En d'autres termes, les images Intel x86 ne vont pas exécuter de code ARM.
OneCricketeer


Je voulais utiliser un Nexus 10 sous Android 5.1
Alexander Ibarra

D'accord, et avez-vous utilisé l'image système ARM eabi v7 ou une image Intel Atom x86? Vérifiez votre gestionnaire de SDK ce que vous avez installé.
OneCricketeer

Réponses:


85

J'ai eu le même problème, j'ai vérifié le build.gradle du module: app . Il s'avère qu'il existe une telle configuration:

    ndk {
        abiFilters "armeabi-v7a", "x86"
    }

quand j'ai tout commenté, tout fonctionnait bien.

J'essayais de gérer le projet React Native Android .


1
Je pense que vous vouliez dire build.gradle;)
Ryan James

2
J'ai eu le même problème et pour moi "x86" manquait juste là
thomas

1
Cela a fonctionné pour moi - cependant tout ce que j'avais à faire était d'autoriser le débogage sur mon appareil réel et je pouvais à nouveau décommenter cette ligne.
Boomer Rogers

Quelle section dois-je mettre ndk?
Ömrüm Çetin le

Cela n'a pas fonctionné pour moi dans java / kotlin, il se construit mais l'application plante.
mozilla_firefox

77

Désactivez le débogage USB et rallumez-le sur le périphérique matériel.


10
Ces commentaires, je voterais normalement contre, mais en fait, cela fonctionne!
Ahmed Hegazy du

2
Cela fonctionne car l' Allow computer to connect to this deviceinvite ne s'affiche pas la première fois, mais l'a fait la deuxième fois.
Kyle Clegg

Cela a fonctionné sur un ordinateur sur lequel j'avais marqué "Se souvenir pour cet ordinateur" lorsque j'ai commencé un nouveau projet à partir de GitHub.
Z. Bagley

Donc. Après avoir ajouté une nouvelle architecture de processeurs au filtre ABI, le studio a cessé de reconnaître le périphérique. Cette astuce m'a aidé à résoudre le problème. !!
Vetalll

Pour moi, cela se passe dans Emulator
Akhil Surapuram

41

Dans Android Studio, sélectionnez le menu Créer ,

entrez la description de l'image ici

puis cliquez sur Select Build Variant ... et dans la fenêtre 'Build Variants', sélectionnez x86Debug (ou release)

entrez la description de l'image ici

PS: J'utilise Android Studio 2.3 sur Mac


Cela fonctionnait parfaitement - ma configuration gradle définissait les versions ARM et x86, mais j'ai dû demander à Android Studio de créer la variante x86 par opposition à la variante ARM (probablement pour iOS). Merci!
jevon

Notez que vous devez avoir sélectionné le projet, sinon l'option pour ce faire sera grisée. Je pense qu'il y a d'autres conditions qui peuvent également le griser - vous devrez peut-être nettoyer et reconstruire.
Dronz

16

Sous Linux: Fichier> Invalidate Cache / Restart On phone: Au lieu de cela, chargez ce périphérique changez pour transférer des photos (PTP)


1
Aucune des réponses ci-dessus ne fonctionnait. Cela a fonctionné. Merci beaucoup.
thedarkpassenger

J'ai changé de Camera (PTP)en Media Device (MTP)et ça marche aussi. Merci!
Konayuki

11

J'ai eu le même problème et je l'ai résolu en ajoutant la valeur "x86" à la liste "abiFilters" comme ci-dessous -

[Ouvrez le fichier build.gradle (Module: app)] et recherchez " ndk " dans deafultSection et ajoutez-y "x86"!

ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }

J'espère que cela aide!!!


1
Vous devriez probablement abandonner armeabisi vous ciblez le SDK 19 et supérieur. Android lui-même ne le prend pas en charge à partir de 4.4
mradzinski

9

Dans mon cas, la machine Linux a adb devicesmontré

List of devices attached 
44b194f5    no permissions

Puis redémarré le serveur adb

sudo adb kill-server

puis

sudo adb start-server

puis connectez votre appareil, activez le débogage et tapez

adb devices
List of devices attached 
44b194f5    device

Enfin, a pu fonctionner sur l'appareil


7

Dans mon cas, mon application utilise des bibliothèques natives. Chaque plate-forme nécessite la création des bibliothèques correspondantes.

Ainsi, la lib native de la plateforme x86 (ou de toute autre) n'est pas générée, vous devez avoir ajouté un filtre quelque part:

Il existe plusieurs endroits où les filtres abi peuvent être spécifiés:

  • Application.mk ajoute la plate-forme dont vous avez besoin comme ceci:

    APP_ABI := armeabi armeabi-v7a x86
    
  • build.gradle

    trouvez abiFilters et ajoutez la plate-forme dont vous avez besoin comme ceci:

    abiFilters   "armeabi","armeabi-v7a","x86"
    


6

L'appareil prend en charge x86, mais l'APK ne prend en charge que armeabi-v7a)

On dirait que vous avez utilisé une x86image dans l'émulateur.

Créez-en un autre. Choisissez l'onglet "autres images" pour rechercher des appareils bras, si nécessaire.

Ou exécutez sur un appareil réel. Le dépôt que vous avez répertorié est destiné à fonctionner sur un Raspberry Pi 3 / ODroid, je pense.


6

Peut confirmer, l'activation / désactivation du débogage USB dans les options du développeur a résolu le problème. Peut-être même annuler la fenêtre "Sélectionner la cible de déploiement" dans Android Studio et essayer de réexécuter l'application après avoir basculé le débogage USB.


5

Pour moi, cela a fonctionné en changeant l'option de câble de

-> Charge Only. 

À

-> Transfer file.

4

Allez simplement sur l'appareil Settings >> Developer Options >> Restore Default Settingspuis activezUSB debugging


3

Le code ci-dessous a fonctionné pour moi:

ndk {
     abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}

2

Sur mon appareil physique, j'ai commencé à avoir ça. Le correctif consistait à accéder aux paramètres du développeur et à désactiver et activer le débogage USB.


2

Si vous utilisez Ubuntu:

  1. assurez-vous que le débogage USB est activé
  2. vérifiez votre connexion par câble
  3. sur la barre de notification, vérifiez la notification du système Android et appuyez dessus pour changer l'état de charge en transfert de fichiers
  4. maintenant, allez terminal et tapez: adb devices après avoir exécuté cette commande adb restart et votre appareil apparaît dans la liste


0

Testez votre code sur un vrai téléphone. Si vous rencontrez toujours le même problème, importez à nouveau votre code et avant cela, vous devez mettre à jour votre SDK et créer un nouvel émulateur avec l'image système ARM.


0

Cela signifie souvent que vous n'avez pas autorisé votre ordinateur portable / ordinateur à accéder à votre appareil. Jetez un œil à votre appareil et cliquez sur le bouton "Autoriser l'accès" ainsi que sur les autorisations de débogage.


0

L'exécution d'un AVD à l'aide du processeur x86 est 10 fois plus rapide que l'utilisation de l'émulateur ARM, mais la plupart du temps, vous ne compilez que votre APK pour ARM. Pour avoir une émulation plus rapide à l'aide d'un AVD x86, j'ai dû faire ce qui suit (pour un projet Cocos2d-x):

  • app / jni / Android.mk

    APP_ABI := armeabi-v7a:x86
    
  • gradle.properties

    PROP_APP_ABI=armeabi-v7a:x86
    
  • app / build.gradle

    android {
        ...
        defaultConfig {
            ...
            ndk {
                abiFilters = []
                abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
            }
        }
    }
    

0

Le redémarrage de l'appareil a résolu le problème pour moi (React-native)


0

Cela m'est arrivé après la mise à jour d'Android Studio. Dans mon cas, cela s'est produit parce que le paramètre de construction n'est pas automatiquement configuré dans x86Debug-x86. Changez-le simplement en ouvrant Build >> Sélectionnez Build Variant >> Changez l'option de variante de construction d'armeabi-v7a en x86Debug-x86 ou tout ce dont vous avez besoin dans l'émulateur.


0

Essayez d'activer les sources inconnues à partir des options de sécurité. Cela a fonctionné pour moi.


0

je vois ça

Si vous utilisez CMake pour vos builds, vérifiez le fichier \ proj.android \ gradle.properties et mettez à jour PROP_APP_ABI pour inclure les builds pour x86, ou vous pouvez simplement utiliser l'armeabi-v7a ou arm64-v8a Android images.

Exemple: PROP_APP_ABI = armeabi-v7a: arm64-v8a: x86

Si vous n'utilisez pas cmake, regardez dans \ proj.android \ app \ jni \ Application.mk au cas où vous auriez besoin de modifier le paramètre ABI.


Bienvenue dans StackOverflow, ajoutez plus de description et de code si nécessaire pour comprendre la réponse, car cela résoudra le problème de quelqu'un dès que possible.
Nensi Kasundra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.