Melhorar o desempenho do emulador Android no Windows 7 x64

9

Estou executando o Eclipse Helios no Windows 7 x64. Eu tenho um Core 2 Duo 2.0 Ghz com 4.0 GB que acho que deve ser suficiente, pois nunca tive problemas de desempenho com outras ferramentas de desenvolvimento.

Quando executo meu primeiro aplicativo no Android Emulator (2.3.3 e 3.0), foram necessários pelo menos 5 minutos para carregar o sistema operacional e, no início, ele nem executou o aplicativo HelloAndroid. Mesmo quando eu consegui executar o aplicativo, o desempenho era insuportável.

Eu tentei várias coisas para melhorar o desempenho, mas nenhuma melhoria importante é mostrada. Eu acho que estou perdendo alguma coisa.

Coisas que tentei:

No AVD Manager

  1. Tamanho da RAM do dispositivo para 512.
  2. Resolução para 640 x 480.
  3. Instantâneo ativado.

Em Preferências do projeto \ Android

  1. \ Launch \ -cpu-delay 0 -no-boot-anim -cache ./cache -avd Android3

Coisas que não posso tentar: - Implantando em um dispositivo (não possui nenhum).

A propósito, eu tive o mesmo problema em um MAC Mini 2,66 GHz 2 GB, mas essas configurações fizeram a diferença.

Qualquer um pode dar alguma dica para melhorar esse desempenho ruim.

Mikywan
fonte
Obtenha um quad-core com hyperthreading a 2,8 GHz e uma placa de vídeo insana. Heh. Mas, falando sério, o emulador é lento. De um modo geral, a emulação é sempre lenta, a menos que seu hardware seja uma ordem de magnitude mais poderosa. Eu não acho que você conseguirá funcionar muito melhor do que você já tem.
Matthew Leia
6
Na verdade, o emulador ainda não suporta múltiplos núcleos. Então o relógio realmente importa. Mesmo na minha nova máquina de desenvolvimento, tenho problemas de desempenho, especialmente com o favo de mel. Estou falando do mais recente i7 quad core, 8 GB de memória e um disco rígido de estado sólido.
Bryan Denny
Ha, então meu antigo Pentium 4 de 3.0 GHz deve executá-lo melhor (com nada mais importante em segundo plano)? Louco.
Matthew Leia
@Bryan Denny Mesmo que o emulador não seja multithread, fornecer vários núcleos ajuda a mudar a carga de trabalho para núcleos menos usados, mas isso diminui a estabilidade, resultando em falhas periódicas. Portanto, é uma troca de velocidade / estabilidade, mas eu prefiro usar todos os núcleos para velocidade.
onik 30/08

Respostas:

6

O emulador é lento porque é um qemu que emula uma arquitetura de CPU totalmente diferente conforme é usada pelos PCs de consumo: ARM (vs. x86 (_64) no seu PC)

Isso significa que todas as instruções de CPU na CPU ARM do emulador devem ser emuladas, o que é, por si só, lento . Além disso, o emulador é AFAIK de thread único. Isso significa que a aceleração só pode ser alcançada por núcleos rápidos de CPU - os núcleos múltiplos não ajudarão aqui - e uma quantidade razoável de RAM.

Fluxo
fonte
A emulação de uma CPU tende a ser lenta, mas o emulador de telefone também está emulando o ARM e é muito mais rápido. É mais do que apenas os conjuntos de instruções. O favo de mel parece ser muito mais complexo (e provavelmente requer um processador ARM mais poderoso). GoogleTV é x86, então eu pergunto o que o seu desempenho emulador será como ... (Se eles emular x86 ou executá-lo como um processo nativo.)
idbrii
3

Você pode tentar usar um emulador de terceiros que, pela minha experiência, funciona muito bem. Não vou lhe dizer que não vai demorar de vez em quando, mas faça o teste e você verá o quão melhor esse emulador é executado.

Não é um aplicativo gratuito, mas também não é caro. Você pode encontrá-lo no YouWave Android Emulator . Experimente o teste e volte para nós;)

Hallaghan
fonte
0

O favo de mel (3.0) é notoriamente lento no emulador. Você pode tentar fazer com que a maioria das suas funcionalidades funcione primeiro no telefone, para minimizar o uso do Honeycomb.

Existem algumas configurações do BIOS para habilitar o suporte à virtualização em sua CPU. Acho que ativá-los pode acelerar o emulador, mas não tenho certeza. (Os nomes exatos para o seu sistema não sei, mas eles terão "virtualização" ou "vt-x" ou algo no nome.

Você também pode tentar dedicar um processador ao emulador. Você pode alterar a "afinidade do processador" para processos no Windows usando o gerenciador de tarefas. Se você o alterar para que seu emulador prefira um processador e suas outras tarefas principais (como o eclipse) evitem esse processador, você poderá obter alguns ganhos. Se o seu processador estiver com hyperthread, trate os dois núcleos virtuais como um núcleo e atribua o emulador a preferir os dois núcleos virtuais.

(Encontrar os processos pode ser mais fácil com o ProcessExplorer porque você pode clicar no botão de destino e, em seguida, clicar em uma janela e ele mostra o processo dessa janela.)


Atualização: consulte a seção Usando a aceleração de hardware nos documentos do Android para ver como usar sua GPU e suporte à virtualização em sua CPU para acelerar o emulador.

idbrii
fonte
Os conjuntos aprimorados de instruções da CPU não ajudarão a acelerar o emulador, porque é basicamente o qemu que emula uma CPU ARM.
Flow
A menos que eles ajudem o qemu a processar as instruções do ARM em uma taxa mais rápida. (Para que ele possa corresponder à taxa do ARM.) Lembre-se de que o Honeycomb é mais lento no emulador do que em um dispositivo real. Digamos que o ARM possuísse instruções SIMD, mas o x86 não possuía, e sim as emulava como operações seriais. A ativação de uma extensão de CPU SIMD no x86 resolveria esse problema. Dito isso, não sei o que o suporte à virtualização faz, exceto que ele visa melhorar o desempenho ao simular CPUs.
Idbrii 28/11
Virtualização e emulação não são iguais.
Lie Ryan
@ Lie: Verdade, mas isso não vem ao caso: o suporte à virtualização da Intel / AMD (teoricamente) torna o emulador do Android mais rápido. Alguém provavelmente é impreciso com a nomeação. (Eu acho que o suporte à CPU funciona tanto para virtualização quanto para emulação de CPU, para que os fornecedores de CPU não estejam realmente errados.) Caramba, só porque eles não são os mesmos não significa que não podem ser combinados um sistema: "QEMU é um emulador e virtualizador de máquinas de código aberto e genérico" .
Idbrii