Qual é o motivo do erro “O dispositivo é compatível com x86, mas o APK é compatível apenas com armeabi-v7a”

91

Estou brincando com o Android Studio testando alguns projetos do GitHub e, quando tento emular o apk, ele não me permite escolher um emulador.

Diz-me:

O dispositivo é compatível com x86, mas o APK é compatível apenas com armeabi-v7a

Por que ele faz isso?

Alexandre Ibarra
fonte
Qual AVD você usou? Qual imagem do sistema? Qual projeto GitHub?
OneCricketeer
Em outras palavras, as imagens Intel x86 não rodarão código ARM.
OneCricketeer
github.com/jreyes/mirror
Alexander Ibarra
Eu queria usar um Nexus 10 rodando android 5.1
Alexander Ibarra
Ok, e você usou a imagem do sistema ARM eabi v7 ou uma imagem Intel Atom x86? Verifique o seu gerenciador de SDK o que você instalou.
OneCricketeer

Respostas:

87

Eu tive o mesmo problema, verifiquei o build.gradle do módulo: app . Acontece que existe essa configuração:

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

quando comentei tudo, tudo funcionou bem.

Eu estava tentando lidar com o projeto React Native Android .

Bruce Lee
fonte
1
Acho que você quis dizer build.gradle;)
Ryan James
2
Eu tive o mesmo problema e para mim "x86" estava faltando lá
Thomas
1
Isso funcionou para mim - no entanto, tudo que eu tive que fazer foi permitir a depuração no meu dispositivo real e eu poderia descomentar esta linha novamente.
Boomer Rogers
Qual seção devo colocar ndk?
Ömrüm Çetin
Não funcionou para mim em java / kotlin, ele cria, mas o aplicativo trava.
mozilla_firefox
77

Desligue a depuração USB e ligue-a novamente no dispositivo de hardware.

user3157940
fonte
10
Eu normalmente votaria contra esses comentários, mas na verdade, funciona!
Ahmed Hegazy
2
Isso funciona porque o Allow computer to connect to this deviceprompt não foi exibido na primeira vez, mas sim na segunda vez.
Kyle Clegg
Isso funcionou em um computador que eu tinha "lembrar para este computador" marcado quando iniciei um novo projeto no GitHub.
Z. Bagley
Então. Após adicionar uma nova arquitetura de processadores ao filtro ABI - o estúdio parou de reconhecer o dispositivo. Essa dica me ajudou a resolver o problema. !!
Vetalll
Para mim, isso está acontecendo no Emulator
Akhil Surapuram
42

No Android Studio, selecione o menu Build ,

insira a descrição da imagem aqui

em seguida, clique em Selecionar Variante de Compilação ... e na janela 'Variantes de Compilação' selecione x86Debug (ou versão)

insira a descrição da imagem aqui

PS: Estou usando o Android Studio 2.3 no Mac

Rafahoro
fonte
Isso funcionou perfeitamente - minha configuração do gradle definiu as compilações ARM e x86, mas eu tive que instruir o Android Studio a compilar a variante x86 em oposição à variante ARM (provavelmente para iOS). Obrigado!
jevon 01 de
Observe que você precisa ter o projeto selecionado, ou a opção para fazer isso ficará esmaecida. Eu acho que há algumas outras condições que também podem esmaecer - você pode precisar fazer uma limpeza e reconstruir.
Dronz 01 de
16

No Linux: Arquivo> Invalidar cache / Reiniciar no telefone: Em vez disso, carregue esta alteração do dispositivo para transferir fotos (PTP)

rudicjovan
fonte
1
Nenhuma das respostas acima estava funcionando. Isso funcionou. Muito obrigado.
thedarkpassenger de
Mudei de Camera (PTP)para Media Device (MTP)e funciona também. Obrigado!
Konayuki
11

Tive um problema semelhante e resolvi-o adicionando o valor "x86" à lista "abiFilters" como abaixo -

[Abra o arquivo build.gradle (Module: app)] e procure " ndk " em deafultSection e adicione "x86" a ele!

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

Espero que ajude!!!

Roopesh Reddy
fonte
1
Você provavelmente deve desistir armeabise estiver visando o SDK 19 e superior. O próprio Android não oferece suporte a partir de 4,4
mradzinski
9

No meu caso de máquina Linux adb devicesmostrou

List of devices attached 
44b194f5    no permissions

Em seguida, reiniciou o servidor adb

sudo adb kill-server

e depois

sudo adb start-server

em seguida, conecte seu dispositivo, ative a depuração e digite

adb devices
List of devices attached 
44b194f5    device

Finalmente consegui rodar no dispositivo

Sachin K
fonte
7

No meu caso, meu aplicativo usa algumas bibliotecas nativas. Cada plataforma requer que as bibliotecas correspondentes sejam construídas.

Portanto, a lib nativa da plataforma x86 (ou qualquer outra) não é gerada. Você deve adicionar um abifilter em algum lugar:

Existem vários lugares onde os filtros abi podem ser especificados:

  • Application.mk adicione a plataforma de que você precisa assim:

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

    encontre o abiFilters e adicione a plataforma necessária como esta:

    abiFilters   "armeabi","armeabi-v7a","x86"
    
yao
fonte
6

O dispositivo é compatível com x86, mas o APK é compatível apenas com armeabi-v7a)

Parece que você usou uma x86imagem no emulador.

Crie um separado. Escolha a guia "outras imagens" para encontrar dispositivos de braço, se for necessário.

Ou execute em um dispositivo real. O repo que você listou deve ser executado em um Raspberry Pi 3 / ODroid, eu acho.

OneCricketeer
fonte
6

Pode confirmar, ativar / desativar a depuração USB nas Opções do desenvolvedor resolveu o problema. Talvez até cancele a janela "Select Deployment Target" no Android Studio e tente executar o aplicativo novamente após alternar a depuração USB.

Val Geyvandov
fonte
5

Para mim, funcionou mudar a opção de cabo de

-> Charge Only. 

Para

-> Transfer file.
Sushil Chaudhary
fonte
4

Vá para o dispositivo Settings >> Developer Options >> Restore Default Settingse ativeUSB debugging

Iman Marashi
fonte
3

O código abaixo funcionou para mim:

ndk {
     abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}
C-lio Garcia
fonte
2

No meu dispositivo físico, comecei a entender isso. A correção foi entrar em Configurações do desenvolvedor e desligar e ativar a depuração USB.

svguerin3
fonte
2

Se você usa Ubuntu:

  1. certifique-se de que a depuração usb está ATIVADA
  2. verifique a conexão do cabo
  3. na barra de notificação, verifique a notificação do sistema Android e toque nela para alterar o estado de cobrança para transferência de arquivos
  4. agora vá para o terminal e digite: adb devices depois de executar este comando adb restart e seu dispositivo é mostrado na lista
Mohsen Khalili
fonte
1

adb kill-server

adb start-server

Está funcionando para mim no sistema operacional Windows.

siddhartha shankar
fonte
0

Teste seu código em um telefone real. Se você ainda tiver o mesmo problema, importe seu código novamente e antes disso você deve atualizar seu SDK e criar um novo emulador com a imagem do sistema ARM.

Adi
fonte
0

Muitas vezes, isso significa que você não concedeu ao seu laptop / computador acesso ao dispositivo. Dê uma olhada no seu dispositivo e clique no botão "Permitir acesso", bem como nas permissões de depuração.

NVA
fonte
0

Executar um AVD usando o processador x86 é 10x mais rápido do que usar o emulador ARM, mas na maioria das vezes você está apenas compilando seu APK para ARM. Para que a emulação seja executada mais rapidamente usando um AVD x86, tive que fazer o seguinte (para um projeto 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
fonte
0

Reiniciar o dispositivo resolveu o problema para mim (React-nativo)

O. Borcuhin
fonte
0

Aconteceu comigo depois de atualizar o Android Studio. No meu caso, isso aconteceu porque a configuração de compilação não é configurada automaticamente no x86Debug-x86. Basta alterá-lo abrindo Build >> Selecionar Variante de Compilação >> Alterar a opção de variante de compilação de armeabi-v7a para x86Debug-x86 ou o que você precisar no emulador.

Rico Valentino
fonte
0

Tente habilitar Fontes desconhecidas em Opções de segurança. Funcionou para mim

Sathish Subramani
fonte
0

eu vejo isso

Se você estiver usando o CMake para suas compilações, verifique o arquivo \ proj.android \ gradle.properties e atualize o PROP_APP_ABI para incluir as compilações para x86 ou, alternativamente, você pode apenas usar o armeabi-v7a ou arm64-v8a Android imagens.

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

Se você não estiver usando o cmake, procure em \ proj.android \ app \ jni \ Application.mk caso precise alterar a configuração de ABI lá.

David Arribas
fonte
Bem-vindo ao StackOverflow, adicione mais alguma descrição e código se for necessário para entender a resposta, porque isso resolverá o problema de alguém o mais rápido possível.
Nensi Kasundra