Você está na página 1de 17

DesenvolvimentoAndroidnoDelphi

Vejanesseartigoosdetalhesiniciaisqueenvolvema
construodeaplicaesAndroid,atravsdousodoIDEdo
DelphiXE5.

Fiquepordentro
AmaisnovaversodoDelphi,aXE5,apresentoucomograndeatrativoosuportenativoao
desenvolvimentomvelparaAndroid.Estanovidadeveioaatenderumdesejoantigoda
comunidade,queenxergaareferidaplataformacomosendoumatimaopocomercial.Isso
podeserjustificadopelofatodoAndroidseratualmenteoSOmaisdifundidoeutilizadoem
meioaocontextodosdispositivosmveis(tabletsesmartphones).Emvistadisso,opresente
artigoirmostrarosdetalhesiniciaisqueenvolvemaconstruodeaplicaesdestetipo,
atravsdousodoIDEdoDelphiXE5.

OsuporteaodesenvolvimentomvelnoDelphisurgiuaindaemsuaversoXE2,atento
direcionadoexclusivamenteconstruodeaplicativosparaaplataformaiOS,contemplando
dispositivosApple,taiscomoiPhone,iPadeiPodTouch.Adicionalmente,aindanestapocajse
ventilavaosprimeirosrumoressobreoeventualsuportenativodaferramentaao
desenvolvimentomvelparaAndroid,numfuturoprximo.Istoporque,apesardaclarae
reconhecidaevoluoparaapoca,osuporteaiOSatendiaapenasparcialmenteonichode
mercadoaoqualagrandemaioriadosdesenvolvedoresDelphiestavaminseridos.
SuarealidadeMobileenvolvia,almdosdispositivosiOS,umgrandemercadoemexpansoe
abrangentededispositivosAndroid,videsmartphonesetabletsdosmaisvariadostipose
marcas.Logo,surgiramosprimeirospedidossobreomencionadosuportee,passadasalgumas
versesdaferramenta,talpromessaveioaserfinalmenteatendidacomorecmlanadoDelphi
XE5.Sendoassim,estaversodaferramentacontacomonovosuportenativoao
desenvolvimentodeaplicaesparaaplataformaAndroid.
Almdisso,ograndediferencialnestepontoficaporcontadaformadedesenvolvimentoaplicada
construodestenovotipodeaplicao,quesemostraessencialmenteamesmadaj
utilizadaparaodesenvolvimentoclssicoparaWin32.Emoutraspalavras,issorefleteo
envolvimentodeumamesmalinguagem,umamesmasintaxeeosmesmoscomponentesj
conhecidos.
Aofinaldascontas,todoestecenriovemilustrarapretensomaiordaEmbarcadero,queade

proveraconstruodeaplicaesparamltiplasplataformas(Windows,MacOSX,iOSe
Android),atendendomltiplosdispositivos(PCs,SmartphoneseTablets)apartirdeumamesma
basedecdigoedeconhecimento.
Deformanatural,odesenvolvimentodeaplicaesmveisporsisenvolveumasriedefatores
extrasqueextrapolamosrecursosprovidosinternamentepelaferramentadedesenvolvimento.
ComoDelphinodiferentee,sendoassim,apretensodesteartigoadejustamenteprover
omaiornmerodeinformaesedetalhesquenorteiamoinciododesenvolvimentopara
AndroidnoDelphi,servindoassimcomopontodepartidaparaaconstruodasprimeiras
aplicaesdestetipo.

Preparaodoambiente
LogodeinciopossvelestabelecerqueodesenvolvimentoparaAndroidnoXE5requeruma
preparaopontualdoambientedetrabalho.Diferentedoqueaconteciaemsuaabordagemmais
tradicional,dedesenvolvimentodeaplicaesparaWindows,estenovoprocessoconstrutivono
Delphiexigeumasriedefatoresextras,quevoalmdosrecursosprovidosinternamente
peloIDE.Emvistadessediferencial,aseguirsodiscorridoscadaumdositensnecessriosao
desenvolvimentoparaAndroidnestanovaversodoDelphi.

AndroidTools
DentreosrecursosexternosaoIDEdoDelphi,necessriosaodesenvolvimentodeaplicaes
paraaAndroid,trssotidoscomofundamentais:JDK,NDKeSDK.Taissiglasrepresentam
elementososquaispodemsertraduzidoscomosendoferramentasdedesenvolvimentoparaa
referidaplataforma,essenciaisaqualquerambientevoltadocriaodeaplicaesmveisdeste
segmento.
Osdoisprimeirospodemserconsideradosrecursosestticos,umavezquea
instalao/atualizaodeambossedcompoucafrequncianoambientededesenvolvimento.
Numprocessooposto,oSDKpodeserconsideradovarivelacadaversodaplataforma.
Deincio,apresenadoJDK(JavaDevelopmentKit)justificadapelofatodoAndroidestar
diretamenteatreladoplataformaJava,tornandosenecessriaapresenadeseukitde
desenvolvimentooficial,quehabilitaacriaodesoftwaresparaestatecnologia.Nocontextodo
DelphiXE5,aversorequeridaerecomendadadoJDKa1.6ou1.7
.Emvistadisso,afimdeprevenireventuaistranstornos,casooambientenocontemple
nenhumadessasverses,aprpriainstalaodoXE5seencarregadeinstalaroJDKadequado.
JNDK(AndroidNDK)oacrnimoparaNativeDevelopmentKitepodeserbrevementedefinido
comosendoumconjuntoderecursosquepermiteaimplementaodepartesdaaplicao
usandolinguagensdecdigonativo,taiscomoCeC++.Suafinalidadedeusodestinase
essencialmentegeraodeaplicaesautossuficientesequefaamusodiretoeintensivodo
processadordodispositivo(CPU),sendoentomuitotilmecnicainternautilizadanos

bastidoresdoDelphi.
Emoutraspalavras,atravsdousodoNDKqueoDelphigeraocdigonativonecessrioparaa
elaboraodesuasaplicaesmveisparaaplataformaAndroid.Logo,aprpriainstalaoda
ferramentacontemplaoinstaladordaversoadequada(erecomendada)doNDK.Porfim,SDK
(AndroidSDK)remeteaotermoeminglsSoftwareDevelopmentKitque,nestecenrio,
caracterizaokitdedesenvolvimentoparaaplataforma.
Emsuma,estepacoteforneceasbibliotecaseferramentasnecessriasatodoocontextoque
envolveaconstruodeaplicativosparaAndroid.Apenascomoinformativo,aseguirexpostoo
caminhopadrodecadaumadasferramentas,tendocomobaseumainstalaopadrodo
releasedelanamentodoDelphiXE5:
JDKC:\ProgramFiles\Java\jdk1.7.0_25
NDKC:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\androidndkr8e
SDKC:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\adtbundlewindowsx86
20130522\sdk
Emcomplementoaestecenrio,oDelphiXE5contacomumelementoexternodenominado
AndroidTools,queficadisponvelatravsdomenudeinstalaodaferramenta,apartirdaguia
IniciardoWindows,conformemostraaFigura1.Umavezacionadatalopo,imediatamente
abertaajanelaAndroidSDKManager(Figura2),queapresentaumprognsticogeraldos
recursosdisponveisacadaversodaplataforma,mostrandoostatusdecadaitem(seinstalado
ouno)epossibilitandoinclusiveaeventualinstalaoouatualizaodecadaum.
Assimcomoacontececomositensanteriores(JDKeNDK),oprprioinstaladordoDelphiXE5j
prov,deformaopcional,ainstalaodeumaversoadequadadoSDK(BOX1).Talfacilidade
oferecidalogonoinciodoprocesso,talqualmostradonaFigura3.

Figura1.AndroidTools

Figura2.AndroidSDKManager

Figura3.InstalaodoDelphiXE5AndroidSDKeAndroidNDK

BOX1AndroidSDKeAndroidNDKVersesrecomendadas
AinstalaodoDelphiXE5contempla,deformanativaeopcional,umaversorecomendada
doAndroidSDK(4.2.2)edoAndroidNDK(androidndkr8e).Aqui,sedizrecomendada(ou
adequada)pelofatodestasversesseremaquelasutilizadaspelaequipede
desenvolvimentodaEmbarcaderoduranteaelaboraodoproduto,tendoassimagarantia
deseremplenamentesuportadaspeloIDE.Porconseguinte,autilizaodeverses
diferentesdestaspodeimplicarnaexistnciadenuancesnoplenamentesuportadaspela
versocorrentedoIDE,ocasionandocomportamentosindesejados.

Emcomplemento,paraqueodesenvolvimentoAndroidsejaefetivamentehabilitadonoIDE,
necessrioquetantoNDKquantoSDKsejamidentificadosinternamente.Paratal,agoraoprprio
menudeopesdaferramenta(menuTools|Options)contacomumnovoelementotambm
denominadoSDKManager,quetrazumalistadoscaminhoscondizentesacadapropriedade
relacionadaversodoSDKutilizado,incluindooNDK.
DepossedestasinformaesqueoDelphiconseguedetectaralocalizaodasbibliotecasa
seremutilizadasduranteoprocessodedesenvolvimento.ConformepodeservistonaFigura4,

umavezquefeitaaopopelainstalaodaversodoNDKedoSDKprovidosnativamente,
aspropriedadesdeambosjsoautomaticamentedetectadaspeloIDE.
PelofatodequecadaversodaplataformaestatreladaaumSDKespecfico,naturalqueo
desenvolvedorvenhaafazerusodeumSDKdiferentedoprovidonativamente.Emsituaes
maistradicionais,comumqueoambientejcontecomumainstalaoexistentedeSDK.Para
estescasos,tornasenecessriaaadiomanualdoAndroidSDKemquesto,aoSDKManager
doIDE.

abririmagememnovajanela
Figura4.OpesIDESDKManager

USBDriver
NoIDEdoDelphi,aexecuodeumaaplicaoAndroidsedbasicamentededuasformas,
sendoatravsdoenvolvimentodeumsoftwareemuladoroudeumdispositivofsicoreal.Para
esteltimo,oprocessoenvolveasimplesconexodoaparelhoaohardwarededesenvolvimento,
queocorreviaportaUSB.
Diantedisso,possveldeterminarqueoutrorequisitofundamentalparaodesenvolvimento
AndroidnoXE5estrelacionadoaousododriverUSBapropriadoaodispositivoenvolvido.Como
exemplo,paraumaparelhoNexus7,setornanecessrioousodoGoogleUSBDriver,damesma
formaqueumaparelhoMotorolaexigeodriverUSBespecfico,providopelaprpriafabricante.
Porpadro,dentrodocontextodoDelphiXE5,grandepartedasnecessidadesrelacionadas
drivers,taiscomoinstalaoeatualizao,podemsersanadasatravsdousodeseuAndroid
SDKManager.

Emulador
Semsombradedvidas,aformamaisnaturaldeseexecutarumaaplicaoAndroidnoDelphi
atravsdousodeumemulador.Porestarazo,oprprioinstaladordoDelphi,pormeioda
instalaonativadoSDKeNDKdoAndroid,jprovacriaodeumemuladorpadroj
configuradoparaodevidousonoIDE,emmeioaoprocessodedesenvolvimentodeaplicaes
mveisparaaplataforma.
Esteemuladorpadroapresentadosobonomedersxe5_androidesuadefiniocompleta,

incluindosuasconfiguraes,podemservistasatravsdogerenciadordedispositivosvirtuaisdo
Android,denominadoAndroidVirtualDevices(Figura5),providopeloAndroidSDKManager,e
disponibilizadoatravsdeseumenuTools|ManageAVDs.

Figura5.AndroidVirtualDeviceManager

FireMonkeyMobileApplication
Emsuaversoanterior,aXE4,oDelphitrouxecomoumadesuasgrandesnovidadesumnovo
tipodeprojeto,denominadoFireMonkeyMobileApplicationque,conformeseunomesugere,est
direcionadoconstruodeaplicaesmveiscomaferramenta.Nestapoca,conformejdito,
osuportedoIDEaocontextoMobileserestringiaplataformaiOS,resultandonaproduode
aplicativosparadispositivoscomoiPhone,iPadeiPodTouch.
Deformanatural,nestasuanovaverso(XE5),aferramentateveseusuporteaumentadocoma
inserodaplataformaAndroidaseucontexto.Comoreflexodisso,agoraapartirdeumtipode
projetonico(FireMonkeyMobileApplication),possvelseconstruiraplicativosparaambasas
plataformasmveissuportadas.Odirecionamentoespecficoacadaplataformased
simplesmentepeladevidaindicaonaopoTargetPlatformsdoProjectManagerdoIDE.
AFigura6mostraasopeshabilitadasdeformanativaemprojetosdestetiponoXE5.Ainda
combasenaimagem,umdetalheasermencionadonestemomentosedpelaindicaodo
Android,comosendoaplataformadedestinopadroparaotipodeprojetoFireMonkeyMobile
Application.IssosedevemuitoaofatodosuporteaAndroidserumadasgrandesapostasda
Embarcadero,nestanovafasedoDelphi.

Figura6.ProjectManagerTargetPlatforms

TemplatesparaprojetosFireMonkeyMobile
AoseiniciarumnovoprojetoFireMonkeyMobileApplicationnoDelphiXE5,umagamade
modelosprdefinidos(templates)deaplicaessodisponibilizadosaodesenvolvedor,servindo
comopontodepartidaparaoefetivodesenvolvimento.Afunoprincipaldestesmodelos

previamenteelaboradosfacilitaroinciodoprocessoconstrutivodoaplicativo,evitandoquese
comecetotalmentedozero.Emsuma,cadamodelocontaessencialmentecomformulriose
componentesprconfigurados,deacordocomsuacaractersticarelacionada.
Porestarazo,cadatemplatedisponibilizadoautodocumentado,osuficienteparaqueo
desenvolvedortenhaaclaranoodesuaintenoecaracterstica.Taisinformaesso
mostradaspelosimplesrepousardoponteirodomousesobrecadamodelo.AFigura7mostra
algunsdostemplatesMobiledisponveisnoXE5.

Figura7.FireMonkeyMobileApplicationTemplates
ComexceodomodeloBlankApplication,cadatemplatedeste,quandoutilizado,exigea
indicaoimediatadeumlocalasersalvoemdisco,umavezquenosogeradosemmemria,
massimcopiadosfisicamenteapartirdorepositriodoDelphi.

Umexemploprtico:primeiraaplicaoAndroidnoDelphi
XE5
Mantendoatradionoquedizrespeitoapresentaoprticadeumanovaabordagem
relacionadaadesenvolvimentodesoftware,deincioserconstrudoumtradicionalprojeto
HelloWorld!,deformaaintroduziraconstruodeaplicaesAndroidnoDelphi.
Sendoassim,utilizandocomobaseomodelodeaplicaomaisbsico(BlankApplication)deum
projetoFireMonkeyMobileApplication,aconstruodolayoutaserutilizadoseddemaneira
similaraojrealizadoaolongodosanoscomprojetosVCLFormsApplication.
Istoposto,pelosimplesarrastardeumboto(TButton)paraoformulriodoprojeto,fica
definidoolayoutdaaplicao(Figura8).Aindaemtermosvisuais,outraalteraonecessriase
dpeladevidadefiniodosdizeresaseremmostradosnocontroleque,nestecaso,seriaalgo
comoDizerOl!.
NumaabordagemtradicionalutilizandoaVCL,talmudanaimplicarianaconfiguraoda

propriedadeCaptiondoelementoTButton.Todavia,apesardassemelhanasnotadas,talcomoo
nomedaclassedocontroleutilizado(TButton),importantelembrarqueodesenvolvimento
MobilenoDelphiestrelacionadoaoframeworkFireMonkey(FMX).
Emfunodisso,oselementosutilizadostendematersuasprpriasnuances.Especificamente
paraestecaso,odetalheficaporcontadapropriedadedocontroleTButtonquerepresentao
textoasermostradoemseuvisual.EnquantoquenaVCLutilizadaapropriedadeCaption,aqui
seutilizaapropriedadeText.Apesardesutil,especificaescomoestapodemgerarconfuses
numdesenvolvimentoinicial.
Jemtermosdecodificao,aListagem1mostraocdigodomtodomanipuladordoevento
OnClickdoboto.Damesmaformaqueohabitual,apenasumachamadaaomtodo
ShowMessageosuficienteparasemostrarumamensageminformativaaousurio.Odetalhe
aquificanosbastidores,umavezqueoShowMessageutilizadofazrefernciaaomtodo
declaradonaunitFMX.Dialogs,emsubstituioaVCL.Dialogs.
Listagem1.CdigoparaoeventoOnClickdoboto
procedureTForm1.Button1Click(Sender:TObject);
begin
ShowMessage('OlMundo!');
end;

Figura8.Layoutdaprimeiraaplicaodeexemplo
Porconseguinte,jcomaaplicaoemexecuo,oresultadodaaodocliquenoboto
ilustradonaFigura9.

Figura9.AplicaoHelloWorld!emexecuo

AplicaoAndroidcombancodedados
Desdeseuincio,oDelphitevesuaexcelnciarefletidanaconstruodesoluesparaa
plataformaWindowse,fundamentalmente,noprovimentodeaplicaesenvolvendobancode
dados,conhecidasemmeiocomunidadecomoaplicaesdebancodedados.Ditoisto,
medianteestasuanovafaseevolutiva,queabrangeaconstruodeaplicaesparaplataformas
mveis(iOSeAndroid),tornaseinteressanteousodeumaabordagemjfamiliarparaa
demonstraodosnovosconceitosenvolvidos,traandoumparaleloentreelassempreque
possvel.
OdesenvolvimentodeaplicaescombancodedadosnoDelphiXE5paraplataformasMobile,
sobopontodevistanativo,estestritamenterelacionadoaousodosbancosdedadosInterbase
ToGoeIBLite(BOX2).Contudo,jdeinciovaleressaltarqueambososprodutosso
comerciais(pagos),logo,suautilizaorequerapossedeumalicenavlida.Combaseno
contextodoartigo,queestrelacionadoaousodaversoexperimental(Trial)daferramenta,o
desenvolvimentosedpelautilizaodaversoToGo,umavezqueumalicenadoproduto
(tambmTrial)providajuntodainstalaodoIDE.
Depossedatecnologiadebancodedados,sefaznecessriadefiniodabibliotecade

componentesdeacessoadadosaserutilizada.ParaaplicaesAndroid,trssoasopes
nativas:dbExpress(BOX3),InterBaseExpress(IBX)eFireDAC.Levandoemcontaonvelde
popularidade,nummomentoinicial,odbExpresssemostraumaopoagradvel.Emsetratando
deplataformasmveis(iOSeAndroid),odbExpresstemseusuportediretolimitadoadoistipos
debancodedados:ojcitadoInterBaseToGoeoSQLite.
ParaaplenautilizaodosdemaisSGBDssuportadospeloframework,umcenrioidealsedaria
peloenvolvimentodeumservidordeaplicaoDataSnap,caracterizandoassimumcontexto
multicamadas,oquefogedoescopodesteartigo.

BOX2InterBaseToGoeIBLite
Deformasucinta,oInterBasepodeserdefinidocomosendoumpoderosobancodedados
relacional,dealtodesempenhoesegurana,pertencentemesmaempresamantenedorado
Delphi,aEmbarcadero.Arobustezdeseusrecursosocredenciamaestarnomesmo
patamardeoutrassoluesjtambmconsolidadasnomercado,taiscomoOracle,MySQL,
MSSQLServer,entreoutros.Assimcomoseusconcorrentes,oInterBase,comoproduto,
contemplaumasriedeversesdistintas,cadaqualcomsuasespecificidades.Dentreestas,
asversodenominadasInterBaseToGoaquelaplenamentesuportadapelaplataforma
Android.Istoporque,estaversorefleteumaenginedebancodedadosquepodeser
embutidadiretamentenaaplicao,semanecessidadedequalquertipodeinstalao.Para
oseufuncionamento,nenhumprocessoadicionalalocadonamemria,seresumindo
apenasaousodaprpriabibliotecadobancodedados.

BOX3dbExpress
Deformaconceitual,odbExpresspodesersimplesmentedefinidocomosendoumframework
deacessobancodedadospresentenoDelphi,cujainfraestruturatotalmenteescritana
prprialinguagemutilizadanaferramenta.Atravsdautilizaodedriversespecficos,o
dbExpresssetornaaptoatrabalharcomosprincipaisSGBDsdisponveisnomercado,tais
comoOracle,DB2,MSSQLServer,MySQL,InterBase,FirebirdeSQLite.Historicamente,at
aversoXE2daferramenta,possvelafirmardeformaunnimequeodbExpressocupava
opostodeprincipaloponativa,emtermosdeacessoadadosnoIDE.Comachegadado
XE3eaposteriorapresentaodabibliotecaFireDAC,oframeworkganhouentoum
concorrentealtura,sendoqueatualmenteambos(dbExpresseFireDAC)dividemoposto
deprincipaisopesnativasparaapartedeacessoadadosnodesenvolvimentodeuma
aplicaoDelphi.

Bancodedados
AindacomrelaoaoInterBaseToGo,aprpriainstalaodoXE5trazconsigoumabasede
dadosdeexemplodestaversodoSGBD,cujoarquivoapresentasesobonomede

DBDEMOS.GDB,equeficalocalizadonapastaData,dentrododiretriodeexemplos(Samples)
daferramenta(C:\Users\Public\Documents\RADStudio\12.0\Samples\Data,tomandocomobase
umainstalaopadro).Todavia,valeressaltaraindaquemesmoquetalarquivoapresenteuma
extenso(.gdb)queremetasversesServerouDesktopdoInterBase,suautilizao,em
termosprticos,circunstancialmentediferente.
Deincio,oprimeiropontoaserlevantadocomrelaoaogerenciamentodeumbancodeste
tipo.Tradicionalmente,umabaseInterBasepodeserplenamentegeridaporferramentascomo
IBConsoleeIBExpert,queinternamenteseutilizamdabibliotecacliente(clientlibrary)padrodo
SGBD,denominadagds32.dll,paraaefetivaodoprocesso.
Ouso,porpadro,destabibliotecapodeserjustificadopelofatodelaestarrelacionadas
versesmaisclssicasdoInterBase(Ex:DesktopeServer)eatentotidascomoasmais
usuais.Todavia,tecnicamente,autilizaodeumabasededadosInterBaseToGoexigeousode
umabibliotecaclienteespecfica,denominadaibtogo.dll,emsubstituiogds32.dll.
Sendoassim,umajusteessencialaserfeitosedpelosimplesredirecionamentodaclientlibrary
aserutilizadapelaconexo.Parafinsdeconhecimento,oarquivoibtogo.dlldistribudojunto
dainstalaodoXE5,ficandolocalizadodentrododiretrioWin32_to,disponibilizadopor
padroem:
C:\Users\Public\Documents\InterBase\redist\InterBaseXE3
Aindanestemomentoimportanteressaltarqueambasasbibliotecasclientecitadas(gds32.dll
eibtogo.dll)dispemdeumamesmainterfaceinterna,possibilitandoentoqueummesmo
arquivodebancodedados(.gdb)setorneaptoaatuarnasdistintasversesdoSGBD.Ciente
disso,possvelentoseconstruirumabasededadosparaaversoToGodamesmaforma
habitualrealizadacomaversoServer.
Sendoassim,aListagem2mostraoscriptparaacriaodeumbancodedadossimples,paraa
utilizaocomaversoToGodoInterBase.
Listagem2.Scriptdobancodedadosdeexemplo
/*****CRIAOBANCODEDADOS*****/
SETCLIENTLIB'C:\Users\Public\Documents\InterBaseredist\InterBaseXE3\Win32_togo\ibtogo.dll';

CREATEDATABASE'[SeuCaminho]\DB_CLUBEDELPHI.gdb'
USER'SYSDBA'PASSWORD'masterkey'
PAGE_SIZE4096
DEFAULTCHARACTERSETWIN1252;

/*****CRIAATABELA*****/
CREATETABLEREVISTAS(
ID_REVISTAINTEGERNOTNULL,
ARTIGOVARCHAR(50),
AUTORVARCHAR(50)
);

/*****DEFINEACHAVEPRIMRIA*****/

ALTERTABLEREVISTASADDCONSTRAINTPK_REVISTASPRIMARYKEY(ID_REVISTA);

Conformepodeservisto,alistagemapresentadasimpleseautoexplicativaosuficienteaponto
denoexigirnenhumcomentrioadicional.

Layout
Comojdeconhecimento,FireMonkeyMobileApplicationotipodeprojetoaserutilizadopara
aconstruodeumaaplicaoAndroidnoDelphiXE5.Almdisso,medianteaessnciada
elaboraodeumaaplicaosimples,quesomentelistaumconjuntodeinformaesde
determinadatabeladobancodedados,otemplateHeader/Footertornaseumbompontode
partida.
Estemodelodeaplicaotrazcomocaractersticadelayout,umformulriocontendobarrasde
cabealhoerodap,talcomomostraaFigura10.Porconseguinte,valesalientarqueessas
barrasnosetratamdenovoscomponentesFireMonkey,massimdecontrolesjhabituaisda
VCL.Comoexemplo,abarrasuperior,definidaporumsimplesTLabel,jtodoestilizadoparao
contexto,comodevidoalinhamento,cor,efonte.AssimcomoocorrecomocontroleTButton,a
tradicionalpropriedadeCaptionnoestdisponvelaoTLabeldaFMX,sendonovamente
substitudapelapropriedadeText.
EmaplicaesVCL,emcenriosondesedesejamanipularousimplesmenteexibirdados
provindosdeumbancodedados,naturalautilizaodecontrolesDataAware,
tradicionalmentetratadoscomocontrolesDB,taiscomoDBEdit,DBComboBox,DBGrid,entre
outros.Diferentedisso,importantelembrarqueoFireMonkeynocontemplacontrolesDB,
utilizandoseentodeumaabordagemeumamecnicadiferentedaVCL,noquedizrespeitoao
seutrabalhocomdados.
Sendoassim,tomandocomobaseasituaodoexemplocitado,queexigealistagemdedadosa
partirdeumatabeladobanco,emprojetosVCLFormsumcontroledotipoTDBGridpoderiaser
plenamenteutilizadoparaaexibiodessasinformaes.JemprojetosFireMonkeyMobile,este
controlepoderiasersubstitudoporumsimplesTListBox,quetemcomofinalidadeexibirum
conjuntodeitensemumalistaderolagem.
Emtermosfuncionais,estecontroleaindaexigeaconfiguraodetodasuapartevisual.Logo,
umaprimeiraatitudeasertomadadizrespeitoestilizaodesuacaixadelistagem.Issosed
atravsdasubpropriedadeItemStyle,localizadaemsuapropriedadedenomeDefaultItemStyles
doprpriocontrole.Paraumexemplocomoocitado,umasugestopelaescolhadaopo
ListBoxItemBottomDetail,quedeterminaquelogoabaixodecadaitemlistado,sejamostrada
umapequenareaparaaexibiodeseusdetalhes.
Oprpriocontroleprovaindaapossibilidadedeoutrosajustesadicionais,talcomoainclusode
umacaixadepesquisadeitens,aotopodalistagem.Istoconseguidopormeiodainclusode
novoscomponentesrelacionados,aoseudesign,atravsdeseumenudecontextoAddItem,
conformemostraaFigura11.Pelaimagem,possvelverentoainclusodeumnovo

componente,dotipoTSearchBox.

Figura10.Header/FooterTemplateFormulrio

Figura11.TListBoxTSearchBox

Acessoadados
possvelestabelecerqueaessnciadoexemplocitadoestejarelacionadasuapartede
acessoaosdadosdatabeladobancodedados.UmavezqueodbExpressfoidefinidocomo
sendoatecnologiaaserutilizadaparaestefim,todaasequenteabordagemseddeuma
maneiramuitoprximaaoquefeitoemprojetosVCL.Comoexemplo,TSQLConnectiono
elementocentraldeconexo,contendoessencialmenteasdefiniesdedriver(DBX)ede
parmetrosdamesma.

Paraoprimeiro,emrazodoSGBD(InterBaseToGo)envolvido,IBLite/ToGoonomedodriver
aserescolhidonapropriedadehomnimadocomponente.Adicionalmente,osparmetrosda
conexoficamdefinidosnapropriedadeParams,talcomomostradonaListagem3.
Listagem3.CdigoDFMdeumcomponenteTSQLConnectionpropriedadeParams
objectSQLConnection1:TSQLConnection
...
Params.Strings=(
'DriverUnit=Data.DBXInterBase'
'VendorLib=ibtogo.dll'
'VendorLibWin64=ibtogo64.dll'
'VendorLibOsx=libibtogo.dylib'
'Database=[CaminhoDoBanco]\DB_CLUBEDELPHI.GDB'
'User_Name=sysdba'
'Password=masterkey'
'DisplayDriverName=IBLite/ToGo'
...
)
end

OdetalheaquificaporcontadaexposiodousodabibliotecaclientedoInterBaseToGo
(ibtogo.dlleibtogo64.dll),bemcomoocaminhodobanco,quedeveseradequadoaumcaminho
localvlido.Umavezdepossedaconexo,oelementoqueficarresponsvelporfazertoda
interaocomatabeladesejadanocontextododbExpressoTSQLDataSet.
Logo,suaconfiguraoparaesteexemplomostradanaListagem4,ondeficaclaraadefinio
deumasimplesinstruoSQLemsuapropriedadeCommandText,queirretornarosdados
pertinentesaoscamposdatabelaREVISTAS.
Listagem4.ConsultaSQL
objectSQLDataSet1:TSQLDataSet
Active=True
CommandText='selectID_REVISTA,ARTIGO,
AUTORfromREVISTASorderbyARTIGO'
SQLConnection=SQLConnection1
...
end

Porconseguinte,afinalizaodasconfiguraesdetempodedesigndaaplicaoenvolvea
ligaoentreapartededados(TSQLDataSet)eseuvisual,queaquirepresentadopelocontrole
TListBox.NumaabordagemVCL,comautilizaodecontrolesDB,estaligaosedariade
formanaturalatravsdousodeumsimplesTDataSource.
Todavia,otrabalhocomFireMonkeyessencialmentesediferenesteaspecto,umavezque,
conformejcitado,oframeworknoprovelementosDB.Aligaoaquificaporcontadouso
datecnologiaLiveBindings.Sendoassim,deformaprtica,suautilizao,nestecaso,sedpelo
usodoLiveBindinsDesigner,queumaferramentavisualdisponibilizadaatravsdomenuView

>LiveBindingsDesignerdoIDE.
Comsuaestruturaaberta,estedesignerpermiteentoquesejamdefinidasasligaesentreos
elementosdoformulriodeumamaneiratodagrfica,talcomomostradonaFigura12.

Figura12.LiveBindingsDesigner

Fazendoodeploydaaplicao
Emsituaesreais,opassoseguinteaodesenvolvimentodeumaaplicaoestrelacionadoao
seuefetivodeployparaoambienterealdeproduo.Talprocessopodeserbrevementedefinido
comosendoumacoletaeposteriorcpiaparaoambientedeproduo,detodososarquivos
necessriosparaaplenaexecuodaaplicao.NocasodeaplicaesMobile,oambientede
produoentooprpriodispositivonoqualaaplicaodeverrodar.
Indoalm,tecnicamentefalando,ousodeumemuladoremsubstituioaumdispositivofsico
tambmexigeomesmoprocessodedeploy.NoDelphiXE5,aoseexecutarumaaplicaoem
seuIDE,todooprocessodedeployrealizadodeformaautomticaemseusbastidores.
Afimdeproverumpanoramavisualdosarquivosenvolvidosnoprocesso,oprprioIDEdoDelphi
jprovumasoluorpidaegil,disponibilizadaemseumenudeprojetosProject>
Deployment.Umavezacionada,estaopotraztonaumanovajanelaondeficamlistadosos
arquivosqueirofazerpartedodeploydaaplicao.Porpadro,grandepartedosarquivos
essenciaisparaqueoaplicativosejaexecutadonodispositivojsoautomaticamenteinclusos
nestalistagem.
Emrazodoprojetodeexemplocitadoutilizarumrecursoextra,quedizrespeitoaobancode
dados,sefaznecessriaainclusodestesfatoresnajaneladeDeployment.Emvistadisso,uma
primeiraatitudeentoincluirnalistadearquivosdedeployoarquivodoprpriobancode
dadosutilizado,pormeiodobotodeaoAddFiles.Comoajuste,necessrioqueseucaminho
nodispositivosejaadequado,atravsdacolunaRemotePathdagradededeployment.
Emconsequnciadestamudana,sefaznecessriatambmaadequaodocaminhodobanco,
emruntime,doparmetrodaconexorelacionado(Database)noTSQLConnection.Issopodeser
feitodevriasmaneiras,deacordocomoRemotePathescolhido.Aseguir,naListagem5so
entomostradasduasalternativastradicionaisdeusonaperspectivaMobile,pormeiodomtodo
manipuladordoeventoOnBeforeConnectdocomponentecitado.
Listagem5.Configurandoocaminhodobancodedados

SQLConnection1.Params.Values['Database']:=
TPath.GetHomePath+PathDelim+
NomeDoArquivoDeBancoDeDados;

SQLConnection1.Params.Values['Database']:=
TPath.Combine(TPath.GetDocumentsPath,
NomeDoArquivoDeBancoDeDados);

Almdisso,pelofatodoSGBDutilizadoserumaopocomercial(paga),elenecessitadeuma
licenavlidaparaoperarnodispositivo.Conformejcitado,aprpriainstalaodaversotrial
doDelphiXE5jtrazconsigoumalicenahabilitadadoInterBaseToGoparaestesfins.
Demodogeral,paraseadicionarlistadedeploytodososelementosrelativosaoSGBDem
questo,bastaqueseacioneobotodeaoAddFeaturedFiles.Umavezfeitoisso,umanova
janelaaberta(Figura13),jdisponibilizandoumaopodevidamenterelacionada.

Figura13.DeploymentFeaturedFiles

Concluso
Apartirdoplenoentendimentodocenrioqueenvolveaconstruodeaplicaesmveispara
AndroidnonovoDelphiXE5,odesenvolvedorpodetirarproveitodetodasasvertentesqueesta
abordagemtemaoferecer.Vislumbrandosituaeshipotticas,podemoscitardesdeacriaode
umasimplesaplicaomvelindependente,quepoderserdistribudadeformacomercialem
lojadeaplicativos,passandoporaplicaesqueenvolvamdadosarmazenadosnoprprio
aparelhoemumabaselocale,enfim,casoscorporativos,ondeaaplicaoAndroidconstruda
atuacomoumclientedeumServidordeAplicaoDataSnap.
Porconseguinte,sonotriasagamaopesquesoacrescidasaocontextodoDelphi,
medianteseunovosuporteaodesenvolvimentoAndroid.
Conformejdepraxenolanamentodecadanovaverso,oDelphiXE5acabaporproporcionar
novosdesafiosaosmembrosdesuaextensacomunidade.Portanto,novamentecabeao
desenvolvedortirarproveitodoquehdemaisnovonaferramenta,ampliandoaindamaisseu
lequeprofissional.