PDM · DAW 2

Aula 30 · Semana 12 · Quarta, 25 de novembro de 2026 · 16:00 às 18:00

Tamanho, arranque e atualizações, e sprint 3

Teoria (30 minutos): tamanho da app, tempo de arranque, atualizações OTA e code push, forced update e compatibilidade com versões antigas. Prática: sprint 3, com medição do tamanho da app de cada grupo. A sprint fecha na quarta-feira seguinte.

Sprint 3 fecha quarta 02/12 às 16:30

No fim desta aula consegues

Porque o tamanho importa

Para os testes: o tamanho custa instalações e atualizações; a Play limita o AAB a 200 MB de download e o iOS pede confirmação em dados móveis acima de 200 MB.

AAB e split por ABI

Para os testes: o AAB deixa a Play entregar só o que cada telemóvel precisa; o APK universal leva as três arquiteturas; o split por ABI é o meio-termo para distribuir fora da loja.

Tree shaking, imagens e fontes

Para os testes: o código Dart não usado e os ícones do Material saem sozinhos em release por tree shaking; imagens, fontes e assets não: esses cortas tu.

Arranque: até ao primeiro frame

Para os testes: o arranque a frio inclui o engine e a Dart VM antes do main; o splash nativo tapa esse intervalo; o trabalho pesado vai para depois do primeiro frame.

OTA e code push: Shorebird

Para os testes: code push só muda código Dart, nunca código nativo nem permissões; a Apple permite-o desde que não mude o propósito da app.

Analogia Code push é trocar o conteúdo do jornal sem reimprimir a capa. Só o Dart (o texto das páginas) muda; o "papel" nativo, as permissões e o ícone continuam os mesmos, e por isso não passa por nova revisão. A Apple só aceita a troca se as regras do jornal, o seu propósito declarado, não mudarem.

Forced update e versões mínimas

Para os testes: forced update é uma versão mínima em remote config com um ecrã de bloqueio; falha aberto sem rede e nunca aponta para uma versão que ainda não está na loja.

Sprint 3: ponto de situação

Última semana da sprint Congelem o âmbito hoje: o que não estiver numa issue com responsável não se faz. Cada dia até quarta serve para fechar, testar no telemóvel de outra pessoa e escrever o README.

Exercício: flutter build apk --analyze-size

flutter build apk --analyze-size --target-platform android-arm64
✓ Built build/app/outputs/flutter-apk/app-release.apk (18.4MB)
app-release.apk (total compressed)                              18 MB
  lib/
    arm64-v8a/
      libapp.so                                                  3 MB
      libflutter.so                                              4 MB
  assets/
    flutter_assets/
      assets/imagens/fundo_acores.png                            5 MB
      assets/imagens/ilhas/                                      2 MB
      packages/google_fonts/Inter-*.ttf                          1 MB
      fonts/MaterialIcons-Regular.otf                            6 KB
  classes.dex                                                    2 MB
  res/                                                           1 MB
Dart AOT symbols accounted decompressed size                     9 MB
  package:flutter                                                4 MB
  package:flutter_map                                            1 MB
  package:tempo_acores                                         487 KB
A summary of your APK analysis can be found at: build/apk-code-size-analysis_01.json
To analyze your app size in Dart DevTools, run the following command:
dart devtools --appSizeBase=apk-code-size-analysis_01.json

Exercício: o que fazer com o número

Exercício Quinze minutos. Corram flutter build apk --analyze-size --target-platform android-arm64 no projeto do grupo e encontrem o maior contribuinte que não seja o libflutter.so. Digam em uma frase o que fariam com ele. Se for uma imagem ou uma fonte, corrijam já e voltem a medir: os dois números vão para o README. Quem quiser ver a treemap: dart devtools --appSizeBase=build/apk-code-size-analysis_01.json e o separador App Size.

Até segunda

Para fazer

  • A sprint 3 fecha na próxima quarta, 02/12, às 16:30: tudo em main até terça à noite, demo de 5 minutos ensaiada, instalável por um tester fora do grupo, README com screenshots, CI verde.
  • O PR do tamanho merged, com os dois números na secção "Tamanho da app" do README.
  • Para segunda (build e assinatura): o projeto compila com flutter build appbundle sem erros e um membro do grupo traz o portátil com o Android Studio atualizado.

Para ler

  • Measuring your app's size (docs.flutter.dev): o que conta para o tamanho e como ler o --analyze-size no DevTools.
  • App startup time (developer.android.com): arranque a frio, a quente e os limiares do Android Vitals.
  • Firebase Remote Config: o mecanismo por trás do forced update e das feature flags, com valores por defeito para quando a rede falha.
  • Shorebird docs: o que um patch pode mudar e como fica na revisão das lojas.