Taxonomia de Aplicativos Móveis¶
Quando usamos o termo "aplicativo móvel" ou "app móvel", estamos nos referindo a um programa de computador autônomo projetado para ser executado em um dispositivo móvel. Na data desta publicação, os sistemas operacionais Android e iOS representam coletivamente mais de 99% da participação de mercado de sistemas operacionais móveis e o uso da Internet móvel superou em muito o uso da Internet em desktops. Isso significa que os aplicativos móveis são os tipos mais difundidos de aplicativos com capacidade de Internet.
Além disso, este guia usa o termo "app" como um termo geral que se refere a qualquer tipo de aplicativo que é executado em um sistema operacional móvel. Normalmente, os apps são executados diretamente na plataforma para a qual foram projetados, executados sobre o navegador móvel de um dispositivo inteligente ou usam uma combinação desses dois métodos.
Neste capítulo, discutiremos os seguintes tipos de aplicativos:
- Aplicativos Nativos)
- Frameworks Móveis Multiplataforma)
- Aplicativos Web)
- Aplicativos Híbridos)
- Aplicativos Web Progressivos)
Aplicativos Nativos¶
Se um aplicativo móvel é desenvolvido com um Software Development Kit (SDK) para desenvolver aplicativos específicos para um sistema operacional móvel, eles são chamados de nativos para seu sistema operacional. Se estamos discutindo um aplicativo nativo, presumimos que ele foi implementado em uma linguagem de programação padrão para aquele sistema operacional móvel - Objective-C ou Swift para iOS, e Java ou Kotlin para Android.
Por serem projetados para um sistema operacional específico com as ferramentas destinadas a esse sistema operacional, os aplicativos nativos têm a capacidade de fornecer o desempenho mais rápido com o maior grau de confiabilidade. Eles geralmente seguem princípios de design específicos da plataforma (por exemplo, os Princípios de Design do Android), o que geralmente leva a uma interface de usuário (UI) mais consistente em comparação com aplicativos híbridos ou web. Devido à sua integração próxima com o sistema operacional, os aplicativos nativos geralmente podem acessar diretamente quase todos os componentes do dispositivo (câmera, sensores, armazenamentos de chaves com suporte de hardware, etc.).
No entanto, como o Android fornece dois kits de desenvolvimento - o Android SDK e o Android NDK, há alguma ambiguidade no termo aplicativos nativos para esta plataforma. Enquanto o SDK (baseado nas linguagens de programação Java e Kotlin) é o padrão para desenvolver aplicativos, o NDK da plataforma (ou Native Development Kit) é um kit C/C++ usado para desenvolver bibliotecas binárias que podem acessar diretamente APIs de nível inferior (como OpenGL). Essas bibliotecas podem ser incluídas em aplicativos regulares construídos com o SDK. Portanto, dizemos que os aplicativos nativos do Android (ou seja, construídos com o SDK) podem ter código nativo construído com o NDK.
Frameworks Móveis Multiplataforma¶
A desvantagem mais óbvia dos aplicativos nativos é que eles estão limitados a uma plataforma específica. Se os desenvolvedores desejam construir seu aplicativo para Android e iOS, é necessário manter duas bases de código independentes ou introduzir ferramentas de desenvolvimento frequentemente complexas para portar uma única base de código para duas plataformas.
Aqui estão alguns frameworks móveis multiplataforma que permitem aos desenvolvedores compilar uma única base de código para diferentes destinos, incluindo Android e iOS:
Se um aplicativo for desenvolvido usando esses frameworks, o aplicativo usará as APIs internas nativas de cada sistema e oferecerá desempenho equivalente aos aplicativos nativos. Além disso, esses aplicativos podem fazer uso de todas as capacidades do dispositivo, incluindo GPS, acelerômetro, câmera, sistema de notificações, etc. Embora um aplicativo criado usando um desses frameworks seja funcionalmente equivalente a um aplicativo nativo verdadeiro, eles normalmente não são chamados assim. O termo aplicativo nativo é usado para aplicativos criados com o SDK nativo do sistema operacional, enquanto aplicativos criados usando um desses frameworks são normalmente chamados de aplicativos multiplataforma.
É importante saber quando um aplicativo usa um framework móvel multiplataforma, porque eles normalmente exigem ferramentas específicas para realizar análise estática ou dinâmica. A lógica real do aplicativo normalmente está localizada em arquivos específicos do framework dentro do aplicativo, embora o aplicativo também contenha o código típico que você veria em um aplicativo nativo. No entanto, esse código nativo geralmente é usado apenas para inicializar o framework multiplataforma e fornecer ligações entre a API nativa do sistema e o SDK do framework por meio das chamadas ligações específicas da plataforma.
Embora seja raro, aplicativos podem combinar código nativo e frameworks multiplataforma, ou até mesmo múltiplos frameworks multiplataforma, portanto é importante identificar todas as tecnologias utilizadas para cobrir corretamente toda a superfície de ataque do aplicativo.
Aplicativos Web¶
Aplicativos web móveis (ou simplesmente, aplicativos web) são sites projetados para parecer e se comportar como um aplicativo nativo. Esses aplicativos são executados no navegador do dispositivo e geralmente são desenvolvidos em HTML5, assim como uma página web moderna. Ícones de inicialização podem ser usados para simular a mesma sensação de acessar um aplicativo nativo; no entanto, esses ícones são essencialmente os mesmos que um favorito do navegador, simplesmente abrindo o navegador web padrão para carregar a página web referenciada.
Por serem executados dentro dos limites de um navegador, os aplicativos web têm integração limitada com os componentes gerais do dispositivo (ou seja, eles estão em "sandbox") e seu desempenho geralmente é inferior em comparação com aplicativos nativos. Como os desenvolvedores geralmente direcionam múltiplas plataformas com um aplicativo web, suas UIs geralmente não seguem os princípios de design de nenhuma plataforma específica. No entanto, os aplicativos web são populares porque os desenvolvedores podem usar uma única base de código para reduzir custos de desenvolvimento e manutenção e distribuir atualizações sem passar pelas lojas de aplicativos específicas da plataforma. Por exemplo, uma alteração no arquivo HTML para um aplicativo web pode servir como uma atualização viável e multiplataforma, enquanto uma atualização para um aplicativo baseado em loja requer consideravelmente mais esforço.
Aplicativos Híbridos¶
Aplicativos híbridos são um tipo específico de aplicativo multiplataforma que tenta se beneficiar dos melhores aspectos dos aplicativos nativos e web. Este tipo de aplicativo é executado como um aplicativo nativo, mas a maioria dos processos depende de tecnologias web, o que significa que uma parte do aplicativo é executada em um navegador web embutido (comumente chamado de "WebView"). Como tal, os aplicativos híbridos herdam tanto os prós quanto os contras dos aplicativos nativos e web. Esses aplicativos podem usar uma camada de abstração web-para-nativo para acessar capacidades do dispositivo que não são acessíveis a um aplicativo web puro. Dependendo do framework usado para o desenvolvimento, uma base de código de aplicativo híbrido pode gerar múltiplos aplicativos que direcionam diferentes plataformas e aproveitam elementos de UI que se assemelham muito à plataforma original do dispositivo.
Aqui estão alguns frameworks populares para desenvolver aplicativos híbridos:
Aplicativos Web Progressivos¶
Aplicativos web progressivos (PWAs) combinam diferentes padrões abertos da web oferecidos pelos navegadores modernos para fornecer benefícios de uma experiência móvel rica. Um Web App Manifest, que é um arquivo JSON simples, pode ser usado para configurar o comportamento do aplicativo após a "instalação". Esses aplicativos carregam como páginas web regulares, mas diferem dos aplicativos web usuais de várias maneiras.
Por exemplo, é possível trabalhar offline e o acesso ao hardware do dispositivo móvel é possível, o que era uma capacidade disponível apenas para aplicativos nativos. Os PWAs são suportados tanto pelo Android quanto pelo iOS, mas nem todos os recursos de hardware estão disponíveis ainda. Por exemplo, Notificações Push, Face ID no iPhone X ou ARKit para realidade aumentada ainda não estão disponíveis no iOS.