DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Este é um post disponível para assinantes MVP
###
ClubeDelphi 128 - Índice

Programação Android - Artigo ClubeDelphi 128

Este artigo ensina conceitos básicos da arquitetura Android, assim como a configurar o ambiente para compilar projetos para esta plataforma. Também aborda o funcionamento da ponte entre o Pascal e as APIs Java do Android e como utilizar estas APIs para criar controles visuais.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

Desde que sua primeira versão foi lançada em outubro de 2008, o sistema operacional Android ganhou uma popularidade enorme e capturou uma grande fatia do mercado de smartphones e tablets. Ele oferece uma interface de usuário focada no uso do touchscreen superior àquela oferecida por sistemas operacionais mais antigos, como o PalmOS ou o SymbianOS, e comparável à interface oferecida pelo iPhone, mas com a grande vantagem de que tudo relacionado a ele pode ser encontrado por preços mais em conta. Por exemplo, é possível comprar um smartphone HTC Wildfire com touchscreen, GPS, câmera com 5 megapixels, 528 MHz, 512 MB ROM e 384 MB RAM por cerca de 800 reais, enquanto que o iPhone novo custa em torno de 2500 reais. Similarmente é necessário pagar para a Apple 100 dólares por ano para poder participar na App Store do iPhone, enquanto que o Google cobra uma taxa única de 25 dólares para desenvolvedores poderem participar do Android Market.

E agora, a questão mais importante: Ótimo, é possível comprar hardware poderoso e barato que roda o novo sistema operacional Android, mas como é possível escrever programas para ele em Pascal? Seja para portar aplicativos existentes ou para escrever novos, programadores Pascal estão sempre interessados em poder utilizar sua linguagem favorita em novas plataformas. Ao estudar as possibilidades de desenvolvimento no Android, é possível que haja certo desânimo no começo, pois a plataforma é bastante caótica, com incompatibilidade entre diferentes fabricantes e versões do Android OS, além de ser focada em Java e de modo geral pouco amigável para aplicativos nativos. Por outro lado, o Google tem lentamente dado passos na direção correta e o Android 2.3 ofereceu interfaces nativas para som e outras APIs importantes. As APIs para escrever interfaces de usuário, porém, ainda estão disponíveis apenas em Java. Apesar disso, é possível superar estas dificuldades com um pouco de criatividade. Este artigo apresenta uma solução para escrever programas para o Android 100% em Pascal. Uma parte em Java ainda é necessária, mas um programa Java genérico que responde aos comandos do programa Pascal pode ser copiado sem mudanças, exceto por mudar o nome do arquivo e da classe.

A arquitetura Android

Antes de iniciar, uma introdução ao funcionamento interno do Android é muito útil para desenvolvedores sem experiência na plataforma. No fundo, o Android é simplesmente Linux. Mas o lado Linux do Android está muito mais fundo do que normalmente se espera de derivados deste sistema e diversos aspectos chave do Linux não estão presentes no sistema do Google. Para começar, usuários não podem executar programas nativos. Aplicativos somente podem ser executados por usuários comuns via ícones na área de trabalho e estes ícones executam apenas aplicativos Java instalados através do sistema de pacotes APK. Por dentro o formato APK é um arquivo comprimido zip com um formato especial, mais especificamente uma modificação do formato jar utilizado por programas Java. Este formato não permite a execução de scripts ou código durante a instalação. Ao invés disso, ela apenas instala um aplicativo Java e outros arquivos de recursos necessários para ele. Cada arquivo APK contém ainda um arquivo manifest, que descreve quais permissões de segurança o programa requer, por exemplo, acessar dados no sdcard do usuário.

Um dos principais pontos onde o Android é diferente do Linux é o ciclo de vida do aplicativo. No Android os aplicativos são iniciados via ícones na área de trabalho e depois continuam rodando mesmo que o usuário tenha mudado para outro programa. Normalmente não há um botão para fechar os programas, então ao clicar no botão “home”, geralmente simbolizado por uma casinha, o programa continuará rodando no fundo. Quando já não houver mais espaço na memória RAM, o Android irá escolher algum dos aplicativos rodando no fundo para ser fechado. O espaço total de memória para programas é realmente a memória RAM, pois não é utilizado swap, conhecido como memória virtual no Windows. Este sistema visa tornar o sistema rápido para o usuário, apesar de poder ser irritante, pois não se pode facilmente controlar qual aplicativo será fechado. É possível encontrar no Android Market aplicativos que fornecem esta funcionalidade, chamados app killers.

No Android o ciclo de vida do programa tem várias fases, por exemplo: onCreate, chamada uma única vez quando o programa é iniciado. Outras fases relacionadas ao processo de pausar o programa e deixá-lo rodando no plano de fundo: onPause, onStart, onRestart etc. Quando uma mudança de fase ocorre, um método da classe Activity do programa é executado. Esse ciclo pode ser visto na Figura 1.

 

Figura 1. Ciclo de vida de aplicativos Android

 

Em aplicativos Pascal as fases de execução do programa também podem ser utilizadas e isto será explicado mais à frente no artigo.

O ambiente para desenvolvimento

Um passo muito importante para desenvolver aplicativos é configurar o ambiente de trabalho. Neste caso é necessário ter uma estação de trabalho Linux com o Free Pascal 2.4.2 instalado via pacote DEB ou RPM. Outros softwares que deverão estar instalados são o Lazarus, ANT, Java e a SDK do Android. Também é possível desenvolver aplicativos Android a partir do Windows ou do Mac OS X, mas isto não é recomendado, pois requer um trabalho de configuração do ambiente de trabalho mais complexo. Caso deseje-se ir por este caminho, na seção Links estão disponíveis alguns endereços que poderão ajudar. Para o caso mais fácil e recomendado, de cross-compilar aplicativos Android a partir de um desktop rodando Linux num processador x86, está disponível um Free Pascal já compilado. As instruções a seguir trabalham neste cenário e foram testadas no Mandriva Linux 2010.0 e 2010.1, mas devem funcionar com algumas modificações em qualquer distribuição Linux.

Free Pascal e Lazarus

O Free Pascal é um compilador Pascal 32 e 64 bits. Está disponível para os mais diversos processadores: Intel x86, Amd64/x86_64, PowerPC, PowerPC64, Sparc, ARM. Além disso, é multiplataforma, permitindo a geração de executáveis para os seguintes sistemas operacionais: Linux, FreeBSD, Haiku, Mac OS X/Darwin, DOS, Win32, Win64, WinCE, OS/2, Netware (libc e classic) e MorphOS. A sintaxe de seu compilador é em muito compatível com o Turbo Pascal 7 e com várias versões de Delphi. Nessa compatibilidade incluem classes como System, SysUtils, StrUtils, DateUtils, Variants, Classes, Math, IniFiles, Registry, RTTI, exceções, tipos AnsiStrings, WideStrings e Interfaces.

O Lazarus é um IDE open source que utiliza o compilador Free Pascal. Entre seus recursos estão o syntax-highlighting, que é o reconhecimento das palavras chave e seu devido destaque no código fonte, editor de código e um designer visual de formulários. Além de possuir uma biblioteca de componentes que é muito compatível com a VCL (Visual Component Library) do Delphi. A LCL (Lazarus Component Library) inclui muitos controles que funcionam como substitutos de controles VCL, como formulários, botões, caixas de texto e outros usados para criação de interfaces gráficas.

Um ponto que merece destaque é que ambos, Free Pascal e Lazarus, são escritos em Pascal, o que não limita em nada o que pode ser construído com o IDE. É possível construir aplicações console, bibliotecas dinâmicas (DLLs no Windows ou SOs no Linux e assim por diante), e aplicações gráficas.

A história do Lazarus começou em 1999, buscando ser uma solução para o desenvolvimento Delphi no Linux, visto que na época não havia iniciativa da então Borland. Nessa época o projeto estava em formação e seus contribuidores começaram praticamente do zero a construir um IDE. Com o passar o tempo o projeto foi amadurecendo com a entrada de novos membros e em 2003 o projeto desenvolveu seu lado Win32. Usuários pediam cada vez mais suporte ao sistema operacional Windows. Já em 2005 o projeto tomou um rumo desafiador, ser o substituto do Delphi para aplicações Linux. Com colaboradores dedicados, o projeto alcançou maturidade e até mesmo novos pacotes para interface foram adicionados: Qt4, WinCE, fpGUI e Cocoa.

O futuro do projeto é audacioso. Em seus planos está compatibilidade com Solaris, com pacotes de terceiros (Sockets), linkagem com C++, mais arquiteturas (IA64, Alpha) e muito mais.

Instalando os cross-binutils

No Mandriva Linux, uma vez feito o download do pacote RPM contendo os programas arm-linux-as, arm-linux-ld, etc., que são os cross-binutils (veja seção Links), deve ser instalado utilizando o comando:

 

fpc -ivh cross-arm-binutils-2.20.51.0.4-2mnb2.i586.rpm

 

No Mandriva Linux 2010.0 as dependências do pacote não vão bater, pois ele foi feito para o Mandriva 2010.1, mas é possível ignorar esse problema e tudo funcionará bem, utilizando o comando:

 

[root@localhost Programas]# rpm -ivh --nodeps cross-arm-binutils-2.20.51.0.4-2mnb2.i586.rpm

 

Para outras distribuições deve-se utilizar os pacotes correspondentes, ou pode-se compilar os cross-binutils manualmente (veja sessão Links).

Configurando os cross-binutils

 O assembler precisa de um parâmetro para indicar qual ARM ABI ele deve utilizar. O processador ARM possui diversas versões incompatíveis, além de suportar múltiplas configurações, que apesar da confusão, há alguns padrões. A primeira versão do ARM, chamada de ARMv1, não tinha nem a função de multiplicação, que foi adicionada na versão ARMv2. O ARMv3 mudou o espaço de endereçamento de 26-bits para 32-bits, uma mudança muito grande. Com tantas mudanças nas primeiras versões ARM, foi difícil manter a compatibilidade e de modo geral essas versões iniciais são desconsideradas atualmente. O kernel do Linux em si possui suporte para duas arquiteturas: oabi para ARMv3 ou ARMv4 e eabi para ARMv4 ou superior. Na antiga oabi os programas podiam ser compilados com instruções de ponto flutuante e o kernel do Linux se encarregava de lidar com exceções causadas pela execução de instruções de ponto flutuante sem hardware para executá-las. Como esse processo era muito ineficiente, criou-se a nova eabi. Nessa ABI um programa que executar instruções de ponto flutuante sem o hardware correspondente terá sua execução interrompida pelo kernel.

A escolha adequada para o Android é EABI-5 (eabi para ARMv5 ou superior), que é compatível com todos dispositivos Android existentes conforme pesquisa feita em Janeiro de 2011. Para definir este modo se renomeia e substitui o programa montador (assembler) do pacote de cross-bin-utils previamente instalado por um shell script que define o parâmetro. Os comandos para fazer isso são:

 

su

mv /usr/bin/arm-linux-as /usr/bin/arm-linux-as_org

gedit /usr/bin/arm-linux-as

 

O comando anterior irá chamar um editor de texto onde o conteúdo do programa de assembler deverá ser digitado. Pode-se utilizar outros editores também, como o emacs ou kwrite. Este programa será um script do Linux e assim a primeira linha dele deverá indicar o programa adequado para executar o script, nesse caso o shell do Linux. Depois vem o conteúdo do script, que simplesmente chama o programa montador original com o parâmetro indicando a eabi-5 e mais todos os parâmetros passados para o script, indicados por $@:

 

"

A exibição deste artigo foi interrompida

Este post está disponível para assinantes MVP.



Engenheiro elétrico formado pela Escola Politécnica da USP. É desenvolvedor de diversos projetos de software livre, entre eles Lazarus, Free Pascal e o Virtual Magnifying Glass. Trabalha atualmente na Opera Software em Wrocła [...]

O que você achou deste post?
Publicidade
Serviços

Mais posts