2 - Sobre o sistema operacional Android

O Android é um sistema baseado em Linux, de código fonte aberto e capaz de ser utilizado em uma variedade de dispositivos, como smartphones, tablets, relógios, aparelhos de TV e de entretenimento em carros.

Ao longos dos anos o sistema Android tem se tornado complexo e cheio de funcionalidades, tanto para desenvolvedores como para usuários.

Tal complexidade traz um desafio em particular para aqueles que se aventuram no mundo do desenvolvimento de aplicativos para esse ecossistema.

2.1 - Um sistema feito em camadas

O sistema Android é feito em camadas, como é exemplificado pela figura a seguir:

Camadas do Android - Fonte: developer.android.com
Camadas do Android - Fonte: developer.android.com

Felizmente, não é necessário conhecer todas as as camadas, tão pouco todas as suas partes em profundidade, porém, é interessante ao desenvolvedor saber que elas existem e como estão conectadas entre si. Para aqueles que desejam se aprofundar nessa arquitetura, existe uma documentação interessante que aborda esse assunto.

Basicamente, o conteúdo desse livro se concentra na primeira camada, chamada de System Apps, onde os aplicativos do próprio Android estão, como calendário, câmera e outros, e também onde estão os que o próprio usuário instala.

Para o desenvolvedor que vai criar aplicativos para o usuário final de Android, é importante ter um bom conhecimento sobre os recursos utilizados da camada seguinte, chamada Java API Framework, uma vez que é ela quem provê toda a interface de interação com o sistema Android. Obviamente não é necessário conhecer todas as partes dessa camada, mas sim estar a par dos recursos que serão utilizados dela.

À medida em que os conteúdos desse livro forem sendo apresentados, as partes significantes da API (Application Programming Interface) do Android serão detalhadas quando necessário.

2.2 - Android virtual device

Como parte das ferramentas necessárias para o desenvolvimento de aplicativos Android, que serão detalhadas no capítulo 4, está o Android virtual device, ou AVD, que é um dispositivo que pode ser emulado em um computador com Windows, Linux ou MacOS. Com ele é possível depurar e testar aplicativos em tempo de desenvolvimento, simulando várias situações e ambientes, sem a necessidade de um dispositivo real.

Embora essa abordagem exija um máquina de desenvolvimento mais potente, ela pode ser interessante para evitar a necessidade de vários dispositivos para testes em tempo de codificação.

2.3 - Como desenvolver aplicativos para o sistema Android

Existem algumas possibilidades para o desenvolvimento de aplicativos para Android, mas elas podem ser concentradas em duas grandes áreas:

a) Desenvolvimento híbrido: nessa modalidade é possível reaproveitar partes do projeto para criar aplicativos para outros sistemas, como o iOS. Isso traz uma agilidade maior no processo de desenvolvimento de produtos que almejam alcançar um número maior de usuários em várias plataformas. Porém, essa abordagem pode trazer complicações em aplicativos complexos ou que necessitem de interações profundas com o sistema operacional.

b) Desenvolvimento nativo: essa abordagem utiliza as ferramentas, linguagens e frameworks oficiais do Android, oferecidos pela própria Google. O código fonte e os projetos criados nessa modalidade não pode ser reaproveitados para outras plataformas. Essa abordagem acaba fazendo com que empresas tenham que ter equipes multidisciplinares ou até mesmo distintas para a criação de produtos para as plataformas de diferentes sistemas operacionais.

Esse livro concentra-se na abordagem do desenvolvimento nativo, utilizando a linguagem Kotlin e a ferramenta Android Studio.

O processo de criação de uma aplicação Android é bem diferente, por exemplo, do desenvolvimento de uma aplicação Web, por isso é importante reconhecer que conhecimentos prévios da linguagem escolhida são importantes, mas, não unicamente suficientes. A razão disso é que o framework para o desenvolvimento de aplicativos Android é complexo e vasto, e muitas das vezes, diferente de outras plataformas.

2.3.1 - A criação da interface gráfica

Em um projeto de um aplicativo Android, a interface gráfica do usuário é criada através de arquivos XML, que podem ser editados diretamente ou com a ajuda de ferramentas gráficas no Android Studio. Versões recentes dessa IDE têm tornado esse trabalho cada vez mais eficiente, graças ao lançamentos de novos componentes e funcionalidades.

Como exemplo, segue um arquivo XML de uma tela simples de um aplicativo Android:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Como pode ser observado, essa tela contém somente dois componentes: um gerenciador de layout e uma caixa de texto, com algumas propriedades pré-definidas.

Esse arquivo é responsável por criar uma tela como a da figura a seguir:

Exemplo de tela de um aplicativo
Exemplo de tela de um aplicativo

Embora simples de se construir, essa tela já está preparada para se adaptar a vários tipos de dispositivos, com diferentes tamanhos e resoluções de tela, algo que, para telas mais complexas, pode ser considerado como uma arte!

Porém, essa tela não está adaptada a dispositivos com idiomas diferentes do Inglês, mas isso será detalhado mais adiante.

No fim das contas, essa tela será representada como um recurso de layout dentro do projeto Android.

2.3.2 - A criação do comportamento

Para que a tela anterior apareça dentro de uma aplicação Android, é necessário escrever um código em Kotlin capaz de exibi-la, como no trecho a seguir:

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    }
}

Essa classe, diante de algumas configurações feitas no projeto, pode ser considerada o ponto de entrada da aplicação. Ela é responsável por exibir um recurso de layout, que é o arquivo XML criado com a caixa de texto Hello World! da seção anterior.

Aqui já é possível perceber que existem particulares únicas do Android para a construção de aplicativos.

A partir desses dois arquivos, é possível construir o projeto para a aplicação Android, obviamente contendo outros arquivos de configuração e com uma estrutura singular.

Pelas razões apresentadas, é importante conhecer bem o framework de desenvolvimento do sistema Android, independente da abordagem escolhida: nativo ou híbrido.

2.4 - Conclusão

Esse capítulo deu uma brevíssima introdução ao universo do sistema Android, que como já foi dito, é vasto e complexo.

O capítulo seguinte fará algo semelhante, introduzir o leitor ao Google Firebase, peça essencial dos objetivos desse livro.