Home » Desenvolvimento » Ferramentas para Desenvolvimento: Flex ou Java?

Ferramentas para Desenvolvimento: Flex ou Java?

Adobe Air Flex - Android SDK

Este é um Guest Post de Marcelo Lourencini Filho, mais conhecido como Idemax Green (@idemax), Desenvolvedor pleno em Adobe Flash Plataform, focado em desenvolvimento de aplicações interativas para dispositivos mobile (smartphones e tablets). Ele também é escritor do blog http://idemaxgreen.blogspot.com/.

Primeiramente gostaria de agradecer o Diego do Mestre Android pela oportunidade, a Comunidade Android brasileira pela força e disposição em fortalecer a plataforma à cada dia e a Google por mais uma manobra que protejerá o Android e Androiders no mundo.

Hello World!

Acho que desde o primeiro commit do projeto AIR Mobile de algum engenheiro de software da Adobe essa pergunta existe: Usar Flex ou Java para desenvolver aplicações para Android? E desde a Adobe Max de 2009 essa pergunta foi se replicando na cabeça de cada desenvolvedor Flash e Android… E agora?!

E agora temos duas excelentes opções na hora de desenvolver nossas apps para ganharmos muito dinheiro no Market! Mas como sempre “cada um no seu quadrado”, usar uma ou outra plataforma traz seus benefícios, mas também seus limites.

Quando se fala de Flash ou Flex em dispositivos móveis, vêm milhares de problemas na cabeça: performance, bateria, suporte, etc… Mas esses são problemas recorrentes em qualquer plataforma de desenvolvimento, seja em Java para Android, Cocoa para IOS ou C# para Windows Phone (uurrrghhh…).

Por causa da carta do Jobs (Thoughts on Flash) e vários outros FanBoys da Apple e Microsoft que postaram absurdos sobre a plataforma, o Flash ganhou uma fama ruim quando colocamos na mesma frase a palavra “smartphone”. Na verdade, a plataforma Adobe Flash (como deve ser chamada) é muito mais que um interpretador de SWFs compilados pelo Flex SDK.

Por outro lado, desenvolver apps nativas usando Java tem seus benefícios diretos. Além do suporte nativo a recursos do dispositivo, certamente a performance é otimizada pois não há nada entre suas apps e o OS que está rodando. Outro ponto importante é em relação aos novos recursos. Por exemplo, a Google lança uma atualização para o Android com suporte à um recurso XYZ.

Se você faz suas apps em Java, teoricamente é só baixar o novo SDK, implementar o novo recurso e publicá-la no Market. Mas caso suas apps forem feitas em AIR Mobile, você terá que esperar sair uma nova versão do player mobile da Adobe (que de suporte ao novo recurso) para implementá-lo em seus apps. A proposta da Adobe é manter esse espaço de tempo bem curto, mas todos nós sabemos quem nem sempre isso acontece.

AIR Mobile / Flex

O Adobe Flex é um framework voltado para aplicações robustas para a web, que encapsula vários componentes visuais como botões, listas, grids, bibliotecas para consumo de serviço web Java, PHP, ColdFusion, entre outros. O Adobe AIR é uma extensão do Adobe Flex com classes e bibliotecas para acesso à baixo nível (hardware, manipulação de arquivos, controle do OS, etc…) e o AIR Mobile é a mesma idéia do Adobe AIR para desktops, mas para Android e com grandes otimizações de performance em relação ao Flex e AIR Desktop.

Desta forma, programadores que já estão familiarisados com a plataforma podem “migrar” seus projetos para AIR Mobile facilmente. E também, novos projetos podem ser distribuidos para vários ambientes de forma mais simples, sem ter muitas modificações no projeto.

Por exemplo, você quer fazer um app que twite algo quando o dispositivo receber um novo SMS, mas quer vendê-lo no Market e na AppStore. Foi pensando em casos como esse que a Adobe criou o braço AIR Mobile, para que o desenvolvedor crie seu app independente da plataforma. Pegando uma frase do próprio Java podemos definir o seguinte: “write once run anywhere” (em tradução livre: escreva uma vez, rode em qualquer lugar).

“Mas como nem tudo são flores na vida de Adobe Climber”, o Adobe AIR Mobile ainda é um projeto novo e não tem a mesma generalidade, performance e outros que um app nativo poderia ter. O ponto principal é que o player mobile da Adobe só roda em Androids 2.2 (Froyo) ou superior, desta forma deixamos quase metade dos usuários de fora de nossos apps.

Android 2.2 - Gráfico

Integração

Outro ponto importante é a integração com o Android, o AIR Mobile tem um vasto suporte à funcionalidades nativas, como conexão com internet, browser nativo, câmera, GPS, aceletômetro, microfone, multitouch, manipulação de arquivos, entre outros. Só com um ou dois ítens da lista já podemos fazer milhares de aplicações que nos atendam nos mais diferentes segmentos: redes sociais, jogos, etc…

E estão muito bem integrados, então se sua aplicação não for além desses recursos, você terá que avaliar outros tópicos antes de se decidir.

Porém há alguns pontos negativos, não é possível acessar a lista de contatos diretamente, por exemplo. Outro caso é se sua aplicação tem que consumir algum arquivo que está no dispositivo ou cartão de memória do usuário, a caixa de diálogo que abre agrupa todos os arquivos (leia-se somente imagens, áudios e vídeos) em um menu accordion com uma usabilidade péssima.

Multiplataforma

Um ponto bem interessante da proposta da Adobe é que projetos AIR Mobile podem rodar tanto no Android como no IOS, e em BlackBerrys (não é “Berries” porque é nome próprio ok?!), abrindo ainda mais o campo de desenvolvimento. Então, seu projeto que antes era feito em Actionscript já poderia roda em Android, mas agora roda também no IOS e nos BlackBerrys!

Infelizmente ainda não há o mesmo nível de integração do AIR Mobile para Android como no IOS ou BlackBerry, mas elas são tão específicas que ainda assim vale muito a pena você analisar o que seu app vai usar antes de optar por aplicações nativas.

Por outro lado, projetos Java para Android teoricamente não rodam em outras plataformas. Então caso seu projeto tenha que rodar na web e nos smartphones e tablets da vida, você terá que criar um projeto para cada plataforma que deseje suportar.

IDEs de Desenvolvimento

Na minha opnião, e já lí que é a mesma de muitos outros, nada melhor que fazer escultura de gelo no Alaska. Desta forma, procuro sempre criar meus projetos nas IDEs oficiais pois quase sempre você terá o melhor suporte na hora de escrever seus códigos.

Quando falamos de Flex muitos já irão lembrar no Flex Builder, o antigo nome da IDE desenvolvida pela Adobe, agora chama de Flash Builder que está em sua versão 4.5. Se trata de um plugin para o Eclipse, que na minha opnião é de longe a melhor no mercado.

Tem um excelente suporte à todos os tipos de projetos (ActionScript puro, Flash, Flex, AIR e Mobile), os facilitadores na hora da codificação é a melhor parte. Há atalhos para criar métodos, listeners, interfaces, etc…

E em uma comparação direta temos o ADT, um plugin para Eclipse feito pela própria Google para o desenvolvimento de aplicações Android em Java. Para não ser muito redundante, o ADT recebe os mesmos elogíos do Flash Builder, total integração com os projetos, emula o Android para testes sem o dispositivo (o emulador vem junto com o SDK na verdade), além do LogCat que mostra todos os outputs de seu dispositivo conectado via USB, por exemplo.

Ambos suportam teste diretos nos aparelhos, então se você conectar seu dispositivo na porta USB e ativar o modo debugging poderá testar suas aplicações diretamente no smartphone! A diferença fica no uso comercial, o Eclipse é grátis assim como o ADT, mas o Flash Builder é grátis apenas por 30 dias. E isso pode ser um ponto importante na hora de desenvolver seu app.

Linguagem e Sintaxe

Para quem nunca viu ActionScript ou Java, pode até pular esse tópico pois as duas linguagens são muito parecidas e não irá fazer muita diferença se for começar do zero, inclusive por ambas serem orientadas à objeto. E mesmo se já viu alguma, esse assunto é muito subjetivo, por esse motivo só irei mostrar como são os projetos nos dois casos.

Para fazer apps em AIR Mobile existem 2 maneiras, usando o framework Flex Mobile ou criando tudo do zero usando ActionScript diretamente. Usando a IDE da Adobe é muito fácil criar ambos os tipos, os projetos “Hello World!” podem ser executados logo após a criação. Um projeto Flex Mobile por exemplo usa primariamente componentes MXML, um que manterá toda a aplicação e outro que será a primeira tela (chamada de view). Por exemplo, uma view:

ProjetoFlexMobileHomeView.mxml

    
        
    
    

Trata-se basicamente de um XML usando namespaces, então se o desenvolvedor já trabalhou com XMLs não terá muitos problemas com a linguagem. No caso do projeto Actionscript Mobile, a classe principal do projeto fica assim: ProjetoActionscriptMobile.as

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	public class ProjetoActionscriptMobile extends Sprite
	{
		public function ProjetoActionscriptMobile()
		{
			super();

			// support autoOrients
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			trace('Hello World!');
		}
	}
}

Neste momento, quem é desenvolvedor Java e nunca tinha visto Actionscript deve ter ficado espantado com a semelhança. E de fato é, conforme você for se familiarizando irá perceber que o Actionscript tem uma sintaxe muito comum.

Esses dois tipos de projetos, geram no final o mesmo arquivo que qualquer outro app para Android, o .APK. Desta forma, se seu usuário não souber que foi feito via Actionscript ou Flex, ele nunca saberá se é uma aplicação nativa ou AIR Mobile.

Em relação à aplicações nativas em Java não muda muito, você também pode criar aplicações usando somente Java ou usar um XML para marcar os componentes visuais, assim como o MXML faz no AIR Mobile. Então quando criamos um projeto Android pelo ADT, a IDE gera para nós uma classe Java chamada de Activity que é a mesma idéia da view no AIR Mobile, e um arquivo XML que organizará o os componentes visuais.

ProjetoAndroidActivity.java

package net.idemax.projetoandroid;

import android.app.Activity;
import android.os.Bundle;

public class ProjetoAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

main.xml

Não é obrigatório criar o arquivo XML para cada Activity. Assim como no AIR Mobile, você pode criar projetos inteiramente Java no ADT. Nos dois casos, Java e Flex têm arquivos de configuração chamados Mainfest onde, entre outras coisas, você habilita até onde sua aplicação pode ir no dispositivo e o que pode ou não acessar, como internet, GPS, dados externos, etc…

Concluindo

Há mais dois pontos interessantes à falar sobre as plataformas: curva de aprendizagem e desempenho da aplicação. Mesmo eu tendo fortes opniões formadas sobre isso, acho muito relativo, no caso da curva de aprendizagem tem gente que gosta de comprar um livro e outros gostam de fazer cursos, eu gosto de ler vários tutoriais na internet pois são vários pontos de vista sobre um mesmo problema.

Em relação ao desempenho, também acho relativo pois um App que usa 3D, irá rodar muito bem em dispositivos com bom hardware independente da plataforma que foram criados.

A minha dica é analisar com calma seu projeto, ver a proposta da sua app e para qual público ela será mais direcionada. Se ainda não conhece Actionscript e Java, está ai uma oportunidade de conhecer duas novas maneiras de desenvolver apps para seu smartphone e focar naquela que você mais gostou.

Se já conhece uma delas, também é uma oportunidade de ampliar seus horizontes e ter um outro ponto de vista de como apps são desenvolvidas.

Até a próxima…

About juniorlenny

Tem faculdade de Administração de empresas e Ciência da Computação, largou tudo para ajudar as pessoas sobre o sistema android.

10 comments

  1. Muito bom texto! Ótima apresentação sobre ambas bases!
    Fica muito difícil em até opinar!

  2. Apenas complementando, não são somente funcionalidades novas que podem demorar para ser implementadas. 

    Por exemplo, o paralelismo é inerente em algumas apps – geralmente jogos ou apps que não querem travar a interface do usuário enquanto faz algum tipo de processamento em segundo plano. Desta forma, desenvolvedores de apps desta natureza teriam dificuldades para obter sucesso caso escolham Flex, pois AS3 não suporta paralelismo. Este é um exemplo em que a linguagem não suporta o recurso, neste caso threads. Porém, pode-se citar que AIR Mobile ainda hoje, versão 3.0, não tem suporte a algumas operações de rede (sockets, por exemplo).

    Por isto concordo que a resposta mais adequada é “depende”. Avaliar as características da aplicação certamente dirá qual caminho o desenvolvedor deverá adotar.

    • Quanto ao suporte a Threads vc está certo, mas quanto a falta de suporte a sockets vc está enganado. AIR Mobile tem suporte a sockets sim.

      • Talvez eu não tenha deixado claro no meu comentário, mas estava me referindo a criação de servidores (e não só de clientes).

        Neste caso a documentação é clara: “[…] AIR profile support: This feature is supported on all desktop operating systems, but is not supported on mobile devices or AIR for TV devices. […]”

        A partir de : http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/ServerSocket.html

        Imagine que vc queira criar uma aplicação que necessite de uma comunicação via sockets entre dois DM e os dois com a função de atuar como servidor e cliente (para eliminar a necessidade elemento que atue somente como servidor). Hoje isto não é possível. 

        Acho que agora ficou mais claro.

  3. Eu gostaria de parabenizar o Idemax pelo seu excelente post. Eu gostei bastante da abordagem no tema.

    A cada dia fico mais empolgado com o crescimento da comunidade Brasileira de Android, todos buscando e compartilhando conhecimentos.

    #vamosQueVamos

  4. Rogério Oliveira

    Ótimo texto.

    Ando engatinhando no aprendizado “developer” android. É mais uma opção para observar bem.

    Parabens

  5. Obrigado pessoal pelos comentários e retweets! Continuem divulgando…

  6. Excelente post.

    Queremos avisar ao seus leitores que na RIACycle optamos por ensinar ambos.

    http://www.riacycle.com/flexmobile
    http://www.riacycle.com/android

    Acreditamos que o mais correto é aceitar diferentes formas de como vivenciar um projeto, seja ele aceitando funcionabilidades só habitáveis pelo código nativo ou apenas via app simples ou Web/Installed app.

    Ambas as tecnologias seja em java usando SDK do Android ou via Adobe AIR, completam em sí, fortalecendo ainda mais a utilização da plataforma.

    Onde há liberdade do desenvolvedor criar e continuar sendo criativo, independente de qual tecnologia seja, essa será sem dúvida a sua plataforma preferida.

    Igor Costa
    CEO da RIACyle

  7. Existe api para processamento de imagem em flex? Onde posso encontrar bons tutorias e documentação do flex?

Leave a Reply

Your email address will not be published. Required fields are marked *

*