page.title=Mudanças de comportamento page.keywords=preview,sdk,compatibility meta.tags="preview", "compatibility" page.tags="preview", "developer preview" page.image=images/cards/card-n-changes_2x.png @jd:body

Neste documento

  1. Melhorias no desempenho
    1. Soneca
    2. Otimizações em segundo plano
  2. Alterações nas permissões
  3. Compartilhamento de arquivos entre aplicativos
  4. Melhorias na acessibilidade
    1. Zoom de tela
    2. Configurações de visão no assistente de configuração
  5. Aplicativos NDK vinculados a bibliotecas de plataforma
  6. Android for Work
  7. Retenção de anotações
  8. Outros pontos importantes

Veja também

  1. Visão geral da API do Android N

Junto com novos recursos e funcionalidades, o Android N inclui uma variedade de mudanças de comportamento do sistema e da API. Este documento destaca algumas das principais mudanças que você deve entender e considerar nos aplicativos.

Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado pelas alterações na plataforma.

Bateria e memória

O Android N inclui alterações de comportamento do sistema com o objetivo de melhorar a vida útil da bateria nos dispositivos e reduzir o uso de RAM. Essas alterações podem afetar o acesso do aplicativo aos recursos do sistema, bem como a forma como ele interage com outros aplicativos por meio de certas intenções explícitas .

Soneca

Introduzido no Android 6.0 (nível da API 23), o modo soneca aumenta a vida útil da bateria adiando atividades de CPU e rede quando um usuário deixa um dispositivo desconectado, estacionário e com a tela desativada. O Android N aprimora ainda mais o modo soneca aplicando um subconjunto de restrições de CPU e rede quando o dispositivo está desconectado e com a tela desativada, mas não necessariamente estacionário, como, por exemplo, quando o celular está no bolso do usuário.

Figura 1. Ilustração de como o modo soneca aplica um primeiro nível de restrições de atividades de sistema para aumentar a vida útil da bateria.

Quando o dispositivo estiver sendo alimentado pela bateria e a tela estiver desativada por um determinado período, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer estacionário por um determinado período após entrar no modo soneca, o sistema aplicará as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes {@link android.app.AlarmManager} e às verificações de GPS e Wi-Fi. Independentemente de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o dispositivo para breves janelas de manutenção, quando os aplicativos poderão acessar a rede e executar todos os trabalhos/sincronizações adiados.

Figura 2. Ilustração de como o modo soneca aplica um segundo nível de restrições de atividades de sistema após o dispositivo permanecer estacionário por um determinado período.

Note que a ativação da tela ou do dispositivo encerra o modo soneca e remove essas restrições de processamento. O comportamento adicional não afeta as recomendações e práticas recomendadas para a adaptação do aplicativo à versão anterior do modo soneca, introduzida no Android 6.0 (nível da API 23), como discutido em Otimização para soneca e aplicativo em espera. Você deve continuar a seguir essas recomendações, como o uso do Google Cloud Messaging (GCM) para enviar e receber mensagens, e começar a planejar atualizações para acomodar o comportamento adicional do modo soneca.

Project Svelte: Otimizações em segundo plano

O Android N remove três transmissões implícitas para ajudar a otimizar o uso de memória e o consumo de energia. Essa alteração é necessária porque transmissões implícitas iniciam frequentemente em segundo plano aplicativos registrados para escutá-las. A remoção dessas transmissões pode beneficiar consideravelmente o desempenho do dispositivo e a experiência do usuário.

Dispositivos móveis passam por alterações frequentes na conectividade, como a alternância entre Wi-Fi e dados móveis. No momento, os aplicativos podem monitorar alterações de conectividade registrando um receptor para a transmissão implícita {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} em seu manifesto. Como vários aplicativos se registram para receber essa transmissão, uma única mudança de rede pode fazer com que todos despertem e processem a transmissão ao mesmo tempo.

De forma semelhante, em versões anteriores do Android, os aplicativos podiam se registrar para receber transmissões implícitas {@link android.hardware.Camera#ACTION_NEW_PICTURE} e {@link android.hardware.Camera#ACTION_NEW_VIDEO} de outros aplicativos, como Câmera. Quando um usuário tira uma fotografia com o aplicativo Câmera, esses aplicativos são despertados para processar a transmissão.

Para aliviar esses problemas, o Android N aplica a seguintes otimizações:

Se o seu aplicativo usar qualquer uma dessas intenções, remova as dependências delas assim que possível para direcionar corretamente os dispositivos Android N. A estrutura do Android oferece diversas soluções para reduzir a necessidade dessas transmissões implícitas. Por exemplo, a API {@link android.app.job.JobScheduler} oferece um mecanismo robusto para agendar operações de rede quando ocorrem condições especificadas, como conexão a uma rede ilimitada. Você pode até usar {@link android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo.

Para obter mais informações sobre otimizações em segundo plano no N e como adaptar seu aplicativo, consulte Otimizações em segundo plano.

Alterações nas permissões

O Android N inclui alterações em permissões que podem afetar seu aplicativo.

Alterações nas permissões do sistema de arquivos

Para aprimorar a segurança de arquivos privados, o diretório privado de aplicativos direcionados ao Android N ou superior tem acesso restrito (0700). Esta configuração impede o vazamento de metadados de arquivos privados, como tamanho e existência. Esta alteração de permissão tem vários efeitos colaterais:

Compartilhamento de arquivos entre aplicativos

Para aplicativos direcionados ao Android N, a estrutura do Android cumpre com a política de API {@link android.os.StrictMode} que proíbe a exposição de URIs {@code file://} fora do aplicativo. Se uma intenção que contenha o URI de um arquivo deixar o aplicativo, ele falhará com uma exceção {@code FileUriExposedException}.

Para compartilhar arquivos entre aplicativos, você deve enviar um URI {@code content://} e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é usar a classe {@link android.support.v4.content.FileProvider}. Para obter mais informações sobre permissões e compartilhamento de arquivos, consulte Compartilhamento de Arquivos.

Melhorias na acessibilidade

O Android N inclui mudanças criadas para aprimorar a facilidade de uso da plataforma para usuários com visão reduzida ou deficiente. Normalmente, essas mudanças não exigirão alterações de código no aplicativo. No entanto, analise esse recurso e teste-o em seu aplicativo para avaliar possíveis impactos na experiência do usuário.

Zoom de tela

O Android N permite que os usuários definam Display size, que amplia ou reduz todos os elementos na tela, melhorando a acessibilidade do dispositivo para usuários com visão deficiente. Os usuários não podem alterar o zoom da tela além da largura mínima de tela de sw320dp, que é a largura do Nexus 4, um telefone comum de tamanho médio.

Figura 3. A tela à direita mostra o efeito de reduzir o Display size de um dispositivo executando uma imagem do sistema Android N.

Quando a densidade do dispositivo mudar, o sistema notificará os aplicativos em execução das seguintes formas:

A maioria dos aplicativos não precisa ser alterada para ser compatível com esse recurso, desde que os aplicativos sigam as práticas recomendadas do Android. Os itens específicos a serem verificados são:

Configurações de visão no assistente de configuração

Agora, o Android N inclui Configurações de visão na tela de boas-vindas, onde os usuários podem definir as configurações de acessibilidade a seguir em um novo dispositivo: gesto de ampliação, tamanho da fonte , tamanho da tela e TalkBack. Essa alteração aumenta a visibilidade de erros relacionados a configurações de tela diferentes. Para avaliar o impacto do recurso, teste seus aplicativos com essas configurações ativadas. As configurações podem ser encontradas em Settings > Accessibility.

Aplicativos NDK vinculados a bibliotecas de plataforma

O Android N inclui mudanças no namespace para evitar o carregamento de APIs não públicas. Se você usar o NDK, use apenas APIs públicas da plataforma Android. O uso de APIs não públicas na próxima versão oficial do Android poderá causar problemas no seu aplicativo.

Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo Android N geram um erro na saída logcat quando um aplicativo chama uma API não pública. Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário fique ciente da situação. Revise o código do seu aplicativo para remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando um dispositivo de visualização ou um emulador.

Se o seu aplicativo depender de bibliotecas de plataforma, consulte a documentação do NDK para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes. Também é possível que você esteja vinculando bibliotecas de plataforma sem perceber, particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como libpng), mas não faz parte do NDK. Nesse caso, verifique se o APK contém todos os arquivos .so que você pretende vincular.

Cuidado: Algumas bibliotecas de terceiros também podem conter links para APIs não públicas. Se o aplicativo usar essas bibliotecas, poderá falhar quando executado na próxima versão oficial do Android.

Os aplicativos não devem depender de nem usar bibliotecas nativas não incluídas no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações. Além disso, dispositivos diferentes podem oferecer níveis distintos de compatibilidade, pois não há requisitos de compatibilidade para bibliotecas de plataforma não incluídas no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento dependente do nível da Android API.

Para ajudar a diagnosticar esses tipos de problemas, veja a seguir alguns exemplos de erros de Java e NDK que podem ocorrer durante a compilação do aplicativo com o Android N:

Exemplo de erro de Java:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
    is not accessible for the namespace "classloader-namespace"

Exemplo de erro de NDK:

dlopen failed: cannot locate symbol "__system_property_get" referenced by ...

Veja a seguir algumas correções comuns para aplicativos que encontram esses tipos de erro:

Android for Work

O Android N contém mudanças para aplicativos direcionados ao Android for Work, incluindo mudanças em instalação de certificados, redefinição de senha, gerenciamento de usuários secundários e acesso a identificadores de dispositivos. Se você estiver criando aplicativos para ambientes do Android for Work, examine essas mudanças e modifique o aplicativo conforme necessário.

Para obter mais informações sobre as mudanças no Android for Work no Android N, consulte Atualizações no Android for Work.

Retenção de anotações

O Android N corrige um erro em que a visibilidade de anotações era ignorada. Este problema permitia que o tempo de execução acessasse anotações a que não deveria ter acesso. Entre essas anotações, estão:

Se o seu aplicativo se baseou neste comportamento, adicione uma política de retenção para anotações que deve estar disponível em tempo de execução. É possível fazer isso usando {@code @Retention(RetentionPolicy.RUNTIME)}.

Outros pontos importantes