Meu ambiente de desenvolvimento Java na TV Digital

O primeiro passo para é montar o ambiente de desenvolvimento com um emulador. Para isso a TQTVD disponibiliza um emulador que pode ser executada em uma VirtualBox com Ubuntu.

Acesse o site: https://www.astrodevnet.com.br, realize o cadastro e faça o login. Escolha a opção AstroBox, Download e faça o download do AstroBox. No mesmo site, faça o download do Manual do Usuário e siga as instruções descritas no arquivo para montagem da máquina virtual contendo o Ubuntu + o emulador da TQTVD.

Etapa opcional

Eu prefiro desenvolver na minha máquina e só executar o emulador na máquina virtual. Pra mim, além de ficar independente do emulador, o desenvolvimento fica mais rápido, mas essa etapa é opcional.

Na máquina virtual, faça o download dos headers do kernel e instale:

wget http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-headers-2.6.32-24-generic_2.6.32-24.43_i386.deb
wget http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-headers-2.6.32-24_2.6.32-24.43_all.deb
dpkg -i linux-headers*

Instale os adicionais de convidado e compartilhe as pastas: /usr/bin/AstroBox/bin/app e /stickerCenter/stickers/Sticker conforme descrito nesse post. O meu fstab do guest ficou com as seguintes linhas:

app		/usr/bin/AstroBox/bin/app	vboxsf	rw,uid=1000,gid=1000,auto,exec	0	0
sticker		/stickerCenter/stickers/Sticker	vboxsf	rw,uid=1000,gid=1000,auto,exec	0	0

Eu compartilhei as seguintes pastas do sistema hospedeiro (Auto-mount e Make Permanent): /development/tvdigital/app e /development/tvdigital/sticker.

Para testar, monte o compartilhamento:

sudo mount app && sudo mount sticker

Atualização: A versão 4 do virtualbox não respeita o mapeamento feito no fstab e monta automaticamente o compartilhamento na pasta /media/sf_[nomecompartilhamento]. Então se você possui essa versão, não altere o fstab e nem monte o compartilhamento. Adicione seu usuário no grupo vboxsf:

sudo usermod -a -G vboxsf username

E adicione o seguinte na primeira linha do arquivo /etc/rc.local

mount --bind /media/sf_app /usr/bin/AstroBox/bin/app
mount --bind /media/sf_sticker /stickerCenter/stickers/Sticker

Reinicie a máquina virtual.

Configurando o Eclipse

Você pode desenvolver em qualquer IDE, ou Bloco de Notas se preferir, desde que seu SO ou a IDE tenha suporte ao Apache ANT. No meu caso eu vou utilizar o Eclipse. Baixe e descompacte o Eclipse ou utilize um que você já tenha.

Copie os seguintes arquivos da máquina virtual:

  • /usr/bin/AstroBox/lib/basis.jar
  • /usr/bin/AstroBox/lib/charsets.jar
  • /usr/bin/AstroBox/lib/jce.jar
  • /usr/bin/AstroBox/lib/jsse-cdc.jar
  • /usr/bin/AstroBox/lib/localedata.jar
  • /usr/bin/AstroBox/lib/sunrsasign.jar
  • /usr/bin/AstroBox/bin/java/astro.jar

Vá em Window, Preferences, Java, Build Path, User Libraries e clique em New. Coloque o nome BootAstroBox, marque a opção "System library (added to the boot class path)" e clique em OK.

New User Library
New User Library

Selecione ela e clique em "Add External JARs...". Selecione o arquivo basis.jar que foi baixado da máquina virtual. Novamente clique em New, coloque o nome de AstroBox (não marque a opção system library), clique em OK e adicione as libs restantes que foram citadas anteriormente. Você deve ficar com algo semelhante à esse:

Preferences
Preferences

Clique OK. Isso você só precisará fazer uma única vez. Após isso é só criar os projetos selecionando essas libraries.

Para criar um novo projeto de TV Digital (Ginga-J), vá em File, New, Java Project, dê um nome para o projeto e escolha "Use an execution environment JRE" com a opção CDC-1.1/Foundation-1.1. Clique em Next. Na aba Libraries, clique Add Library, User Library, Next. Selecione as duas Libraries criadas anteriormente e clique em Finish. Agora é só começar a desenvolver.

Você pode fazer alguns ajustes finos. Selecione o projeto criado, clique com o botão direito e selecione Properties. Acesse Java Build Path, Libraries, selecione a lib JRE System Library e clique em Remove. Dessa maneira, você irá evitar de utilizar classes proibidas no CDC, como as classes do pacote javax.swing e irá utilizar somente às classes das libs citadas anteriormente.

Para executar no emulador é só copiar o conteúdo da pasta bin do projeto, para a pasta compartilhada anteriormente.

Etapa mais opcional ainda

Para executar o emulador a partir do seu ambiente há a opção de utilizar SSH. Se você tem um cliente SSH para Windows é necessário verificar os procedimentos para fazer isso no seu cliente SSH, no meu caso, vou utilizar o do Linux.

Na máquina virtual, instale o server de SSH executando o seguinte comando:

sudo apt-get install openssh-server

Teste a partir de sua máquina o funcionamento com o seguinte comando:

ssh -XYC [usuario]@[IP] [comando]

Onde [usuario] é o seu usuário da máquina virtual, o [IP] é o IP da máquina virtual e [comando] é o comando que você deseja executar. O parâmetro XYC significa para realizar o forward do X11 (X) confiável (Y) e comprimir (C) os dados trafegados. Por exemplo, para testar:

ssh -XYC thiago@192.168.57.31 firefox

Insira a senha e verifique se o firefox vai abrir. O próximo passo é evitar pedir a senha. Para isso, execute o procedimento deste link. Execute o seguinte comando para testar a execução do emulador:

ssh -XYC [usuario]@[IP] "DISPLAY=:0 && cd /usr/bin/AstroBox/bin && ./platEmul"

Esse comando deve abrir o emulador dentro da máquina virtual à partir da sua máquina real.

Script Ant para automatizar o processo

Crie uma pasta para gerar os arquivos compactados e para execução dos scripts:

mkdir /development/tvdigital/pack
mkdir /development/tvdigital/bin

Crie um arquivo o arquivo /development/tvdigital/bin/run.sh com o seguinte conteúdo:

#!/bin/bash
# creating initial settings for sitools.cfg
CONFIG_DIR="/development/tvdigital/bin"
V_USER="thiago"
V_HOST="192.168.57.31"
echo "ait::version_number=1" > $CONFIG_DIR/sitools.cfg
echo "ait::section_syntax_indicator=1" >> $CONFIG_DIR/sitools.cfg
echo "ait::current_next_indicator=1" >> $CONFIG_DIR/sitools.cfg
echo "ait::organization_id=1" >> $CONFIG_DIR/sitools.cfg
echo "ait::application_id=266" >> $CONFIG_DIR/sitools.cfg
echo "ait::application_control_code=1" >> $CONFIG_DIR/sitools.cfg
echo "" >> $CONFIG_DIR/sitools.cfg
echo "ait::protocol_id=1" >> $CONFIG_DIR/sitools.cfg
echo "" >> $CONFIG_DIR/sitools.cfg
echo "ait::visibility=11" >> $CONFIG_DIR/sitools.cfg
echo "ait::application_priority=1" >> $CONFIG_DIR/sitools.cfg
echo "ait::service_bound_flag=1" >> $CONFIG_DIR/sitools.cfg
echo "" >> $CONFIG_DIR/sitools.cfg
echo "ait::iso639_language_code=0" >> $CONFIG_DIR/sitools.cfg
echo "ait::application_name=GingaAPP" >> $CONFIG_DIR/sitools.cfg
echo "" >> $CONFIG_DIR/sitools.cfg
echo "ait::application_type=java" >> $CONFIG_DIR/sitools.cfg
echo "ait::initial_class=$1" >> $CONFIG_DIR/sitools.cfg
echo "" >> $CONFIG_DIR/sitools.cfg
scp $CONFIG_DIR/sitools.cfg $V_USER@$V_HOST:/usr/bin/AstroBox/bin/config/
ssh -XYC $V_USER@$V_HOST "DISPLAY=:0 && cd /usr/bin/AstroBox/bin && ./platEmul"

Crie um arquivo o arquivo /development/tvdigital/bin/stop.sh com o seguinte conteúdo:

#!/bin/bash
CONFIG_DIR="/development/tvdigital/bin"
V_USER="thiago"
V_HOST="192.168.57.31"
ssh -YC $V_USER@$V_HOST "pkill -f platEmul"

Altere as variáveis dois dois arquivos CONFIG_DIR, V_USER e V_HOST para os valores de acordo com o seu ambiente. Dê permissão para execução do script:

chmod +x /development/tvdigital/bin/*.sh

Para facilitar a compilação e execução da aplicação direto no emulador, utilize o seguinte script ant no seu projeto:

<!--?xml version="1.0" encoding="UTF-8"?-->

Altere o nome do projeto e os properties de acordo com o configurado e execute o script ant para parar o emulador se estiver em execução, compilar a aplicação, gerar um pacote zip e executar o emulador.

A partir de agora para criar uma aplicação de TV Digital é só adicionar as libs no Build Path e copiar esse script ant para que tudo seja feito automaticamente.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6