Home / Aplicativo móvel / A terceira versão beta do Android 17

A terceira versão beta do Android 17

A terceira versão beta do Android 17

Postado por Matthew McCullough, vice-presidente de gerenciamento de produtos, desenvolvedor Android

Andróide 17 atingiu oficialmente a estabilidade da plataforma hoje com o Beta 3. Isso significa que a superfície da API está bloqueada; você pode realizar testes finais de compatibilidade e enviar seus aplicativos direcionados ao Android 17 para a Play Store. Além disso, o Beta 3 traz uma série de novos recursos para ajudá-lo a criar aplicativos melhores, mais seguros e altamente integrados.

Prepare seus aplicativos, bibliotecas, ferramentas e motores de jogo!

Se você desenvolve um SDK, biblioteca, ferramenta ou mecanismo de jogo, é ainda mais importante preparar todas as atualizações necessárias agora para evitar que seus desenvolvedores de aplicativos e jogos downstream sejam bloqueados por problemas de compatibilidade e permitir que eles direcionem os recursos mais recentes do SDK. Informe seus desenvolvedores downstream se forem necessárias atualizações para oferecer suporte total ao Android 17.

O teste envolve a instalação do seu aplicativo de produção ou de teste usando sua biblioteca ou mecanismo usando o Google Play ou outros meios em um dispositivo ou emulador executando o Android 17 Beta 3. Trabalhe em todos os fluxos do seu aplicativo e procure por problemas funcionais ou de IU. Revise as mudanças de comportamento para focar seus testes. Cada versão do Android contém alterações de plataforma que melhoram a privacidade, a segurança e a experiência geral do usuário, e essas alterações podem afetar seus aplicativos. Aqui estão algumas mudanças nas quais focar:

  • Redimensionamento em telas grandes: Depois de atingir o Android 17, você não poderá mais optar por não manter as restrições de orientação, redimensionamento e proporção. em telas grandes.
  • Carregamento de código dinâmico: Se o seu aplicativo for direcionado ao Android 17 ou superior, a proteção Safer Dynamic Code Load (DCL) introduzida no Android 14 para arquivos DEX e JAR agora se estende às bibliotecas nativas. Todos os arquivos nativos carregados usando System.load() devem ser marcados como somente leitura. Caso contrário, o sistema lançará UnsatisfiedLinkError.
  • Habilitar CT por padrão: Transparência do certificado (CT) está habilitado por padrão. (No Android 16, CT está disponível, mas os aplicativos tiveram que ser ativados.)
  • Proteções de rede local: os aplicativos direcionados ao Android 17 ou superior têm o acesso à rede local bloqueado por padrão. Mude para o uso de seletores que preservam a privacidade, se possível, e use o novo ACCESS_LOCAL_NETWORK para acesso amplo e persistente.

Aprimoramentos de mídia e câmera

Opções de personalização do Seletor de fotos

O Android agora permite personalizar a apresentação visual do seletor de fotos para complementar melhor a interface de usuário do seu aplicativo. Ao aproveitar o novo PhotoPickerUiCustomizaçãoParams API, você pode modificar a proporção da visualização em grade do quadrado padrão 1:1 para uma exibição retrato 9:16. Essa flexibilidade se estende tanto à intenção ACTION_PICK_IMAGES quanto ao seletor de fotos incorporado, permitindo manter uma estética coesa quando os usuários interagem com a mídia.

Tudo isso faz parte do nosso esforço para ajudar a fazer com que o seletor de fotos do Android, que preserva a privacidade, se adapte perfeitamente à sua experiência com o aplicativo. Saiba mais sobre como você pode incorporar o seletor de fotos diretamente em seu aplicativo para obter a experiência mais nativa.

val params = PhotoPickerUiCustomizationParams.Builder()
    .setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
    .build()

val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
    putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}

startActivityForResult(intent, REQUEST_CODE)

Suporte para o formato de imagem RAW14: O Android 17 introduz suporte para o formato de imagem RAW14 – o padrão de fato da indústria para fotografia digital de alta qualidade – por meio da nova constante ImageFormat.RAW14. RAW14 é um formato de canal único de 14 bits por pixel que usa um layout densamente compactado, onde cada quatro pixels consecutivos são compactados em sete bytes.

Extensões de câmera definidas pelo fornecedor: O Android 17 adiciona extensões definidas pelo fornecedor para permitir que parceiros de hardware definam e implementem modos de extensão de câmera personalizados para fornecer acesso aos melhores e mais recentes recursos de câmera, como ‘Super Resolução’ ou aprimoramentos de ponta baseados em IA. Você pode consultar esses modos usando a API isExtensionSupported(int).

APIs de tipo de dispositivo de câmera: As novas APIs do Android 17 permitem consultar o tipo de dispositivo subjacente para identificar se uma câmera é um hardware integrado, uma webcam USB externa ou uma câmera virtual.

Suporte para aparelho auditivo Bluetooth LE Audio

O Android agora inclui uma categoria de dispositivo específica para aparelhos auditivos Bluetooth Low Energy (BLE). Com a adição do AudioDeviceInfo.TYPE_BLE_HEARING_AID constante, seu aplicativo agora pode distinguir aparelhos auditivos de fones de ouvido normais.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

Roteamento de áudio granular para aparelhos auditivos

O Android 17 permite que os usuários gerenciem de forma independente onde sons específicos do sistema são reproduzidos. Eles podem optar por encaminhar notificações, toques e alarmes para aparelhos auditivos conectados ou para o alto-falante integrado do dispositivo.

Codificador de software HE-AAC estendido

O Android 17 apresenta um codificador de software HE-AAC estendido fornecido pelo sistema. Este codificador suporta taxas de bits baixas e altas usando fala unificada e codificação de áudio. Você pode acessar este codificador através do MediaCodec API usando o nome c2.android.xheaac.encoder ou consultando o audio/mp4a-latm Tipo MIME.

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

Melhorias de desempenho e bateria

Reduza wakelocks com suporte de ouvinte para alarmes de permissão enquanto ocioso

O Android 17 apresenta uma nova variante de AlarmManager.setExactAndAllowWhileIdle que aceita um OnAlarmListener em vez de um PendingIntent. Esse novo mecanismo baseado em retorno de chamada é ideal para aplicativos que atualmente dependem de wakelocks contínuos para executar tarefas periódicas, como aplicativos de mensagens que mantêm conexões de soquete.

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
    // Do work here
}

alarmManager.setExactAndAllowWhileIdle(
    AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + 60000,
    listener,
    null
)

Atualizações de privacidade

Botão de localização fornecido pelo sistema

O Android está introduzindo um botão de localização renderizado pelo sistema que você poderá incorporar diretamente no layout do seu aplicativo usando uma biblioteca Android Jetpack. Quando um usuário toca neste botão do sistema, seu aplicativo recebe acesso de localização preciso apenas para a sessão atual. Para implementar isso, você precisa declarar a permissão USE_LOCATION_BUTTON.

Configurações discretas de visibilidade de senha para teclados físicos e de toque

Este recurso divide a configuração existente do sistema “Mostrar senhas” em duas preferências distintas do usuário: uma para entradas baseadas em toque e outra para entradas de teclado físico (hardware). Os caracteres inseridos por meio de teclados físicos agora ficam ocultos imediatamente por padrão.

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

Segurança

Carregamento de código dinâmico somente leitura imposto

Para melhorar a segurança contra ataques de injeção de código, o Android agora impõe que as bibliotecas nativas carregadas dinamicamente sejam somente leitura. Se o seu aplicativo for direcionado ao Android 17 ou superior, todos os arquivos nativos carregados usando System.load() deverão ser marcados como somente leitura previamente.

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()

System.load(libraryFile.absolutePath)

Assinatura de APK híbrida de criptografia pós-quântica (PQC)

Para se preparar para avanços futuros na computação quântica, o Android está introduzindo suporte para criptografia pós-quântica (PQC) por meio do novo esquema de assinatura APK v3.2. Este esquema utiliza uma abordagem híbrida, combinando uma assinatura clássica com uma assinatura ML-DSA.

Experiência do usuário e UI do sistema

Melhor suporte para widgets em monitores externos

Este recurso melhora a consistência visual dos widgets de aplicativos quando eles são exibidos em monitores conectados ou externos com diferentes densidades de pixels usando unidades DP ou SP.

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)

val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
    R.id.container,
    16f, 8f, 16f, 8f,
    TypedValue.COMPLEX_UNIT_DIP
)

Rótulos de aplicativos ocultos na tela inicial


O Android agora fornece uma configuração de usuário para ocultar nomes de aplicativos (rótulos) na área de trabalho da tela inicial. Certifique-se de que o ícone do seu aplicativo seja distinto e reconhecível.

Imagem em imagem interativa para desktop

Ao contrário do Picture-in-Picture tradicional, essas janelas fixadas permanecem interativas enquanto permanecem sempre visíveis em outras janelas de aplicativos no modo desktop.

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks(0)
appTask.requestWindowingLayer(
    ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
    context.mainExecutor,
    object : OutcomeReceiver {
        override fun onResult(result: Int) {
            if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
                // Task successfully moved to pinned layer
            }
        }
        override fun onError(error: Exception) {}
    }
)

Barra de ferramentas de gravação de tela redesenhada

Funcionalidade principal

Configurações de exclusão de aplicativos VPN

Ao usar a nova intenção ACTION_VPN_APP_EXCLUSION_SETTINGS, seu aplicativo pode iniciar uma tela de configurações gerenciada pelo sistema, onde os usuários podem selecionar aplicativos para ignorar o túnel VPN.

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
}

Atualizações da API OpenJDK 25 e 21

Esta atualização traz recursos e refinamentos abrangentes do OpenJDK 21 e OpenJDK 25, incluindo o suporte Unicode mais recente e suporte SSL aprimorado para grupos nomeados em TLS.

Comece com o Android 17

Você pode inscrever qualquer dispositivo Pixel compatível ou use as imagens do sistema de 64 bits com o Android Emulator.

  • Compile com base no novo SDK e relate problemas no página de comentários.
  • Teste a compatibilidade do seu app atual e saiba se ele foi afetado pelas alterações no Android 17.

Para informações completas, acesse o Site para desenvolvedores do Android 17.

Deixe um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *