Gravador de demonstração de app
Crie gravações curtas de tela que pareçam uma pessoa usando o aplicativo com confiança: um recurso por clipe, sem travamentos de carregamento, sem sobreposições de depuração, sem anúncios, uma barra de status organizada.
$S é scripts/appdemo.sh no diretório desta skill. Ela precisa de ffmpeg (brew install ffmpeg), além de adb para Android ou xcrun simctl do Xcode para iOS. Em agentes em sandbox, execute com permissões elevadas: ela se comunica com o emulador, o simulador e grava fora do workspace.
1. Combine o que mostrar
- Pergunte quais recursos mostrar se o usuário não disse. Grave um clipe por recurso e nomeie os clipes como
NN_recurso(01_busca_preco,02_calculadora. Comece com o que o produto faz de melhor, não com a tela que o app abre. - Pergunte qual build e conta usar quando não for óbvio. Material de marketing normalmente precisa de uma build de release de produção com dados reais. Uma build de depuração/staging mostra menus de desenvolvedor, toasts de aviso, dados de teste e roda mais devagar. Não assuma; uma gravação de staging geralmente precisa ser refeita.
- Se o clipe precisar de um estado pago ou premium, procure uma sobreposição de depuração/desenvolvedor no app antes de mexer em cobranças reais.
- Credenciais que o usuário fornecer: insira-as com um comando cuja saída você descarta (
adb shell input text ... >/dev/nullno Android;printf ... | xcrun simctl pbcopy <udid>e depois cole no iOS) em vez de usar ferramentas que registram cada comando, e não as escreva em arquivos.
2. Deixe o dispositivo rápido e silencioso
- Emulador Android: dê recursos a ele. Um AVD pequeno gagueja na tela e a gagueira aparece no clipe.
emulator -avd <nome> -memory 6144 -cores 4 -gpu host -no-snapshot-save -no-boot-animSe o mesmo id do app já estiver instalado com uma chave de assinatura diferente, use outro AVD em vez de desinstalar (desinstalar apaga os dados do usuário). - Build de release instalada e em execução; faça login; dispense pop-ups de primeira execução, solicitações de permissão e anúncios intersticiais antes de gravar.
$S statusbar on: hora fixa (APPDEMO_TIME, padrão 9:41), bateria e sinal cheios, ícones de notificação ocultos.$S statusbar offrestaura.- No Android, não pressione Voltar do sistema na tela raiz do app. Isso finaliza a atividade e uma sobreposição na memória (chave premium, feature flag) é perdida ao reiniciar.
3. Ensaie, depois grave
- Ensaie cada clipe uma vez sem gravar. Aprenda os toques, coordenadas e tempos de espera. Abrir a tela uma vez também aquece os caches, então a gravação final carrega mais rápido.
- Grave:
A gravação roda no host ($S start 01_busca_preco # manipule o app: adb shell input tap/swipe/text, xcrun simctl, ou sua ferramenta de automação de UI $S stop 01_busca_preco # -> $APPDEMO_OUT/01_busca_preco.mp4adb emu screenrecord/simctl io recordVideo). Não useadb shell screenrecordno dispositivo em um emulador: ele compete com o app pela CPU e pode congelar a UI, fazendo com que rolagens e toques nunca apareçam. - Envie as ações para um clipe como um lote único com pausas curtas (0.5–2.5 s), não uma chamada de ferramenta por toque. Inspecionar a tela entre as etapas deixa longos trechos mortos na gravação.
- Role em etapas deliberadas (cerca de 40 % da tela, 600–800 ms por deslize) para que os espectadores possam ler.
- Use a entrada de texto do driver de UI para texto não ASCII (coreano, emoji);
adb shell input textsó lida com ASCII. - Quando um recurso só mostra valor com dados (um razão, um diário, um carrinho), grave a criação de uma entrada realista, depois exclua-a imediatamente e confirme que a tela voltou ao estado original. Verifique primeiro as configurações de compartilhamento: uma nova postagem pode ser pública.
4. Verifique cada clipe
$S strip $APPDEMO_OUT/01_busca_preco.mp4 /tmp/01.jpg 8
Olhe para a tira, não para seu script: confirme que cada etapa pretendida realmente aconteceu (rolagens moveram, a aba mudou, o resultado apareceu) e nada indesejado está na tela: toasts, teclados cobrindo conteúdo, anúncios, dados pessoais como um endereço real, ou banners de depuração. Regrave clipes com falha; não entregue um clipe cuja ação silenciosamente não fez nada.
5. Corte a espera
$S tighten in.mp4 out.mp4 # corte de lead-in ocioso, trechos congelados -> 0.35 s, tela de resultado final mantida 1.5 s
$S speed in.mp4 out.mp4 1.3 # aceleração uniforme opcional
tighten começa o clipe 0.4 s antes da primeira ação real (os segundos ociosos após start nunca são perfeitamente parados, então a detecção de congelamento sozinha os perde) e encurta cada trecho onde a imagem não muda, para que os toques se sigam como uma pessoa que conhece o app. Clipes típicos perdem cerca de metade do comprimento. Verifique um clipe apertado com strip também: se uma pequena mudança (digitar um dígito, alternar um chip) foi cortada, diminua --noise; se pausas permanecem, diminua --min-freeze.
6. Entregue
Coloque tudo em uma pasta: clipes brutos, as versões apertadas (recomendadas para edição) e um breve README listando cada clipe, o que mostra e qualquer coisa que o usuário deve saber (dados criados e excluídos, dados pessoais visíveis, recorte da câmera do emulador no topo). Relate os comprimentos dos clipes e o que não pôde ser gravado e por quê.