Desenvolvimento

14 mai, 2018

Hello World – AndroidX

Publicidade

Artigo de Alan Viverette, Kathy Kam e Lukas Bergstrom, publicado originalmente pelo Android Developers Blog. A tradução foi feita pela Redação iMasters com autorização.

***

No dia 8 de maio, foi lançado um preview das novas bibliotecas de extensão do Android (AndroidX), que representa uma nova era para a Support Library. Por favor, confira a mudança e nos dê sua opinião. Como se trata de um preview, não recomendamos o uso em nenhum projeto de produção, pois há alguns problemas conhecidos.

A Support Library foi iniciada há mais de sete anos para fornecer compatibilidade com as APIs de framework. Com o passar dos anos, a biblioteca cresceu para incluir UX específica de dispositivo, depuração, teste e outros utilitários. A adoção da Support Library foi fenomenal; a maioria dos aplicativos para Android usa a Support Library hoje. Queremos aumentar nosso investimento nessa área e é fundamental que tenhamos uma base sólida.

Nesse sentido, demos um passo para trás e conversamos com muitos de vocês. O feedback foi consistente e unânime; o crescimento orgânico da biblioteca tornou-se confuso. Existem componentes e pacotes chamados “v7” quando o nível mínimo do SDK que suportamos é 14!

Queremos deixar claro para você entender a divisão entre as APIs que são empacotadas com a plataforma e quais são bibliotecas estáticas para desenvolvedores de aplicativos que funcionam em diferentes versões do Android.

Com isso em mente, diga “Hello World” para “AndroidX”. Como observado anteriormente no anúncio do Android KTX, adicionamos novos recursos nesse pacote e atualizamos alguns existentes.

android.* VS androidx.* namespaces

Escrever aplicativos para Android significa depender de dois tipos de classes:

  • Classes como PackageManager, que são empacotadas com o sistema operacional e podem ter diferentes APIs e comportamento para diferentes versões do Android.
  • Classes como AppCompatActivity ou ViewModel, que são desempacotadas do sistema operacional e enviadas em seu apk. Essas bibliotecas são escritas para fornecer uma única superfície de API com comportamento o mais consistente possível nas versões do Android.

Muitas vezes, as bibliotecas não empacotadas podem ser uma opção melhor, pois fornecem uma única superfície de API em diferentes versões do Android. Esse refatorador move as bibliotecas desempacotadas – incluindo toda a Support Library e Architecture Components – para o pacote AndroidX, para deixar claro quais dependências incluir.

Nomenclatura revisada para pacotes e artefatos Maven

Redesenhamos a estrutura do pacote para incentivar bibliotecas menores e mais focadas que aliviam a pressão em aplicativos e testes que não usam o Proguard ou o Multidex. Maven groupIds e artifactIds foram atualizados para refletir melhor o conteúdo da biblioteca, e nós mudamos para prefixar os pacotes de biblioteca com seu groupId para criar um link óbvio entre a classe que você está usando e o artefato Maven do qual ela veio.

Geralmente, você pode esperar o seguinte mapeamento de pacotes antigos para novos:

Novos Antigos
android.support.** androidx.@
android.databinding.** androidx.databinding.@
android.design.** com.google.android.material.@
android.support.test.** (in a future release) androidx.test.@

As bibliotecas de Architecture também foram movidas sob androidx e seus nomes de pacotes simplificados para refletir sua integração com as bibliotecas principais. Uma amostra de mudanças para essas bibliotecas:

Novos Antigos
android.arch.** androidx.@
android.arch.persistence.room.** androidx.room.@
android.arch.persistence.** androidx.sqlite.@

Além disso, seguindo a introdução no 28.0.0-alpha1 do Material Components para Android como substituto imediato da Design Library, refatoramos o pacote de design para refletir sua nova direção.

Para obter uma listagem completa dos mapeamentos do 28.0.0-alpha1 (android.support) para 1.0.0-alpha1 (androidx), consulte o mapa completo de refatoração do AndroidX. Por favor, note que pode haver pequenas alterações nesse mapa durante a fase alpha.

Versionamento semântico estrito por artefato

Começando com o refatorador do AndroidX, as versões da biblioteca foram redefinidas de 28.0.0 para 1.0.0. Atualizações futuras serão versionadas por biblioteca, seguindo regras estritas de versionamento semântico, onde a versão principal indica compatibilidade binária. Isso significa, por exemplo, que um recurso pode ser adicionado ao RecyclerView e usado em seu aplicativo sem exigir uma atualização de todas as outras bibliotecas utilizadas pelo seu aplicativo.

Isso também significa que as bibliotecas que dependem do androidx podem fornecer garantias razoáveis sobre a compatibilidade binária com versões futuras do AndroidX – uma dependência em uma revisão 1.5.0 ainda funcionará quando rodada contra a 1.7.0, mas provavelmente não funcionará contra a 2.0.0.

Migração a partir de 28.0.0-alpha1

Mover seu aplicativo de android.support para dependências androidx-packaged possui duas partes principais: refatoração de origem e tradução de dependência.

A refatoração de origem atualiza seu código Java, recursos XML e configuração Gradle para fazer referência às classes refatoradas e aos artefatos Maven. Esse recurso está disponível no Android Studio Canary 14 para aplicativos destinados ao Android P.

Se você depender de uma biblioteca que faça referência à Support Library mais antiga, o Android Studio atualizará essa biblioteca para fazer referência ao androidx, em vez da tradução de dependência.

A tradução de dependência é aplicada automaticamente pelo Android Gradle Plugin 3.2.0-alpha14, que reescreve bytecode e recursos das dependências JAR e AAR (e dependências transitivas) para fazer referência às novas classes e artefatos androidx-packaged. Também forneceremos uma ferramenta de tradução independente como um JAR.

O que vem a seguir?

Entendemos que essa é uma grande mudança para projetos e bases de código existentes. Nossa intenção é fornecer uma base sólida que defina projetos de biblioteca do Android para um crescimento mais sustentável, melhor modularidade e tamanho de código menor.

Esperamos que essas mudanças também tornem mais fácil para os desenvolvedores descobrirem recursos e implementarem aplicativos de alta qualidade em menos tempo; no entanto, entendemos que a migração leva tempo e pode não se encaixar no cronograma de produção de todos. Por esse motivo, continuaremos a fornecer atualizações paralelas para um conjunto de bibliotecas com pacote android.support durante o período de tempo do SDK preview do P.

Essas atualizações continuarão com o esquema de versionamento 28.0.0, que começou com 28.0.0-alpha1 em março de 2018, e continuarão sendo compatíveis com a origem dos projetos existentes que dependem do pacote android.support.

A versão estável do 28.0.0 será a versão final empacotada como android.support. Todas as versões subsequentes só serão disponibilizadas como artefatos do androidx-packaged.

Gostaríamos muito de ouvir sua opinião enquanto iteramos neste futuro emocionante. Envie-nos um feedback nos comentários abaixo e, por favor, reporte quaisquer bugs que você encontrar no AOSP.

Estamos ansiosos para uma nova era de bibliotecas do Android!

***

Este artigo é do Android Developers Blog. Ele foi escrito por Alan Viverette, Kathy Kam e Lukas Bergstrom. A tradução foi feita pela Redação iMasters com autorização. Você pode acessar o original em: https://android-developers.googleblog.com/2018/05/hello-world-androidx.html