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?

Alexandre Ibarra
la source
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
github.com/jreyes/mirror
Alexander Ibarra
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 .

Bruce Lee
la source
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.

user3157940
la source
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

rafahoro
la source
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)

rudicjovan
la source
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!!!

Roopesh Reddy
la source
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

Sachin K
la source
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"
    
yao
la source
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.

OneCricketeer
la source
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.

Val Geyvandov
la source
5

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

-> Charge Only. 

À

-> Transfer file.
Sushil Chaudhary
la source
4

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

Iman Marashi
la source
3

Le code ci-dessous a fonctionné pour moi:

ndk {
     abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}
C-lio Garcia
la source
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.

svguerin3
la source
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
mohsen khalili
la source
1

adb kill-server

serveur de démarrage adb

Cela fonctionne pour moi sur Windows OS.

siddhartha shankar
la source
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.

Adi
la source
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.

NVA
la source
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})
            }
        }
    }
    
nikc
la source
0

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

O. Borcuhin
la source
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.

Rico Valentino
la source
0

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

Sathish Subramani
la source
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.

David Arribas
la source
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