Fazendo o emulador do Android funcionar mais rápido

251

O emulador do Android é um pouco lento. Para alguns dispositivos, como o Motorola Droid e o Nexus One, o aplicativo é executado mais rapidamente no dispositivo real do que o emulador. Este é um problema ao testar jogos e efeitos visuais.

Como você faz o emulador funcionar o mais rápido possível? Eu estive brincando com seus parâmetros, mas ainda não encontrei uma configuração que mostre uma melhoria notável.

hpique
fonte
1
todos os meus aplicativos executados mais rapidamente no dispositivo
16
É engraçado porque o simulador do iPhone é exatamente o oposto. Os aplicativos são mais lentos no dispositivo. Na maioria dos casos, prefiro um emulador mais lento, porque estimula você a melhorar seu aplicativo, mas às vezes você só quer vê-lo funcionar como em um dispositivo real.
Hpique
1
É possível fazê-lo correr muito mais rápido aka normalmente usando VirtualBox - ver stackoverflow.com/a/6058689/40961
David d C e Freitas
5
O iOS e o Windows Mobile usam simuladores, enquanto o Android usa emuladores. Os simuladores reimplementam todas as bibliotecas móveis e APIs usando bibliotecas host e, portanto, são rápidas. Os emuladores usam as mesmas bibliotecas dos dispositivos reais, por isso é mais lento. Em termos de Android, se você usar uma máquina virtual Android, será muito rápida. Nós fornecemos uma vm gratuita aqui: leapdroid.com
huisinro 23/06
2
... e quão louco é que, seis anos depois, e mesmo com o HAXM e a imagem do sistema x86 e um ambiente de desenvolvimento bem especificado, o emulador do Android ainda é lento como melaço?
Aroth

Respostas:

229

Página oficial

~ 50% mais rápido

Janelas:

  • Instale "Intel x86 Emulator Accelerator (HAXM)" => SDK-Manager / Extras
  • Instale "Imagens do sistema Intel x86 Atom" => SDK-Manager / Android 2.3.3
  • Vá para a pasta raiz do Android SDK e navegue para extras \ intel \ Hardware_Accelerated_Execution_Manager. Execute o arquivo IntelHaxm.exe para instalar. (no Android Studio, você pode navegar para: Configurações -> SDK do Android -> Ferramentas do SDK -> Acelerador do emulador Intel x86 (instalador HAXM))

  • Criar AVD com CPU / ABI "Intel atom x86"

  • Execute o emulador e verifique no console que o HAXM está sendo executado (abra uma janela do prompt de comando e execute o comando: sc query intelhaxm)

insira a descrição da imagem aqui

Também não se esqueça de instalar este

insira a descrição da imagem aqui

PS durante a criação do AVD adiciona memória de emulação: Hardware / Novo / Tamanho da ram do dispositivo / valor de configuração 512 ou mais

Linux:

  • Instale o KVM: abra o GOOGLE, escreva "kvm installation"
  • Criar AVD com CPU / ABI "Intel atom x86"
  • Executar a partir da linha de comando: emulador -avd avd_name -qemu -m 512 -enable-kvm
  • Ou execute a partir do Eclipse: Executar / Executar configurações / guia "Destino" -> marque Intel x86 AVD e, na janela "Opções de linha de comando adicionais do emulador", adicione: -qemu -m 512 -enable-kvm (clique em Executar)

insira a descrição da imagem aqui

PS Para Fedora , para Ubuntu

OS-X:

  • No Android SDK Manager, instale a imagem do sistema Intel x86 Atom
  • No Android SDK Manager, instale o Intel x86 Emulator Accelerator (HAXM)
  • No localizador, vá para o local de instalação do Intel Emulator Accelerator e instale o IntelHAXM (abra o dmg e execute a instalação). Você pode encontrar o local colocando o mouse sobre a entrada Emulator Accelerator no SDK Manager.
  • Crie ou atualize um AVD e especifique o Intel Atom x86 como a CPU. Acelerador do emulador Intel x86 (HAXM) mostrando o local

PS: Confira esta ferramenta, muito conveniente, mesmo julgamento

Gennadiy Ryabkin
fonte
8
Isso funciona no OSX também. Você precisa instalar /extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmgdepois de baixar o pacote do gerenciador do SDK.
Jarett Millard
5
As instruções do Windows com "Usar GPU do host" me deram um emulador super-rápido! (Eu tenho um processador Intel suportado e uma placa de vídeo da nVidia.) As animações são suaves (na maioria das vezes ; outras vezes, com muito pouco solavanco)! Observe que você precisa reiniciar o Eclipse para o AVD Manager para pegar a opção de CPU Intel Atom (x86) . Dica: não aloque muita RAM. Com 1 GB de RAM, o emulador falhou ao iniciar (com GPU), mas com 512 MB de RAM, ele rodou sem problemas e inicializou muito rapidamente (novamente com GPU).
ADTC 28/07
Descobri que o LogCat recebe spam com muitos avisos de rastreamento. Para filtrá-los, use ^(?!.*(nativeGetEnabledTags)).*$como o filtro de texto. Eu relatei isso como um problema de bug . Além disso, acho que você precisa desligar corretamente o dispositivo emulador (mantenha pressionado o botão liga / desliga e selecione Desligar ) para evitar erros ao iniciá-lo da próxima vez (eu poderia fechar o emulador ARM, mas com o emulador Intel, apenas fechar parece criar problemas).
ADTC 28/07
Eu daria a você +100 se pudesse. Funciona no Windows 8 e o desempenho aumentou muito!
Paolo M
2
Eu tive que desativar a tecnologia Hyper V primeiro por meio de programas e recursos no painel de controle para que isso funcionasse.
Mike Flynn
34

ATUALIZAÇÃO: Agora que uma imagem Intel x86 está disponível, a melhor resposta é pelo zest acima.

Como o CommonsWare apontou corretamente, o emulador é lento porque emula uma CPU ARM, que requer tradução para os códigos de operação da Intel. Essa virtualização mastiga a CPU.

Para tornar o emulador mais rápido, você precisa fornecer mais CPU. Comece com uma CPU rápida ou atualize, se puder.

Em seguida, dê ao emulador mais CPU que você possui:

  1. Desativar Hyperthreading - Como o emulador não parece utilizar mais de um núcleo, o hyperthreading na verdade reduz a quantidade total de tempo de CPU que o emulador terá. Desativar o HT reduzirá a velocidade os aplicativos que tiram vantagem de várias CPUs. O Hyperthreading deve estar desativado no seu BIOS.
  2. Faça o emulador ser executado em uma CPU diferente da CPU 0 - Isso tem um impacto muito menor do que desativar o HT, mas ajuda alguns. No Windows, você pode especificar em qual CPU um processo será executado. Muitos aplicativos mastigam a CPU 0 e, por padrão, o emulador é executado na CPU 0. Altero o emulador para rodar no último. Observe que no OS X você não pode definir afinidade (consulte: /superuser/149312/how-to-set-processor-affinity-on-a-mac ).

Estou vendo algo em torno de uma melhoria de 50% com essas duas alterações.

Para definir a afinidade do processador no Windows 7:

  1. Abra o Gerenciador de tarefas
  2. Clique em Exibir todos os processos (para executar como administrador, caso contrário, você não poderá definir a afinidade do processador)
  3. Clique com o botão direito do mouse em emulator.exe e escolha Definir afinidade ...
  4. Na caixa de diálogo Definir afinidade, selecione apenas a última CPU

Nota: Quando você altera a afinidade dessa maneira, ela é alterada apenas durante a vida útil do processo. No próximo começo, você deve fazer isso novamente.

insira a descrição da imagem aqui

mcohen75
fonte
22
A porcentagem de CPU dobrou quando você desabilitou o hyperthreading porque reduziu pela metade a quantidade de processadores lógicos.
Timothy003
1
Funciona como charme, mas .. Você sabe como fazê-lo no Ubuntu 11.10?
emeraldhieu
1
@ Timothy003 sim absolutamente correto. E dobrou a CPU que o emulador usará.
mcohen75
3
Você vê apenas uma duplicação nos números mostrados pelo gerenciador de tarefas; não na realidade. Se você não está executando software suficiente para gerar trabalho suficiente para ter o equivalente a pelo menos 4 threads com 100% da CPU, os poucos aplicativos que fazem uso pesado da CPU ainda obterão efetivamente quase todo o núcleo, não o meio núcleo que sua ingênua suposição de o que o gerenciador de tarefas está exibindo significa.
Dan Is Fiddling Por favor
3
Para confirmar o que @Dan Neely diz: Eu tenho um aplicativo de núcleo único, que queima apenas 100% da CPU. Quando eu tenho HT, ele mostra cerca de 25%, sem ele mostra cerca de 50%, mas na verdade calcula o que ele precisa calcular ao mesmo tempo. Portanto, não há diferença (pelo menos na Sandy Bridge).
precisa saber é o seguinte
17

Eu gostaria de sugerir dar uma volta ao Genymotion . Ele roda no VirtualBox da Oracle e atinge legitimamente 60 fps em um sistema moderado.

Aqui está uma captura de tela de uma das minhas oficinas, rodando em um modelo MacBook Air de gama baixa de 2012:

Emulador Nexus 7 rodando a 56,6 fps

Se você não consegue ler o texto, é um emulador do Nexus 7 rodando a 56,6 fps. O bônus adicional (grande!) É que o Google Play e o Google Play Services são fornecidos com as máquinas virtuais.

(A fonte da animação demonstrada pode ser encontrada aqui .)

Paul Lammertsma
fonte
12

Ative a aceleração de hardware da GPU (além do HAXM da Intel), se você estiver usando a API 15 v3 ou mais recente e o SDK Tools v17 +. A aceleração gráfica do emulador aproveita o hardware gráfico do computador de desenvolvimento, especificamente sua unidade de processamento gráfico (GPU), para acelerar o desenho da tela. Isso dá um aumento notável na velocidade.

Para ativar a aceleração gráfica ativada por padrão no seu emulador : ao criar o AVD, na seção Hardware, clique em Novo, selecione emulação de GPU e defina o valor como Sim.

Para habilitar a aceleração apenas em tempo de execução : use o sinalizador -gpu ao iniciar o emulador como este:

emulator -avd <avd_name> -gpu on

Fonte: Tutorial do Google Usando o emulador .

John Lehmann
fonte
10

Editar Embora o uso das imagens da Intel obtenha alguns ganhos de desempenho, o desempenho obtido com o Genymotion é muito maior. Veja a resposta de Paul Lammertsma .

Resposta Anterior

Com o ADT rev 17, o emulador suporta a execução de imagens do sistema x86 no modo de virtualização no Windows e no Mac OS X. Isso tem um impacto notável no desempenho.

ADT rev 17 notes: http://android-developers.blogspot.jp/2012/03/updated-sdk-tools-and-adt-revision-17.html

Configurando a aceleração de máquina virtual: http://developer.android.com/guide/developing/devices/emulator.html#accel-vm

ThomasW
fonte
7

Recentemente, mudei de um Core 2 @ 2.5 com 3 GB de RAM para um i7 @ 1.73 com 8 GB de RAM (ambos os sistemas executaram o Ubuntu 10.10) e o emulador é executado pelo menos duas vezes mais rápido agora. Jogar mais hardware certamente ajuda.

TripleG
fonte
Isso não é realmente uma solução: pode fazer com que o emulador tenha uma taxa de transferência mais alta por vez, mas na verdade não fará com que seja executado mais rápido.
Clearer
4

Percebi que o emulador padrão é apenas o Core 0, onde a maioria dos aplicativos do Windows assumirá o padrão de "qualquer" núcleo. Além disso, se você colocá-lo em outro núcleo (como o último), isso pode fazer o emulador ficar louco. Se puder, tente colocar os aplicativos de uso pesado da CPU nos outros núcleos da CPU para aumentar a velocidade.

Em termos de hardware, obtenha a CPU mais rápida possível para os aplicativos de núcleo único. Mais de 2 núcleos podem não ter uma grande diferença em termos de desempenho do emulador.

Eclipse + o emulador do Android consomem uma tonelada de RAM. Eu recomendaria 3 GB de RAM pelo menos porque usei um sistema com 2 GB de RAM e diminuiu a velocidade porque o sistema ficou sem RAM e começou a usar o arquivo de paginação.

Eu sinto que as melhores CPUs para ele provavelmente terão um relógio alto (use apenas o relógio como uma medida para CPUs da mesma série btw), lidem bem com operações não SIMD e tenham um mecanismo de aumento de turbo. Não há muitos benchmarks baseados em Java, mas, em geral, procuram benchmarks de aplicativos como compressão e escritório. Não olhe para jogos ou mídia, pois esses são bastante afetados pelo SIMD. Se você encontrar um Java, melhor ainda.

Joe P
fonte
4

Neste ano, o Google I / O (2011), o Google demonstrou um emulador mais rápido. O problema não está no código de bytes entre o ARM e no x86, mas na renderização do software realizada pelo QEMU. Eles ignoram a renderização do QEMU e enviam a renderização diretamente para um servidor X que eu acredito. Eles mostraram um jogo de carro com desempenho e fps realmente bons.

Gostaria de saber quando isso estará disponível para os desenvolvedores ...

Cesar
fonte
Alguma notícia desse emulador? Qual era o nome dele?
alcor
Não tenho notícias. Não acompanhei as atualizações do emulador do Android nos últimos anos.
César
3

O Google anunciou recentemente um novo emulador para Android. É muito mais rápido e melhor que o antigo. Você pode encontrar mais informações sobre isso aqui .

Koc
fonte
1

Eu acho que é porque a máquina virtual clr usa cpu diretamente sem tradução de código opcode. Pode ser uma otimização para o aplicativo clr ou pode ser o Windows Mobile / Windows Phone 7 iniciado no processador INTEL. Plataforma Android baseada em Linux e, teoricamente, você pode iniciar o Android na máquina virtual no ambiente i686. Nesse caso, máquinas virtuais como vmware podem executar alguns códigos de operação diretamente. Mas essa opção será permitida apenas se você escrever no Java. Como o Java interpreta o código de byte ou pré-compila antes da execução. consulte: http://www.taranfx.com/how-to-run-google-android-in-virtualbox-vmware-on-netbooks

assad
fonte
1

Obrigado @zest! Funcionou como um encanto. Algumas coisas a observar: É necessário aplicar o hotfix da Intel para o HAXM para lidar com o problema de pânico do kernel: http://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager Além disso, observe , se você tiver mais de um abi, precisará desinstalá-lo devido a um erro na versão mais recente da API do Android (r19): https://code.google.com/p/android/issues/detail?id= 66740 (remova armeabi-v7a nesse caso, pois você deseja o x86 abi). Além dos 45 minutos que levei para resolvê-los, foi um exercício muito gratificante em termos do desempenho aprimorado do emulador.

horcle_buzz
fonte
1

Você também pode experimentar o Emulador do Visual Studio para Android , que também pode ser instalado como um emulador independente (não é necessário o Visual Studio). Observe que ele pode ser instalado apenas em sistemas Windows Pro ou superior.

David Dostal
fonte
1

Use Genymotion em vez de emulador. Genymotion tem melhor desempenho https://www.genymotion.com

Oleg Tarashkevich
fonte
1

escolha um emulador de baixa resolução (por exemplo: Nexus S) se você não tiver uma boa placa gráfica (como eu)

Dan Alboteanu
fonte
0

Estou usando o CPU / ABI da Intel (86). Criei outro emulador usando o ARM (armeabi-v7a) e encontrei uma melhora bastante na velocidade. Estou usando a plataforma 4.1.2 API nível 16

strange_developer
fonte
0

Eu espero que isso te ajude.

Goto to your BIOS settings. Enable your Virtualization technology in your settings..

Resolveu o meu problema ...

RajeshVijayakumar
fonte
0

Atualize seu Android Studio atual para o Android Studio 2.0 E também atualize as imagens do sistema.

O emulador do Android Studio 2.0 é executado ~ 3x mais rápido que o emulador anterior do Android e, com os aprimoramentos do ADB, agora você pode enviar aplicativos e dados 10 vezes mais rápido para o emulador do que para um dispositivo físico. Como um dispositivo físico, o emulador oficial do Android também inclui o Google Play Services, para que você possa testar mais funcionalidades da API. Finalmente, o novo emulador possui novos e avançados recursos para gerenciar chamadas, bateria, rede, GPS e muito mais.

Umer
fonte