symbian s60 3rd ed. + python xmlrpclib

Já vou avisando: perdi o dia inteiro nisso. Logo que acordei, por volta das 10h da manhã, minha tarefa era fazer a xmlrpclib do python funcionar no symbian, nokia n95 8GB. Comecei a escrever esse artigo agora, 2h da manhã.

Um dos primeiros links que encontrei foi animador, pois parecia tão simples que decidi nem usar o windows xp – sim, eu tenho uma máquina virtual com sdk do symbian, carbide c++ e ainda o eclipse com wireless toolkit pra desenvolver algumas coisas em c++ e java (mas acho uma bagunça, um ambiente bem zoado).

Outro dia já havia tentado instalar um toolchain no mac os x, mas acabei desistindo porque estava demorando muito. Então, criei uma máquina virtual no vmware esxi com ubuntu 8.10 (intrepid) e comecei a seguir os passos para instalar o gnupoc, no site do Martin Storsjö.

Apesar de também parecer simples, algumas informações no tutorial do Martin estão desatualizadas, e outras nem são mencionadas. Pra encurtar a história, os arquivos que baixei no ubuntu recém instalado foram:

  1. gnupoc do Martin, gnupoc-package-1.11.tar.gz
  2. codesourcery’s gcc (binário) pro symbian 3rd ed., gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2
  3. sdk da nokia pra windows, S60_5th_Edition_SDK_v0_9_en.zip (ou aqui)
  4. sdk do python para s60, PythonForS60_1_4_5_SDK_3rdEd.zip

Os passos são mais ou menos os do site, com alguns pequenos detalhes. O ideal é criar um usuário e fazer tudo no homedir dele, nessa sequência:

sudo apt-get install build-essential libssl-dev wine unzip
mkdir -p csl-gcc symbian-sdks/s60_50
tar jxvf gnu-csl-arm-2005Q1C-arm-none-symbianelf-i686-pc-linux-gnu.tar.bz2 -C csl-gcc
tar zxvf gnupoc-package-1.11.tar.gz
cd gnupoc-package-1.11/tools
./install_eka2_tools ~/csl-gcc
cd ../sdks
./install_gnupoc_s60_50 ~/S60_5th_Edition_SDK_v0_9_en.zip ~/symbian-sdks/s60_50
./install_wrapper ~/gnupoc

# sdk do python dentro do epoc32
cd ~
unzip PythonForS60_1_4_5_SDK_3rdEd.zip
cd symbian-sdks/s60_50/
unzip ~/PythonForS60_SDK_3rdEd/sdk_files.zip

Depois de tudo isso, ainda encontrei um módulo do perl com problema, que na hora do bldmake usava metade dos caminhos de diretório com / e outra metade com \, tipo /home/dev/symbian-sdks/s60_50\epoc32\bla\ble. (haha!)

Pra resolver isso, precisa editar o arquivo ~/symbian-sdks/s60_50/epoc32/tools/featurevariantparser.pm e na linha 550, antes do open(DIR, $fulldir), colocar uma regex pra arrumar isso: $fulldir =~ s/\\/\//g;

No diretório dos wrappers, ~/gnupoc, o makesis não funciona por algum motivo relacionado ao perl, mas esse eu desisti e apaguei o link, e criei um script chamado makesis que o original do sdk da nokia, veja só:

$ cat /home/alef/gnupoc/makesis
#!/bin/bash
exec wine /home/alef/symbian-sdks/s60_50/epoc32/tools/makesis.exe "$@"

Aí, antes de continuar, é necessário rodar o wine ao menos uma vez pra ele criar o bottle e o resto da estrutura de diretórios necessários.

O que realmente é necessário pro wine, é o compilador. Pode ser microsoft visual c++ ou carbide c++, da nokia – foi esse que eu usei.

Talvez o instalador até funcione no wine, mas como eu já tinha o carbide instalado no windows xp, fui lá e copiei só o que era realmente necessário. Os arquivos ficam (na instalação padrão) em C:\Arquivos de Programas\Nokia\Carbide.c++ v1.3\x86Build e precisam ser copiados no ubuntu em ~/.wine/drive_c/carbide.

Além disso, precisa copiar de ~/symbian-sdks/s60_50/epoc32/tools os arquivos make.exe, mifconv.exe e uidrc.exe pro ~/.wine/drive_c/windows e depois editar o ~/.wine/user.reg e adicionar o seguinte (logo na segunda linha o arquivo):

[Environment]
"Path"="c:\\carbide\\Symbian_Tools\\Command_Line_Tools;c:\\windows;c:\\windows\\system"

Por fim, os scripts perl precisam de outras variáveis de ambiente pra funcionar. Criei um script no ~/env.sh com o seguinte conteúdo:

export EPOCROOT=~/symbian-sdks/s60_50/
export PATH=~/gnupoc:${PATH}

export MWCSym2Includes="c:\\carbide\\symbian_support\\MSL\\MSL_C\\MSL_Common\\include;c:\\carbide\\symbian_support\\MSL\\MSL_C++\\MSL_Common\\include;c:\\carbide\\symbian_support\\MSL\\MSL_Extras\\MSL_Common\\include"
export MWSym2Libraries="+c:\\carbide\\symbian_support"
export MWSym2LibraryFiles="MSL_All_MSE_Symbian.lib;gdi32.lib;user32.lib;kernel32.lib"

Ai ficou tudo pronto pra eu poder começar a pensar em fazer a xmlrpclib funcionar. Tem que estar muito na pilha pra isso tudo. Além de várias etapas, as coisas tem bugs, outras não funcionam direito, e esse artigo só será válido pelos próximos 2 meses, pois tenho certeza que quando alguma dessas coisas mudar de versão, vários desses passos não vão mais funcionar. Não tem cabimento.

Como se não bastasse, pra libxmlrpc funciona é necessário ao menos um parser de XML, e o padrão é o pyexpat. No fórum da nokia e na maioria dos resultados do google só vieram links para o pyexpat para s60 2nd ed. e eu precisava do 3rd ed (o link do fórum pro 3rd ed. está quebrado).

Depois de procurar muito tempo, encontrei o fonte do pyexpat para s60 no fórum da nokia. Na verdade, eu acho que comecei fazer tudo isso porque os arquivos de instalação desse pyexpat (sis e sisx) não instalaram no meu aparelho porque essa lib usa alguns recursos que exigem que o app seja assinado, e não pode ser self-signed.

Enfim, baixei o pyexpat e também o fonte do python 2.2.3. Copiei a xmlrpclib.py original e modifiquei o source do pyexpat pra já instalar com a lib.

Apanhei um monte pra entender essa zona que é o sdk da nokia, com esses comandos bizarros em perl (bldmake, abld, makesis, signsis, etc) e finalmente consegui gerar o instalador do pyexpat-xmlrpclib-3rded.sis, que (obviamente) não pude instalar no meu aparelho – precisa assinar o instalador com certificado, não pode ser self-signed, aquele papo furado.

Pra resolver isso e conseguir testar, tive que criar uma conta no Symbian Signed, que não aceita emails do gmail, yahoo, hotmail e afins, e preencher mil formulários, e depois de vários emails de confirmação enviei meu arquivo .sis, que em outro email chegou com um link para download, assinado pelo site.

Agora, posso rodar o maldito programa que preciso, do jeito como deveria ser: simples.

# coding: utf-8
# 20081206 AF

import os, e32, sys, socket, appuifw, sysinfo, xmlrpclib

lock = e32.Ao_lock()

# main canvas
def main():
    imei = sysinfo.imei()

    # app title, size and orientation (not automatic)
    appuifw.app.title = u'woah!'
    appuifw.app.orientation = 'portrait'
    appuifw.app.screen = 'normal'

    # access point selection
    apid = socket.select_access_point()
    if not apid:
        lock.signal()
        return

    apo = socket.access_point(apid)
    socket.set_default_access_point(apo)
    apo.start()

    # god damn xmlrpc client
    srv = xmlrpclib.ServerProxy('http://192.168.0.10:8080/xmlrpc')
    print srv.sort(['b', 'z', 'f', 'a'])

# run
main()

lock.wait()

Conclusões:

  1. Desenvolver pra celular é nojento. Seja em python, java, c++, etc;
  2. Os fabricantes complicam tudo. Seja iPhone, Symbian – isso sem contar as duzentas mil milhões de siglas do java, com midp, jsr, bozo;
  3. No caso do Symbian, o sdk de windows também é podre – na verdade é o mesmo do gnupoc, com aqueles scripts nojentos em perl, com bug, que compilam de um jeito alienígena pra mil plataformas diferentes;
  4. Os emuladores normalmente não suportam as funções de câmera, que da raiva porque tem que ficar toda hora copiando no telefone, e as vezes trava tudo;
  5. Se alguém tiver disposto, tipo um snapshot da minha máquina virtual (ubuntu) com tudo isso pronto, e deixamos pra download;
  6. Assim que eu conseguir testar o instalador do pyexpat-xmlrpclib em outro s60 3rd, dou um jeito de colocar pra todo mundo baixar;
  7. To a mais de duas horas só pra escrever esse artigo, por isso não vou revisar nada, nem mesmo o português.

PS: odeio tudo isso, mas nesse momento preciso.

Anúncios

4 Comentários on “symbian s60 3rd ed. + python xmlrpclib”

  1. Henrique disse:

    Cara, que saga!

    Desanimador tudo isso, tem que estar com muita paciência pra encarar toda essa zona :(

  2. João Rodolfo disse:

    Alex, não sei se ajuda, mas procurando a solução de uns problemas de drivers do e71 achei esses sites relacionados a desenvolvimento symbian da nokia:

    Forum de inovações (quem sabe não rola uma grana ou uns aparelhos)
    http://www.callingallinnovators.com/home.asp

    Treinamentos:
    http://www.forum.nokia.com/I_Want_To/Develop_Mobile_Applications/Get_Started.xhtml
    http://wiki.forum.nokia.com/index.php/Train_for_Emerging_Mkts_Challenge
    http://wiki.forum.nokia.com/index.php/Train_for_Technology_Showcase

    Abs

  3. Jailson Blum disse:

    Quero reinstalar o software do Nokia e71-3 no NSU diz que tem atualização mas não o faz por conta de autorização da operadora. Estou usando a versão 100.07.76. Quero atualizar para 110.07.127 .Tudo isso para tirar os malditos bonecos da vivo.
    Existe outra forma sem sem pelo NSU?
    Ah. Já fiz alteração do product code pelo NSS mas mesmo assim a atualização pelo NSU não funciona. Qualquer ajuda é sempre bem vinda. Obrigado.

  4. Mixter disse:

    CARA VC É MICREIRO NATO !! EMBORA A RABUGENTISSE VOCE FOI ALÉM, MEUS PARABENS EHEHEH

    0wned ;-)


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s