Ir para o conteúdo

CLI (tempest)

O ponto de entrada tempest cobre o ciclo de vida do app: criar, desenvolver no simulador, empurrar para o dispositivo, empacotar e inspecionar o contrato.

uv run tempest new                              # scaffold na pasta atual (id = nome da pasta)
uv run python examples/counter/app.py           # rodar um app direto no simulador Qt
uv run tempest dev examples/counter/app.py       # dev loop: editar + salvar → hot reload
uv run tempest deploy examples/multifile/main.py # push offline no aparelho (sem SDK/NDK)
uv run tempest serve examples/device_counter/app.py  # code-push por LAN, sem rebuild de APK
uv run tempest build apk                        # APK com id próprio, lado a lado (JDK + SDK)
uv run tempest build release-apk                # APK de release assinado (distribuir fora da Play)
uv run tempest run                              # build + instalar no dispositivo + logs
uv run tempest spec                             # imprimir o contrato tipado (widgets/eventos) como JSON
uv run tempest --help

Comandos

Comando Status Descrição
tempest new Cria um projeto de app executável na pasta atual (id = nome da pasta). Passe um nome só para criar uma subpasta.
tempest dev <app> Simulador + hot reload / hot restart (precisa do extra qt). --device/-d dimensiona a janela a um preset de aparelho (ex.: pixel-7, galaxy-s24).
tempest deploy <app> Push offline do projeto inteiro no aparelho (sem SDK/NDK): instala o host empacotado + empurra + abre.
tempest serve <app> Code-push por LAN + hot reload do projeto inteiro (fase B5).
tempest install [src] adb-instala o host pré-compilado (sem SDK/NDK).
tempest spec Contrato tipado de widgets/eventos como JSON.
tempest doctor Diagnostica os pré-requisitos de build/run Android (JDK, android-host, SDK, adb, dispositivo). Prontidão de build define o código de saída; device ausente é só informativo (só run/install precisam).
tempest setup Configura o ambiente de build: diagnostica JDK/SDK/build-tools; --install instala o Android SDK.
tempest version Imprime a versão do framework (igual a --version).
tempest clean Limpa os caches de build em ~/.tempestroid (nativos extraídos do host, cópia do host, clone do source) — resolve falhas de cache velho após upgrade; --keystore também apaga o keystore de release.
tempest build [apk\|release-apk\|prd] apk: APK per-app (id próprio → N apps lado a lado), via Gradle reusando os nativos pré-compilados (só JDK + SDK, sem NDK/toolchain). release-apk: APK de release assinado com a sua keystore para distribuir fora da Play (--keystore; verifique com apksigner verify). prd: AAB de release. Lê [tool.tempest].
tempest run build apk + instala no dispositivo + transmite logs.
tempest icon <img> Gera icon.png + splash.png de uma imagem (Pillow).
tempest lint [path] ruff check no alvo (só lint).
tempest fix [path] ruff check --fix + ruff format num passo (--unsafe para autofixes inseguros).
tempest format [path] ruff format (escreve os arquivos).
tempest fmt-check [path] ruff format --check (só leitura).
tempest type [path] pyright no alvo (type check estrito).
tempest test [path] pytest (encaminha o filtro de caminho opcional).
tempest check [path] Portão de qualidade completo: lint + fmt-check + type + test.

Apps são multi-arquivo: a árvore do projeto vai junto (no sys.path) no simulador e no dispositivo. Veja Build, deploy e publicação para a diferença entre o push offline (deploy/serve) e o APK distribuível (build).

Cockpit do tempest dev

Comandos interativos enquanto o simulador roda:

Tecla Ação
r Hot reload (estado preservado).
R Hot restart (estado limpo).
s Traz a janela à frente.
q Encerra.

Salvar o arquivo dispara o hot reload automaticamente; se a recarga for incompatível com o estado vivo, o loop cai para um restart limpo. Uma gravação ruim é capturada e impressa — o loop sobrevive.

build / run precisam de JDK + Android SDK

tempest build/run rodam o Gradle reusando os nativos pré-compilados (o android-host vem no pacote), então precisam de JDK + Android SDKsem NDK, sem toolchain CPython, sem git clone. Para rodar no aparelho sem SDK, use tempest deploy/serve. Veja Build, deploy e publicação, a instalação e a pesquisa de runtime.

Contrato do arquivo de app

Para tempest dev/serve, o módulo precisa expor:

  • make_state() -> S — fábrica do estado inicial (chamada a cada hot restart).
  • view(app) -> Widget — construtor da UI.

O carregador compila/executa o arquivo fresco a cada carga (sem reuso de .pyc), então recargas sempre veem a última edição. Mantenha o módulo livre de imports de Qt no nível de módulo (use if __name__ == "__main__") para que o mesmo arquivo rode no desktop e no dispositivo.