sexta-feira, 22 de setembro de 2017

Suporte nativo para fontes customizadas no Android

Standard


No Google I/O 2017, foi anunciado o suporte para fontes customizadas no Android.
Este novo recurso está disponível para o Android O (API 26) e para versões da API 14 ou superior usando a biblioteca de suporte 26 (Android Support Library).

Google Fonts

Google Fonts oferece um diretório de fontes open source para que sites e produtos possam integrar tipografias em qualquer projeto de design. 

E não para por ai. Esta ferramenta usa um mecanismo de cache para executar de forma performática seu produto ou suas páginas web. Sempre que uma fonte for carregada pela primeira vez, por qualquer site, esta fonte será colocada em cache e será usada por qualquer outro site que use o Google Fonts.

A sacada

A grande sacada é que agora o Google Play Services, na versão 11 ou superior, funciona como um provedor de fontes que solicita ao Google Fonts as fontes que o seu projeto Android necessita. 

Isso significa que:
  • Você não precisa importar para seu projeto arquivos de fonte com a extensão .ttf. Consequentemente, reduz o tamanho do APK.
  • Todo o catálogo de fontes do Google está disponível nativamente para os desenvolvedores
  • Com o mecanismo de cache, seu app terá um melhor desempenho, pois usará menos recursos do dispositivo (ex: pacote de dados, memória e espaço em disco), pois a fonte será baixada quando necessário.
A imagem abaixo mostra como funciona o processo de requisição de fontes na plataforma Android.

Perceba que os aplicativos acessam um único provedor de fontes (Font Provider), especificando um contrato de fonte (FontsContract). O provedor de fonte usa o mecanismo de cache supracitado. Ou seja, se uma fonte já foi solicitada por um App "X", quando qualquer outro App solicitar a mesma fonte não irá disparar um download, pois a fonte já está em cache. Show de bola!

Hands On

Usando o Android Studio 3.0, crie um novo projeto básico. 
O primeiro passo é adicionar a biblioteca de suporte ao nosso build.gradle do módulo

implementation 'com.android.support:appcompat-v7:26.0.1'

No build.gradle do projeto faça:

repositories {
    google()
    // Outros repositórios
}

Para adicionar uma fonte é muito simples.

  1. Abra o arquivo de layout chamado activity_main.xml.
  2. Selecione ou adicione um TextView que você deseja aplicar uma fonte customizada.
  3. Na paleta de atributos, localize o atributo fontFamily.
  4. Na caixa de opções, selecione o item More Fonts...




Na tela que abrirá, você pode selecionar a fonte de seu gosto e visualizá-la. Depois que escolher, certifique-se de marcar a opção "Create downloadable font" e clique em OK para adicionar a fonte ao projeto. Para este exemplo selecionei a fonte Aldrich.




Neste momento o Android Studio criará 3 arquivos para o projeto. Vamos entendê-los.

res/font/aldrich.xml

Arquivo que representa a fonte. Contém informações sobre o provedor de fontes.

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
        app:fontProviderAuthority="com.google.android.gms.fonts"
        app:fontProviderPackage="com.google.android.gms"
        app:fontProviderQuery="Aldrich"
        app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>

res/values/font_certs.xml

Arquivo que contém os certificados para as fontes.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="com_google_android_gms_fonts_certs">
        <item>@array/com_google_android_gms_fonts_certs_dev</item>
        <item>@array/com_google_android_gms_fonts_certs_prod</item>
    </array>
    <string-array name="com_google_android_gms_fonts_certs_dev">
        <item>
            MIIEqDCCA5CgAwIBAgIJANWFuGx90...
        </item>
    </string-array>
    <string-array name="com_google_android_gms_fonts_certs_prod">
        <item>
            MIIEQzCCAyugAwIBAgIJAMLgh0ZkS...
        </item>
    </string-array>
</resources>

res/values/preloaded_fonts.xml

Neste arquivo está configurado para que o Android faça o download da fonte no momento da inicialização do seu aplicativo e não no processo de inflar e renderizar o layout, visto que este processo é síncrono e pode demorar um pouco. 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/aldrich</item>
        <item>@font/audiowide</item>
    </array>
</resources>

Também foi adicionado no AndroidManifest.xml a meta-data abaixo.

<meta-data
    android:name="preloaded_fonts"
    android:resource="@array/preloaded_fonts" />

Por fim, o Android Studio já adiciona o atributo fontFamily com o recurso escolhido.

<TextView
 android:id="@+id/textView2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:fontFamily="@font/aldrich"
 android:text="Hello World!"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"
 app:layout_constraintRight_toRightOf="parent"
 app:layout_constraintTop_toTopOf="parent" />

Execute o projeto e veja o resultado.


A fonte foi aplicada apenas ao texto "Hello World!".

Caso você queira definir uma fonte padrão do seu projeto, basta adicioná-la ao estilo.

res/values/styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 <!-- Customize your theme here. -->
 <item name="colorPrimary">@color/colorPrimary</item>
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 <item name="colorAccent">@color/colorAccent</item>
 <item name="fontFamily">@font/audiowide</item>
</style>

Como resultado todos os textos do App estão como a mesma fonte.



Este recurso é muito útil quando você precisa trabalhar com fontes customizadas.

Até a próxima!

Referência



sexta-feira, 15 de setembro de 2017

Certificação Google Associete Android Developer

Standard

Quando o programa de certificação foi anunciado no Google I/O 2016 logo pensei: "Agora é a hora de testar minhas habilidades em Android". No começo deste ano de 2017, passei no exame Associate Android Developer, ou AAD como é conhecida pela comunidade de desenvolvedores. Ao passar no exame, você está certificado que possui as principais competências para um desenvolvedor Android. Portanto, gostaria de compartilhar como foi esta experiência e o que achei da prova.

O que estudar?

Abaixo, uma lista simplificada do conteúdo do exame.

  1. Testes e Debugging

    Escrever e executar um teste de UI usando o Expresso.
    Escrever e executar um teste unitário.
    Depurar e corrigir uma falha no aplicativo (exceção não documentada).
    Depurar e corrigir um problema de ciclo de vida da Activity.
    Depurar e corrigir um problema vinculando os dados às Views.

  2. Interface do Usuário da Aplicação (UI) e Experiência do Usuário (UX)

    Construir layouts simples usando código XML e Java, assim como criar Views Customizadas.
    Trabalhar com temas e estilos para aplicar uma aparência consistente em todo o aplicativo.
    Aplicar descrição de conteúdo para visualizações de acessibilidade.
    Internacionalização.
    RecyclerView.

  3. Fundamentos dos Componentes da Aplicação

    Compreender em alto nível os componentes do Android como Activity, Service, Broadcast Receiver e Content Provider).
    Gerenciar o ciclo de vida de Activities e Fragments e mudanças de orientação.
    Criar uma Activity para exibir um arquivo layout.
    Usar um Loader para carregar dados locais em segundo plano.
    Agendar uma tarefa em segundo plano usando JobScheduler.
    Executar uma tarefa dentro de um Service.

  4. Armazenamento e Persistência de Dados

    Armazenar dados usando Arquivos, preferencias e banco de dados.
    Construir consultas de banco de dados para retornar um único resultado ou vários.
    Inserir, atualizar e excluir registros do banco de dados.
    Expor um banco de dados para outras aplicações via Content Provider.

  5. Integração Aprimorada do Sistema

    Criar e atualizar um widget que deverá ser exibido na tela inicial do dispositivo.
    Criar e exibir notificações para o usuário.
Acesse aqui o conteúdo completo do exame.


O processo

Em primeiro lugar você precisa realizar o cadastro e fazer o pagamento da taxa de $149 USD (Valor até a data deste post) neste link. Um detalhe importante é que tanto a prova quanto a entrevista (falarei mais em seguida sobre a entrevista) são em inglês. Com a taxa paga, o projeto ficará disponível para download.

IMPORTANTE!
Você terá 48 horas para finalizar e enviar o projeto para revisão. Este prazo começa a ser computado a partir do início do download. Portanto, antes de baixar o projeto, abra o calendário e planeje dois dias na sua agenda.

No meu caso, fiz o download em uma sexta-feira por voltas das 20h, pois teria até às 20h do domingo para submeter o projeto.

O processo é dividido em duas etapas. A primeira etapa é baseada no desempenho do candidato. Ou seja, você faz o download de um projeto inacabado e deve adicionar funcionalidades, corrigir erros, testar os requisitos e submeter o projeto para análise. Achei bem interessante o modelo do exame, pois o contexto da prova me fez sentir dentro de um projeto freelancer por exemplo, tendo em vista que contém requisitos, bugs para serem corrigidos, escopo e prazo. Procure gerenciar bem o tempo e conseguirá finalizar o projeto sem problemas.

Terminei meu projeto no sábado a noite e passei todo o domingo revisando e melhorando meu código (refactoring :D). Por volta das 18h do domingo submeti meu projeto para analise e fiquei no aguardo do resultado.

Eis que chega o resultado e fui aprovado!

Na segunda etapa, você precisa enviar um documento oficial para identificação (carta de habilitação ou passaporte por exemplo). No meu caso, enviei a cópia do passaporte. Logo em seguida, você pode agendar a entrevista. Não se preocupe! Todas as etapas do processo são bem explicadas por e-mail.

Na entrevista, o entrevistador pedirá para você explicar seu trabalho e as tarefas que você realizou no seu exame prático. Ele também fará perguntas sobre os fundamentos básicos e técnicos do Android. Lembrando, a conversa será em inglês, ok? Então, vale a pena praticar possíveis respostas sobre suas decisões e implementações no projeto.

Concluída a entrevista, não mais que 10 minutos pra mim, o entrevistador avisa que o resultado será enviado por e-mail dentro de alguns dias.

Resultado

Exatamente 5 dias após a entrevista, recebi o e-mail com o resultado: APROVADO!
Você receberá seu badge ou emblema do AAD e poderá compartilhar no seu perfil de mídia social. Será disponibilizado, também, um link para adicionar a certificação diretamente no teu Linkedin.
Link para o meu Badge


Além do exame Associete Android Developer a Google disponibiliza outros programas de certificação:
  • Mobile Web Specialist
  • Google Certified Professional - Cloud Architect
  • Certified Professional - Data Engineer
Mais detalhes aqui

Conclusão

É bem verdade que as empresas valorizam muito mais o teu portfólio de aplicativos que a certificação Android. Mas como profissional e desenvolvedor Android, quero ter meu nome na lista de certificados da Google. Esta é a única maneira de autenticar minhas habilidades na plataforma e mostrar para o mundo que sou um desenvolvedor Android.

E você. Acha que vale a pena tirar esta certificação? O que pensa a respeito?
Deixe seu comentário!

Até a próxima e boa sorte no exame!