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.