Cursor Emulador ADB
Extensão para o Cursor IDE que adiciona um painel chamado EMULADOR dentro do Explorer, permitindo visualizar e controlar um dispositivo Android diretamente dentro da IDE usando ADB.
O objetivo do projeto é oferecer uma experiência parecida com um emulador integrado, útil para desenvolvimento Flutter, Android e testes rápidos, sem depender da janela externa do scrcpy.
Conceito do projeto
Este projeto cria um painel interno no Cursor chamado EMULADOR.
Dentro desse painel é possível:
- visualizar a tela do Android em tempo real;
- selecionar qual dispositivo conectado usar;
- clicar na tela do dispositivo (tap);
- realizar gestos de swipe;
- simular toque longo (long press);
- rolar a tela com a roda do mouse;
- usar atalhos de teclado para navegação;
- usar botões de navegação: Voltar, Home e Recentes;
- rotacionar a tela (Portrait / Landscape);
- enviar texto simples para o dispositivo;
- colar o clipboard do VS Code diretamente no dispositivo;
- enviar arquivos para
/sdcard/ via adb push;
- tirar print da tela;
- gravar a tela do Android;
- ajustar o zoom da visualização (40 %–150 %);
- ver bateria e IP do dispositivo na status bar;
- abrir o painel Logcat com filtragem em tempo real;
- salvar prints e gravações automaticamente na pasta Downloads;
- consultar logs da extensão diretamente pelo Cursor.
A extensão não embute a janela nativa do scrcpy.
Em vez disso, ela usa o ADB para:
- capturar a tela com
adb exec-out screencap -p | gzip -1;
- exibir a imagem dentro de uma Webview do Cursor;
- enviar comandos de toque com
adb shell input tap;
- enviar gestos com
adb shell input swipe;
- gravar a tela com
adb shell screenrecord;
- salvar prints e vídeos na máquina local;
- transmitir o logcat com
adb logcat.
Sobre o scrcpy
Esta extensão utiliza o ADB que acompanha o pacote do scrcpy — ferramenta open-source criada pela Genymobile para espelhamento de tela Android via USB ou Wi-Fi.
O scrcpy em si não é executado pela extensão; o que ela usa é o adb.exe que vem junto no pacote, pois ele já está configurado e pronto para uso sem instalação adicional.
scrcpy — repositório oficial: https://github.com/genymobile/scrcpy
Observação importante sobre o scrcpy
Mesmo que a extensão não execute a janela do scrcpy, ela precisa do ADB que vem junto no pacote.
Como o pacote do scrcpy já vem com o adb.exe, o caminho recomendado é colocar a pasta do scrcpy em:
C:\Scrcpy
A estrutura esperada é:
C:\Scrcpy
├── adb.exe
├── scrcpy.exe
├── scrcpy-server
└── outros arquivos do scrcpy
O arquivo mais importante para esta extensão é:
C:\Scrcpy\adb.exe
Se o scrcpy estiver em outro local, será necessário alterar a configuração:
"cursorEmulador.adbPath": "C:\\Scrcpy\\adb.exe"
Requisitos
- Windows;
- Cursor IDE;
- Node.js instalado;
- Android com modo desenvolvedor ativado;
- Depuração USB ativada no Android;
- dispositivo autorizado no ADB;
adb.exe disponível em C:\Scrcpy\adb.exe.
Configuração recomendada no Cursor
No Cursor, abra:
Ctrl + Shift + P
Preferences: Open User Settings (JSON)
Adicione as configurações:
{
"cursorEmulador.adbPath": "C:\\Scrcpy\\adb.exe",
"cursorEmulador.refreshMs": 450,
"cursorEmulador.fallbackDeviceWidth": 1080,
"cursorEmulador.fallbackDeviceHeight": 2400,
"cursorEmulador.recordBitRate": 8000000,
"cursorEmulador.recordMaxSeconds": 180
}
Explicação das configurações
| Configuração |
Função |
cursorEmulador.adbPath |
Caminho do adb.exe usado pela extensão. |
cursorEmulador.refreshMs |
Intervalo entre atualizações da tela em milissegundos. Alterações são aplicadas sem reiniciar a extensão. |
cursorEmulador.fallbackDeviceWidth |
Largura usada caso a extensão não consiga detectar a resolução do Android. |
cursorEmulador.fallbackDeviceHeight |
Altura usada caso a extensão não consiga detectar a resolução do Android. |
cursorEmulador.recordBitRate |
Qualidade da gravação de tela em bits por segundo. |
cursorEmulador.recordMaxSeconds |
Tempo máximo da gravação em segundos. |
Modos de visualização
A extensão oferece três modos de exibição, todos compartilhando o mesmo stream de captura:
| Modo |
Como abrir |
| Activity Bar |
Clique no ícone 📱 na barra lateral esquerda |
| Explorer |
Painel EMULADOR dentro do Explorer do Cursor |
| Aba do editor |
Botão ⊞ em qualquer painel, ou Ctrl+Shift+P → Emulador: Abrir como Aba |
Ao trocar de modo, a captura migra automaticamente para o painel visível sem precisar clicar em Iniciar novamente.
Comportamento da aba
- A aba abre com largura fixa de 400 px centralizada (proporção de smartphone).
- Enquanto a aba estiver visível, os painéis de sidebar exibem um overlay de bloqueio com botão para ir à aba.
- Ao ocultar a aba (outro arquivo abre na frente), o overlay é removido e os sidebars ficam normais.
- Ao fechar a aba clicando em ◧ Voltar, ela é descartada e o sidebar correspondente é focado.
Funcionalidades
Seletor de dispositivo
Dropdown que lista todos os dispositivos retornados por adb devices. O botão ⟳ ao lado atualiza a lista. Ao selecionar um dispositivo, todos os comandos ADB passam a usar -s <serial> automaticamente.
Visualização da tela
O botão Iniciar começa a capturar a tela do Android e mostrar dentro do painel EMULADOR.
A imagem é atualizada automaticamente em intervalos definidos pela configuração:
"cursorEmulador.refreshMs": 450
Quanto menor o valor, mais rápida a atualização, porém maior o consumo de processamento.
| Gesto |
Ação |
| Clique rápido |
Tap no dispositivo |
| Pressionar 650 ms sem mover |
Long press |
| Arrastar |
Swipe |
| Roda do mouse |
Scroll vertical (proporcional à posição do cursor) |
Atalhos de teclado
Funcionam quando a aba ou painel está em foco e o campo de texto não está selecionado.
| Tecla |
Ação |
Backspace / Esc |
Voltar |
Home / H |
Home |
R |
Recentes |
Rotação
Dois botões na seção Navegação:
- ↑ Portrait — aplica
user_rotation = 0
- ↻ Landscape — aplica
user_rotation = 1
A detecção de resolução é atualizada automaticamente após a rotação.
Zoom
Slider visível quando conectado, variando de 40 % a 150 %.
- Abaixo de 100 %: canvas fica menor dentro do painel.
- Acima de 100 %: canvas fica rolável para inspecionar detalhes.
Fechar
O botão Fechar para a captura contínua e limpa a imagem do painel.
Atualizar
O botão Atualizar força uma nova captura da tela.
Print
O botão Print tira uma captura da tela atual do Android em qualidade máxima e salva automaticamente em:
C:\Users\SEU_USUARIO\Downloads\android-print-2026-05-11_14-30-10.png
Gravação
O botão Gravar inicia uma gravação da tela do Android usando:
adb shell screenrecord
O botão Parar encerra a gravação e copia o vídeo automaticamente para:
C:\Users\SEU_USUARIO\Downloads\android-gravacao-2026-05-11_14-30-10.mp4
A gravação só é removida do dispositivo após a cópia local ser concluída com sucesso.
Navegação Android
Botões de Voltar, Home e Recentes usando eventos de tecla ADB.
Envio de texto
O campo de texto permite enviar textos simples para o Android. Apenas caracteres seguros são aceitos (letras, números, espaços e pontuação básica).
Clipboard
O botão 📋 lê o conteúdo atual do clipboard do VS Code e o envia ao dispositivo via adb shell input text.
Envio de arquivo
O botão 📁 abre o seletor de arquivo nativo do VS Code. O arquivo selecionado é enviado para /sdcard/<nome-do-arquivo> via adb push.
Arrastar um arquivo sobre a tela do emulador também abre o seletor.
Logcat
O botão ≡ no cabeçalho de qualquer painel abre uma aba dedicada de Logcat com:
- stream em tempo real;
- cores por nível: V (cinza), D (ciano), I (verde), W (âmbar), E/F (vermelho);
- filtro de texto ao vivo;
- auto-scroll com toggle;
- limite de 3 000 linhas na UI;
- botões Parar / Reiniciar.
Após conectar, bateria e IP Wi-Fi são buscados em background e exibidos na status bar:
🔋85%⚡ 📶192.168.1.10
Logs
O botão Logs abre o canal de saída da extensão no Cursor com todos os comandos ADB executados, erros e caminhos de arquivos salvos.
Comandos disponíveis via paleta
| Comando |
Descrição |
cursorEmulador.openTab |
Abre o emulador como aba do editor |
cursorEmulador.openLogcat |
Abre o painel Logcat |
Histórico de versões
Versão 0.3.0
Versão com interação avançada, seleção de dispositivos e ferramentas de diagnóstico.
- Seletor de dispositivo com dropdown e atualização dinâmica.
- Long press (650 ms).
- Scroll por roda do mouse.
- Atalhos de teclado (Backspace, Esc, Home, H, R).
- Botões de rotação (Portrait / Landscape).
- Bateria e IP exibidos na status bar após conectar.
- Painel Logcat com filtragem em tempo real, cores e auto-scroll.
- Sincronização de clipboard do VS Code para o dispositivo.
- Envio de arquivo via file picker ou drag-and-drop.
- Slider de zoom 40 %–150 %.
- Bloqueio dinâmico de sidebar quando a aba está visível.
- Largura fixa de 400 px para a aba.
Versão 0.2.0
Versão com suporte a múltiplos modos de visualização.
- Ícone próprio na Activity Bar.
- Painel EMULADOR também no Explorer.
- Botões de navegação entre modos (📂, ◧, ⊞).
- Handoff automático de captura ao trocar de painel.
- Layout expandido na aba do editor.
- Arquitetura refatorada com classe base
EmuladorBase.
Versão 0.1.5
Versão com otimizações de performance e redução de latência.
- Sessão shell persistente elimina overhead de spawn por frame.
- Compressão gzip na pipeline (2–3× menos dados USB).
- Loop adaptativo com dois canais ADB independentes.
- Canvas com
drawImage() elimina piscar entre frames.
- Badge de FPS e KB/s em tempo real.
Versão 0.1.4
Versão com correções de robustez e redesign da interface.
- Sanitização de texto por lista branca.
- Redesign dos botões com variantes visuais e animações.
- Efeito de ripple ao tocar na tela.
- Barra de status colorida.
- Debounce por comando.
Versões 0.1.0 – 0.1.3
- 0.1.3: documentação completa.
- 0.1.2: botão Fechar limpa a imagem.
- 0.1.1: Print e Gravação de tela.
- 0.1.0: painel inicial com espelhamento, tap, swipe e navegação.
Estrutura do projeto
cursor-emulador-adb
├── package.json
├── tsconfig.json
├── README.md
├── README.marketplace.md
├── CHANGELOG.md
├── LICENSE
├── icon.png
├── icon-activitybar.svg
└── src
└── extension.ts
Como compilar o projeto
npm install
npm run compile
Como gerar o pacote VSIX
npm run package
Como instalar no Cursor
Ctrl + Shift + P → Extensions: Install from VSIX
Selecione o arquivo .vsix e recarregue: Ctrl + Shift + P → Developer: Reload Window.
Como testar o ADB manualmente
C:\Scrcpy\adb.exe devices
Retorno esperado:
List of devices attached
ZF524DZX59 device
Se aparecer unauthorized, desbloqueie o celular e aceite a autorização de depuração USB.
Teste de print manual
C:\Scrcpy\adb.exe exec-out screencap -p > tela.png
Teste de gravação manual
C:\Scrcpy\adb.exe shell screenrecord --time-limit 10 /sdcard/Download/teste.mp4
C:\Scrcpy\adb.exe pull /sdcard/Download/teste.mp4 "%USERPROFILE%\Downloads\teste.mp4"
C:\Scrcpy\adb.exe shell rm -f /sdcard/Download/teste.mp4
Limitações
Esta extensão usa capturas de tela contínuas via ADB, portanto não tem a mesma fluidez do scrcpy, que usa transmissão de vídeo otimizada com codec H.264. O objetivo é ter uma visualização funcional e integrada dentro do Cursor.
O comando adb shell screenrecord pode ter restrições dependendo da versão do Android e do fabricante.
Solução de problemas
O painel EMULADOR não aparece
Ctrl + Shift + P → Developer: Reload Window
A tela não atualiza
C:\Scrcpy\adb.exe devices
Se o dispositivo não aparecer como device, o Cursor não conseguirá capturar a tela.
Aparece unauthorized
C:\Scrcpy\adb.exe kill-server
C:\Scrcpy\adb.exe start-server
C:\Scrcpy\adb.exe devices
A imagem fica lenta
"cursorEmulador.refreshMs": 700
A gravação não salva
Abra os Logs e verifique a mensagem de erro. Teste manualmente com o comando acima.
Resumo
O projeto transforma o Cursor em um ambiente mais prático para desenvolvimento Android/Flutter, adicionando um painel EMULADOR com controle completo do dispositivo diretamente na IDE.
ADB recomendado em:
C:\Scrcpy\adb.exe