O que há de novo no Jetpack?

Tempo de leitura: 8 minutes

O Android Jetpack é um conjunto de bibliotecas cujo objetivo é ajudá-lo a escrever aplicativos de alta qualidade com facilidade, suportando versões mais antigas do sistema operacional Android. Agora, dois anos após o lançamento do Jetpack, vimos uma enorme adoção por aplicativos, desde grandes equipes de desenvolvedores até aquelas que estão começando. E isso é apenas o começo: hoje, estamos lançando novas bibliotecas, juntamente com grandes atualizações para as existentes, nas quais trabalhamos durante o ano passado.

Novo no Alpha

Hilt – biblioteca recomendada pelo Jetpack para injeção de dependência

Hilt é uma nova biblioteca Android que simplifica a injeção de dependência (DI) em seu aplicativo. O punho permite que você se concentre apenas nas partes importantes da definição e injeção de ligações sem se preocupar em gerenciar toda a instalação e fiação de DI.

Construído sobre o Dagger, o Hilt se beneficia com a correção do tempo de compilação, o desempenho aprimorado do tempo de execução e a escalabilidade. O Hilt adiciona integração às bibliotecas Jetpack e às classes de estrutura do Android. Por exemplo, para injetar parâmetros de um ViewModel, agora você pode anotar o construtor ViewModel com @ViewModelInject e, em seguida, anotar o fragmento com @AndroidEntryPoint:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class SearchViewModel @ViewModelInject constructor(
    private val repository: SearchRepository
): ViewModel() { … }

@AndroidEntryPoint
class SearchFragment : Fragment() {
    val viewModel: SearchViewModel by viewModels()
}

Paginação 3 – carrega e exibe dados incrementalmente

A paginação é uma biblioteca que ajuda a carregar e exibir pequenos blocos de dados de forma incremental. Hoje, estamos lançando a Paginação 3 – uma reescrita completa da biblioteca usando as corotinas Kotlin. Esta nova versão adiciona recursos altamente solicitados, como separadores, cabeçalhos, rodapés e transformações de lista e APIs para observar o estado de carregamento da lista e métodos para repetir e atualizar.

Por exemplo, com a Paginação 3, a fonte de dados pode ser definida estendendo a classe PagingSource e implementando a função de suspensão de carregamento, na qual você pode chamar diretamente outras funções de suspensão:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class MyPagingSource : PagingSource<Key, Value>() {
    override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
        try {
            val result = api.requestPage(params.key)
            return Page(
                data = result.items,
                nextKey = result.nextKey
            )
        } catch(error: IOException) {
            return Error(error)
        }
    }
}

Para mais informações sobre a Paginação 3, consulte a documentação e nosso codelab.

Inicialização do aplicativo – inicialize os componentes na inicialização do aplicativo

A biblioteca de inicialização do aplicativo fornece uma maneira direta e eficiente de inicializar componentes na inicialização do aplicativo. Em vez de definir provedores de conteúdo separados para cada componente que você precisa inicializar, o App Startup permite definir inicializadores de componentes que compartilham um único provedor de conteúdo. Isso pode melhorar significativamente o tempo de inicialização do aplicativo.

Veja como a App Startup pode ser usada para melhorar o tempo de inicialização do WorkManager, uma biblioteca que usa um ContentProvider sob o capô, depois de desativar o ContentProvider do WorkManager:

<!-- Copyright 2019 Google LLC.	
   SPDX-License-Identifier: Apache-2.0 -->

class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder()
            .setMinimumLoggingLevel(Log.DEBUG)
            .build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    
    override fun dependencies() : List<Class<out Initializer<*>>> = emptyList()
}

Para obter mais informações sobre a inicialização do aplicativo, consulte a documentação oficial.

Integrações com IME de preenchimento automático

O Android 11 introduz APIs de plataforma para teclados para exibir sugestões de preenchimento automático de aplicativos como gerenciadores de senhas. A API de preenchimento automático do Jetpack facilita que os teclados e serviços de preenchimento automático aproveitem esse novo recurso por meio de sua classe InlineSuggestionUi. Os serviços de preenchimento automático podem usar essa classe para criar sugestões compatíveis; os teclados podem usá-lo para personalizar o estilo das sugestões

Animações mais fáceis com animação principal e SeekableAnimatedVectorDrawable

Para facilitar a implementação e o teste de animações, adicionamos duas novas bibliotecas: androidx.core: core-animation e androidx.core: core-animation-testing. Também introduzimos uma nova API SeekableAnimatedVectorDrawable como parte da biblioteca androidx.vectordrawable.

A core-animation suporta todos os recursos adicionados à API do Animator desde o Ice Cream Sandwich, como pausar/retomar e procurar.

SeekableAnimatedVectorDrawable, com base na animação principal, é uma nova alternativa procurável ao AnimatedVectorDrawable (AVD). Ele usa o mesmo formato do AVD e adiciona a capacidade de procurar, pausar e retomar a reprodução. Os AVDs buscáveis ​​não podem usar o segmento de renderização, portanto, devem ser preferidos apenas ao AVD quando os recursos adicionais da nova classe forem necessários.

Depure seu banco de dados com o Database Inspector no Android Studio

Agora, a depuração de problemas no seu banco de dados ficou mais fácil no Android Studio 4.1 Beta com o novo Inspetor de Banco de Dados. Essa ferramenta permite inspecionar, consultar e modificar bancos de dados SQLite no seu aplicativo em execução. Se você estiver usando o Room ou o SQLite diretamente, poderá começar a depurar seus bancos de dados selecionando Exibir> Janelas de Ferramentas> Inspetor de Banco de Dados na barra de menus.

WindowManager – melhor suporte para fatores de forma do dispositivo

A biblioteca WindowManager é uma nova adição ao Android Jetpack que visa ajudar os desenvolvedores de aplicativos a oferecer suporte a novos formatos, como dobráveis, telas com dobradiças e muito mais. Ele fornece uma superfície de API comum para diferentes recursos do WindowManager nas versões antiga e nova da plataforma.

A versão inicial fornece suporte para diferentes tipos de dispositivos dobráveis ​​que já estão no mercado e estão chegando ao mercado, para que os desenvolvedores de aplicativos possam segmentar categorias inteiras de configurações de hardware. Confira a visão geral nesta postagem do blog e as amostras para saber mais.

MotionLayout – crie animações fluidas e interativas para Android

A API do MotionLayout estende os recursos avançados do ConstraintLayout para ajudar os desenvolvedores do Android a gerenciar animações complexas de movimento e widget em seus aplicativos. Com o MotionLayout, você pode modelar suas animações como transições entre os ConstraintSets e integrar facilmente animações a visualizações comuns como RecyclerView e ViewPager. O Android Studio 4.0 também inclui o Motion Editor, uma ferramenta gráfica para criar e visualizar animações que usam o MotionLayout.

Atualizações para bibliotecas existentes

Navegação

O Navigation 2.3 adiciona suporte para módulos de recursos dinâmicos, que permitem baixar partes do seu aplicativo conforme o usuário precisar, reduzindo significativamente o tamanho inicial do download do seu aplicativo. Agora, você pode navegar para esses módulos como se fizessem parte do APK base. Além de permitir parâmetros de consulta, os links diretos agora oferecem suporte a ações personalizadas e tipos MIME.

Uma nova API para retornar um resultado, permite consultar qualquer entrada da pilha traseira e definir o resultado em seu SavedStateHandle. O novo TestNavHostController permite acessar a pilha traseira de Navegação e definir o destino atual nos testes.

WorkManager

As versões mais recentes do WorkManager incluem suporte para trabalhos importantes ou de longa duração que devem ser mantidos vivos pelo sistema operacional usando serviços em primeiro plano.

Para facilitar o diagnóstico de problemas com as tarefas do WorkManager, adicionamos uma nova API de diagnóstico que permite examinar o estado interno do WorkManager e despejar seu estado no logcat:

Recently completed work:
Id Class Name Job Id State Unique Name Tags
88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker
939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker
59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker
7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker

Running work:
Id Class Name Job Id State Unique Name Tags
7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker

Para ajudar a evitar erros comuns ao usar o WorkManager, também adicionamos regras de cotão para sinalizá-las. Outras atualizações da API incluem: suporte para definir e observar o progresso intermediário dos trabalhadores; melhorias na API de consulta para trabalhadores atuais; e melhorias no agendador em processo usado para executar seus trabalhadores.

 

Benchmark

A nova versão alfa da biblioteca Benchmark integra-se ao perfil da CPU para que você possa criar um perfil de seus benchmarks e, em seguida, visualizar o método ou rastreamentos de amostra diretamente no Android Studio. Também adicionamos suporte ao rastreamento de alocação de memória, para que você possa otimizar o tempo gasto na alocação e reduzir a carga na coleta de lixo (garbage collection).

 

Permissões

Para facilitar o trabalho com permissões, introduzimos as novas APIs ActivityResult. Essas APIs simplificam a solicitação de permissões, substituindo requestPermissions pelo RequestPermission, mas também fornecem contratos com segurança de tipo para objetivos comuns, como tirar uma foto ou solicitar ao usuário que abra um documento.

Games SDK

O Android Games SDK, lançado no início deste ano, agora também faz parte do Jetpack e está disponível no Google Maven Repository. Atualmente, o SDK oferece uma API de ritmo de quadros e um Android Performance Tuner. Saiba mais sobre o SDK de jogos na documentação oficial.

CameraX

Há muita variação nas câmeras nos dispositivos Android; O CameraX é executado em 90% deles. Desde que o CameraX chegou à versão beta em fevereiro passado, nos concentramos na confiabilidade para garantir o melhor comportamento da API em uma ampla variedade de dispositivos. Nosso laboratório de testes CameraX executa nosso conjunto de testes automatizados em tipos de dispositivos que representam mais de 400 milhões de dispositivos ativos em uso.

A versão mais recente do CameraX traz melhorias no widget PreviewView. Agora ele lida com interações com o ciclo de vida do aplicativo e visualiza pagers de forma confiável. Também é otimizado para usar o SurfaceView de forma transparente sob o capô em dispositivos que se beneficiariam de seus aprimoramentos de desempenho. Isso resulta em menos buffer e melhor eficiência de energia.

Confira a extensa documentação e exemplos do CameraX para saber mais sobre as APIs.

Segurança

A biblioteca de segurança do Jetpack fornece abstrações criptográficas baseadas em arquivos, fáceis e seguras, como EncryptedFile e EncryptedSharedPreferences. O Jetpack Security aproveita o Keystore do Android, que fornece armazenamento operacional e segurança operacional. O Jetpack Security agora está no Release Candidate 2 para Marshmallow + e 1.1.0 alpha para suporte ao Lollipop +.

AppCompat

O AppCompat fornece backports para uma ampla variedade de elementos da interface do usuário e recursos da plataforma, do tema Material a widgets como a Barra de Ferramentas e o tema escuro. Nas versões mais recentes, adicionamos regras do Lint que permitem entender melhor quais atributos vêm do AppCompat e quais da estrutura, além de garantir o uso correto. Também fizemos melhorias substanciais na estabilidade da implementação do tema sombrio da AppCompat.

Webkit

A biblioteca Webkit do Jetpack adiciona uma nova API na versão 1.2.0 para forçar o modo escuro para seu conteúdo. Quando essa API está ativada, o WebView renderiza sites em tema escuro, onde é suportado. Nos sites que não oferecem suporte ao tema escuro, a API inverte certas cores.

 

Jetpack Compose – novo kit de ferramentas de interface do usuário do Android

O Jetpack Compose, o novo e moderno kit de ferramentas de interface do usuário do Android, agora está no Developer Preview 2. Esta versão adiciona muitos novos recursos: Interoperabilidade de exibição, mais componentes de UI do material, suporte a temas escuros, novas APIs de teste e animação da interface do usuário, suporte inicial ao ConstraintLayout, melhorias no gerenciamento de estado, integrações com fluxos observáveis ​​e suporte a RTL. Agora, as visualizações do Android Studio podem ser interativas e houve muitas melhorias no compilador.

 

Este foi um tour rápido por todas as atualizações do Jetpack dos últimos meses. Com mais de 90 bibliotecas disponíveis, sabemos que pode ser difícil encontrar a que você precisa. Para corrigir isso, redesenhamos a página do Jetpack e adicionamos, entre outros, um prático seletor de API para passar rapidamente do problema que você tem à biblioteca do Jetpack que pode resolvê-lo.

Para descobrir mais sobre as bibliotecas Jetpack, fique atento a novos vídeos, postagens de blog e codelabs que serão lançados na semana Jetpack (semana de 20 de julho) das 11 semanas do Android.