Goweb Agency

The Digital Experts
Começar a ler
caspar-camille-rubin-89xuP-XmyrA-unsplash

Linguagens e Frameworks da área Mobile

Que soluções existem no mercado para solucionar o desenvolvimento de aplicações móveis? Quais são as diferenças, vantagens e desvantagens das diversas tecnologias? Qual a melhor tecnologia para o meu projeto? Neste artigo serão respondidas todas essas questões e outros aspetos relevantes de modo que tenha um maior conhecimento das várias ofertas existentes no mercado.

 

Tecnologias Existentes

Atualmente existem diversas soluções para se poder desenvolver uma aplicação móvel, desde as linguagens nativas de Android e iOS, até às soluções cross-platform.

 

Linguagens Nativas

Uma aplicação nativa é um tipo de aplicação que é programada através da linguagem que o sistema operativo em questão compreende. De modo a se poder construir este tipo de aplicações para dispositivos móveis Android e iOS, é necessário codificá-las utilizando as linguagens Java ou Kotlin no caso de smartphones Android, e Swift ou Objective-C no caso de smartphones da marca Apple. A grande particularidade da abordagem nativa é o facto de haver total personalização e acesso aos mais variados componentes de hardware e software do sistema, bem como ter a garantia de máximo desempenho nas aplicações desenvolvidas. A acrescentar a esses pontos, uma aplicação desenvolvida neste tipo de linguagem possui vantagens na adição de novas funcionalidades provenientes de novos updates do sistema operativo em comparação com as soluções cross-platform.

 

Linguagens de Android

As linguagens nativas oficiais para programar aplicações nativas em Android são Java, criada pela Sun Microsystems, e Kotlin, desenvolvida pela JetBrains.

Java é uma linguagem de programação criada em 1995 pela Sun Microsystems, que foi posteriormente vendida à Oracle passados uns anos. Apesar da sua idade, continua a ser uma linguagem muito utilizada no mercado, estando presente em mais de 3 biliões de smartphones em todo o mundo e continua a ser uma das linguagens mais utilizadas para o desenvolvimento de aplicações [1].

Por sua vez, Kotlin é uma linguagem de programação criada em 2010 e lançada ao público em 2011 pela JetBrains, que tem como objetivo principal ser uma linguagem capaz de ser segura, eficiente e funcionar em conjunto com outras linguagens de programação como Java por causa dos seus projetos internos. É assim uma linguagem que pode ser escrita para desenvolver projetos de back-end, front-end, cross-platform e aplicações Android [2].Em maio de 2017, a Jetbrains anunciou que Kotlin era oficialmente suportado pelo sistema operativo Android, tornando-se assim uma das linguagens nativas do sistema [3] e a recomendada pela equipa da Google para o desenvolvimento de aplicações, com “mais de 60% dos desenvolvedores Android profissionais” a utilizarem-na para a construção de aplicações [4].

Uma vez que o sistema operativo Android é livre, é possível programar aplicações para este software a partir de qualquer computador Windows, Mac ou Linux. No entanto, devido à quantidade considerável de smartphones que utilizam este sistema operativo, torna-se. desafiante a construção de um layout uniforme para todos os tipos de ecrãs. Para além disso, devido ao facto de ser um sistema operativo livre que todas as marcas de telemóveis (com exceção da Apple) utilizam, torna-se desafiante assegurar o mesmo nível de performance numa vasta gama de smartphones.

 

Linguagens de iOS

As linguagens nativas oficiais para programar aplicações nativas em iOS são Objective-C e Swift, ambas criadas pela Apple.

Objective-C é uma linguagem de programação orientada a objetos derivada de C criada em 1984 e era até à chegada do Swift a linguagem de programação principal das aplicações de todos os dispositivos Apple [5]. Continua a ser uma linguagem bastante utilizada no mercado, devido à sua estabilidade e compatibilidade com bibliotecas de C e C++.

A linguagem de programação abordada no parágrafo anterior foi substituída pela nova tecnologia denominada Swift em 2014. É uma linguagem que pretende substituir as linguagens derivadas de C, apesar de ainda estar dependente da linguagem Objective-C ao ser executada em ambiente Apple. Esta linguagem open-source não só permite a elaboração de aplicações para todo o espectro de dispositivos da marca, como também permite a elaboração de aplicações em Linux e num futuro próximo noutras plataformas [6]. Embora seja possível programar aplicações da marca em qualquer dispositivo digital, a sua testagem, execução e distribuição do programa para a loja App Store necessita de ser realizada utilizando um computador da Apple, o que pode ser um problema a ter em consideração caso esteja planeado a construção de uma aplicação em iOS.

 

Cross-Platform

Código cross-platform é um tipo de código redigido através de certas linguagens de programação ou frameworks que permite que apenas seja necessário um código base numa dessas tecnologias suportadas para que o código redigido seja compilado para diversas plataformas, nomeadamente para Android e iOS. Assim, torna-se uma opção a ter em conta para equipas que necessitam de implementar com rapidez uma aplicação para diferentes plataformas, ou para equipas que necessitam de desenvolver uma aplicação para Android e iOS mas não possuem conhecimento numa das linguagens nativas (ou ambas).

Para auxiliar no processo de desenvolvimento de aplicações, a grande maioria das tecnologias possuem uma funcionalidade denominada “hot reloading”, em que não é necessário compilar novamente o código para visualizar as alterações efetuadas. Sempre que é detetado uma mudança, o código é automaticamente atualizado e é possível ver as alterações em poucos segundos. Torna-se assim uma mais-valia para os programadores terem mais rapidez na implementação do software.

No entanto, existem diferenças entre o tipo de aplicações que certas frameworks e linguagens produzem, nomeadamente aplicações híbridas e aplicações nativas.

Aplicações híbridas são aplicações que são elaboradas através de linguagens feitas para a Web (como é o caso de HTML, CSS e Javascript), mas que possuem a particularidade de através de certas integrações terem acesso às funcionalidades nativas do smartphone (como é o caso da câmera, notificações, Bluetooth, entre outros). Este tipo de aplicações é executado através do auxílio de WebViews presentes no sistema operativo, que são componentes que simulam um browser.  Desta forma, estas aplicações têm um comportamento nativo apesar de se comportarem como um website [7].

Por sua vez, aplicações nativas são aplicações que são programadas através das linguagens nativas do dispositivo móvel. No caso das frameworks cross-platform, apesar de se poder interligar elementos nativos desenvolvidos através das linguagens referidas anteriormente, o processo de desenvolvimento destas aplicações é feito através de um código base noutra linguagem de programação (Javascript, Dart, entre outros) que depois é transformado em código nativo no processo de compilação e construção da aplicação. Dependendo da tecnologia utilizada, o método de compilação da aplicação pode ser diferente e originar diferenças em termos de desempenho.  Tome-se o exemplo da framework Flutter que, ao contrário de outras frameworks como React Native em que existe uma ponte entre as threads de Javascript e nativas aquando da sua execução, compila todo o código para linguagem nativa [8].

Atualmente, existem diversas opções para escrever código cross-platform. Nas subsecções seguintes serão analisadas algumas das frameworks que estão entre as mais populares [9].

 

Ionic

Ionic é uma framework criada em 2012 por Max Lynch and Ben Sperry que permite aos desenvolvedores programarem aplicações móveis em Javascript, permitindo que o código seja partilhado entre dispositivos móveis (Android e iOS), Web e Desktop. Até ao momento de redação do artigo, é considerada a maior plataforma de Javascript para desenvolver aplicações desta natureza, representando 20% de todas as aplicações presentes nas lojas de aplicações [10].

A grande vantagem desta ferramenta em comparação com as restantes é a possibilidade de os desenvolvedores poderem escolher qual a Web Framework que pretendem para desenvolver este tipo de aplicações. Desta forma, os programadores podem usar uma das principais plataformas Web (React, Angular ou Vue.js) ou utilizar Javascript puro. Para além disso, Ionic possui uma série de plugins e componentes desenvolvidos pela empresa [11] que auxiliam ainda mais o processo de desenvolvimento, assim como disponibilizam um conjunto de integrações com serviços externos (feitas pela empresa e pela comunidade) [12]. As características mencionadas anteriormente levam a que seja mais simples para os desenvolvedores Web implementarem aplicações móveis, e não sejam necessárias equipas especializadas em diferentes plataformas.

Esta framework é compilada nos dispositivos móveis como se tratasse de um website, sendo assim considerada uma aplicação híbrida. Isso leva a que certas funcionalidades dos telefones (tais como câmara, GPS, Wi-Fi, entre outros) não sejam suportadas diretamente pela framework, sendo necessário recorrer a plugins de ferramentas como Cordova ou Capacitor (desenvolvida pela Ionic). Outro aspeto negativo é o facto de certas integrações externas desenvolvidas pela Ionic (Microsoft Active Directory, Google Pay, Apple Pay, entre outros) não serem gratuitas. Por último, devido ao facto de não ser uma aplicação nativa, a performance pode ser prejudicada dependendo do tamanho e complexidade da aplicação.

 

NativeScript

A framework NativeScript criada pela Progress Software Corporation é uma ferramenta que permite construir aplicações nativas para Android e iOS. À semelhança do que acontece na framework Ionic, os desenvolvedores que utilizam esta ferramenta têm a oportunidade de escolher a Web Framework que preferirem, Javascript puro ou Typescript [13]. Por ser uma ferramenta que permite a construção de aplicações nativas, é possível aceder às API’s nativas dos dispositivos móveis para ter acesso a todas as funcionalidades (câmara, GPS, Wi-Fi, entre outros), bem como desempenhar melhorias a nível de desempenho e elaborar componentes nativos.

Apesar de ser uma ferramenta com menos popularidade que React Native e Flutter, possui uma comunidade sólida que desenvolve diversos plugins para interligar funcionalidades nativas, elaborar componentes personalizados ou auxiliar no processo de desenvolvimento de aplicações [14].

No entanto, na possibilidade de não existir um plugin que faça o que é pretendido, poderá ser necessário desenvolver essa funcionalidade nas linguagens nativas dos sistemas operativos dos dispositivos móveis. Essa restrição pode vir a ser um problema para a equipa de desenvolvedores da aplicação caso não tenham conhecimento alargado dessas tecnologias. É também importante salientar que como a aplicação é construída através de uma WebFramework, o espaço de ocupação da aplicação no disco será consideravelmente maior do que as restantes tecnologias. Caso a conexão de internet do dispositivo móvel seja medíocre, a experiência de utilização da aplicação será prejudicada [15].

 

Flutter

Flutter é uma framework desenvolvida pela Google que permite produzir aplicações nativas para não só dispositivos móveis (Android e iOS), como também para Web e Desktop (Windows, macOS e Linux). A acrescentar a esses aparelhos eletrónicos, a nova versão de Flutter lançada no dia 3 de março de 2021 permite a compatibilidade com dispositivos eletrónicos do dia-a-dia, como televisões, aparelhos domésticos inteligentes e carros [16]. Assume-se assim como a ferramenta cross-platform que suporta a maior quantidade de dispositivos digitais de raiz.

Embora esta framework permita construir aplicações nativas, o método de compilação é diferente face a ferramentas como React Native ou NativeScript. Tal como foi explicado anteriormente, o código elaborado em Dart (linguagem utilizada em Flutter) é compilado através de duas máquinas virtuais de Dart, que compilam o código para código nativo [8]. Desta forma, Flutter consegue melhorias em termos de performance face à concorrência, apesar de não possuir o mesmo nível de performance que as linguagens nativas.

Assim como as ferramentas descritas anteriormente, Flutter disponibiliza uma série de componentes (widgets) que facilitam no processo de desenvolvimento da aplicação [17].

Contudo, existem certos pontos negativos no uso desta framework. O facto desta ferramenta necessitar de ser programada em Dart pode levar aos desenvolvedores que beneficiam deste tipo de tecnologia cross-platform (os desenvolvedores Web) a necessitarem de dispensar algum tempo a aprender como se utiliza. Para além disso, e apesar de ser uma biblioteca em constante crescimento, continua a ser menos popular que React Native, o que leva a que não haja tantas soluções da comunidade para certos problemas comuns no desenvolvimento destas aplicações.

 

React Native

A ferramenta React Native é uma framework desenvolvida pela rede social Facebook em 2015 que foi construída tendo por base a web framework principal React. Permite a elaboração de aplicações para dispositivos móveis (Android e iOS) e para a Web. Para além dessas plataformas, existem projetos da comunidade selecionados pela equipa de React Native que permitem construir aplicações para outros dispositivos digitais, tais como desktop (Windows e macOS), tvOS (sistema operativo da AppleTV), entre outros. Para os mais experientes, é possível criar uma forma de interligar React Native com a plataforma desejada [18].

Esta ferramenta tem a particularidade de possuir uma das maiores comunidades existentes neste tipo de código cross-platform, com mais de 95 mil estrelas e mais de 20 mil forks no repositório GitHub [19] da framework, bem como a existência de milhares de bibliotecas que auxiliam o processo de desenvolvimento das aplicações. Destaca-se a comunidade React Native Community que possui muitas soluções suportadas pela equipa oficial do React Native [20]. Deste modo, é considerada a framework mais popular em 2020 para elaboração de aplicações móveis segundo o Stack Overflow [21]. O espectro de utilizadores é diversificado: desde grandes empresas (algumas na lista de “Fortune 500”) até startups apostaram nesta tecnologia para desenvolver as suas aplicações [22].

No caso de ser necessário implementar uma funcionalidade que ainda não foi solucionada por bibliotecas da comunidade, suportar alguma funcionalidade não nativa ou melhorar a performance da aplicação, React Native oferece a oportunidade de se poder programar em linguagens nativas, e fazer posteriormente a conexão entre as linguagens. Existe também a possibilidade de usar certas bibliotecas desenvolvidas para a web framework React (desde que sejam devidamente adaptadas para React Native). A framework oferece uma série de componentes nativos, no entanto ao contrário das opções anteriormente discutidas, não possui componentes complexos de raiz, como é o caso de navegação, formulários, entre outros. No entanto, existem bibliotecas da comunidade que resolvem a maior parte desses problemas.

Apesar da elevada popularidade da tecnologia e ter mais de 5 anos de mercado, esta framework continua em estado beta, pelo que ainda não é considerada uma tecnologia estável (embora diversas empresas continuarem a apostar nesta tecnologia, como Facebook, Discord, Microsoft, Tesla ou Uber [22]). Para além disso, e embora o projeto seja open-source, a tecnologia é maioritariamente atualizada segundo as exigências das aplicações do Facebook, pelo que certas funcionalidades podem demorar mais tempo a chegar à framework. Por último, é de salientar que um projeto de React Native irá ter bastantes bibliotecas de dependências, que poderão fazer com que o processo de compilação do código seja mais demorado, o espaço ocupado pela aplicação seja maior e levar a problemas de performance. Para tentar minimizar essa situação, poderá ser necessário construir os próprios componentes usando Javascript (React Native) ou linguagens nativas.

 

Comparação das tecnologias utilizadas

Todas as linguagens e frameworks exploradas têm a particularidade de serem ferramentas que permitem produzir aplicações móveis. No entanto, apesar de o produto final ser praticamente o mesmo independentemente da tecnologia utilizada, existem certas características que se devem terem consideração no processo de escolha da ferramenta mais acertada para o projeto.

A grande diferença entre a construção de aplicações móveis através de linguagens nativas e cross-platform tem a ver sobretudo com o grau de rapidez de desenvolvimento de aplicações móveis para ambos os sistemas operativos. Enquanto nas linguagens nativas é necessário dois projetos em separado para realizar uma aplicação para Android e outra para iOS, nas frameworks cross-platform é apenas necessário um código base para poder ser compilado para ambos os sistemas operativos. Apesar do processo de desenvolvimento das apps ser mais célere, existem diferenças em termos de performance devido ao processo de compilação destas aplicações, não sendo recomendada a sua utilização em aplicações com bastante complexidade.

Dentro das ferramentas cross-platform, existem diversas diferenças no método de escrita do código da aplicação, processo de execução e compilação, entre outros.  Tome-se o exemplo da framework Ionic que ao ser uma ferramenta para elaborar aplicações híbridas faz com que estas sejam executadas como um website, ao contrário das restantes frameworks analisadas. Para além disso, por serem aplicações híbridas e serem executadas nas WebViews dos smartphones, o desempenho será inferior às outras ferramentas que produzem aplicações nativas.

Para maior compreensão das características das diferentes tecnologias abordadas, as tabelas seguintes fazem referência aos atributos de cada ferramenta e respetivas comparações.

Imagem1 Imagem2

 

Conclusão

Após a exploração das tecnologias existentes no mercado, não existe nenhuma que seja definitivamente melhor que outra. Todas as linguagens e frameworks tem as suas vantagens e desvantagens, cabendo à equipa de desenvolvimento de aplicativos considerar as características de cada uma e fazer uma análise de qual será a melhor tecnologia a adotar para o projeto em questão.

Com a constante evolução das tecnologias existentes e surgimento de novas soluções, o futuro do desenvolvimento de aplicações móveis assume-se promissor, e deve ser algo que as empresas devem ter em consideração para poderem expandir o seu negócio empresarial.

 

Referências

  1. Oracle, “Obtenha informações sobre a tecnologia Java,” [Online]. Available: https://www.java.com/pt-BR/about/.
  2. Kotlin, “Get started with Kotlin,” [Online]. Available: https://kotlinlang.org/docs/getting-started.html##create-your-powerful-application-with-kotlin.
  3. M. Shafirov, “Kotlin on Android. Now official,” [Online]. Available: https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/.
  4. Android, “Desenvolver apps Android com o Kotlin,” [Online]. Available: https://developer.android.com/kotlin.
  5. Apple, “About Objective-C,” [Online]. Available: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html.
  6. Swift, “About Swift,” [Online]. Available: https://swift.org/about/##swiftorg-and-open-source.
  7. Ionic, “What is Hybrid App Development?,” [Online]. Available: https://ionic.io/resources/articles/what-is-hybrid-app-development.
  8. Dart, “Dart overview,” [Online]. Available: https://dart.dev/overview##platform.
  9. Statista, “Cross-platform mobile frameworks used by software developers worldwide in 2019 and 2020,” [Online]. Available: https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/.
  10. Ionic, “About Ionic,” [Online]. Available: https://ionic.io/about.
  11. Ionic, “UI Components,” [Online]. Available: https://ionicframework.com/docs/components.
  12. Ionic, “Integrations,” [Online]. Available: https://ionicframework.com/integrations.
  13. NativeScript, “Introduction | NativeScript,” [Online]. Available: https://docs.nativescript.org/.
  14. N. Marketplace, “NativeScript Marketplace,” [Online]. Available: https://market.nativescript.org/.
  15. N. Kamienski, “React Native vs. NativeScript: Comparison,” [Online]. Available: https://pagepro.co/blog/react-native-nativescript-comparison/.
  16. Google, “Announcing Flutter 2,” [Online]. Available: https://developers.googleblog.com/2021/03/announcing-flutter-2.html.
  17. Flutter, “Material Components Widgets,” [Online]. Available: https://flutter.dev/docs/development/ui/widgets/material.
  18. R. Native, “Out-of-Tree Platforms,” [Online]. Available: https://reactnative.dev/docs/out-of-tree-platforms.
  19. GitHub, “A framework for building native apps with React,” [Online]. Available: https://github.com/facebook/react-native.
  20. GitHub, “React Native Community,” [Online]. Available: https://github.com/react-native-community.
  21. S. Overflow, “Stack Overflow Developer Survey 2020,” [Online]. Available: https://insights.stackoverflow.com/survey/2020##technology-other-frameworks-libraries-and-tools.
  22. R. Native, “Who’s using React Native?,” [Online]. Available: https://reactnative.dev/showcase.
Open chat