Files
tatuchat/NOTAS-EMULADOR.md
Welton Moura 5d97feda86
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
alterações em telas
2026-09-12 16:07:05 -03:00

4.4 KiB

Notas: Execução do TatuChat em Emulador Android

Data: 2026-09-12

Objetivo

Executar o projeto TatuChat (Flutter) em um emulador Android com janela visível.

Ambiente

Item Valor
OS Linux (Freedesktop SDK 25.08, Flatpak runtime)
Flutter 3.47.3 (Dart 3.13.3)
Android SDK /home/welton/Android/Sdk (versão 37, emulator 37.1.11)
JDK 17 (Temurin, via JAVA_HOME)
Imagem de sistema android-36, google_apis, x86_64
Sessão Terminal integrado do VSCodium (sandbox Flatpak com.vscodium.codium)

Problemas encontrados e soluções

1. Nenhum AVD disponível inicialmente

Não havia AVDs criados. Imagem de sistema android-36/google_apis/x86_64 já instalada.

  • Criação: avdmanager create avd -n tatuchat -k "system-images;android-36;google_apis;x86_64" -d pixel_7
  • Atenção: avdmanager (Java) criou o AVD em ~/.var/app/com.vscodium.codium/config/.android/avd/ (home do sandbox), diferente de ~/.android/avd que o emulador espera. Corrigido copiando para ~/.android/avd e ajustando o path= nos arquivos .ini.

2. Emulador não abre janela dentro do sandbox Flatpak

Erro original: Could not load the Qt platform plugin "xcb" — o Qt do emulador não tem plugin Wayland e não há display X11 dentro do sandbox.

  • Solução 1 (provisória): rodar headless com -no-window e QT_QPA_PLATFORM=offscreen.
  • Solução 2 (definitiva): rodar o emulador na sessão do host (onde DISPLAY=:0 existe) via flatpak-spawn --host, destacando o processo com setsid para não ser morto com o terminal.

3. Bug no AndroidManifest que impedia o app de iniciar

O projeto é um fork do FluffyChat renomeado para TatuChat. O namespace e applicationId foram alterados para chat.fluffy.tatuchat, mas:

  • android/app/src/main/kotlin/chat/fluffy/fluffychat/MainActivity.kt está no pacote chat.fluffy.fluffychat
  • O manifest usava android:name=".MainActivity", que resolvia para chat.fluffy.tatuchat.MainActivity (inexistente)

Resultado: crash na inicialização com ClassNotFoundException: chat.fluffy.tatuchat.MainActivity.

Correção aplicada em android/app/src/main/AndroidManifest.xml:39:

<!-- antes -->
android:name=".MainActivity"
<!-- depois -->
android:name="chat.fluffy.fluffychat.MainActivity"

Observação pendente: o MainActivity.kt (e o FcmPushService.kt, que está com código comentado) ainda vivem no pacote chat.fluffy.fluffychat. Uma limpeza futura deveria mover as classes para chat.fluffy.tatuchat e limpar as referências relativas do manifest (.MainActivity, .FcmPushService — este último aponta para classe que nem existe mais).

Como rodar o emulador em janela visível

Você (terminal normal do host)

# iniciar emulador com janela
~/Android/Sdk/emulator/emulator -avd tatuchat

# rodar o app em outro terminal
cd ~/Documentos/Projetos/tatuchat
flutter run -d emulator-5554

Comandos equivalentes usados daqui (via flatpak-spawn)

# encerrar emulador anterior
adb emu kill

# copiar AVD para a pasta padrão (se ainda não foi feito)
mkdir -p ~/.android/avd
cp -r ~/.var/app/com.vscodium.codium/config/.android/avd/. ~/.android/avd/

# iniciar emulador na sessão do host (janela visível)
flatpak-spawn --host sh -c 'export HOME=/home/welton; unset QT_QPA_PLATFORM; export DISPLAY=:0; setsid /home/welton/Android/Sdk/emulator/emulator -avd tatuchat -gpu swiftshader_indirect -no-boot-anim > /tmp/emu_run.log 2>&1 < /dev/null & echo started'

# build + instalação manual (quando o hot reload da CLI falha no sandbox)
flutter build apk --debug
adb install -r build/app/outputs/flutter-apk/app-debug.apk
adb shell am start -n chat.fluffy.tatuchat/chat.fluffy.fluffychat.MainActivity

Estado atual

  • Emulador tatuchat rodando com janela na sessão do host (boot OK).
  • App TatuChat instalado e em execução, foco em chat.fluffy.tatuchat/chat.fluffy.fluffychat.MainActivity.
  • Build: flutter build apk --debug gera build/app/outputs/flutter-apk/app-debug.apk.

Observações

  • flutter run -d emulator-5554 pode falhar com Error waiting for a debug connection: The log reader stopped unexpectedly ao rodar a partir do sandbox; nesse caso o APK é instalado normalmente e basta abrir via adb shell am start.
  • O AVD usa imagem android-36 (compileSdk do projeto é 37) — compatível para execução.
  • Arquivos de log do emulador no host: /tmp/emu_run.log.