Android 17 chegou: todas as mudanças e o que muda para desenvolvedores (API 37)

Published on: 2026-06-29
Post image
pt android android-17 api-37 google appfunctions gemini foldables privacidade kotlin

O Android 17 começou a chegar oficialmente, primeiro nos Pixel (a partir de 16 de junho de 2026) e nos demais aparelhos elegíveis ao longo de 2026. É a API level 37, codinome Cinnamon Bun. Mas o mais importante não é a lista de recursos: é a direção. A própria Google vem chamando o movimento de “The Intelligent OS” — o Android deixando de ser só um sistema operacional para virar uma plataforma onde agentes de IA operam dentro dos apps.

Como o volume de novidades é grande, este artigo organiza tudo por área: IA e agentes, multi-tela e continuidade, câmera e mídia, performance, segurança e privacidade, conectividade, e o setup/migração para API 37. Onde a API ainda está em alpha/preview, isso vem sinalizado.

Android 17: um app adaptável rodando em celular, foldable, tablet e desktop

IA e agentes: o app vira uma “ferramenta” do sistema

A aposta central do Android 17 é deixar agentes (como o Gemini) executarem tarefas dentro dos apps, no próprio dispositivo. Três peças importam:

  • AppFunctions (Android MCP): uma API de plataforma + biblioteca Jetpack (em alpha) para expor as capacidades do seu app como “ferramentas” que agentes descobrem e executam localmente — o equivalente on-device ao Model Context Protocol. Você anota funções (com KDoc) e os agentes as invocam via AppFunctionManager, com acesso direto ao estado local do app. A integração com o Gemini está em preview privado (programa de acesso antecipado).
  • Acesso à NPU: apps que miram o Android 17 e acessam a NPU (via LiteRT NPU delegate, SDKs de fornecedor ou a antiga NNAPI) precisam declarar a feature FEATURE_NEURAL_PROCESSING_UNIT no manifesto, senão ficam bloqueados.
  • Gemini Intelligence: os recursos de agente no sistema chegam de forma gradual em aparelhos selecionados.
// Jetpack App Functions (alpha) — exponha capacidades como "ferramentas"
// que agentes (Gemini) descobrem e executam no dispositivo.
// Assinatura ilustrativa; a API está em alpha e pode mudar.
class TaskFunctions(private val repo: TaskRepository) {
    @AppFunction
    suspend fun createTask(title: String, dueAtMillis: Long? = null): String {
        return repo.create(title, dueAtMillis).id   // usa o estado local do app
    }
}
<!-- targetSdk 37: declare para acessar a NPU (LiteRT delegate, SDK do fornecedor, NNAPI) -->
<!-- confirme a string exata da feature na documentação oficial -->
<uses-feature
    android:name="android.hardware.neural_processing_unit"
    android:required="false" />

Multi-tela e continuidade entre aparelhos

  • Handoff: continuidade entre dispositivos — comece no celular, continue no tablet. Você habilita com setHandoffEnabled() na Activity e fornece o estado a recriar no destino via onHandoffActivityDataRequested() (retornando um HandoffActivityData). Suporta transição app-para-app e fallback app-para-web quando o app não existe no aparelho de destino.
  • Desktop Mode / telas conectadas: interface estilo desktop em monitores externos, com taskbar e janelas redimensionáveis (o “jeito DeX”, agora nativo).
  • App Bubbles e Bubble Bar: transformar qualquer app em janela flutuante; em telas grandes, bolhas encaixadas na base com troca em um toque.
  • Volume dedicado do assistente: novo modo de áudio MODE_ASSISTANT_CONVERSATION e atributo USAGE_ASSISTANT para controlar o áudio do assistente separadamente.
  • Design: o visual segue a linha Material 3 Expressive, com animações mais “vivas”.
// Habilita a continuidade (Handoff) para esta Activity
activity.setHandoffEnabled(true)

// Forneça o estado que o aparelho de destino usará para recriar a tela
override fun onHandoffActivityDataRequested(): HandoffActivityData {
    return HandoffActivityData.Builder()
        // ...dados para restaurar a tela no outro dispositivo...
        .build()
}

Câmera e mídia

  • RAW14: novo formato RAW de 14 bits por pixel (canal único, empacotado), para apps de câmera profissionais capturarem mais detalhe e profundidade de cor.
  • Tipo de câmera: novas APIs para saber se a câmera é interna, webcam USB externa ou virtual.
  • Extensões de câmera de fornecedor: parceiros de hardware podem definir modos de extensão customizados.
  • Live Update — Semantic Color API: cores semânticas em notificações via createSemanticStyleAnnotation() (INFO, SAFE, CAUTION, DANGER).

Performance e diagnóstico

  • MessageQueue lock-free: nova implementação de android.os.MessageQueue melhora performance e reduz frames perdidos (quebra quem usava reflection nos campos privados dela).
  • ProfilingManager com gatilhos: coleta automática de dados de performance em eventos como TRIGGER_TYPE_COLD_START, TRIGGER_TYPE_OOM, TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE e TRIGGER_TYPE_ANOMALY.
  • JobDebugInfo: getPendingJobReasonStats() devolve por que jobs do JobScheduler estão pendentes e por quanto tempo.
  • AlarmManager.setExactAndAllowWhileIdle com OnAlarmListener: variante com callback (em vez de PendingIntent) que reduz wake locks em tarefas periódicas.
  • Limites de memória por app para evitar consumo excessivo de RAM.

Segurança e privacidade (o maior pacote)

Novos recursos:

  • Advanced Protection Mode (AAPM): novo AdvancedProtectionManager para detectar o modo de proteção reforçada (bloqueia sideload, restringe dados por USB, exige Play Protect).
  • Assinatura de APK pós-quântica (PQC): esquema híbrido que combina chaves clássicas (RSA/EC) com o algoritmo pós-quântico ML-DSA.
  • Encrypted Client Hello (ECH): o TLS passa a criptografar o SNI por padrão (novas APIs de DnsResolver e elemento <domainEncryption> no Network Security Config).
  • Android Contact Picker: seletor do sistema para compartilhar contatos específicos sem pedir READ_CONTACTS da agenda inteira.
  • Marcar como perdido” com bloqueio biométrico, Live Threat Detection e menos tentativas de PIN.

Mudanças de comportamento ao mirar o targetSdk 37:

  • Certificate Transparency ligado por padrão (era opt-in no 16).
  • OTP de SMS protegido: SMS comuns com OTP ficam indisponíveis por 3 horas — migre para a SMS Retriever API ou SMS User Consent API.
  • Rede local bloqueada: para acessar a LAN, declare e peça a permissão ACCESS_LOCAL_NETWORK.
  • Safer Native DCL: libs nativas carregadas com System.load() precisam ser somente leitura, senão é UnsatisfiedLinkError.
  • Campos static final imutáveis via reflection/JNI (IllegalAccessException/crash).
  • BAL hardening: migre de MODE_BACKGROUND_ACTIVITY_START_ALLOWED para controles granulares (ex.: ...ALLOW_IF_VISIBLE).
  • Contatos (CP2): campos de PII fora do data view e validação SQL estrita sem READ_CONTACTS.
  • Senhas ocultas em teclado físico; áudio em background endurecido (exige FGS while-in-use).
<!-- Necessário para acessar dispositivos na rede local (targetSdk 37+) -->
<uses-permission android:name="android.permission.ACCESS_LOCAL_NETWORK" />

Conectividade

  • BluetoothSocket (RFCOMM): read() agora retorna -1 quando o socket fecha (alinhado ao InputStream) — ajuste seus loops.
  • Redes de satélite restritas: otimizações para apps funcionarem sobre redes de baixa banda por satélite.
  • UWB Downlink-TDoA: RangingManager com DlTdoaRangingParams/DlTdoaMeasurement para posicionamento por diferença de tempo de chegada.
// RFCOMM: trate o -1 para encerrar o loop de leitura
val buffer = ByteArray(1024)
while (true) {
    val n = input.read(buffer)
    if (n == -1) break        // socket fechado / conexão caiu
    handle(buffer, n)
}

Setup e migração (API 37)

Requisitos mínimos: Android Studio Meerkat (2024.3.1)+, AGP 8.9.0-rc01+, e no SDK Manager o platform “Cinnamon Bun” + Build-Tools 37. No módulo do app:

android {
    compileSdk = 37

    defaultConfig {
        targetSdk = 37
    }
}

Checklist de migração: audite uso de rede local (ACCESS_LOCAL_NETWORK), reflection em APIs internas (MessageQueue, static final), System.load() de libs nativas, dependência de OTP por SMS, áudio em background, acesso à NPU (uses-feature) e, principalmente, o comportamento em telas grandes.

A grande exigência: apps adaptáveis

Se há um recado obrigatório, é este: em telas grandes (sw >= 600dp), o Android 17 ignora screenOrientation, resizeableActivity, minAspectRatio e maxAspectRatio — sem opt-out. Apps travados em “retrato only” ou tamanho fixo vão se comportar diferente em foldables, tablets e desktop. Layouts responsívos e WindowSizeClass deixam de ser boa prática e viram requisito. O sistema também deixa de reiniciar a Activity por padrão em algumas mudanças de configuração (ex.: teclado físico).

Pontos de atenção

  • AppFunctions e Gemini estão em alpha/preview. Dá para preparar o app agora, mas assinaturas podem mudar e a integração depende de acesso antecipado.
  • Coisas quebram silenciosamente ao subir o targetSdk (rede local, libs nativas read-only, reflection). Teste em um branch antes de publicar.
  • Rollout gradual: começa nos Pixel e depende do fabricante nos demais; recursos de Gemini chegam aos poucos.
  • Confirme strings/assinaturas exatas na doc (ex.: feature da NPU, builders do Handoff) — APIs novas podem ajustar detalhes até estabilizar.

Conclusão

O Android 17 é menos “um punhado de features” e mais uma mudança de direção: agentes de IA viram usuários de primeira classe dos apps (AppFunctions), a experiência passa a ser multi-tela e contínua (Handoff, desktop), e a régua de segurança/privacidade sobe (ECH, CT, PQC, contatos, SMS, rede local). Para quem desenvolve, o recado é duplo: torne o app adaptável e comece a pensar em IA como parte do produto.

De olho daqui para frente: suba um branch com targetSdk 37, rode a suíte de testes, valide em foldable/tablet/desktop e experimente o AppFunctions no programa de acesso antecipado. O melhor momento para descobrir o que muda é agora — no seu ritmo, e não quando o rollout chegar ao aparelho dos seus usuários. 🚀

Referências