targetSdkVersion: Conceitos-chave, Behavioural Changes e Google Play

Autor: IT Sectr Publicado: 2026-02-08 Tempo de leitura: 11 min

targetSdkVersion — o API Level do Android contra o qual o aplicativo foi testado e otimizado. Este parâmetro é especificado no build.gradle e determina quais behavioural changes (alterações de comportamento do sistema) serão aplicadas ao aplicativo durante a execução. Se targetSdkVersion for inferior ao API Level do dispositivo, o Android desativa os behavioural changes introduzidos em versões mais recentes, mantendo a compatibilidade para aplicativos antigos. De acordo com Android Developers, o Google Play exige que targetSdkVersion não tenha mais de 1 ano do API Level atual.

Pontos principais

  • targetSdkVersion — o API Level contra o qual o app é testado; afeta os behavioural changes
  • Behavioural changes — modificações do sistema (Scoped Storage, Permissions) aplicadas com base no targetSdk
  • Google Play exige targetSdk não superior a 1 ano do API Level atual, caso contrário bloqueia a publicação
  • Atualizar targetSdk requer testar todos os behavioural changes da nova versão do Android
  • Diferença entre targetSdk e compileSdk: targetSdk — runtime, compileSdk — compilação

O que é targetSdkVersion no Android?

targetSdkVersion é um parâmetro inteiro no build.gradle que declara o API Level contra o qual o app foi testado. O sistema Android usa este parâmetro para decidir quais behavioural changes aplicar ao aplicativo em tempo de execução. Se targetSdkVersion = 33, o Android aplica todos os behavioural changes introduzidos até API 33 inclusive, mas não aplica as alterações da API 34+. Se targetSdkVersion = 34 — as alterações até API 34 são aplicadas, e assim por diante.

A principal diferença entre targetSdkVersion e minSdkVersion é o mecanismo de ação. minSdk é verificado uma vez durante a instalação e bloqueia a instalação se a condição não for atendida. targetSdkVersion afeta o comportamento em tempo de execução do sistema em cada dispositivo, independentemente da versão do Android em que o app está sendo executado. O mesmo app com targetSdk 31 se comportará de forma diferente no Android 13, 14 e 15, porque os behavioural changes acima de 31 estão desativados.

O mecanismo de targetSdkVersion é uma ferramenta de compatibilidade reversa incorporada ao Android. Sem ele, cada atualização do SO quebraria milhares de aplicativos antigos. O Google introduziu este mecanismo no Android 2.1 (API Level 7) e desde então o utiliza como forma padrão de introduzir novas regras de segurança, privacidade e gerenciamento de recursos sem quebrar os aplicativos existentes.

kotlin
// build.gradle.kts — targetSdkVersion em defaultConfig
android {
    namespace = "com.example.myapp"
    compileSdk = 36

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 26
        targetSdk = 36   // Testado contra Android 16
        versionCode = 1
        versionName = "1.0.0"
    }
}

// Verificando targetSdk atual no código
fun isUsingScopedStorage(): Boolean {
    // Context.getApplicationInfo().targetSdkVersion contém o targetSdk do aplicativo
    return context.applicationInfo.targetSdkVersion >= VERSION_CODES.Q
}

No exemplo, targetSdk = 36 ativa todos os behavioural changes do Android 16. O código verifica targetSdkVersion através de context.applicationInfo.targetSdkVersion — isso permite determinar dinamicamente qual modo de compatibilidade está ativado. A função auxiliar é útil para bibliotecas que precisam se adaptar ao targetSdk do aplicativo chamador.

Behavioural Changes: como o targetSdk afeta o aplicativo

Behavioural changes são modificações no comportamento do sistema Android que só se aplicam a aplicativos com targetSdkVersion >= um determinado API Level. Cada novo lançamento principal do Android introduz behavioural changes, e se um aplicativo não atualizar o targetSdk, essas alterações não entram em vigor. Este mecanismo permite que os desenvolvedores atualizem seu aplicativo no seu próprio ritmo, em vez de sincronizadamente com o lançamento de um novo SO.

Scoped Storage (API 29) é um dos behavioural changes mais significativos. Aplicativos com targetSdk 29+ não podem obter acesso File direto aos diretórios compartilhados Pictures, Downloads, Music, Documents. Em vez disso, o MediaStore é usado para multimídia, SAF (Storage Access Framework) para arquivos arbitrários e getExternalFilesDir() para armazenamento privado. Aplicativos antigos com targetSdk 28 ou inferior continuam funcionando com o legado Full Storage Access, mas isso cria um risco de segurança.

POST_NOTIFICATIONS (API 33) é uma permissão em tempo de execução para enviar notificações. Aplicativos com targetSdk 33+ devem solicitar a permissão Manifest.permission.POST_NOTIFICATIONS do usuário através do diálogo padrão. Se a permissão não for concedida, NotificationManager.silent() não mostra notificações ao usuário. No Android 13+ sem esta permissão, notificações push e notificações locais simplesmente não são exibidas, o que pode reduzir significativamente o engajamento do usuário.

API LevelBehavioural ChangeAções necessárias ao atualizar
29Scoped StorageMigrar para MediaStore e SAF para arquivos fora da sandbox
30Package VisibilityAdicionar <queries> ao manifesto para interação com pacotes
31Foreground Service NotificationMostrar notificação dentro de 10 segundos após iniciar o serviço
33POST_NOTIFICATIONSSolicitação de permissão em runtime para enviar notificações
34Foreground Service TypesDeclarar o tipo de serviço em primeiro plano no manifesto
35Privacy SandboxRestringir identificadores de publicidade (Advertising ID)

Como verificar o targetSdk atual

O valor de targetSdkVersion pode ser obtido via ADB: o comando adb shell dumpsys package com.example.myapp | grep targetSdk exibe targetSdk=34. Em código, context.getApplicationInfo().targetSdkVersion retorna um número inteiro. Para análise, é útil registrar targetSdk junto com android.os.Build.VERSION.SDK_INT para entender quais behavioural changes estão realmente ativos em cada sessão.

Requisitos do Google Play para targetSdkVersion (2026)

Google Play estabelece requisitos obrigatórios de targetSdkVersion para todos os aplicativos publicados. Desde agosto de 2024, o targetSdk mínimo = 33 (Android 13). Desde agosto de 2025, targetSdk = 34. Espera-se que a partir de agosto de 2026, o Google exija targetSdk = 35 (Android 15). Novos aplicativos e atualizações de aplicativos existentes devem cumprir estes requisitos, caso contrário a console bloqueia a publicação. Esta é uma política do Google Play, não uma restrição do Android Runtime: um aplicativo com targetSdk 34 pode funcionar no Android 16, mas não pode ser publicado na Play Store.

Android App Bundle (AAB) é o formato de publicação obrigatório desde agosto de 2021. APK não é mais aceito no Google Play (exceto para aplicativos com mais de 150 MB e alguns projetos legados). O formato AAB permite que o Google gere APKs otimizados para cada API Level e densidade de tela, reduzindo o tamanho do download em 15-30%. Para verificar targetSdk, o Google Play analisa o manifesto AAB e emite um erro com o valor mínimo exigido se não estiver em conformidade.

PeríodotargetSdk mínimoVersão AndroidNota
Agosto 202433Android 13Tiramisu — POST_NOTIFICATIONS obrigatório
Agosto 202534Android 14Upside Down Cake — tipos de serviço em primeiro plano
Agosto 202635Android 15Vanilla Ice Cream — Privacy Sandbox
Agosto 2027 (planejado)36Android 16Baklava — T+

O Google Play Console verifica targetSdkVersion não apenas ao enviar um novo AAB, mas também ao atualizar um aplicativo existente. Se seu aplicativo tiver targetSdk 33 e o Google elevar o limite mínimo para 34 — você não poderá lançar nenhuma atualização até aumentar o targetSdk. Para aplicativos que não são atualizados há muito tempo, o Google Play pode removê-los automaticamente da publicação (unpublish).

Como atualizar targetSdkVersion sem erros

Atualizar targetSdkVersion não é apenas mudar um número no build.gradle. Cada behavioural change pode quebrar a funcionalidade existente se o código não for preparado com antecedência. Recomenda-se começar a preparação 3-6 meses antes do prazo do Google Play, especialmente se o aplicativo for grande e usar muitas APIs do sistema.

Processo passo a passo: Passo 1 — estude os behavioural changes para o novo API Level na documentação do Android Developers (página "Behavioural Changes by API Level"). Passo 2 — crie um branch targetSdk-update e altere targetSdk para o novo valor. Passo 3 — execute o aplicativo em um emulador ou dispositivo com o novo API Level e verifique cada funcionalidade relacionada às alterações. Passo 4 — corrija erros: adicione permissões, altere o manuseio de arquivos, atualize o manifesto.

Passo 5 — teste em dispositivos antigos. Aumentar targetSdk não afeta dispositivos com API Level abaixo do novo targetSdk, mas os behavioural changes se aplicam a todos os dispositivos com API Level >= targetSdk. Se você aumentou targetSdk de 33 para 34, em dispositivos com API 34+ os behavioural changes da API 34 serão ativados. Em dispositivos com API 33 nada mudará.

kotlin
// Preparação para targetSdk 35: Privacy Sandbox
import android.os.Build
import android.os.Build.VERSION_CODES
import com.google.android.gms.ads.identifier.AdvertisingIdClient

class AdsManager {

    fun getAdvertisingId(context: android.content.Context): String? {
        // Privacy Sandbox restringe Advertising ID a partir da API 35
        if (Build.VERSION.SDK_INT >= VERSION_CODES.VANILLA_ICE_CREAM) {
            // API 35+ — identificador indisponível, use MeasurementManager
            return null
        }
        return try {
            val adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context)
            adInfo.getId()
        } catch (e: Exception) {
            null
        }
    }

    // Verificação: quais behavioural changes estão ativos
    fun getActiveChanges(context: android.content.Context): List<String> {
        val sdkInt = Build.VERSION.SDK_INT
        val targetSdk = context.applicationInfo.targetSdkVersion
        return buildList {
            if (sdkInt >= VERSION_CODES.Q && targetSdk >= VERSION_CODES.Q)
                add("ScopedStorage")
            if (sdkInt >= VERSION_CODES.TIRAMISU && targetSdk >= VERSION_CODES.TIRAMISU)
                add("PostNotifications")
            if (sdkInt >= VERSION_CODES.UPSIDE_DOWN_CAKE && targetSdk >= VERSION_CODES.UPSIDE_DOWN_CAKE)
                add("FgsTypes")
        }
    }
}

A classe AdsManager demonstra a preparação para o Privacy Sandbox (API 35). O Advertising ID fica indisponível a partir da API 35 com targetSdk 35+. A função getActiveChanges mostra o padrão correto para verificar behavioural changes: é necessário verificar tanto o SDK_INT do dispositivo quanto o targetSdk do aplicativo. Somente quando ambas as condições coincidem a alteração está realmente ativa.

Android 15 (API 35): principais behavioural changes

Android 15 (API 35, Vanilla Ice Cream) introduz vários behavioural changes críticos que os desenvolvedores devem considerar ao atualizar targetSdk para 35. Primeiro — Privacy Sandbox for Android. Esta é a iniciativa do Google para substituir o Advertising ID por APIs mais privadas: Topics API (interesses do usuário), Protected Audience (remarketing) e Attribution Reporting (conversões). A partir da API 35, o Advertising ID deixa de ser um identificador estável e pode retornar um valor nulo.

A segunda alteração — Foreground Service Types (API 34, continuada na API 35). A partir da API 34, cada aplicativo com targetSdk 34+ deve especificar o tipo de serviço em primeiro plano no manifesto: dataSync, systemExempted, shortService, location, mediaPlayback e outros. Sem isso, o sistema gera ForegroundServiceTypeNotAllowedException. Na API 35, um novo tipo health foi adicionado e a validação dos tipos existentes foi endurecida. Todos os serviços em primeiro plano devem ser revisados.

A terceira alteração — restrição no SCHEDULE_EXACT_ALARM. A partir da API 35, aplicativos com targetSdk 35+ não podem usar SCHEDULE_EXACT_ALARM sem permissão explícita do usuário. O sistema mostra um diálogo e o usuário deve aprovar o agendamento exato. Para alarmes e temporizadores, isso significa uma etapa adicional na UX. Uma alternativa é usar alarmes inexatos com uma margem de 10 minutos.

kotlin
// Android 15 (API 35): verificação de SCHEDULE_EXACT_ALARM
import android.app.AlarmManager
import android.os.Build
import android.provider.Settings

class AlarmScheduler {

    fun canScheduleExactAlarms(context: android.content.Context): Boolean {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
            // API 35+: permissão do usuário necessária
            val alarmManager = context.getSystemService(
                android.content.Context.ALARM_SERVICE
            ) as AlarmManager
            return alarmManager.canScheduleExactAlarms()
        }
        // Abaixo de API 35 — alarmes exatos disponíveis sem permissão
        return true
    }

    fun requestExactAlarmPermission(activity: android.app.Activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
            val intent = android.content.Intent(
                Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM
            ).apply {
                data = android.net.Uri.fromParts(
                    "package", activity.packageName, null
                )
            }
            activity.startActivity(intent)
        }
    }
}

Privacy Sandbox e a restrição de alarmes são os dois behavioural changes mais críticos da API 35. SDKs de anúncios precisarão migrar para Topics API e Attribution Reporting. Para aplicativos com alarmes e lembretes — adaptação de UX para o diálogo de permissão. Ignorar essas alterações levará a falhas do aplicativo em tempo de execução no Android 15 ou a monetização de anúncios quebrada.

Diferença entre targetSdk e compileSdk

A diferença entre targetSdkVersion e compileSdkVersion é uma das fontes mais comuns de confusão entre desenvolvedores Android. compileSdkVersion é a versão do SDK contra a qual o código é compilado. Ela determina quais APIs estão disponíveis em tempo de compilação, mas não afeta o comportamento em tempo de execução. targetSdkVersion é a versão contra a qual o aplicativo é testado — determina quais behavioural changes se aplicam em tempo de execução. compileSdk pode e deve ser maior ou igual a targetSdk.

A regra é simples: compileSdk >= targetSdk >= minSdk. compileSdk geralmente é igual ao último API Level estável (em 2026 — 36). targetSdk deve ser o mais alto possível entre as versões que você testou. minSdk deve ser o mais baixo possível para alcance máximo. Aumentar compileSdk não requer testar behavioural changes — apenas abre acesso a novas APIs para o compilador. Aumentar targetSdk requer um ciclo completo de testes de todos os behavioural changes.

ParâmetroMomento de açãoAfetaPode ser maior que outros
compileSdkVersionCompilaçãoDisponibilidade de API para o códigoSim, sempre maior que targetSdk
targetSdkVersionRuntimeBehavioural changesSim, mas menor que compileSdk
minSdkVersionInstalaçãoCompatibilidade de dispositivosNão, sempre o mais baixo

Na prática: se você quiser usar uma nova API do Android 16 (API 36) mas ainda não testou os behavioural changes da API 36, defina compileSdk = 36, targetSdk = 35. O código será compilado com as novas APIs, mas os behavioural changes da API 36 não serão aplicados. Assim que testar todas as alterações — aumente targetSdk para 36.

Perguntas frequentes

O que é targetSdkVersion no Android?

targetSdkVersion é o API Level contra o qual o aplicativo é testado. O Android o usa para aplicar behavioural changes — alterações de comportamento introduzidas nessa versão. Se targetSdk for inferior ao API Level do dispositivo, os behavioural changes não são aplicados. O Google Play exige targetSdk não superior a 1 ano do API Level atual para publicar novas versões e atualizações.

Como targetSdkVersion difere de compileSdkVersion?

targetSdkVersion afeta o comportamento em tempo de execução: ativa behavioural changes de um API Level específico. compileSdkVersion afeta apenas a compilação: determina quais APIs estão disponíveis para o compilador. compileSdk pode ser maior que targetSdk, mas não o contrário. Aumentar compileSdk não requer testes; aumentar targetSdk requer verificar todos os behavioural changes.

Quais behavioural changes o Android 15 (API 35) introduz?

Android 15 (API 35) introduz behavioural changes chave: Privacy Sandbox com restrições de Advertising ID, Foreground Service Types com declaração obrigatória, restrição de SCHEDULE_EXACT_ALARM com diálogo de permissão, endurecimento do Scoped Storage e migração automática para autenticação sem credenciais. Aplicativos com targetSdk 35+ devem passar por um ciclo completo de testes na API 35.

O que acontece se eu não atualizar targetSdkVersion?

Se você não atualizar targetSdkVersion, o Google Play bloqueará a publicação de novas versões do seu aplicativo. A cada ano o Google eleva o targetSdk mínimo: a partir de agosto de 2025 — targetSdk 34+, a partir de agosto de 2026 espera-se targetSdk 35+. Aplicativos que não atendem aos requisitos são removidos da loja. Além disso, os behavioural changes de segurança não são aplicados, tornando o aplicativo vulnerável.

Como verificar targetSdkVersion de um aplicativo instalado?

Para verificar targetSdkVersion, use ADB: adb shell dumpsys package com.example.myapp | grep targetSdk. No Android Studio, abra o APK Analyzer: Build → Analyze APK → AndroidManifest.xml → uses-sdk. Em código: context.applicationInfo.targetSdkVersion. No Google Play Console, targetSdk é exibido na página de lançamento na seção Artifact Details.

Resumo

  • targetSdkVersion é o API Level contra o qual o app é testado; determina quais behavioural changes se aplicam em runtime
  • Behavioural changes — Scoped Storage, POST_NOTIFICATIONS, Foreground Service Types, Privacy Sandbox — são ativados pelo targetSdk
  • Google Play exige targetSdk não superior a 1 ano do API Level atual, caso contrário bloqueia atualizações
  • Atualizar targetSdk requer 3-6 meses de preparação: estudo de behavioural changes, testes, correção de código
  • Privacy Sandbox (API 35+) muda o funcionamento dos identificadores de publicidade — exige Topics API e Attribution Reporting
  • compileSdk lida com compilação e acesso a API; targetSdk lida com comportamento em runtime; compileSdk >= targetSdk
  • Verificação de behavioural changes ativos: context.applicationInfo.targetSdkVersion + Build.VERSION.SDK_INT

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também