page.title=Android N for Developers meta.tags="preview", "androidn" page.tags="preview", "developer preview" page.image=images/cards/card-n-apis_2x.png @jd:body
O Android N ainda está em desenvolvimento ativo. Mas agora é possível experimentá-lo como parte do N Developer Preview. As sessões a seguir destacam alguns novos recursos para desenvolvedores.
Não deixe de conferir as Mudanças de comportamento para saber mais sobre as áreas onde as alterações de plataforma podem afetar os aplicativos, examine os guias para desenvolvedores para saber mais sobre os principais recursos e faça o download da Referência da API para obter detalhes sobre as novas APIs.
No Android N, introduzimos um recurso de multitarefa novo e muito solicitado na plataforma — o suporte a várias janelas.
Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo.
Figura 1. Aplicativos executando em modo de tela dividida.
O suporte a várias janelas oferece novas formas de envolver os usuários, particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima maneira de aprimorar a experiência do usuário.
É simples adicionar suporte a várias janelas ao aplicativo e configurar a forma com ele processa a exibição em várias janelas. Por exemplo, você pode especificar as dimensões mínimas permitidas para a atividade, evitando que os usuários a redimensionem para tamanhos menores. Também é possível desativar a exibição em várias janelas no aplicativo, o que garante que o sistema mostrará o aplicativo exclusivamente em modo de tela cheia.
Para obter mais informações, consulte a documentação para desenvolvedores de Suporte a várias janelas.
Reformulamos as notificações no Android N para facilitar e agilizar o seu uso. Algumas modificações são:
Figura 2. Notificações empacotadas e resposta direta.
Para saber como implementar os novos recursos, consulte o guia Notificações.
No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT) do ART e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar atualizações de aplicativos e de sistema.
A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo de acordo com o uso real e com as condições no dispositivo. Por exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo não são compiladas até que sejam realmente utilizadas.
Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários associados. Esse recurso é particularmente importante em dispositivos com pouca memória.
O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.
Um dos benefícios mais tangíveis do compilador JIT do ART é a velocidade de instalação dos aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam diversos minutos para otimização e instalação no Android 6.0, podem agora ser instalados em segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização.
O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como quando está em uma mesa ou gaveta.
Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento. Sempre que a tela ficar desativada por um período e o dispositivo ficar desativado, o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos. Isso significa que os usuários podem economizar bateria transportando os dispositivos no bolso.
Figura 3. O modo soneca agora aplica restrições para aumentar a vida útil da bateria mesmo quando o dispositivo não está estacionário.
Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de manutenção, os aplicativos podem acessar a rede e todos os trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo encerra o modo soneca.
Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um período, o modo soneca aplicará as restrições completas de CPU e rede em {@link android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e verificações de GPS/Wi-Fi.
As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para processar o modo soneca corretamente, está pronto. Caso contrário, comece a adaptar o aplicativo para o modo soneca agora.
O Project Svelte é um esforço contínuo para minimizar o uso de RAM pelo sistema e pelos aplicativos nos dispositivos Android existentes no ecossistema. No Android N, o Project Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano.
O processamento em segundo plano é uma parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência do usuário pode ficar incrível — imediata, rápida e sensível ao contexto. Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e bateria) e afetar o desempenho do sistema para os outros aplicativos.
Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma preferencial para execução de trabalho em segundo plano de uma maneira que beneficia os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em condições de memória, energia e conectividade. O JobScheduler oferece controle e simplicidade, e queremos que seja usado por todos os aplicativos.
Outra boa opção é o
GCMNetworkManager, parte do Google Play Services, que
oferece um agendamento de trabalhos similar, compatível com versões legadas do
Android.
Continuamos a expandir o JobScheduler e o
GCMNetworkManager para atender a mais
casos de uso — por exemplo, no Android N, você já pode agendar trabalhos
em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a
substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema,
particularmente em dispositivos com pouca memória.
No Android N, estamos removendo três transmissões implícitas de uso comum —
{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente
processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se
o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para
migrar para o JobScheduler e as APIs relacionadas.
Consulte a documentação de Otimizações em segundo plano para obter mais detalhes.
Figura 4. O Economizador de dados em Settings.
Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular são um recurso caro que querem economizar.
O Android N introduz o modo Economizador de dados, um novo serviço do sistema que ajuda a reduzir o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança ou em pacotes de dados pré-pagos pequenos. O Economizador de dados permite que os usuários controlem o uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo Economizador de dados estiver ativado.
Quando um usuário ativa o Economizador de dados em Settings e o dispositivo está em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possível — como, por exemplo, limitar a taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache e assim por diante. Os usuários podem autorizar aplicativos específicos a usar dados tarifados em segundo plano, mesmo com o Economizador de dados ativado.
O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma forma de recuperar as preferências do usuário para o Economizador de dados e monitorar as mudanças de preferências. Todos os aplicativos devem verificar se o usuário ativou o Economizador de dados e tentar limitar o uso de dados em primeiro e segundo plano.
Figura 5. Blocos de Configurações rápidas na aba de notificações.
As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações diretamente na aba de notificações. No Android N, ampliamos o escopo das Configurações rápidas para aumentar ainda mais a utilidade e a conveniência.
Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso, permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e largam os blocos.
Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.
Os blocos de Configurações rápidas estão reservados para controles ou ações que são urgentemente necessários ou frequentemente usados e não devem ser usados como atalhos para iniciar aplicativos.
Após definir os blocos, você pode disponibilizá-los aos usuários, que por sua vez podem adicioná-los às Configurações rápidas usando o recurso de arrastar e soltar.
Para obter informações sobre a criação de um bloco de aplicativo, consulte
android.service.quicksettings.Tile na Referência da API, disponível para download.
O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar a lista de números bloqueados. A lista não pode ser acessada por outros aplicativos.
Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece uma forma consistente de bloqueio de números em uma grande variedade de dispositivos. Alguns benefícios que podem ser aproveitados pelos aplicativos são:
Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor para o usuário, impedindo que chamadas e textos indesejados cheguem a ele por qualquer meio, como pontos finais de VOIP ou encaminhamento de telefones.
Para obter mais informações, consulte android.provider.BlockedNumberContract
na Referência da API,
disponível para download.
O Android N permite que o aplicativo de telefone padrão faça triagem das chamadas recebidas. O aplicativo
de telefone faz isso implementando o novo CallScreeningService,
que permite que a execução de diversas ações com base nos
{@link android.telecom.Call.Details Call.Details} da chamada recebida, como:
Para obter mais informações, consulte android.telecom.CallScreeningService
na Referência da API,
disponível para download.
O Android N agora permite que os usuários selecionem diversas localidades em Settings para oferecer melhor suporte a casos de uso bilíngues. Os aplicativos podem usar uma API nova para obter as localidades selecionadas pelo usuário e oferecer experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em diversos idiomas e não oferecer a tradução de páginas da web que usam um idioma conhecido pelo usuário.
Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas disponíveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas mais comuns, como inglês, espanhol, francês e árabe. Além disso, ele adiciona suporte parcial a mais de 100 novos idiomas.
Os aplicativos podem obter a lista de localidades definida pelo usuário chamando LocaleList.GetDefault(). Para oferecer suporte ao maior número de localidades, o Android N está alterando a forma
como resolve recursos. Não deixe de testar e verificar se seus aplicativos
funcionam da forma esperada com a nova lógica de resolução de recursos.
Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve seguir, consulte Suporte a vários idiomas.
O Android N oferece agora um subconjunto das APIs ICU4J na estrutura do Android no
pacote android.icu. A migração é simples e consiste principalmente em
alterar o espaço de nome com.java.icu para
android.icu. Se você já usa um pacote ICU4J nos seus
aplicativos, a mudança para as APIs do android.icu disponibilizadas na estrutura do
Android pode reduzir substancialmente o tamanho do APK.
Para saber mais sobre as APIs ICU4J no Android, consulte Suporte ao ICU4J.
O Android N adiciona interfaces de estrutura e suporte de plataforma ao OpenGL ES 3.2, incluindo:
EXT_texture_sRGB_decode.
A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe
GLES32. Ao usar o OpenGL ES 3.2, não deixe de declarar o
requisito no arquivo manifesto usando a tag <uses-feature> e o
atributo android:glEsVersion.
Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do OpenGL ES compatível do dispositivo no tempo de execução, consulte o guia da OpenGL ES API.
O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting, os serviços de entrada de TV podem controlar quais dados de canal são gravados e como as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado.
Para obter mais informações, consulte APIs de gravação do Android TV.
O Android for Work adiciona vários recursos e APIs para dispositivos que executam o Android N. Veja a seguir alguns destaques — para obter uma lista completa das atualizações do Android for Work relacionadas ao Android N, consulte Mudanças no Android for Work.
Os donos de perfil podem especificar um desafio de segurança separado para os aplicativos executados no
perfil de trabalho. O desafio de trabalho será mostrado quando o usuário tentar abrir
qualquer aplicativo de trabalho. A resolução bem-sucedida do desafio de segurança desbloqueia e,
se necessário, descriptografa o perfil de trabalho. Para donos de perfil,
ACTION_SET_NEW_PASSWORD solicita que o usuário defina um desafio
de trabalho e ACTION_SET_NEW_PARENT_PROFILE_PASSWORD um
bloqueio de dispositivo.
Os donos de perfil podem definir políticas de senha distintas para o desafio de trabalho
(como o comprimento mínimo do PIN ou se é permitido usar uma impressão digital
para desbloquear o perfil) usando setPasswordQuality(),
setPasswordMinimumLength() e métodos relacionados. O dono
de perfil também pode definir o bloqueio de dispositivo usando a instância de DevicePolicyManager
retornada pelo novo método getParentProfileInstance().
Além disso, donos de perfil podem personalizar a tela de credenciais do
desafio de trabalho usando os novos métodos setOrganizationColor() e
setOrganizationName().
Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está desativado, o usuário gerenciado é encerrado temporariamente, o que desativa os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho, inclusive o aplicativo do dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um ícone de status persistente para lembrar ao usuário que não é possível iniciar aplicativos de trabalho. A tela de início indica que os aplicativos e widgets de trabalho não podem ser acessados.
Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a inicialização do dispositivo.
Os novos métodos DevicePolicyManager são
setAlwaysOnVpnPackage() e
getAlwaysOnVpnPackage().
Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com
aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da
mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção correspondente
à ação android.net.VpnService.
Além disso, os usuários podem definir manualmente clientes do Always on VPN que implementam
métodos VPNService no usuário principal usando
Settings>More>Vpn.
O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho da fonte, tamanho da tela e TalkBack.
Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos com essas configurações ativadas. Você pode ativá-las em Settings > Accessibility.
Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências motoras a tocar na tela. A nova API permite criar serviços com recursos como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para atender às necessidades desses usuários.
Para obter mais informações, consulte android.accessibilityservice.GestureDescription
na Referência da API, disponível para download.
A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada. Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário, alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser disponibilizados imediatamente após um reinício.
A inicialização direita aproveita a criptografia baseada em arquivo do Android N para ativar políticas de criptografia detalhadas para dados de sistema e aplicativos. O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos.
Na inicialização, o sistema inicia em um modo restrito que permite
acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados.
Se você deseja executar componentes nesse modo, pode registrá-los
definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa
componentes registrados transmitindo a intenção
LOCKED_BOOT_COMPLETED. O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados
antes do destravamento. Todos os outros dados ficarão indisponíveis até que o usuário confirme suas
credenciais de tela de bloqueio para descriptografá-los.
Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o kernel do Linux, possíveis vulnerabilidades do Android e extração em dispositivos com acesso root.
Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança, o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação de chaves para determinar com precisão se um par de chaves RSA ou EC está protegido por hardware, quais as propriedades do par de chaves e quais as restrições aplicadas ao uso e à validação.
Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves por meio de um certificado de confirmação X.509, que deve estar assinado por uma chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA, injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica. Portanto, um certificado de confirmação assinado com uma chave de confirmação válida confirma a existência de um armazenamento de chaves protegido por hardware, além de detalhes dos pares de chaves desse armazenamento de chaves.
Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica e segura, a confirmação de chaves exige que o bootloader do dispositivo forneça as seguintes informações ao Ambiente de execução confiável (TEE):
Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware, consulte o guia Armazenamento de chaves protegido por hardware.
Além da confirmação de chaves, o Android N também introduziu chaves associadas a impressões digitais que não são revogadas no cadastramento de impressões digitais.
No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS) de forma segura, sem modificação no código, usando a Configuração de segurança de rede declarativa em vez das APIs programáticas propensas a erro (por exemplo, X509TrustManager).
Recursos compatíveis:
Para obter mais configurações, consulte Configuração de segurança de rede.
Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android N que querem confiar em CAs adicionadas pelo usuário devem usar a Configuração de segurança de rede para especificar como confiar nas CAs de usuário.
A classe PackageManager agora permite a verificação de aplicativos usando o esquema de assinatura de APK v2. O esquema de assinatura APK v2 é um esquema de assinatura integral de arquivos que acelera consideravelmente a verificação e fortalece as garantias de integridade, detectando qualquer alteração não autorizada em arquivos APK.
Para manter a compatibilidade com versões anteriores, o APK deve ser assinado com o esquema de assinatura v1 (esquema de assinatura JAR) antes de ser assinado com o esquema de assinatura v2. Com o esquema de assinatura v2, a verificação falhará se você assinar o APK com um certificado adicional após assiná-lo com o esquema v2.
O suporte ao esquema de assinatura de APK v2 será disponibilizado posteriormente no N Developer Preview.
No Android N, os aplicativos podem usar novas APIs para solicitar acesso a diretórios de armazenamento
externo, incluindo diretórios em mídia removível como cartões
SD. As novas APIs simplificam substancialmente o acesso de aplicativos a diretórios de
armazenamento externo padrão, como o diretório Pictures. Os aplicativos,
como aplicativos de fotografia, podem usar essas APIs em vez de
READ_EXTERNAL_STORAGE, que concede acesso a todos os diretórios de
armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até
o diretório.
Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU de permissões simples que detalha claramente a qual diretório o aplicativo está solicitando acesso.
Para obter mais informações, consulte a documentação para desenvolvedores Acessos a diretório com escopo.