Olá pessoal!
Com os recentes acontecimentos do mundo das coorporações, muitas preocupações vêem tirando o sono de muita gente quanto ao futuro do Qt para mobile. Com a parceria Nokia-Microsoft, o Windows Phone 7 definitivamente terá um lugar de destaque dentro das prioridades da empresa finlandesa, enquanto informações dúbias quanto aos investimentos open source da Nokia, como Symbian e Meego, fizeram com que a comunidade Qt lançasse um alerta geral, desde possíveis forks até premonições apocalípticas.
Mas como sempre, a comunidade é a luz da própria comunidade. Recentemente foi anunciado um port do Qt para Android, feito por um desenvolvedor nas horas vagas. O Necessitas, criado por Bogdan Vatra, trouxe um completo sistema de iluminação para aqueles que não viam luz no fim do tunel :). E como o Qt é a tecnologia principal para o KDE, a comunidade não poderia deixar de conhecer como foi o processo de concepção da tecnologia.
Aqui vai a entrevista com Bogdan Vatra, da série Behind KDE Platforms, realizada por Pau Garcia i Quiles, auxiliado por Mario del Pozo e Jonathan Riddell e traduzida/revisada para português pelos membros do KDE-PI:
Introdução
Olá Bogdan, estamos felizes com esta conversa. Por favor, fale-nos um pouco sobre você.
Olá a todos. Eu sou Bogdan Daniel Vatra, quase 31 anos de idade, estou trabalhando e vivendo em Brasov, Romênia, com minha adorável esposa e meu maravilhoso filho.
Como e quando você começou com Qt para Android?
Em junho de 2009 eu fui contratado pela Route 66 como um desenvolvedor Linux.
Pouco depois disso, começamos a portar nossa engine para a plataforma Android, cujo SDK requer que os programadores trabalhem em Java. Mas não usávamos o Java para nossa engine! Nosso produto é em C/C++, então tivemos que fazer muito trabalho “sujo”: clonamos todo o sistema operacional Android, o compilamos, pegamos as ferramentas e criamos nosso próprio “Native Development Kit” e começamos a portar a engine. Em um período surpreendentemente curto e de maneira muito fácil conseguimos fazer a engine rodar no Android. Isso aconteceu antes do Google liberar o primeiro Native Development Kit, que permite o uso de C++ na programação para Android.
Me apaixonei imediatamente pelo Android, mas hmmm… tinha algo errado… parecia que faltava alguma coisa, algo muito importante, que era o framework Qt, meu framework favorito! Então, quando eu tive tempo, em Dezembro de 2009, fiz minhas primeiras tentativas. Depois de um mês eu estava vendo as primeiras imagens geradas por Qt no emulador do Android. Foi fantástico!
Quanto tempo tem o projeto Qt on Android? Quem começou?
Eu comecei o port do Qt para Android no final de 2009. Quando eu comecei o nome era android-lighthouse mas tive que mudar o nome para “Necessitas” pouco antes do release do SDK, já que a Nokia e Google não permitiriam eu usar os nomes Qt e/ou Android.
Lighthouse, um projeto iniciado pela Nokia, me ajudou muito. Facilitou muito minha vida, as mudanças que tive que fazer foram apenas em um pequeno conjunto de código na árvore do Qt. A “maior mudança” foi adicionar outra implementação de memória compartilhada no ashmem.
Corporações são superprotetoras com suas marcas. 🙂 Estou curioso, qual o significado de “Necessitas”?
“Necessitas” vem do latin, a deusa romana da necessidade¹. Significa literalmente necessidade. A palavra também tem mais alguns significados profundos e poderosos.
¹ A deusa grega equivalente, ja que o panteao romano é um “espelho” do panteao grego, é Ananke (ou Anance). (N.do T)
Desenvolvimento
O que você faz hoje com Qt Android?
Muita coisa 🙂
Atualmente estou focado em terminar o pacote de instalação do Ministro, terminando a integração do Qt Creator com o framework Qt e tentando encontrar soluções para questões maiores (como suporte à OpenGL).
Quem quiser ajudar pode dar uma olhada na nossa lista de tarefas.
Aliás, “Ministro” também é uma palavra latina e também tem um significado bem legal: “atender, servir²”.
² Sarcasmo com a politica brasileira mode-on. (N.do T)
Você está sendo pago por este trabalho ou você faz em seu tempo livre?
Meu trabalho é resultado de pura paixão e amor pelo software livre. Estou muito feliz por tê-lo feito, por que não fui forçado por ninguém a fazer algo que não queria.
Quantas horas você dedicou ao Qt e ao SDK Qt para desenvolvimento no Android?
Não sei exatamente. Acho que mais que 200-300.
Quantas horas você geralmente gasta fazendo desenvolvimento FLOSS numa semana?
Depende, geralmente 5-10.
Usuários
Suponhamos que sou um programador Qt ou programdor Android e quero fazer uma aplicação. O que faço primeiro?
É muito facil, você deve baixar o SDK, instalá-lo e aproveitar. É como fazer qualquer aplicação Qt.
Atualmente o SDK é instalável apenas em plataformas GNU/Linux.
Há planos para portar o SDK para Windows, Mac ou outras plataformas?
Alguém entrou em contato perguntando sobre um port para Windows, para experimentar.
Pessoalmente eu não tenho tempo o suficiente para fazê-lo, mas ficarei muito feliz de aceitar contribuições de outras pessoas.
Que versões do Qt, Qt Creator e etc são atualmente suportados?
O SDK é baseado no já proximo Qt 4.8.0, Qt Creator 2.2 e Qt Mobility 1.2.
Nossa, você realmente está a par dos últimos releases. Quanto tempo irá demorar depois do lançamento oficial dos Qt 4.8.0, Qt Creator 2.2 and Qt Mobility 1.2 para ter o Qt SDK para Android? Um dia? Uma semana, um mês?
Provavelmente 1-2 semanas.
O quão diferente é o Android daquilo que o desenvolvedor mediano de Qt C++ está acostumado?
Na verdade não há, ou não deveria ter, diferença alguma. Ao menos foi isso o que tentei alcançar.
Primeiramente você deve configurar o Qt Creator. Depois disso não deve ser mais complicado criar aplicações Android do que criar aplicações desktop.
Há alguns passos adicionais a fazer mas todos são bem suportados pelo Qt Creator.
Então o Qt SDK para Android usa o QMake, certo?
Sim, para compilar a parte em C++.
Que linguagens esse release do Qt SDK suporta?
Por enquanto, apenas C++.
Há planos para portar o Qt Jambi para Android?
Eu não tenho.
Talvez isso mude depois do anúncio do lançamento? (Vi muitos artigos sobre o Necessitas! Parabéns!)
Veremos…. Obrigado.
Funcionalidades
O quão completo está o port do Qt para o Android? Existem partes faltando?
Existem partes ausentes como OpenGL, integração com o menu, estilos, etc. Esperamos que neste release mais pessoas se juntem a nós e ajudem-nos a terminar.
Nomeando:
- OpenGL é a parte mais complexa agora, o Qt precisa de uma nova superficie OpenGL para cada widget de nível alto (caixa drop-down, um menu, etc), o problema é na plataforma Android, usando as APIs oficiais, não tenho controle na Z-order dessas superficies (SurfaceView), então preciso encontrar uma outra maneira de fazê-lo. Pessoas entraram em contato comigo e disseram ter interesse em trabalharem juntas nesse problema. Espero que encontremos uma solução em breve.
- Plugin de estilos. Esta é a próxima grande coisa. Por enquanto, todas as aplicações Qt parecem estranhas no Android, então devemos criar um plugin de estilos, no qual iria cuidar de toda as informações de estilização do sistema Android e colocá-los em aplicações Qt. Esta é uma tarefa de complexidade média (nem fácil, nem difícil) mas que terá um impacto visual fantástico.
- Menus. Esta tarefa é média-difícil. Para completar esta tarefa devemos fazer algumas mudanças no Qt. Eu entrarei em mais detalhes quando tivermos uma API para isso.
Como sempre, você pode consultar nossa lista de tarefas.
Este release do SDK Qt inclui as APIs do Qt Mobility ?
Ainda não. Infelizmente eu não tive tempo de incluí-lo, mas espero que no próximo release eu tenha graças a ajuda de outros contribuidores.
Quando você pretende fazer o próximo release?
Daqui a umas 2-3 semanas.
E quanto ao Phonon e o Qt Multimedia?
Como eu disse antes, os contribuidores estão fazendo um ótimo trabalho!
O Qt no desktop suporta vários sistemas gráficos, cada um deles com suas vantagens e desvantagens. No Android, os sistemas gráficos 2D são baseados na biblioteca Skia, do Google. Que sistemas graficos o Qt Android suporta?
O plugin da plataforma Android está usando o engine de renderização do Qt (que é muito bom).
Por enquanto, há planos de mover para o Skia. Eu não espero uma melhora considerável de desempenho, já que na minha opinião o sistema do Qt é um dos melhores do mundo.
Os gráficos 2D e 3D são acelerados quando usando o Qt no Android?
Não, ainda não. Quando acharmos uma solução para o OpenGL, tudo será feito via OpenGL.
Porque o OpenGL é um problema? O Android NDK não dá acesso a ele?
Provêem acesso mas como eu disse antes, há (grandes) limitações.
Existe suporte para QML no Android?
Sim, existe sim!
Em quê o SDK Qt para Android é melhor do que o SDK oficial do Java e/ou os NDKs de C++?
Este SDK é focado em trazer o Qt ao Android. Ele depende e usa o SDK e NDK oficial do Android.
Graças à integração com o Qt Creator, criar, gerenciar, compilar e debugar aplicações Qt é um passeio no parque.
Também estou planejando acrescentar suporte para aplicações não-Qt. Eles terão que usar o sistema de construção do QMake e, provavelmente, uma parte em Java.
Há planos para acrescentar suporte ao CMake?
Bem, esse é complicado.
O suporte ao CMake do Qt Creator não é um dos melhores e seria muito difícil.
Estou usando o CMake para outros projetos mas estou usando-o junto com o KDevelop. Aliás, parabéns aos desenvolvedores do KDevelop, adoro os trabalhos que eles fazem.
Eu espero que alguém da Nokia ressuscite os planos de se afastar do QMake.
Sobre IDEs, o quanto o Qt Creator é melhor que o Eclipse?
Enquanto o Eclipse não tem suporte ao Android, Qt Creator (versão Necessitas) vem com um suporte de Qt para Android de primeira linha.
Você tem tudo que é preciso para fazer aplicações Qt para plataformas Android.
Realmente acredito que o Qt Creator é a melhor opção para o Qt no Android, porque apresenta um melhor suporte C/C++. Também acredito que a experiência de debug é (será) melhor. Por exemplo, usando Qt Creator você pode debugar a partir da primeira linha de código.
O SDK do Qt para o Android tem suporte ao emulador do Android?
Claro, suporta qualquer emulador/dispositivo Android.
O SDK o instala? Ou você necessita configurar manualmente?
O Qt SDK para Android instala apenas o framework Qt e o Qt Creator, ele não instala o SDK e NDK Android. Nós provemos instruções para instalar o SDK e o Qt Creator.
Há “perfis” pré-configurados para desenvolver para telefones mais populares? (digamos o Nexus One do Google, o Samsung Galaxy S, HTC Desire, etc)
Não, neste momento não.
Pode-se debugar e executar aplicações em um dispositivo Android pelo QtCreator?
Sim, claro que pode!
Ótimo! O quão dificil é fazer o debug funcionar no Android?
O suporte a debug usa gdbserver com uma parte especial em Java, que garante que você conseguirá debugar a partir da primeira linha de código em C++. Esta parte é bem integrada com o Qt Creator ( Qt Creator passa alguns parâmetros especiais para a aplicação informando que o Qt Creator espera que sua aplicação rode em modo de debug), e faz toda a mágica: inicia o gdbserver e o vincula ao identificador correspondente do processo, assim a execução de suas aplicações para e espera pacientemente pelo Qt Creator se conectar com o gdbserver.
Falemos do sistema de construção: que sistema de build devemos usar ao desenvolver as aplicações? O QMake do Qt? O Apache Ant?
Na verdade, ambos.
O SDK do Qt usa o QMake para sua parte C++ e Ant para a parte Java. Usando Qt Creator, o último será transparente ao usuário.
Significa então que o Qt SDK para Android combina uma parte em C++ que usa o QMake e uma parte em Java que usa o Ant?
Sim. Toda aplicação Android que usa codigo nativo (C/C++) contém as duas partes.
A primeira parte é a aplicação C/C++. Para essa metade, o Necessitas usa o QMake e compila.
A segunda parte é o Java. Para esta metade, o Necessitas usa o Ant para compilar e criar o pacote. A partir do Android 2.3 você pode criar apenas aplicações nativas, mas você ainda necessita do Ant para criar o pacote.
Integração
Como é o suporte para diferentes resoluções, tamanhos de tela, celulares (3” e 4”) e tablets (7” e 10”)?
Qt suporta várias resoluções e tamanhos. Sua aplicação deve ter cuidado onde e como usá-los.
Você quer dizer que não há nada de especial no Android neste quesito.
Sim. Não é legal?
Sensores (giroscópios, acelerômetros, etc) e os serviços do Android (contatos, calendário, email, etc) são suportados?
Tudo isso estará acessível pela API do Qt Mobility. Vamos torcer para que o Qt Mobility esteja fazendo parte do próximo release.
Que sistemas de entrada as aplicações Qt para Android usam?
Teclado, gestos e multitouch são suportados.
Acredito que alguém estava trabalhando no suporte a voz.
É possivel desenvolver widgetts Android usando Qt?
Ainda não. Vamos torcer pra ser apenas um “ainda”.
Pode-se combinar código Qt com código Android? É difícil?
Sim, você pode combinar código Qt com Android. Não é muito difícil mas não recomendo. Eu preferiria que o pessoal se focasse no port do Qt Mobility!
Isto está documentado em algum lugar?
Apenas na lista de email qt-android. Tentaremos criar uma seção de FAQs na página do sourceforge.
Quando tentamos instalar uma aplicação no Android, somos advertidos sobre as permissões que daremos as aplicações nos nossos aparelhos, como acesso a internet, contatos, SMS, chamadas, etc. Como está essa integração?
Sim, você precisa configurar as permissões das aplicações. Você irá achar o Qt Creator bem util para esse trabalho.
Aplicações e Mercado
Qt no Android foi anunciado há poucos dias. Você conhece alguma aplicação que ja foi feita ou algum port para o Android?
Em principio, qualquer aplicação Qt (exceto aplicações OpenGL) pode ter seu port para o Android.
Se esta aplicação usa apenas o framework Qt (exceto OpenGL e Qt Multimedia) deverá funcionar.
Você não tem que fazer nada em especial, mas como dito antes eu não recomento às pessoas lançarem suas aplicações no Android Market ainda, elas devem ser pacientes e esperar atá a API estar estável.
Recentemente algumas pessoas tentaram colocar aplicações baseadas em Qt para Macintosh através da Apple Mac Store e encontraram alguns problemas que estão sendo trabalhados, ou usaram algumas soluções. Você vê algum problema em aplicações serem aceitas no Android Market? Até que ponto elas são mais pesadas que aplicações usando os SDKs oficiais?
Antes de mais nada, Google não é Apple. A Apple se tornou uma empresa muito maléfica e egoísta (mais que a Microsoft). Google é completamente diferente e acho que pessoas compararem as duas companhias é insultar o Google.
Na verdade a razão principal para começar e continuar este port é o fato do Google ter feito um ótimo SO livre.
Não tive problema algum em implantar aplicativos Qt no Android Market. Eu implantei um demo Qt para testar o Ministro. Muito fácil e foi muito prazeroso.
Contribuidores
Quantos desenvolvedores estão trabalhando no Qt e no Qt SDK para Android?
O framework Qt, Qt Creator e Ministro (infelizmente) foram feitos 99% por mim, apesar de detestar trabalhar sozinho. Esses três componentes são parte do SDK que liberei.
A documentação no sourceforge.net foi escrita por Damien Buhl. Ele também ajudou muito em responder dúvidas das pessoas. Muito obrigado, Damien! Muito feliz por ter trabalhado com você!
A equipe Elektobit começaram uns meses atrás com o port do Qt Mobility. Agora eu estou esperando eles modificarem seu trabalho de acordo com a política de licença do Necessitas. Depois disso, estarei muito feliz de acrescentar suas contribuições para o SDK Qt para Android.
E claro, quero que mais programadores juntem-se a nós.
Tenho certeza que vários de nossos leitores querem contribuir e devem estar pensando em se juntarem. Você poderia lhes dar algum direcionamento?
Estamos usando o modelo de contribuição do Qt. Siga o link e você tera toda a informação necessária para se tornar um contribuidor.
Basicamente o programador precisa:
- Ir no repositório oficial do Qt para Android.
- Criar um clone pessoal no gitorious.
- Tomar uma tarefa e nos informar.
- Completar a tarefa.
- Criar um merge request.
Futuro
No último FOSDEM, IcedRobot, uma iniciativa para levar a API Android para Linux desktop (sem a Dalvik VM) foi anunciada. Você tentou usar o SDK Qt com ele?
Não.
Desenvolvedores KDE fizeram muito esforço em portar o KDE para Maemo e Meego. Há planos de portar KDE, etc para o Android?
Não sei, KDE é meu desktop padrão (e favorito). Seria legal ver aplicações KDE no meu telefone.
O que você acha da parceria estratégica Nokia-Microsoft?
Eu ainda não consigo acreditar que a Nokia cedeu Navteq, que é na minha humilde opinião o ativo mais precisoso que a Nokia tinha, para a Microsoft. Pra que? Pro Bing e pro pior sistema operacional móvel por ai?
Ainda não acredito que escolheram a Microsoft em vez da Intel e o Windows Phone ao invés do Meego.
Você está preocupado com o futuro do Qt?
Não. Acho que o Qt está seguro graças a licensa (L)GPL.
Na sua opinião, quais os maiores desafios que o Qt para Android enfrenta?
Por enquanto, o suporte a OpenGL.
Colaboração
Qt foi originalmente uma biblioteca centrada em desktop, apesar do Qtopia. Em 2008, a Nokia adquiriu a Trolltech e vimos um impulso em sua interface mobile, com ports oficiais para o Symbian, Maemo e Meego e ports não oficiais para iPhone, webOS, Android, Kindle, etc. Há alguma colaboração entre as pessoas que estão fazendo ports não oficiais para plataformas mobile? Quão diferentes são os problemas que cada um enfrenta ?
Até onde eu saiba, não há informações sendo compartilhadas, provavelmente por que são plataformas completamente diferentes.
Ainda assim, acho que a maioria dos ploblemas que esses ports enfretam são os mesmos e talvez uma lista de email do qt-lighthouse, onde pessoas podem falar sobre funcionalidades ausentes, problemas, etc, poderia ser útil?
Sim, uma lista do qt-lighthouse seria útil, mas não uma lista qt-android (ou qt-qualquer-nome).
Achei a API Lighthouse bem fácil e intuitiva, então provavelmente você não precisaria de muita informação extra.
Thiago Macieira, Gerente de Produtos Qt, disse recentemente na lista qt-interest que a Nokia quer trabalhar com você para integrar Qt Android no mainline do Qt 4.8. Poderia nos dizer mais sobre isso?
Fiquei muito surpreso com a colocação do Thiago e realmente espero que trabalhemos juntos para terminar este projeto. Prometo dar meu melhor para ver o Qt no Android.
Vida pessoal
Não é segredo que cônjuges de programadores de open source geralmente acham que gastamos muito tempo em frente a um computador em nosso hobby. O que sua esposa acha do seu envolvimento com o projeto?
Ela entende e apóia, e sou muito grato por isso.
Na verdade, não gastei muito tempo nesse port, eu gastei um tempo mas espero que não demais! 😉
Você está envolvido em outros projetos open source?
Sim, tambem sou autor do eXaro e outros projetos pequenos.
Além do Qt, que outros passatempos você tem?
Música, filmes, academia, tudo aquilo que me faz sentir-me bem.
Onde você vê você (e sua familia), Qt e Qt no Android nos próximos 5 anos?
Boa pergunta, eu gosto de viver o presente e não penso em tanto tempo a frente. 🙂
Agradecimentos
Há algo que você gostaria de acrescentar?
Quero mandar um grande obrigado para o pessal do Elektobit por seu trabalho maravilhoso para o QtMobility e para a equipe de documentação do Necessitas.
Link para o texto original em inglês: http://www.behindkde.org/node/925