Recursos e APIs do Android 10

O Android 10 apresenta ótimos recursos e funcionalidades para usuários e desenvolvedores de aplicativos. Este documento destaca o que está disponível para os desenvolvedores.

Para saber mais sobre as APIs, leia a Relatório de diferenças da API ou acesse a Referência da API do Android: procure APIs que foram "adicionadas" API de nível 29". Confira também o comportamento do Android 10 (para aplicativos direcionados ao nível 29 da API e para todos os apps), além da privacidade , para saber mais sobre as áreas em que as mudanças na plataforma podem afetam seus apps.

Melhorias na segurança

O Android 10 apresenta vários recursos de segurança, resumidos nas seções a seguir.

Caixas de diálogo de autenticação biométrica aprimoradas

O Android 10 apresenta as melhorias abaixo para Suporte à autenticação biométrica:

  • Uma verificação do recurso de autenticação biométrica.
  • Um mecanismo substituto que permite que um usuário faça a autenticação usando o próprio dispositivo PIN, padrão ou senha, se não for possível autenticar usando a biometria entrada.
  • Uma dica que informa ao sistema para não exigir confirmação do usuário depois que ele for autenticado usando uma modalidade biométrica implícita. Por exemplo, é possível informar ao sistema que nenhuma outra confirmação deve ser necessária após o usuário usando autenticação facial.

Executar código DEX incorporado diretamente no APK

A partir do Android 10, você pode dizer à plataforma para executar o código DEX incorporado diretamente no arquivo APK do seu app. Essa opção ajuda a evitar se um invasor conseguir adulterar o código compilado localmente no dispositivo.

Para mais informações, consulte Executar código DEX incorporado diretamente no APK.

Compatibilidade com TLS 1.3

O Android 10 adiciona suporte a TLS 1.3 O TLS 1.3 é uma grande revisão da Padrão TLS que inclui benefícios de desempenho e segurança aprimorada. Nossos os comparativos de mercado indicam que conexões seguras podem ser estabelecidas em até 40% com o TLS 1.3 em comparação com o TLS 1.2.

Para mais detalhes sobre nossa implementação do TLS 1.3, consulte a seção TLS nas mudanças de comportamento de todos os apps .

API pública Conscrypt

A partir do Android 10, o provedor de segurança Conscrypt inclui uma API pública para a funcionalidade TLS.

A coleção de classes em android.net.ssl contêm dados estáticos métodos para acessar funcionalidades que não estão disponíveis na versão genérica APIs javax.net.ssl. Os nomes dessas classes podem ser inferidos como o plural da classe javax.net.ssl correspondente. Por exemplo, o código que opera instâncias de javax.net.ssl.SSLSocket podem usar métodos da SSLSockets.

Recursos de conectividade

O Android 10 inclui várias melhorias relacionadas a rede e conectividade.

API de conexão de rede Wi-Fi

O Android 10 agora é compatível com conexões ponto a ponto. Isso permite que o aplicativo solicite ao usuário a alteração do ponto de acesso que o ao qual o dispositivo está conectado usando WifiNetworkSpecifier para descrever as propriedades de uma rede solicitada. A conexão ponto a ponto é para fins que não fornecem rede, como configuração de bootstrapping para e secundários, como o Chromecast e o hardware do Google Home.

Para mais informações, consulte API Wi-Fi Network Request para conexão ponto a ponto e conectividade.

API de sugestão de rede Wi-Fi

O Android 10 adiciona suporte para que seu app solicite que o usuário se conecte a um ponto de acesso Wi-Fi. Você pode dar sugestões de qual rede se conectar A plataforma vai escolher qual ponto de acesso aceitar com base no a entrada do seu e de outros apps.

Para mais informações sobre esse recurso, consulte Sugestão de Wi-Fi.

Melhorias nos modos Wi-Fi de alto desempenho e baixa latência

O Android 10 permite que você dê uma dica ao modem usado para minimizar latência de rede.

O Android 10 estende a API Wi-Fi Lock para oferecer compatibilidade com alto desempenho de maneira eficaz e de baixa latência. A economia de energia do Wi-Fi está desativada para alto desempenho e de baixa latência, e a otimização da latência adicional pode ser ativada em modelos dependendo do suporte ao modem.

O modo de baixa latência só é ativado quando o aplicativo que está adquirindo o bloqueio em execução em primeiro plano e a tela estiver ligada. Esse modo é especialmente útil para apps de jogos em tempo real para dispositivos móveis.

Pesquisas especializadas no resolvedor de DNS

O Android 10 adiciona suporte nativo para buscas DNS especializadas usando as pesquisas de texto não criptografado e o modo DNS sobre TLS. Antes, o DNS da plataforma o resolvedor aceitava apenas registros A e AAAA, que permitem procurar apenas o IP endereços associados a um nome, mas não permitiam nenhum outro tipo de registro. A API DnsResolver oferece resolução assíncrona e genérica, permitindo a busca de SRV, NAPTR e outros tipos de registro. Observe que a análise da resposta é deixada para execução pelo app.

Para apps baseados em NDK, consulte android_res_nsend.

Wi-Fi Easy Connect

O Android 10 permite que você use o Easy Connect para provisionar o Wi-Fi. credenciais para um dispositivo de peering, como uma substituição da WPS, que foi descontinuada. Os apps podem integrar o Easy Connect à própria configuração e ao fluxo de provisionamento usando as ACTION_PROCESS_WIFI_EASY_CONNECT_URI intenção.

Para mais informações sobre esse recurso, consulte Wi-Fi Easy Connect.

API de conexão Wi-Fi Direct

As classes de API WifiP2pConfig e WifiP2pManager têm atualizações no Android 10. para oferecer suporte a recursos de estabelecimento de conexão rápida com o Wi-Fi Direct usando informações predeterminadas. Essas informações são compartilhadas por um canal paralelo, como Bluetooth ou NFC.

O exemplo de código a seguir mostra como criar um grupo usando informações:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Para participar de um grupo usando credenciais, substitua manager.createGroup() pelo seguintes:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Canais orientados à conexão (CoC) Bluetooth LE

O Android 10 permite que o app use conexões BLE CoC para transferir dados maiores streams entre dois dispositivos BLE. Essa interface abstrai o Bluetooth e de conectividade para simplificar a implementação.

Recursos de telefonia

O Android 10 inclui várias melhorias relacionadas à telefonia.

Melhorias na qualidade das chamadas

O Android 10 adiciona a capacidade de coletar informações sobre a qualidade de atualizações Chamadas de Subsistema multimídia IP (IMS), incluindo qualidade de e para a rede, em dispositivos compatíveis com o recurso.

Filtro de ligações e identificador de chamadas

O Android 10 oferece ao seu app meios para identificar chamadas que não no catálogo de endereços do usuário como possíveis chamadas de spam e para que as chamadas de spam silenciosamente rejeitada em nome do usuário. Informações sobre estas chamadas bloqueadas são registradas como chamadas bloqueadas no registro de chamadas para fornecer maior transparência para para o usuário quando ele perdeu chamadas. O uso dessa API elimina a necessidade de receber permissões READ_CALL_LOG do usuário para oferecer a funcionalidade de filtro de ligações e identificador de chamadas.

API de serviço de redirecionamento de chamadas

O Android 10 altera a forma como os intents de chamadas são processados. O A transmissão NEW_OUTGOING_CALL foi descontinuada e substituída pela API CallRedirectionService. A API CallRedirectionService fornece interfaces para modificar chamadas realizadas pela plataforma Android. Para Por exemplo, apps de terceiros podem cancelar chamadas e redirecioná-las por VoIP.

Melhorias na criação de arquivos no armazenamento externo

Além de introduzir escopos armazenamento, O Android 10 adiciona os seguintes recursos relacionados a recursos externos armazenamento:

Mídia e gráficos

O Android 10 introduz os novos recursos e APIs de mídia e gráficos a seguir:

Compartilhar entradas de áudio

O Android 10 adiciona a capacidade de dois apps compartilharem a entrada de áudio simultaneamente. Para informações completas, consulte Compartilhar entradas de áudio.

Captura de reprodução de áudio

O Android 10 oferece aos apps a capacidade de capturar a reprodução de áudio de outros apps. Para mais informações, consulte Captura de reprodução.

Barra de procura nas notificações do MediaStyle

No Android 10 e versões mais recentes, as notificações do MediaStyle mostram uma barra de busca. A barra mostra o progresso da reprodução de PlaybackState.getPosition(), e, em alguns casos, pode ser usada para procurar um local no programa em execução. A aparência e o comportamento da barra são controlados por estas regras:

  • A barra de busca aparece se houver uma MediaSession ativa e se a duração (especificada por MediaMetadata.METADATA_KEY_DURATION) for maior que zero. Isso significa que a barra não aparece para fluxos indeterminados, como transmissões ao vivo e transmissões de rádio.
  • Se a sessão implementar ACTION_SEEK_TO, o usuário poderá arrastar a barra de procura para controlar o local da reprodução.

API Native MIDI

A API Android Native MIDI (AMidi) oferece aos desenvolvedores de aplicativos a capacidade para enviar e receber dados MIDI com código C/C++, com maior integração com a lógica de controle/áudio C/C++ e minimizar a necessidade de JNI.

Para mais informações, consulte API Android Native MIDI.

Melhorias no MediaCodecInfo

O Android 10 adiciona métodos ao MediaCodecInfo que revelam mais informações sobre um codec.

Para mais informações, consulte Codecs de mídia.

API Thermal

Quando os dispositivos ficam muito quentes, eles podem limitar a CPU e/ou GPU, e isso pode afetam apps e jogos de maneiras inesperadas. Apps que usam gráficos complexos, pesados computação ou atividade de rede sustentada têm mais chances de apresentar problemas podem variar entre dispositivos com base em frequências de núcleo e chipset, níveis de integração e também no empacotamento e formato dos dispositivos.

No Android 10, apps e jogos podem usar uma API Thermal para monitorar mudanças no o dispositivo e tomar medidas para reduzir o consumo de energia e restaurar o estado temperatura Os apps registram um listener no PowerManager, por meio do qual o sistema informa o status térmico contínuo, variando de leve e moderado a severo, crítico, de emergência e de desligamento.

Quando o dispositivo relata estresse térmico, apps e jogos podem ajudar recuando atividades contínuas para reduzir o uso de energia de várias formas. Por exemplo: os apps de streaming reduzam a resolução/taxa de bits ou o tráfego de rede, a câmera aplicativo poderá desativar o flash ou o aprimoramento intenso de imagem, o jogo poderá reduzir frame rate ou mosaico de polígonos, um app de mídia poderia reduzir o volume do alto-falante, e um app de mapas pode desativar o GPS.

A API Thermal exige uma nova camada de HAL do dispositivo. No momento, ela tem suporte em dispositivos Pixel com o Android 10 e estamos trabalhando com nosso fabricante parceiros para oferecer suporte amplo ao ecossistema o mais rápido possível.

Câmera e imagens

O Android 10 introduz os novos recursos de câmera e imagem a seguir:

Compatibilidade com câmera monocromática

O Android 9 (API de nível 28) apresentou pela primeira vez o recurso de câmera monocromática. O Android 10 inclui várias melhorias de compatibilidade com a câmera monocromática:

  • Compatibilidade com o formato de fluxo Y8 para melhorar a eficiência da memória.
  • Compatibilidade com captura em DNG bruto monocromático.
  • Introdução de enumerações MONO e NIR CFA para distinguir entre elementos câmera monocromática e câmeras de infravermelho próximo.

É possível usar esse recurso para capturar uma imagem monocromática nativa. Uma lógica um dispositivo com várias câmeras pode usar uma câmera monocromática como uma subcâmera física para a melhorar a qualidade da imagem com pouca luz.

Formato Profundidade dinâmica

A partir do Android 10, as câmeras podem armazenar os dados de profundidade de uma imagem em um usando um novo esquema chamado Formato Profundidade Dinâmica (DDF, na sigla em inglês). Os apps podem solicitar a imagem JPG e seus metadados de profundidade, usando essa informação para aplicar o desfoque desejado no pós-processamento sem modificar o original dados de imagem.

Para ler a especificação desse formato, consulte Formato Profundidade dinâmica.

Formato de arquivo de imagem de alta eficiência

O formato de arquivo de imagem de alta eficiência (HEIF, na sigla em inglês) é um formato padrão de imagem e vídeo que introduz uma codificação de qualidade superior e menor tamanho de arquivo em comparação com outros formatos de arquivo.

Para mais informações sobre o formato do arquivo, consulte HEIC (link em inglês).

Melhorias na funcionalidade de várias câmeras

O Android 10 melhora a fusão de várias câmeras em uma única câmera lógica, um recurso introduzido no Android 9 (API de nível 28). Os seguintes itens foram adicionados a as API Camera2:

API de serviços de acessibilidade

O Android 10 apresenta o novo serviço de acessibilidade a seguir: recursos e APIs:

Sinalização de chave de entrada AccessibilityNodeInfo

A partir do Android 10, é possível chamar isTextEntryKey() para determinar se um determinado AccessibilityNodeInfo representa uma chave de entrada de texto que é parte de um teclado ou teclado.

Feedback falado da caixa de diálogo de acessibilidade

Nos casos em que os usuários precisam executar o atalho de acessibilidade para iniciar uma serviço de acessibilidade, o Android 10 permite que a caixa de diálogo seja acompanhados por um prompt de conversão de texto em voz se o serviço solicitar.

Atalho de acessibilidade quando a navegação por gestos está ativada

Quando o recurso de navegação por gestos está ativado no Android 10, a ferramenta não é visíveis ou selecionáveis. Para acessar o menu de serviços de acessibilidade, os usuários precisam execute um dos seguintes gestos:

  • Deslizar para cima com dois dedos
  • Deslizar para cima com dois dedos e segurar

Atalho de acessibilidade para teclados físicos

No Android 10, os usuários podem acionar o atalho de acessibilidade em uma no teclado físico pressionando Control+Alt+Z.

Melhoria do controlador de teclado virtual

No Android 10, os serviços de acessibilidade podem solicitar que o teclado virtual seja exibido mesmo quando o dispositivo detectar um teclado físico conectado. Os usuários podem modificar esse comportamento.

Tempos limite de acessibilidade definidos pelo usuário

O Android 10 introduz a getRecommendedTimeoutMillis() API. Esse método oferece suporte para tempos limite definidos pelo usuário para elementos de IU não interativos. O valor de retorno é influenciado pelas ações preferências e APIs de serviços de acessibilidade.

Melhorias no preenchimento automático

O Android 10 contém as seguintes melhorias no serviço de preenchimento automático.

Solicitações de preenchimento automático relacionadas com compatibilidade

Você pode usar o FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST flag para determinar se uma solicitação de preenchimento automático foi gerada por compatibilidade modo

Salvar nome de usuário e senha simultaneamente

É possível oferecer suporte a casos em que um aplicativo usa várias atividades para exibir nome de usuário, senha e outros campos usando o SaveInfo.FLAG_DELAY_SAVE .

Interação do usuário com a IU de salvamento

É possível mostrar e ocultar um campo de senha em uma caixa de diálogo de salvamento definindo uma ação listener na caixa de diálogo e mudar a visibilidade da senha correspondente visualização remota.

Compatibilidade com atualização de conjuntos de dados

O preenchimento automático pode atualizar senhas existentes. Por exemplo, se um usuário já armazenar uma senha e salvar uma nova, o preenchimento automático solicitará que o usuário atualize a senha em vez de salvar uma nova.

Melhorias de classificação de campo

O Android 10 contém as seguintes melhorias para a API Field Classification.

Construtor UserData.Builder

O UserData.Builder foi alterado para se alinhar melhor ao padrão Builder.

Permitir que um valor seja mapeado para vários tipos de IDs de categoria

Ao usar UserData.Builder pol. No Android 10, agora é possível mapear um valor para vários tipos de IDs de categoria. Em versões anteriores, uma exceção era gerada se um valor fosse adicionado mais de uma vez.

Compatibilidade aprimorada com números de cartão de crédito

A classificação de campo agora pode detectar números de quatro dígitos como os últimos quatro dígitos de um número de cartão de crédito.

Compatibilidade com a classificação de campo específico do app

O Android 10 adiciona FillResponse.setUserData(), que permite definir dados do usuário específicos do app durante a sessão. Isso ajuda o serviço de preenchimento automático a detectar tipos de campos com campos específicos conteúdo.

Controles da IU e do sistema

O Android 10 traz as seguintes melhorias da interface do usuário:

Compatibilidade com limites do JVMTI PopFrame

O Android 10 adiciona suporte à can_pop_frames na implementação da JVMTI no Android. Ao depurar, esse recurso permite que você execute novamente as funções depois de pausar em um ponto de interrupção e ajustar locais, globais ou a implementação de uma função. Para mais informações, consulte Página de referência do Pop Frame (em inglês) da Oracle.

API Surface control

O Android 10 oferece uma API SurfaceControl para acesso de baixo nível ao compositor do sistema (SurfaceFlinger). Para a maioria dos usuários, o SurfaceView é a maneira correta de usar o compositor. A API SurfaceControl pode ser útil em alguns casos, como:

  • Sincronização de várias superfícies
  • Incorporação de superfície de processo cruzado
  • Gerenciamento de ciclo de vida de nível inferior

A API SurfaceControl está disponível nas Vinculações do SDK e do NDK. A implementação do NDK inclui uma API para troca manual de buffers com o compositor. Isso oferece uma alternativa para os usuários que se deparam com o limitações de BufferQueue

Detecção de renderizador inativo WebView

O Android 10 introduz a WebViewRenderProcessClient abstrata, que os apps podem usar para detectar se um WebView deixou de responder. Para usar esta classe:

  1. Defina sua própria subclasse e implemente a onRenderProcessResponsive() e onRenderProcessUnresponsive() métodos.
  2. Anexe uma instância do seu WebViewRenderProcessClient a uma ou mais objetos WebView.
  3. Se a WebView deixar de responder, o sistema chamará o método onRenderProcessUnresponsive() do cliente, transmitindo WebView e WebViewRenderProcess Se o WebView for de processo único, o WebViewRenderProcess é nulo.) Seu app pode realizar as ações adequadas, como mostrar uma caixa de diálogo perguntando ao usuário se ele deseja interromper o processo de renderização.

Se a WebView não estiver respondendo, o sistema chamará onRenderProcessUnresponsive(). periodicamente (não mais do que uma vez a cada cinco segundos), mas não realiza outra ação. Se o WebView se tornar responsivo novamente, o sistema chamará onRenderProcessResponsive() apenas uma vez.

Painéis de configurações

O Android 10 apresenta os Painéis de configurações, uma API que permite que os apps mostrem para os usuários no contexto do app. Isso evita que os usuários precisem acessar Configurações para alterar itens como NFC ou Dados móveis em para usar o app.

Figura 1. O usuário tenta abrir uma página da Web enquanto o dispositivo não está conectado à rede. O Chrome mostra o menu Conectividade com a Internet painel de configurações...

Figura 2. O usuário pode ativar o Wi-Fi e selecionar uma rede sem sair do app Chrome.

Por exemplo, suponha que um usuário abra um navegador da Web enquanto seu dispositivo está modo avião. Em versões anteriores ao Android 10, o app só podia exibir uma mensagem genérica pedindo ao usuário para abrir as Configurações para restaurar a conectividade. Com o Android 10, o app do navegador pode exibir um painel in-line mostrando as principais configurações de conectividade, como o modo avião, o Wi-Fi (incluindo redes próximas) e dados móveis. Com esse painel, os usuários podem restaurar a conectividade sem sair do app.

Para exibir um painel de configurações, acione uma intent com uma das seguintes opções: Ações Settings.Panel:

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type pode ser:

ACTION_INTERNET_CONNECTIVITY
Mostra as configurações relacionadas à conectividade com a Internet, como modo avião, Wi-Fi e dados móveis.
ACTION_WIFI
Mostra as configurações de Wi-Fi, mas não as outras configurações de conectividade. Isso é útil para aplicativos que precisam de uma conexão Wi-Fi para realizar uploads grandes ou downloads.
ACTION_NFC
Mostra todas as configurações relacionadas à comunicação a curta distância (NFC).
ACTION_VOLUME
Mostra as configurações de volume de todos os streams de áudio.

Melhorias de compartilhamento

O Android 10 oferece várias melhorias para o compartilhamento:

API Sharing Shortcuts

A API Sharing Shortcuts substitui as APIs Direct Share.

Em vez de recuperar os resultados de forma reativa sob demanda, a API Sharing Shortcuts permite que os apps publiquem alvos de compartilhamento direto com antecedência. É assim que o ShortcutManager funciona. Como as duas APIs são semelhantes, expandimos a ShortcutInfo API para tornar o uso mais fáceis de usar. Com a API Share Shortcuts, você pode atribuir diretamente categorias ou pessoas a um alvo de compartilhamento. Os alvos de compartilhamento persistem no sistema até que o mesmo app as atualize ou o app seja desinstalado.

O mecanismo antigo de compartilhamento direto ainda funciona, mas os apps que o usam têm uma do que os apps que usam a API de atalhos de compartilhamento.

ShortcutInfo.Builder adiciona e aprimora métodos para fornecer mais informações sobre o alvo de compartilhamento.

Destinos de compartilhamento direto

Você pode publicar um atalho dinâmico como um destino de compartilhamento direto. Consulte Publicar destinos de compartilhamento direto.

ShortcutManagerCompat é uma nova API AndroidX que oferece compatibilidade com a antiga API DirectShare. Isso é a maneira preferida de publicar alvos de compartilhamento.

Visualização de texto

Quando um aplicativo compartilha conteúdo de texto, ele pode mostrar uma visualização opcional do o conteúdo na interface do Sharesheet.

Consulte Como adicionar visualizações rich text

Saiba mais

Para mais informações sobre como os apps podem compartilhar dados, consulte Como enviar dados simples para outros aplicativos e Como receber dados simples de outros apps

Tema escuro

O Android 10 oferece um tema escuro que se aplica à IU do sistema Android e aos apps em execução no dispositivo. Para mais informações, consulte Tema escuro.

Tipos de serviços em primeiro plano

O Android 10 introduz o atributo de manifesto XML foregroundServiceType, que você inclui na definição de vários serviços específicos. É possível, embora raramente seja apropriado, atribuir vários tipos de serviço em primeiro plano para um serviço específico.

A tabela a seguir mostra os diferentes tipos de serviço em primeiro plano e as serviços em que é apropriado declarar um tipo específico:

Tipo de serviço em primeiro plano Exemplo de caso de uso para um serviço que deve declarar esse tipo
connectedDevice Acompanhar um monitor wearable de atividades físicas
dataSync Fazer o download de arquivos de uma rede
location Continuar uma ação iniciada pelo usuário
mediaPlayback Tocar um livro de áudio, podcast ou música
mediaProjection Gravar um vídeo da tela do dispositivo durante um curto período de tempo
phoneCall Lidar com chamadas em curso

Kotlin

O Android 10 inclui as seguintes atualizações para o desenvolvimento em Kotlin.

Anotações de valores nulos para APIs libcore

O Android 10 melhora a cobertura de anotações de nulidade em o SDK para as APIs libcore. Essas anotações permitem que os desenvolvedores de apps que estão usando a análise de valores nulos do Kotlin ou Java no Android Studio recebam informações de nulidade ao interagir com essas APIs.

Normalmente, violações de contratos de nulidade no Kotlin resultam em compilação. erros. Para garantir a compatibilidade com o código existente, somente o As anotações @RecentlyNullable e @RecentlyNonNull foram adicionadas. Isso significa que as violações de nulidade resultam em avisos, em vez de erros.

Além disso, todas as anotações @RecentlyNullable ou @RecentlyNonNull que foram adicionadas no Android 9 estão mudando para @Nullable e @NonNull, respectivamente. Isso significa que, no Android 10 e versões mais recentes, as violações de nulidade levar a erros em vez de avisos.

Para mais informações sobre mudanças de anotações, consulte O SDK do Android Pie agora é mais compatível com Kotlin no Blog de desenvolvedores Android.

NDK

O Android 10 inclui as alterações do NDK descritas a seguir.

Depuração aprimorada da propriedade do descritor de arquivo

O Android 10 adiciona o fdsan, que ajuda a localizar e corrigir problemas de propriedade de descritor de arquivos com mais facilidade.

Bugs relacionados ao uso incorreto da propriedade do descritor de arquivo, que tendem a se manifestar use-after-close e double-close, são análogos à alocação de memória bugs use-after-free e double-free, mas tendem a ser muito mais difíceis de diagnóstico e correção. O fdsan tenta detectar e/ou impedir o descritor de arquivo devido à aplicação da propriedade do descritor de arquivo.

Para mais informações sobre falhas relacionadas a esses problemas, acesse Erro detectado pelo fdsan. Para mais informações sobre o fdsan, consulte a Página do Googlesource no fdsan.

TLS ELF

Os aplicativos criados usando o NDK com uma API de nível mínimo 29 podem usar ELF TLS em vez de emutls. Agora é possível usar o vinculador dinâmico e estático esse método de manipulação de variáveis locais de linha de execução.

Foram implementadas melhorias nos apps criados para o nível 28 da API e anteriores para que libgcc/compiler-rt resolva alguns problemas de emutls.

Para mais informações, consulte Mudanças do Android para desenvolvedores do NDK.

Ambiente de execução

O Android 10 inclui a mudança no ambiente de execução descrita a seguir.

Acionamento de coleta de lixo baseada em Mallinfo

Quando pequenos objetos Java da plataforma fazem referência a objetos grandes no heap C++, a Objetos C++ podem ser reivindicados apenas quando o objeto Java é coletado e, por exemplo, finalizada. Em versões anteriores, a plataforma estimava os tamanhos muitos objetos C++ associados a objetos Java. Essa estimativa nem sempre foi preciso e, ocasionalmente, resulta em um aumento significativo no uso de memória, já que plataforma não conseguiu realizar a coleta de lixo quando deveria.

No Android 10, o coletor de lixo (GC) rastreia o tamanho total do heap alocado pelo sistema malloc(), garantindo que malloc() alocações são sempre incluídas nos cálculos de acionamento de GC. Intercalação de apps um grande número de alocações de C++ com execução de Java pode ver um aumento em a frequência de coleta de lixo como resultado. Outros apps podem ter uma pequena redução.

Teste e depuração

O Android 10 inclui as melhorias em testes e depuração descritas a seguir.

Melhorias na geração de traces do sistema no dispositivo

No Android 10, é possível especificar limites para o tamanho e de um trace quando você executa uma rastros do sistema no dispositivo. Quando você especifica um desses valores, o sistema gera um trace longo, copiando periodicamente o buffer do trace para o arquivo de destino enquanto o trace é gravado. O trace é concluído quando os limites de tamanho ou duração que você especificou forem atingidos.

Use esses parâmetros adicionais para testar casos de uso diferentes dos que você testaria com um trace padrão. Por exemplo, você pode diagnosticar um bug de desempenho que só ocorre após um longo período de execução do app. Em neste caso, você poderia registrar um rastreamento longo durante um dia inteiro e, em seguida, analisar programador de CPU, atividade do disco, linhas de execução do app e outros dados no relatório para ajudar a determinar a causa do bug.

No Android 10 e versões mais recentes, os arquivos de rastreamento são salvos em um formato que podem ser abertas com o Perfetto, um projeto de código aberto para instrumentação e rastreamento de desempenho. Você pode Converta arquivos de rastreamento do Perfetto para o Systrace formato.

Melhorias no TextClassifier

O Android 10 oferece outras funcionalidades de classificação de texto na interface TextClassifier.

Detecção de idioma

O método detectLanguage() funciona de maneira semelhante aos métodos de classificação já existentes. Ela recebe um TextLanguage.Request e retorna uma TextLanguage objeto.

Os objetos TextLanguage consistem em uma lista de pares ordenados. Cada par contém uma localidade e uma pontuação de confiança correspondente para a classificação.

Sugestões de ações de conversa

O suggestConversationActions() funciona de maneira semelhante aos métodos de classificação existentes. Ele recebe um ConversationActions.Request e retorna uma ConversationActions objeto.

ConversationActions Os objetos consistem em uma lista de ConversationAction objetos. Cada objeto ConversationAction inclui um potencial ação sugerida e sua pontuação de confiança.

Respostas inteligentes/ações em notificações

O Android 9 introduziu a capacidade de exibir respostas sugeridas em uma notificação. O Android 10 expande isso com a capacidade de incluir ações sugeridas baseadas em intents. Além disso, a plataforma gerar essas sugestões automaticamente. Os apps ainda podem fornecer ou desativar sugestões geradas pelo sistema.

A API usada para gerar essas respostas faz parte do TextClassifier, e também foi exposto diretamente a desenvolvedores no Android 10. Leia a seção sobre melhorias no TextClassifier para mais informações.

Se o app fornecer sugestões próprias, a plataforma não vai gerar nenhuma sugestões automáticas. Se você não quiser que as notificações do seu app sejam exibidas respostas ou ações sugeridas, desative as respostas geradas pelo sistema e ações usando setAllowGeneratedReplies() e setAllowSystemGeneratedContextualActions()