Buscar

Desenvolvimento para Dispositivos Móveis Material Apoio AOL 2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Plataformas de desenvolvimento móvel
Em um mundo cada vez mais conectado, é praticamente impossível imaginar as relações comerciais ou pessoais sem o uso de uma tecnologia móvel. É cada vez maior a inserção dos dispositivos móveis no nosso cotidiano e a tendência é que este número se eleve de maneira significativa nos próximos anos. 
Diante deste cenário, é possível questionar quais são os sistemas mais adequados para serem adotados por esses dispositivos. Atualmente, existe uma variedade de plataformas direcionadas aos dispositivos móveis presentes no mercado, sendo que as mais usuais são Android e iOS. 
Vale ressaltar que o mercado de aplicações direcionadas para os dispositivos móveis vem demonstrando elevado crescimento. O mercado da Apple, por exemplo, vem se mostrando um dos que mais se destacam nessa área. Várias organizações desejam se inserir nesses dispositivos e buscam profissionais capacitados para realizar o desenvolvimento de suas aplicações. Há também uma série de desenvolvedores que desejam elaborar aplicações úteis para seus usuários ou apresentá-las gratuitamente. 
Conhecido por ser um produto desenvolvido pela Apple, o iOS se encontra na versão 13 e está disponível, por exemplo, para o modelo Iphone 6s. É importante deixar claro que sua execução é limitada ao uso dos hardwares desenvolvidos. Isso implica afirmar que apenas os dispositivos próprios podem ser executados com êxito no iOS. 
Seu modelo arquitetônico está muito próximo do Mac OS X, cuja linguagem de desenvolvimento é a Objective-C. No entanto, vale ressaltar que o C/C++ pode ser utilizado na criação de determinadas bibliotecas.
Quadro 1. Arquitetura do iOS. Fonte: MILANI, 2012, p. 15. (Adaptado).
Observando cada componente da arquitetura do iOS, é possível detalhá-los com maior abrangência. No que se refere à camada Cocoa Touch, é possível defini-la como uma API que possibilita ao desenvolvedor controlar determinados recursos, como o multitoque. É possível verificar que ele é acessado por meio do Objective-C e apresenta os serviços mais importantes para a criação de um aplicativo iOS. Essa camada estabelece a infraestrutura essencial para um aplicativo e disponibiliza outras funções, como o acesso aos controles de interface ou o reconhecimento de gestos, dentre outros serviços. 
O autor André Milani, no livro Programando para iPhone e iPad: aprenda a construir aplicativos para o iOS, publicado em 2012, afirma que a camada Media Services tem por finalidade disponibilizar as funcionalidades referentes às mais diferentes mídias (áudio, vídeo, animação) de toda a parte gráfica. 
O Core Services é uma camada que dispõe de serviços essenciais para que as camadas superiores consigam acessar os dados e os recursos presentes dentro de um sistema operacional. Importante frisar que o acesso aos serviços oferecidos por essa camada é oferecido, geralmente, em chamadas C/C++. A manipulação de arquivos e o acesso ao SQLite estão entre os principais serviços disponibilizados pelo Core Services.
A quarta e última camada é a Core OS, que se caracteriza por ser o núcleo do sistema operacional e ter seu acesso obtido por meio de chamadas em C. Ele é composto por um ambiente kernel e por drivers, além da utilização de interfaces básicas dentro do sistema operacional.
Além disso, o iOS pode ser entendido como um sistema que se diferencia do padrão, é direcionado para o mercado de dispositivos móveis e possui características próprias.  Desse modo, uma aplicação pode ser ativada de maneira individualizada no dispositivo, ou seja, não é permitido abrir diversas aplicações e realizar interação entre eles simultaneamente. 
Em contrapartida, o iOS apresenta algumas limitações que precisam ser consideradas. Para o autor Milani, no mesmo livro publicado em 2012, essas limitações são:
· limite de processamento: o desenvolvedor precisa conhecer os dispositivos e seus recursos para utilizá-los de forma adequada e para que a aplicação seja bem executada. Em determinados casos, é possível impedir que a aplicação seja realizada em aparelhos mais antigos, em que o processador seja insuficiente, limitando a versão do iOS que poderá realizar a sua aplicação;
· tempo de resposta: normalmente, se uma aplicação levar alguns segundos para responder certas ocasiões, o iOS entende que ela se encontra em estado de ausência de resposta e pode interromper  sua execução. Isso se trata de um procedimento adotado pela Apple para impedir travamentos no dispositivo;
· tamanho de memória: esses aspectos podem ser distintos entre os dispositivos. No entanto, ele apresenta capacidade inferior aos computadores de mesa.  Os dispositivos mais recentes da Apple apresentam de 256 a 512 megabytes de memória RAM;
· resolução gráfica: os dispositivos apresentam variados tamanhos de tela. Esses valores são considerados ao longo do desenvolvimento de suas aplicações, para interfaces gráficas.
Outra plataforma utilizada é o Android, que pode ser definido como um sistema operacional Open Source (código aberto) desenvolvido para o uso em dispositivos móveis. Sua base de criação é o Linux e essa plataforma utiliza como linguagem de programação padrão o Java. Entretanto, a linguagem C/C++ pode ser utilizada para criar aplicativos nativos ao adotar o NDK (Native Development Kit).
Figura 1. Captura de tela de arquitetura do Android.
Importante observar que a camada de aplicação disponibiliza todos os aplicativos aos quais os usuários terão acesso. Além dos aplicativos fundamentais, é possível observar mapas, navegadores, gerenciador de contato, dentre outros aspectos. Eles são redigidos, geralmente, em linguagem Java e são executados em Dalvik, máquinas virtuais desenvolvidas para executar as aplicações de maneira otimizada dentro dos dispositivos móveis. 
Outra camada que compõe o Android é denominada framework e se caracteriza por disponibilizar todas API’s e atributos usados pelos aplicativos, como o controle de telas e os Content Providers (provedores de serviços). Vale ressaltar que o gerenciador de atividades que estabelece o controle do ciclo de vida das aplicações ocorre nessa camada.
No que se refere às camadas de bibliotecas, é preciso ter em mente que todas elas são feitas em linguagem C/C++, dentre elas a biblioteca C padrão, Multimídia, Navegação Web, dentre outras.  
Além disso, quando nos referimos à camada Linux Kernel, é preciso compreender que ela é responsável pelos serviços mais importantes do sistema operacional. Dentre esses serviços, podemos destacar o gerenciamento de memória e a comunicação com o hardware.
É possível observar algumas variantes nas versões do Android. Atualmente, a versão disponibilizada para o Android é a 9 Pie. Antes, nas versões mais antigas, existia uma série de distinções entre tablets e aparelhos celulares, no que se refere, por exemplo, ao layout visual dos aplicativos para cada uma das versões apresentadas.
Dessa forma, como é possível observar, existe uma série de distinções no que se refere à linguagem, versão e modelo arquitetônico entre as plataformas citadas. E o que isto significa? Bem, do ponto de vista prático, a criação de um aplicativo direcionado à cada plataforma exige um esforço e um nível de complexidade muito elevado. Diante desse cenário, é necessário usar um SDK multiplataforma. 
É importante frisar que essas plataformas se caracterizam por adotar um próprio SDK, em que a arquitetura e a linguagem de programação utilizada são estabelecidas de forma concreta. Tendo isso em mente, verificaremos algumas sugestões de SDKs direcionados para o desenvolvimento multiplataforma, assim como uma extensão de API diante do SDK selecionado.
ALTERNATIVAS DE SDK PARA DESENVOLVIMENTO MULTIPLATAFORMA 
Quando nos referimos ao SDKs (Software Development Kit), é preciso entender que eles são opções que possibilitam a utilização de uma linguagem geral entre as variadas plataformas. E o que leva o usuário a selecionar o SDK como o software adequado? Bem, os fatores principais que determinam a opção pelo SDK estão relacionados às plataformasmóveis que terão suporte, assim como à linguagem de programação que será utilizada na criação. Aliado a estes aspectos estão a flexibilização em desenvolver funcionalidades novas, o custo da licença de um SDK e da criação de uma comunidade de desenvolvedores.
É preciso entender que o principal objetivo do framework é possibilitar que as aplicações de cunho científico estabeleçam sua interface própria. Dentro desse contexto, é possível destacar a utilização da linguagem de programação, que se caracteriza pelo nível de portabilidade, assim como pelo grau de extensibilidade e eficiência.  Dos SDKs que utilizam essa linguagem de desenvolvimento como padrão, é possível destacar algumas:
· Corona: lançado em 2009, esse SDK possibilita o desenvolvimento de aplicativos direcionados para diversas plataformas. Ele apresenta uma API de nível elevado e de usabilidade simples em bibliotecas para simulação de física adequada a colisões, controle de mapas, dentre outros aspectos. No entanto, é importante ressaltar que mesmo oferecendo diversos recursos e utilização facilitada, o Corona pode ser considerado um SDK sem a possibilidade de ampliar ou desenvolver funcionalidades novas, ou seja, trata-se de uma solução fechada. Ele dispõe de um simulador que pode ser executado no sistema Windows ou MacOS, cujo objetivo é avaliar os aplicativos antes do envio ao dispositivo móvel, sendo necessário criar um build que estabeleça que todo o código seja remetido aos servidores da Corona Labs e que um instalador do aplicativo seja criado.
O Corona é uma solução mais concreta e apresenta uma comunidade extensa que disponibiliza suporte mais abrangente. Por uma questão de segurança, as funções ligadas à execução do Lua apresentam restrição no acesso. Tais funções são importantes para expor as definições de interface do servidor.
· Gideros Studio foi apresentado no ano de 2011 com a finalidade de ser um instrumento de suporte ao iOS. No ano seguinte ele passou a dar suporte ao Android. É considerado um SDK que não apresenta tantos recursos se comparado ao Corona, mas vem evoluindo a sua estrutura ao longo dos anos, com a utilização de plugins. Mas o que seriam plugins? Podemos conceituar os plugins como bibliotecas que podem ser criadas na linguagem original de cada plataforma e posteriormente serem vinculados ao SDK, visando o acesso por meio da Lua. Vale ressaltar que outro aspecto positivo do SDK é possibilitar a execução do código Lua e, mesmo não apresentando um código aberto, sua utilização não tem restrições, ou seja, é possível visualizar a tela do Gideros na etapa inicial do aplicativo.
Inicialmente, o Gideros não foi utilizado, pois não apresentava o suporte para a biblioteca Luasocket, que é considerado como um atributo primordial para realizar a comunicação de rede.
· Moai: é um SDK apresentado em meados de 2011, caracterizado por apresentar um código aberto e por ocupar o mercado de plataformas com mais abrangência em relação aos concorrentes. Ele cria aplicativos direcionados para uma série de plataformas, como o iOS, o Android, o Chrome, dentre outros. O Moai disponibiliza diversas bibliotecas integradas e serviços. Além disso, por apresentar um código-fonte aberto, o Moai é mais atrativo aos desenvolvedores que colaboram para sua evolução.
CURIOSIDADE
Um aspecto vantajoso referente ao Moai é que, com os builds criados para os sistema Windows, é possível analisar e realizar a depuração do código antes do seu envio aos dispositivos móveis.
O Diagrama 1 demonstra o modelo arquitetônico interno do SDK. É possível observar que o binding de Lua disponibiliza diretamente um acesso direto a um conjunto diverso de classes C++, aplicadas no Runtime. Sendo assim, o desenvolvedor apresenta um elevado nível de controle das operações gráficas, classificadas como baixo nível.
Diagrama 1. Arquitetura Moai SDK. Fonte: DUARTE JÚNIOR, 2013, p. 17. (Adaptado).
EXTENSÃO DO API NO SDK
É preciso levar em consideração que o MOAI apresenta uma particularidade em relação aos outros SDKs. Ele disponibiliza APIs em Lua na forma de abstrações de nível mais baixo, permitindo ao programador um controle mais efetivo no desempenho do aplicativo, embora seja preciso esforços maiores em relação à programação. 
Diante desse cenário, a Ymobe iniciou a criação de uma API de nível elevado denominada Rapanui. Essa API se caracterizava por ser semelhante à API do Corona, o que simplificava a escrita do código e possibilitava aos criadores apresentar, de maneira mais simples, os seus produtos para o SDK Moai. Devido ao estágio inicial e à presença de bugs nos APIs do Rapanui, foi necessário desenvolver uma extensão própria da API do Moai em Lua. 
Vale citar que a API criada para o Moai simplificou a criação ao limitar o volume de código redigido, além de ser responsável pelo controle, dentre outros aspectos, pelas transições de telas e pelo gerenciamento da conexão TCP.
Diagrama 2. Diagrama de classes da extensão de API criada para o Moai. Fonte: DUARTE JÚNIOR, 2013, p. 18. (Adaptado).
Observando o Diagrama 2, é possível inferir algumas conclusões. É possível notar que a classe principal é chamada de TcgfDisplayObject e sua principal finalidade é implementar o desempenho geral dos elementos expostos na tela. Vale lembrar que, a partir dessa classe, alguns outros elementos, como imagem, texto e formas geométricas, são originados.
A classe TcgfGroup possibilita a junção de elementos com o objetivo de desenvolver componentes visuais com maior grau de complexidade, como botões e barras de ferramentas.
No que se refere ao TcgfInputManager, é possível defini-lo como uma classe que tem por objetivo abstrair o processo de avaliação dos eventos que utilizam o toque ou mouse e passam a interpretá-los como gesto. 
Sobre os gestos, é preciso conceituar alguns aspectos. As telas sensíveis ao toque já se encontram disponíveis desde os anos 80. Entretanto, a tecnologia do hardware adotada na época não permitia utilizar dois ou mais dedos na tela, limitando a interação do usuário. 
Com o aparecimento de métodos mais atuais, foi possível obter uma precisão mais adequada dos movimentos e identificar os variados pontos independentes na tela. Consequemente, foi permitido que os gestos fossem estabelecidos de maneira mais sofisticada e com uma possibilidade de desenvolvimento de mais combinações. 
É preciso entender que iOS e o Android já disponibilizaram uma série de gestos próprios, embora sejam muito distintos entre as plataformas. Como já sabemos, dentro de um ambiente multiplataforma, é necessário padronização. Por conta disso, o Moai apresenta apenas o acesso aos dados genuínos do toque, o que possibilita implementar qualquer tipo de gesto.
Ao chegar um evento touch-down, começa o ciclo de vida de um toque. O passo inicial é alterar as coordenadas auferidas em coordenadas do mundo em OpenGL. Com a nova coordenada, é possível obter todos os componentes de interface que cruzam nesse ponto. 
Levando em consideração a prioridade, é possível visualizar os componentes mais e menos visíveis, conforme demonstra a Figura 2. 
Figura 2.  Rastreando os objetos por ordem de prioridade. Fonte: DUARTE JÚNIOR, 2013, p. 17.
Depois do reconhecimento do objeto que trata do evento, é possível conceituar a camada de interpretação. Essa camada tem a função de compreender uma sequência de eventos de toque e identificar o gesto que está sendo realizado. Os gestos podem ser identificados ao longo do movimento ou depois de sua finalização. Uma avaliação do desempenho, seja espacial ou temporal, define qual gesto será realizado. 
O principal objetivo nessa fase é tratar dos conflitos que venham a surgir entre os gestos. Para que isso não ocorra, é preciso impor limites para o tempo no qual o gesto será realizado.
// Quadro 2. Lista de gestos implementados
Free move
Sem restrições, todos os eventos são repassados para o servidor.
freeMove(objectName, type, x, y)
Flick 
Movimento rápido de um dedo em uma direção (left/right/up/down). A velocidade do gesto é calculada dividindo a distânciapercorrida pelo tempo total do gesto.
flick(objectName, speed)
Slide
Movimento contínuo em um eixo (horizontal/vertical).
slide (objectName, axis, displacement)
PinchZoom
Gesto de aprimorar ou distanciar dois dedos.
pinchZoom(objectName, zoom)
Rotate
Gesto de rotação com dois dedos
rotate(objetctName, angle)
Tap 
O dedo toca rapidamente na tela sem executar deslocamentos.
tap(objectName, x, y)
Double tap
Dois toques consecutivos na mesma posição da tela. Segue a mesma regra do Tap, exceto pelo segundo toque ser na mesma região que o primeiro.
doubleTap(objectName, x, y)
Hold
Manter o dedo pressionado na mesma posição por um certo tempo.
hold(objectName, x, y)
Slide 2Fingers
Similar ao gesto Slide, mas com dois dedos.
slide2Fingers(objectName, axis, displacement)
Flick 2Fingers
Similar ao gesto Flick, mas com dois dedos.
flick2Fingers(objectName, speed)
Hold and Tap
Com um dedo na tela, toque rapidamente com outro dedo.
holdAndTap(objectName, holdX, holdY, tapX, tapY)
Hold and DoubleTap
Com um dedo na tela, toque rapidamente duas com outro dedo.
holdAndDoubleTap(objectName, holdX, holdY, tapX, tapY)
FreeMove – 3Fingers
Movimento livre usando três dedos.
freeMove3Fingers(objectname, type, x, y)
Fonte: DUARTE JÚNIOR, 2013, p. 21. (Adaptado).
Ambiente de desenvolvimento Android Studio
Bem, até o momento, você visualizou o funcionamento das principais plataformas dos dispositivos móveis. Entretanto, é natural surgir um novo questionamento: qual o instrumento necessário para se desenvolver um aplicativo Android? Tendo isso em mente, iremos observar os procedimentos necessários para a instalação desses elementos e entendermos como é formada a estrutura de um projeto dentro do Android Studio. 
Vamos imaginar uma situação hipotética na qual uma determinada organização necessita do serviço de criação de um aplicativo direcionado aos dispositivos móveis utilizando o sistema Android. A equipe responsável por esse desenvolvimento vai estabelecer os requisitos atendidos pelo aplicativo. Nesse contexto, o início das atividades de desenvolvimento dependerão do conhecimento sobre o público demandante e, consequentemente, da aquisição de informações essenciais para possibilitar a tomada de decisão. Cada colaborador integrado ao projeto saberá a estrutura do aplicativo e atuará dentro de um padrão estabelecido, permitindo focar nas suas atribuições definidas a priori. 
O que se espera é que esses colaboradores realizem a instalação e configuração de três componentes básicos: o JDK (Java SE Development), a Integrated Development Environment – IDE (ambiente de desenvolvimento integrado oficial) e, finalizando, o Software Development Kit – SDK (kit de desenvolvimento de software). 
Você verificará que, após a instalação e configuração, ficará definida em qual versão Android o aplicativo será compilado e projetado, além da modalidade básica do Android ser inserida no smartphone compatível com a instalação do aplicativo etc. 
É importante que você compreenda que, por meio desse exemplo hipotético, é possível criar qualquer aplicativo Android. Para isso, é preciso desenvolver e organizar a base estrutural para que novos aplicativos sejam criados no futuro. 
CONFIGURAÇÕES DO SISTEMA ANDROID
Como construir a base da estrutura para a criação de aplicativos móveis em um sistema Android? Bem, as fases iniciais para o desenvolvimento serão realizadas seguindo a seguinte ordem:
· 1
Instalação do JDK.
· 2
Instalação da IDE Android Studio.
· 3
Instalação do SDK.
O JDK pode ser definido como um kit de desenvolvimento que possibilita aos programadores criarem aplicações em Java. Quem se responsabiliza pelo seu fornecimento para o download é a empresa Oracle Corporation, que disponibiliza também um suporte para os mais variados sistemas operacionais. 
É preciso realizar o download do JDK e, ao finalizá-lo, é preciso executar o arquivo e seguir a etapas de instalação.
A etapa seguinte é a instalação do Android Studio, que é considerado o IDE oficial direcionado para a criação de aplicativos Android, disponibilizado pela empresa Google e que se encontra na versão 3.4.2. O procedimento para instalação ocorre seguindo a seguinte sequência:
· 1
Acessar o site oficial do Android Studio.
· 2
Selecionar o Download Android Studio.
· 3
Aceitar o termo de licença e condições.
· 4
Ir para a página de instruções de instalação. Importante observar que essa página disponibiliza um vídeo no qual são explicados os procedimentos a serem executados para que a instalação do Android Studio seja realizada com sucesso.
· 5
Após a instalação estar concluída, é preciso instalar o SDK – Software Development Kit, software que permite aos programadores criar de maneira nativa, os aplicativos direcionados para a plataforma Android.
Ao executar pela primeira vez o Android Studio, é preciso realizar a configuração de mais alguns procedimentos. De imediato, é preciso verificar a necessidade da importação das configurações que já estão disponíveis e, para que isso ocorra, é preciso selecionar a opção Do not import settings. Desse modo, como a configuração está ocorrendo pela primeira vez, não vão existir configurações a serem importadas. 
Em seguida, é preciso escolher a modalidade de instalação Standard (Padrão). Posteriormente, é necessário selecionar os aspectos físicos, como a cor do leiaute do IDE Android Studio.
A penúltima fase é a escolha dos elementos para a instalação. É importante deixar selecionada a opção Android Virtual Device (AVD), pois desse modo desenvolvemos um perfil com os aspectos de um dispositivo virtual com Android. Além disso, o AVD permite a simulação e execução dos testes nos aplicativos desenvolvidos. 
Agora, vamos imaginar a possibilidade do AVD não ser instalado. O que poderá acontecer? Bem, na ocasião do AVD não ser instalado, os aplicativos serão executados no dispositivo com Android de forma direta. A partir daí, torna-se viável desenvolver a quantidade de AVDs que for preciso por meio do AVD Manager (Gerenciador AVD). Ao fim, você observará uma listagem dos procedimentos realizados, denominado Resumo de instalação. 
Figura 3. Captura de tela com instalação de elementos do SDK.
CRIANDO O PRIMEIRO PROJETO
Como você deve ter observado, a base da estrutura está configurada por meio dos procedimentos. A partir desse instante, se tornará viável o desenvolvimento do primeiro projeto Android. 
É necessário, de imediato, selecionar a opção Start a new Android Studio project. No passo seguinte, o usuário será conduzido a informar alguns itens, como o nome do projeto que será criado (Application name), o site que costuma utilizar (Company Domain), a parte do disco rígido em que o projeto será arquivado (Project location) e Package name (nome do pacote), que será usado para desenvolver um identificador único direcionado ao seu aplicativo. Ao final, o aplicativo utilizará outras linguagens diferentes do Java. 
O terceiro passo ocorre quando o usuário é enquistado para informar o modelo de dispositivo em que será criado o projeto e o SDK básico. Isso significa afirmar qual é a versão básica Android que será aceita para que ocorra a instalação do aplicativo. Neste instante, o Android Studio vai exibir um percentual de usuários abrangidos pelo aplicativo. O passo seguinte é desenvolver uma Activity para cada tela que se apresentar no aplicativo. Por padrão, desenvolve-se uma Empty Activity, ou atividade vazia. 
Ao final, com o desenvolvimento de uma Activity, é preciso apresentar seu nome e o nome do recurso de layout. Consequentemente, um projeto Android se expõe em arquivos diferentes ao Java com o código-fonte e a estrutura visual que será exposta para o usuário.
Figura 4. Captura de tela de como criar projeto Android.
Desenvolvido o primeiro projeto, existe a possibilidade de ser realizado um download de outros elementos ou outra versão do SDK. Na notificação Install missing platform(s) and sync project, é possível clicar no link e realizar a instalação de maneira automática. 
// Solicitação de download de novos componentesAo observar um projeto de desenvolvimento e a maneira como ele está estruturado no IDE Android Studio, podemos chegar a algumas conclusões. Desse modo, os componentes que formam um Android Studio são descritos da seguinte maneira:
· 1
primeiramente, é possível verificar a janela de projeto, que se caracteriza por exibir hierarquicamente todos os arquivos que formam o projeto Android;
· 2
em seguida, é possível conhecer a filtragem dos arquivos, que consiste em uma lista suspensa com uma série de possibilidades que alteram a maneira de exibir os arquivos do projeto. De maneira padronizada, o IDE configura essa lista como Android, o que possibilita a exibição dos arquivos mais relevantes para a criação do projeto. Ao selecionar a opção Project, é possível visualizar a estrutura real dos arquivos;
· 3
posteriormente, há a pasta que contém o arquivo AndroidManifest.xml, cujo arquivo se caracteriza por apresentar uma estrutura XML contendo as configurações fundamentais de um projeto;
· 4
seguindo com a inserção da pasta Java, que tem a função de arquivar todo código-fonte contido em um projeto, é viável organizar as classes nos pacotes determinados;
· 5
depois, é inserida a pasta res, que representa a abreviação de resources e na qual estão disponibilizados os recursos “não código-fonte” do seu próprio projeto Android. Nessa pasta, são gerados subdiretórios para cada modelo de recurso (imagens, strings de UI, dentre outros);
· 6
no que se refere a Gradle Scripts, é preciso entender que, ao executar o aplicativo em desenvolvimento, é preciso gerar um arquivo com uma extensão apk. Esse processo é denominado processo de compilação e integra uma variedade de etapas e ferramentas;
· 7
ao final, é preciso escolher um arquivo contido na janela de projeto e aplicar dois cliques, o arquivo se abrirá e será carregado dentro dessa barra. 
É importante entender que, ao utilizar o Gradle, fica viável realizar ajustes para criar um arquivo apk de acordo com a necessidade. Nessas condições, o arquivo build.gradle (Module: app) possibilita alterar várias configurações de compilação, que podem ser definidas por:
· CompileSdkVersion, versão do aplicativo no qual haverá a compilação do SDK.
· ApplicationId, único identificador do aplicativo. O Android, de forma padronizada, determina o mesmo nome de pacote.
· MinSdkVersion, que consiste na versão básica aceita do SDK utilizada para a execução realizada nos aplicativos.
· TargetSdkVersion, que consiste na versão onde o aplicativo é direcionado.
· A VersionCode é um código da versão do aplicativo no qual, a cada versão mais atualizada, é preciso adotar um código superior a essa variável com o objetivo de que o usuário seja sempre informado sobre as atualizações disponíveis para o aplicativo.
· A VersionName é responsável pelo controle interno da organização por meio dos nomes das versões.
· Dependencies se configura como o local escolhido para acrescentar bibliotecas externas no aplicativo. Essas bibliotecas possibilitam a utilização de recursos e funcionalidades criados por programadores variados dentro do seu aplicativo.  Além disso, é importante que elas sejam compatíveis com versão do compileSdkVersion e do targetSdkVersion.
Vale frisar que, na alteração de qualquer item na configuração do Gradle, é preciso realizar um processo de sincronização do projeto. Para que isso ocorra, é necessário que seja selecionada a opção de Sync Now, que pode ser visualizada na parte superior do lado direito do arquivo. 
A que conclusão é possível chegar? Bem, para que um aplicativo Android seja desenvolvido, é necessário que seja realizada a instalação das ferramentas JDK, Android Studio e SDK. Após a instalação dessas ferramentas será preciso criar um projeto no Android Studio que, de acordo com Hudson Scheffer, que escreveu o livro Desenvolvimento para dispositivos móveis, publicado em 2018, nos disponibilizará:
· 1
um arquivo AndroidManifest.xml contendo uma série de informações primordiais sobre o aplicativo.
· 2
um diretório Java que apresenta todos os códigos-fontes disponíveis;
· 3
um diretório res no qual serão arquivados todos os recursos que não são códigos-fontes;
· 4
um sistema em que os builds são automatizados, possibilitando a determinação das configurações de compilação.
Criação de aplicativos Android com a linguagem Java
Ao longo do conteúdo estudado, você, caro leitor, deve ter observado que a linguagem de programação Java é a referência para que o Android seja desenvolvido, daí a importância de se entender seu funcionamento. Essa linguagem de programação se caracteriza por apresentar semelhanças e algumas distinções em relação a outras aplicações.
No ambiente tecnológico, é importante frisar que as linguagens de programação possibilitam a comunicação com um computador com o objetivo de realizar algumas ações relacionadas à manipulação e coleta de dados dos usuários. Dentro desse contexto, o Java se caracteriza por dois aspectos básicos: ele é orientado a objetos e é tipado estatisticamente. 
Uma linguagem orientada a objetos tem como referência a modelagem e o nível de comunicação estabelecida entre os objetos. Essas linguagens possibilitam determinar objetos e dar acesso às suas propriedades. Nós também podemos enviar mensagens para os objetos, criando e manipulando diferentes tipos para fazer coisas diferentes. 
Os dados são arquivados em variáveis. Dentro desse contexto, as linguagens consideradas estaticamente tipadas nos impõem a condição de declarar qual modelo de dados cada variável pode armazenar. 
DICA
Java e JavaScript, apesar de terem nomes parecidos, são linguagens completamente diferentes. Todavia, o conhecimento sobre JavaScript pode ajudar no entendimento de Java, uma vez que alguns de seus componentes básicos são semelhantes.
APRENDENDO JAVA
Para começar a entender como o Java é desenvolvido, é preciso levar em consideração que cada linha de código apresenta determinadas normas sobre a forma como a linguagem será escrita e o que pode ser permitido no momento de seu desenvolvimento.  
A função da programação é realizar suas ações por meio de dados. Nesse sentido, o ideal para qualquer indivíduo que deseja criar essa linguagem é compreender os modelos de dados mais usados no Java. No Quadro 3, é possível visualizar o que denominamos de palavras-chave, que apontam os modelos de dados utilizados para a declaração de variáveis.
Quadro 3. Modelos de dados utilizados para a declaração de variáveis.
Vale fazer uma ressalva de que os dados encontrados na Tabela 1 são classificados como primitivos devido à sua relativa simplicidade. A String, no entanto, é considerada um modelo de dados com um nível maior de complexidade. Elas são consideradas como objetos e a sua nomenclatura no Java determina que os objetos devem iniciar com letra maiúscula.
Importante que você compreenda que um objeto se diferencia em relação aos dados primitivos, pois apresenta propriedades com maior nível de complexidade e técnicas disponíveis para se obter acesso às suas propriedades. Já os dados primitivos apresentam restrições e são mais simples.
Outro ponto que podemos destacar são as variáveis. Uma variável pode ser definida com um espaço destinado aos arquivos de dados, que podem ser um número ou até mesmo uma URL destinada a um vídeo presente na web. 
Observe a linha de código a seguir:
String mensagem = “Android é Legal”; 
Essa linha de código é uma declaração de variável denominada mensagem e se caracteriza por dispor de uma String.
Quadro 4. Linha de código
Outros exemplos de declarações de variáveis, usando os modelos de dados primitivos, podem ser observados na Figura 5. 
Figura 5. Captura de tela com exemplos de declarações de variáveis.
Você pode estar se questionando: o que significa o f no fim da variável distância? Indica que o número é float. No exemplo dos valores atribuídos ao char, foram utilizadas aspas como uma forma de diferenciá-las em relação à String.
Além das variáveis adotadas, é preciso verificar também os métodos. Nesse sentido, ele pode ser definidocomo uma chamada de uma função utilizada em outras áreas do código. Ademais, ele se caracteriza por realizar determinadas ações e retornar resultados que podem ser utilizados. 
Tendo isso em mente, observemos como ocorre o funcionamento do código e sua organização. Para tanto, é necessário a inserção de comentários, que são definidos como linhas de código e não apresentam influência na maneira como o programa será realizado devido ao seu caráter meramente informativo. Esses comentários podem se subdividir em:
· simples: se iniciam com uso de duas barras (//). Dessa forma, toda descrição que se encontra depois da barra se torna irrelevante para o programa, conforme mostra a Figura 10.
Figura 6. Captura de tela com exemplos de comentários simples.
· múltiplo: ocorre quando há o desejo de realizar comentários um pouco mais extensos, ou seja, por mais de uma linha. Nessas condições, é necessário o uso de um marcador de abertura para demarcar o começo do comentário (/*). De forma similar, é preciso definir um marcador de encerramento (*/).
Figura 7. Captura de tela com exemplos de comentários múltiplos.
ARQUIVOS DE CÓDIGO JAVA
Normalmente, os arquivos de código em Java ficam dispostos em forma de classes. Dessa forma, um arquivo em extensão .java vai expor uma determinação de classe para, posteriormente, ser compilado dentro de um  arquivo de classe, ou seja, em  extensão .class.
A classe tem como funcionalidade determinar, em um objeto, o seu funcionamento. Sendo assim, você irá perceber que uma classe atua como um tipo de um objeto. As classes determinam alguns aspectos referentes aos objetos, como as propriedades e as habilidades conceituadas como métodos. A Figura 8 mostra um exemplo de classe que simboliza uma conexão para um site de maneira simplificada.
Figura 8. Captura de tela com exemplos de classe.
Desse modo, é possível perceber que temos uma variável de classe URL que simboliza a qual URL esse objeto deseja se conectar. No método setURL(), a palavra-chave this é utilizada na frente da variável com o objetivo de distingui-la da variável que se apresenta por parâmetro no método.
O método inicial é denominado setUrl() e é utilizado com a função de determinar a  variável de classe URL. Em seguida, temos o método denominado connect(), cuja função é definir para onde vai o código com o objetivo de definir um nível de conexão com a URL.
Vamos falar sobre um ponto importante dentro desse cenário de desenvolvimento do Java para Android: os modificadores de acesso. Quando definimos as classes, as variáveis e os seus métodos, geralmente configuramos quem pode acessá-los. Esses controles de acesso são definidos por meio do uso de palavras-chave específicas, como o public, private e protected. Elas possuem a função de determinar quem pode acessar a classe, a variável ou o método.
Geralmente, as classes ficam reunidas em pacotes, que são coleções de classes ligadas e denominadas em um modelo que adota a notação de domínio reverso. É como se, por exemplo, uma URL de um site ficasse de maneira invertida e passasse de band.com.br para br.com.band. 
Outro fator que você, caro leitor, precisa se atentar em relação às linguagens de programação é a possibilidade de verificar condições e, posteriormente, realizar algo caso a condição seja satisfatória. Na linguagem Java, isso ocorre quando a condicional if é utilizada para constatar a condição booleana, por meio dos comandos true e false.
Tudo se inicia com a palavra-chave if, sendo que a condição de teste se encontra entre parênteses. Caso a condição seja atendida, o código inserido dentro das chaves será realizado. A linguagem Java se caracteriza por utilizar chaves para dar início e finalizar os blocos de código.
Caso a condição não seja atendida, é necessário tomar algumas providências. Para isto, é necessário utilizar a palavra-chave else para tornar específico aquilo que o código deverá executar. 
Paralelo a essa possibilidade, é viável desenvolver um alinhamento destas condições em paralelo como o else if. 
No que se refere às estruturas utilizadas para organizar as partes dos dados, podemos definir o conceito de arrays. Conceitualmente, os arrays são estruturas utilizadas para ajustar diversas partes dos dados ou das outras variáveis, referenciados pela sua posição na matriz. À medida que se declara uma variável de matriz, é necessário que o tipo de item de dados dispostos seja determinado.
Importante deixar claro que a declaração de matrizes tem um aspecto bastante parecido como com a declaração de variáveis, pois é preciso acrescentar colchetes após o modelo de dados.
Além disso, é preciso determinar o tamanho da matriz para que, posteriormente, os dados sejam carregados. Os itens determinados na matriz são visualizados por meio do chamado índice de array, que é determinado posteriormente ao nome da matriz. 
Um importante comando que faz parte da programação é o loop, que pode ser subdivido em loop for. Com esse comando, são realizadas as declarações, que consistem em instruções disponibilizadas para a configuração da variável. Há também o loop while, que tem a função de executar o código quando a condição for satisfatória. Atuando de forma semelhante, o Do-while assegura que o código dentro do loop seja executado pelo menos uma vez. Por fim, temos o loop foreach, que se mostra como uma alternativa para quem desejar executar um código levando em consideração cada componente da coleção.
O USO DO KOTLIN COMO LINGUAGEM ALTERNATIVA PARA O ANDROID
Você pode imaginar que o Java, por conta de sua importância, seja a única linguagem de programação utilizada no desenvolvimento dos aplicativos Android. Dentro desse contexto, existe uma alternativa bastante viável e que vem sendo utilizada com frequência: o Kotlin. Trata-se de uma linguagem de programação desenvolvida pela JetBrains no ano de 2010 e que passou, em 2017, a ser solicitada também como uma linguagem viável para a criação do Android. 
Essa linguagem se destaca basicamente por sua qualidade e pelas ferramentas que utiliza, além de ser totalmente compatível com Java. É importante frisar que os usuários do Java geralmente não encontram dificuldades para utilizar a nova linguagem por conta da sua intuitividade. 
Vale ressaltar que os códigos do Kotlin são executados de forma similar ao Java.  Para que a nova linguagem possa ser efetivamente utilizada, é possível adotar um conversor automatizado que migre os dados do Java para Kotlin, mantendo o mesmo nível de velocidade. Em relação ao tempo de compilação, ele demonstra uma capacidade de suporte em relação às compilações incrementais.
Os aplicativos desenvolvidos pelo Kotlin podem ser executados nos dispositivos Android, independentemente da versão utilizada, já que são compatíveis com o JDK versão 6. Outro aspecto relevante é o fato do Android Studio ser uma versão compatível ao Kotlin a partir da instalação de um plugin.
A linguagem Kotlin acabou ganhando destaque na área de linguagem de programação quando seus códigos solucionaram uma série de problemas cotidianos do Java. Isso possibilitou ao desenvolvedor codificar de maneira eficiente e apresentar um desempenho mais elevado. 
Além disso, é possível verificar outras características importantes sobre o Kotlin, tais como:
· linguagem concisa e com capacidade de redigir mais com menor codificação;
· segurança que atua contra valores nulos e impede falhas;
· apresentação de conceitos funcionais direcionados ao desenvolvedor, apesar de não ser essencialmente uma linguagem funcional pura;
· função de extensão que permite acrescentar uma série de novos recursos e ampliar todas as classes, apesar de não se ter acesso ao código-fonte;
· gratuidade do código, que é aberto e pode ser utilizado sob a licença Apache 2.0.
O usuário que já desenvolve aplicativos em linguagem Java consegue converter parcial ou totalmente os códigos em Kotlin, mantendo seu funcionamento normalizado. Outro aspecto é a possibilidade de criar projetos mistos por meio da completa interoperabilidade, que consiste na habilidade do sistemade estabelecer a comunicação de maneira clara com o outro. 
DICA
O Kotlin consegue elevar a produtividade. Por ser uma linguagem concisa e expressiva, é possível reduzir a quantidade de linhas. Dessa maneira, a compilação fica cada vez mais rápida.
O Kotlin vem evoluindo e muitas organizações já vêm adotando essa linguagem em seus respectivos aplicativos. Ela disponibiliza uma série de recursos essenciais e apresentam novas possibilidades ao Android que ainda não foram inseridas no Java.  
Outras vantagens do Kotlin que podemos observar estão relacionadas à:
· proteção contra nulo, que se caracteriza por solucionar boa parte dos problemas de referências nulas, transformando todos os modelos não nulos por meio do padrão. Com isso, o compilador não irá autorizar a utilização de uma variável a qual não se deu início ou que possa se tornar nula. Na hipótese de se utilizar uma variável nula dentro do código, é preciso que o modelo seja registrado como anulável, inserindo um ponto de interrogação ao final;
· funções estendidas, que se caracterizam por disponibilizar a possibilidade de elevar uma classe por meio de uma nova funcionalidade sem a necessidade de estendê-la de forma direta. Esse procedimento é realizado por meio de declarações especiais, denominadas extensões. A declaração da função de extensão ocorre por meio da prefixação do seu nome com o modelo de receptor que será estendido;
· nas lambdas, o usuário não encontrará dificuldades de utilização, pois adota linguagens de programação como o JavaScript. Elas são benéficas, pois têm a capacidade de abranger outras funções como parâmetros. Normalmente, elas são arquivadas em variáveis de utilização subsecutiva, que são inseridas para outras funções;
· a classe de dados tem como vantagem a economia de tempo. É possível se criar classes somente com as propriedades e campos para arquivar essas informações, já que diversas aplicações são dirigidas pelos dados. Diferentemente do que ocorre em Java, no Kotlin existe a declaração da classe e de todas as suas propriedades somente em uma linha;
· a imutabilidade é importante, pois permite declarar variáveis que possibilitam alterações ou que não podem alterar o valor que for associado a elas. O processo de segurança está inserido nos dados inalteráveis, que podem ser acessados por diversas várias threads sem perigo.
Dessa forma, o Kotlin veio para simplificar os códigos e impedir os boilerplates, que são linguagens muito abrangentes, necessitando de uma quantidade extensiva de códigos para a realização limitava de tarefas. Outra possibilidade é tentar inserir as características principais de outras linguagens.
Agora é a hora de sintetizar tudo o que aprendemos nessa unidade. Vamos lá?!
SINTETIZANDO
Nessa unidade, vimos que, em tempos de conexão elevada, é inimaginável estabelecer ligações entre as pessoas sem a utilização da tecnologia móvel. Os dispositivos móveis estão cada vez mais inseridos na rotina das pessoas e, em um futuro próximo, essa intensidade vai aumentar. É possível dizer que existe uma diversidade de plataformas móveis, sendo que o Android e o iOS são os que mais se destacam. 
Dessa forma, aprendemos que as etapas iniciais para a criação de um Android seguem uma sequência lógica. Tudo se inicia por meio da instalação do JDK, que é um kit de desenvolvimento que possibilita aos programadores desenvolverem aplicações em Java. A etapa seguinte é a instalação do Android Studio, que é considerado um IDE oficial utilizado para o desenvolvimento de aplicativos Android, disponibilizado pela empresa Google e que se encontra atualmente na versão 3.4.2. Também é necessário instalar o SDK, software que possibilita o desenvolvimento dos aplicativos direcionados para a plataforma Android.
Por fim, vimos que as linguagens de programação possibilitam a interação com um computador com o objetivo de realizar algumas ações relacionadas à alteração e recolhimento de dados dos usuários. O Java se caracteriza por ser orientado a objetos e tem como referência a modelagem e o nível de comunicação estabelecida entre os objetos. O Kotlin, por sua vez, funciona como uma linguagem alternativa para o Android.

Continue navegando