Recursos e APIs do Android 10

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

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

Melhorias na segurança

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

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

O Android 10 apresenta as seguintes melhorias na compatibilidade com a autenticação biométrica:

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

Executar código DEX incorporado diretamente no APK

A partir do Android 10, é possível instruir a plataforma a executar o código DEX incorporado diretamente no arquivo APK do app. Essa opção evita ataques caso um invasor consiga 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 ao TLS 1.3. O TLS 1.3 é uma revisão importante do padrão TLS que inclui benefícios de desempenho e segurança aprimorada. Nossos comparativos de mercado indicam que as conexões seguras podem ser estabelecidas até 40% mais rápido 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 para 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 de TLS.

A coleção de classes em android.net.ssl contém métodos estáticos para acessar funcionalidades que não estão disponíveis nas APIs genéricas do 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 em instâncias de javax.net.ssl.SSLSocket pode usar métodos de 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. Esse recurso permite que o app solicite que o usuário mude o ponto de acesso ao qual o dispositivo está conectado usando WifiNetworkSpecifier para descrever as propriedades de uma rede solicitada. A conexão ponto a ponto é usada para fins que não sejam de fornecimento de rede, como a configuração de inicialização para dispositivos secundários, como o hardware do Chromecast e do Google Home.

Para mais informações, consulte API de solicitação de rede Wi-Fi para conectividade ponto a ponto.

API de sugestão de rede Wi-Fi

O Android 10 adiciona suporte para que seu app peça ao usuário para se conectar a um ponto de acesso Wi-Fi. Você pode fornecer sugestões de rede para conexão. A plataforma vai escolher qual ponto de acesso aceitar com base na entrada do seu app e de outros.

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ê forneça uma dica ao modem para minimizar a latência.

O Android 10 estende a API de bloqueio de Wi-Fi para oferecer suporte eficaz ao modo de alto desempenho e ao modo de baixa latência. A economia de energia do Wi-Fi é desativada para os modos de alto desempenho e baixa latência, e uma otimização adicional de latência pode ser ativada no modo de baixa latência, dependendo do suporte do modem.

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

Pesquisas especializadas no resolvedor de DNS

O Android 10 adiciona suporte nativo para buscas DNS especializadas usando pesquisas de texto não criptografado e o modo DNS sobre TLS. Antes, o resolvedor de DNS da plataforma oferecia suporte apenas a registros A e registros AAAA, que permitem procurar apenas os endereços IP associados a um nome, mas não oferecia suporte a 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 credenciais de Wi-Fi para um dispositivo de peering, como um substituto do WPS, que foi descontinuado. Os apps podem integrar o Easy Connect ao fluxo de configuração e provisionamento usando a intent ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

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 lateral, como Bluetooth ou NFC.

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

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 seguinte:

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 CoC de BLE para transferir fluxos de dados maiores entre dois dispositivos BLE. Essa interface abstrai o Bluetooth e a mecânica 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 chamadas em andamento do Subsistema Multimídia de IP (IMS, na sigla em inglês), incluindo a 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 app um meio de identificar chamadas que não estão na lista de endereços do usuário como possíveis ligações spam e de rejeitar essas ligações silenciosamente em nome do usuário. As informações sobre essas ligações bloqueadas são registradas como ligações bloqueadas no registro de chamadas para oferecer maior transparência ao usuário quando ele perde ligações. O uso dessa API elimina o requisito 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. A transmissão NEW_OUTGOING_CALL foi descontinuada e substituída pela API CallRedirectionService. A API CallRedirectionService oferece interfaces para modificar as ligações efetuadas pela plataforma Android. 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 o armazenamento com escopo, o Android 10 adiciona os seguintes recursos relacionados ao armazenamento externo:

  • Use a flag IS_PENDING para dar ao app acesso exclusivo a um arquivo de mídia enquanto ele é gravado no disco.
  • Se você souber de um local específico em que os arquivos precisam ser armazenados, poderá oferecer uma dica ao sistema sobre onde armazenar os arquivos recém-gravados.
  • Cada dispositivo de armazenamento externo tem um nome de volume exclusivo.

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 de MediaStyle mostram uma barra de busca. A barra de busca mostra o progresso da reprodução de PlaybackState.getPosition() e, em alguns casos, pode ser usada para buscar um local no programa em reprodução. A aparência e o comportamento da barra são controlados por estas regras:

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

API Native MIDI

A API MIDI nativa do Android (AMidi) permite que os desenvolvedores de aplicativos enviem e recebam dados MIDI com código C/C++, integrando-se mais estreitamente à lógica de áudio/controle C/C++ e minimizando a necessidade de JNI.

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

Melhorias no MediaCodecInfo

O Android 10 adiciona métodos a 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 a GPU, e isso pode afetar os apps e jogos de maneiras inesperadas. Os apps que usam gráficos complexos, computação intensa ou atividade da rede sustentada têm maior probabilidade de apresentar problemas, que podem variar entre os dispositivos com base no chipset e nas frequências de núcleo, nos níveis de integração e também no empacotamento e no formato do dispositivo.

No Android 10, os apps e jogos podem usar uma API térmica para monitorar mudanças no dispositivo e tomar medidas para reduzir o uso de energia e restaurar a temperatura normal. Os apps registram um listener no PowerManager, que o sistema usa para informar o status térmico atual, que varia de leve e moderado a grave, crítico, de emergência e de desligamento.

Quando o dispositivo relata estresse térmico, os apps e jogos podem ajudar ao desativar atividades em andamento para reduzir o consumo de energia de várias maneiras. Por exemplo, apps de streaming podem reduzir a resolução/taxa de bits ou o tráfego de rede, um app de câmera pode desativar o flash ou a melhoria intensiva de imagem, um jogo pode reduzir o frame rate ou a tesselação de polígonos, um app de música pode reduzir o volume do alto-falante e um app de mapas pode desativar o GPS.

A API Thermal requer uma nova camada de HAL do dispositivo. No momento, ela é compatível com dispositivos Pixel com o Android 10, e estamos trabalhando com nossos parceiros fabricantes de dispositivos 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 das enumerações MONO e NIR CFA para distinguir entre câmeras monocromáticas comuns e câmeras de infravermelho próximo.

É possível usar esse recurso para capturar uma imagem monocromática nativa. Um dispositivo lógico de várias câmeras pode usar uma câmera monocromática como uma subcâmera física para conseguir uma melhor qualidade da imagem em ambientes 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 arquivo separado, usando um novo esquema chamado Formato de Profundidade Dinâmica (DDF, na sigla em inglês). Os apps podem solicitar a imagem JPG e os metadados de profundidade, usando essas informações para aplicar qualquer desfoque que quiserem no pós-processamento sem modificar os dados da imagem original.

Para ler a especificação desse formato, consulte Formato de 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 apresenta codificação de maior qualidade e tamanho de arquivo menor em comparação com outros formatos de arquivo.

Para mais informações sobre o formato do arquivo, consulte HEIC.

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 (nível 28 da API). Os seguintes itens foram adicionados à API Camera2:

API de serviços de acessibilidade

O Android 10 apresenta os seguintes novos recursos e APIs de serviço de acessibilidade:

Sinalização de chave de entrada AccessibilityNodeInfo

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

Resposta falada da caixa de diálogo de acessibilidade

Caso os usuários precisem usar o atalho de acessibilidade para iniciar um serviço de acessibilidade, o Android 10 permite que a caixa de diálogo seja acompanhada por uma solicitação 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, o botão de acessibilidade não fica visível nem pode ser selecionado. Para acessar o menu de serviços de acessibilidade, os usuários precisam fazer 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 um 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 de software seja exibido mesmo quando o dispositivo detecta um teclado físico conectado. Os usuários podem modificar esse comportamento.

Tempos limite de acessibilidade definidos pelo usuário

O Android 10 apresenta a API getRecommendedTimeoutMillis(). Esse método oferece suporte a tempos limite definidos pelo usuário para elementos da interface interativos e não interativos. O valor de retorno é influenciado pelas preferências do usuário e pelas APIs do serviço 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

É possível usar a flag FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST para determinar se uma solicitação de preenchimento automático foi gerada pelo modo de compatibilidade.

Salvar nome de usuário e senha simultaneamente

É possível oferecer suporte a casos em que um aplicativo usa várias atividades para mostrar nome de usuário, senha e outros campos usando a flag 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 um listener de ação na caixa de diálogo e mudando a visibilidade da visualização remota de senha correspondente.

Compatibilidade com atualização de conjuntos de dados

O preenchimento automático pode atualizar senhas existentes. Por exemplo, se um usuário já tiver armazenado uma senha e salvar uma nova, o preenchimento automático vai solicitar que ele atualize a senha atual 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 construtor 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 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 campos 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 conteúdo específico do app.

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 ao recurso can_pop_frames na implementação da JVMTI para Android. Ao depurar, esse recurso permite executar 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 a página de referência do Pop Frame 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, a SurfaceView é a maneira correta de aproveitar o compositor. A API SurfaceControl pode ser útil em determinados casos, por exemplo:

  • 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 atingiram as limitações de BufferQueue.

Detecção de renderizador inativo WebView

O Android 10 apresenta a classe abstrata WebViewRenderProcessClient, que os apps podem usar para detectar se um WebView parou de responder. Para usar essa classe:

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

Se o WebView continuar sem responder, o sistema vai chamar onRenderProcessUnresponsive() periodicamente (no máximo uma vez a cada cinco segundos), mas não vai realizar nenhuma outra ação. Se o WebView voltar a responder, o sistema vai 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 configurações aos usuários no contexto do app. Isso evita que os usuários precisem acessar as Configurações para mudar itens como NFC ou Dados móveis 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 abre o painel de configurações de Conectividade com a Internet…

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 o dispositivo está no modo avião. Antes do Android 10, o app só podia mostrar uma mensagem genérica pedindo que o usuário abrisse as Configurações para restaurar a conectividade. Com o Android 10, o app de navegador pode exibir um painel inline mostrando as principais configurações de conectividade, como modo aviã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 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 à conexão de 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 apps que precisam de uma conexão Wi-Fi para realizar uploads ou downloads grandes.
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 resultados de forma reativa sob demanda, a API Sharing Shortcuts permite que os apps publiquem destinos de compartilhamento direto com antecedência. Veja como o ShortcutManager funciona. Como as duas APIs são semelhantes, expandimos a API ShortcutInfo para facilitar o uso dos dois recursos. Com a API Sharing Shortcuts, é possível atribuir diretamente categorias ou pessoas a um destino de compartilhamento. Os destinos de compartilhamento permanecem no sistema até que o mesmo app os atualize ou seja desinstalado.

O mecanismo de Compartilhamento Direto mais antigo ainda funciona, mas os apps que o usam têm uma prioridade menor do que os que usam a API Sharing Shortcuts.

ShortcutInfo.Builder adiciona e aprimora métodos para fornecer mais informações sobre o destino 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 do AndroidX que oferece compatibilidade com versões anteriores da API DirectShare antiga. Essa é a maneira preferencial de publicar destinos de compartilhamento.

Visualização de texto

Quando um app compartilha conteúdo de texto, ele pode mostrar uma prévia opcional do 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 apps 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 apresenta o atributo de manifesto XML foregroundServiceType, que é incluído na definição de vários serviços específicos. É possível, embora raramente apropriado, atribuir vários tipos de serviço em primeiro plano a um serviço específico.

A tabela a seguir mostra os diferentes tipos de serviço em primeiro plano e os 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 no SDK para APIs libcore. Essas anotações permitem que os desenvolvedores de apps que usam a análise de nulidade do Kotlin ou do Java no Android Studio recebam informações de nulidade ao interagir com essas APIs.

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

Além disso, 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 levam a erros em vez de avisos.

Para mais informações sobre mudanças nas anotações, consulte O SDK do Android Pie agora é mais compatível com o 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 encontrar e corrigir problemas de propriedade do descritor do arquivo com mais facilidade.

Bugs relacionados ao gerenciamento incorreto da propriedade do descritor do arquivo, que tendem a se manifestar como use-after-close e double-close, são análogos aos bugs de alocação de memória use-after-free e double-free, mas tendem a ser muito mais difíceis de diagnosticar e corrigir. O fdsan tenta detectar e/ou evitar o gerenciamento incorreto do descritor do arquivo aplicando a propriedade do descritor do arquivo.

Para mais informações sobre falhas relacionadas a esses problemas, consulte Erro detectado pelo fdsan. Para mais informações sobre o fdsan, consulte a página do Googlesource sobre o fdsan (link em inglês).

TLS ELF

Os aplicativos criados com o NDK com um nível da API mínimo 29 podem usar o ELF TLS em vez de emutls. O suporte ao vinculador dinâmico e estático foi adicionado para oferecer suporte a esse método de processamento de variáveis locais de linha de execução.

Para apps criados para o nível 28 da API e versões anteriores, foram implementadas melhorias para que o libgcc/compiler-rt contorne alguns problemas do 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 de plataforma referenciam objetos enormes no heap C++, os objetos C++ geralmente só podem ser recuperados quando o objeto Java é coletado e, por exemplo, finalizado. Em versões anteriores, a plataforma estimava os tamanhos de muitos objetos C++ associados a objetos Java. Essa estimativa nem sempre era precisa e, às vezes, resultava em um aumento significativo no uso da memória, já que a plataforma não realizava a coleta de lixo quando deveria.

No Android 10, o coletor de lixo (GC, na sigla em inglês) rastreia o tamanho total do heap alocado pelo sistema malloc(), garantindo que grandes alocações de heap de malloc() sejam sempre incluídas nos cálculos de acionamento do GC. Os apps que intercalam um grande número de alocações em C++ com a execução em Java podem ter um aumento na 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 a duração de um rastreamento ao realizar um rastreamento do sistema no dispositivo. Quando você especifica qualquer um dos valores, o sistema executa um rastreamento longo, copiando periodicamente o buffer de rastreamento para o arquivo de destino enquanto o rastreamento é gravado. O trace é concluído quando os limites de tamanho ou duração especificados são 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 estar diagnosticando um bug de desempenho que só ocorre depois que o app é executado por um longo período. Nesse caso, você pode gravar um rastro longo ao longo de um dia inteiro e, em seguida, analisar o programador de CPU, a atividade do disco, as 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 pode ser aberto com o Perfetto (link em inglês), um projeto de código aberto para instrumentação e rastreamento de desempenho. Você pode converter arquivos de rastro do Perfetto para o formato do Systrace.

Melhorias no TextClassifier

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

Detecção de idiomas

O método detectLanguage() funciona de maneira semelhante aos métodos de classificação anteriores. Ele recebe um objeto TextLanguage.Request e retorna um objeto TextLanguage.

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

Sugestões de ações de conversa

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

Os objetos ConversationActions consistem em uma lista de objetos ConversationAction. Cada objeto ConversationAction inclui uma possível ação sugerida e a pontuação de confiança dela.

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

O Android 9 introduziu a capacidade de mostrar respostas sugeridas em uma notificação. O Android 10 expande isso com a capacidade de incluir ações sugeridas com base em intent. Além disso, a plataforma pode gerar essas sugestões automaticamente. Os apps ainda podem fornecer as próprias sugestões ou desativar as sugestões geradas pelo sistema.

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

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