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?


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


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 .


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.


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


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)


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


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


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"
    


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.


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.


5

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

-> Charge Only. 

Para

-> Transfer file.

4

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


3

O código abaixo funcionou para mim:

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

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.


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


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.


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.


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})
            }
        }
    }
    

0

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


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.



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á.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.