DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro...

53
DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA [email protected]

Transcript of DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro...

Page 1: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

DESENVOLVENDO APLICAÇÕES ANDROID COM QtSandro Andrade – KDE/[email protected]

Page 2: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

AGENDA DESTE TREINAMENTO

▸ O que é o Qt?▸ Porque utilizar o Qt no desenvolvimento para mobile?▸ Módulos do Qt voltados para mobile▸ Anatomia de uma aplica ão Qt para Androidç▸ Hello world com QML e QtQuickControls 2▸ Acessando sensores e multimídia▸ Construindo um leitor de feeds RSS▸ Comunica ão cliente-servidor via RESTfulç

Page 3: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

OLÁ!

whoamiIFBA/KDE/KDE e.V.Fale comigo em [email protected] ou @andradesandrohttp://sandroandrade.org

Page 4: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 5: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 6: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 7: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 8: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 9: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org
Page 10: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

OLÁ!

quem são vocês? :)

Page 11: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

1.O QUE É O Qt? http://www.qt.io

Page 12: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

“O Qt é um toolkit para desenvolvimento multiplataformade aplicações em diversos domínios, com foco em execução nativa, excelente desempenho e produtividade

Page 13: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

QUEM USA O Qt?

Page 14: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?

Page 15: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)

Page 16: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)

Page 17: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)

Page 18: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)EFETIVO PARA DESENVOLVIMENTO MULTIPLATAFORMA

Page 19: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)EFETIVO PARA DESENVOLVIMENTO MULTIPLATAFORMAEXCELENTE DOCUMENTA ÃO E COMUNIDADE ATIVAÇ

Page 20: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)EFETIVO PARA DESENVOLVIMENTO MULTIPLATAFORMAEXCELENTE DOCUMENTA ÃO E COMUNIDADE ATIVAÇEXCELENTE DESEMPENHO (acelera ão via hardware no QML)ç

Page 21: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)EFETIVO PARA DESENVOLVIMENTO MULTIPLATAFORMAEXCELENTE DOCUMENTA ÃO E COMUNIDADE ATIVAÇEXCELENTE DESEMPENHO (acelera ão via hardware no QML)çDIVERSAS BIBLIOTECAS DE TERCEIROS (KF5, inqlude.org)

Page 22: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAR?TECNOLOGIA MADURA (desenvolvido há 22 anos)ALTA PRODUTIVIDADE (mesmo com C++, melhor ainda com QML/JS)RICO EM FUNCIONALIDADES (47 módulos, 1647 classes)EFETIVO PARA DESENVOLVIMENTO MULTIPLATAFORMAEXCELENTE DOCUMENTA ÃO E COMUNIDADE ATIVAÇEXCELENTE DESEMPENHO (acelera ão via hardware no QML)çDIVERSAS BIBLIOTECAS DE TERCEIROS (KF5, inqlude.org)OPEN GOVERNANCE COM LICEN A DUAL (LGPL e comercial)Ç

Page 23: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt – TECNOLOGIAS PARA UI/UX

▸ QtWiddgets: C++ (oficial), Python, C#, Go Haskell, Ruby▸ QtQuick: QML + JavaScript▸ QtWebEngine: HTML + CSS + JavaScript▸ QtCharts/QtDataVisualization

Page 24: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt – TECNOLOGIAS PARA UI/UX

▸ QtWiddgets: C++ (oficial), Python, C#, Go Haskell, Ruby▸ QtQuick: QML + JavaScript▸ QtWebEngine: HTML + CSS + JavaScript▸ QtCharts/QtDataVisualization

Page 25: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

QtQuick X QtWidgets X QtWebEngine

QtQuick QtWidgets QtWebEngine

Linguagem QML/JS C++ HTML/CSS/JS

Look’n’feel nativo ✓ ✓

Look’n’feel customizado

✓ ✓ ✓

UI animadas e fluidas

✓ ✓

Suporte a touch screen

✓ ✓

Page 26: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

QtQuick X QtWidgets X QtWebEngine

QtQuick QtWidgets QtWebEngine

Widgets padrão da indústria

Model/View ✓ ✓

Prototipagem rápida de UX

✓✓ ✓ ✓

Acelera ão via çhardware

✓ ✓ ✓

Page 27: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

QtQuick X QtWidgets X QtWebEngine

QtQuick QtWidgets QtWebEngine

Efeitos gráficos (partículas, etc)

Rich text ✓ ✓

Integra ão de çconteúdo web

existente✓

Page 28: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

2.Qt E MOBILE http://www.qt.io

Page 29: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

2006Qt/Embedded + Qtopia

2006Qtopia em milhares de dispositivos (Sharp/Motorola)

2009Lan amento do QMLç

2010-2011Qt no Symbian e MeeGo

Qt MOBILE - UMA LONGA HISTÓRIA

Page 30: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

2011Projeto Necessitas (KDE) e o primeiro port do KDE para Android

2015QML Qt Location e QtQuick Controls for Embedded

2013Primeiro tech-preview oficial do suporte a Android e iOS (BlackBerry, Sailfish/Jolla e Ubuntu Mobile)

2016QtQuickControls 2, KDE Kirigami e Android services com Qt

2014API QtPurchasing multiplataforma e suporte a Bluetooth LE

Qt MOBILE - UMA LONGA HISTÓRIA

Page 31: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?

Page 32: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMAS

Page 33: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMASALTO DESEMPENHO (nativo + acelera ão via GPU)ç

Page 34: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMASALTO DESEMPENHO (nativo + acelera ão via GPU)çBOA DOCUMENTA ÃOÇ

Page 35: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMASALTO DESEMPENHO (nativo + acelera ão via GPU)çBOA DOCUMENTA ÃOÇESTÁ EM CONSTANTE EVOLU ÃO, COM FOCO NESTAS PLATAFORMASÇ

Page 36: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMASALTO DESEMPENHO (nativo + acelera ão via GPU)çBOA DOCUMENTA ÃOÇESTÁ EM CONSTANTE EVOLU ÃO, COM FOCO NESTAS PLATAFORMASÇMELHOR GERENCIAMENTO DE MEMÓRIA

Page 37: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

Qt - POR QUE USAREM PLATAFORMAS MÓVEIS?UM CODEBASE, MÚLTIPLAS PLATAFORMASALTO DESEMPENHO (nativo + acelera ão via GPU)çBOA DOCUMENTA ÃOÇESTÁ EM CONSTANTE EVOLU ÃO, COM FOCO NESTAS PLATAFORMASÇMELHOR GERENCIAMENTO DE MEMÓRIAMESMA API E FUNCIONALIDADES EM VÁRIAS VERSÕES DO ANDROID

Page 38: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

MÓDULOS DO Qt ESPECIFICAMENTE CRIADOS PARA MOBILE

Qt Bluetooth (QML e C++)Android, iOS, Linux (BlueZ 4.x/5.x) e OS X

Qt Graphical Effects (QML)

Qt Positioning (QML e C++)Android, iOS, Linux (com GeoClue) e WinRT

Qt Sensors (QML e C++)Android, iOS, SailFish e WinRT

Qt Quick Extras

Qt Android ExtrasQt Notifier

Qt Mac Extras

Page 39: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

ANATOMIA DE UMA APLICAÇÃO Qt PARA ANDROID

Page 40: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

ANATOMIA DE UMA APLICAÇÃO Qt PARA ANDROID

▸ Solu ão: QPA + JNIç▸ Uma aplica ão Qt para Android é ç

formada por duas partes:

– A aplica ão em si, criada pelo çdesenvolvedor

– Launcher da aplica ão Android, çgerada automaticamente pela IDE oficial do Qt (Qt Creator)

▸ O Qt Creator automatiza todo o processo de gera ão (e assinatura) çdo .apk

Page 41: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

ANATOMIA DE UMA APLICAÇÃO Qt PARA ANDROID

▸ Três métodos de implanta ão:ç

– Todas as dependências empacotadas no .apk

– Implanta ão baseada no servi o ç çMinistro

– Implanta ão das dependências çem diretório temporário (para fins de debugging)

Page 42: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

3.HELLO Qt ANDROID http://www.qt.io

Page 43: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

2009O QML é lan ado pelo çMatthias Etrich no Qt Dev Days em Munique

JavaScriptPrograma ão çimperativa pode ser feita com JavaScript

Baixa curva de aprendizadoÉ uma linguagem declarativa para especifica ão e çprograma ão de UIç

Pode-se integrar com C++ e Java quando/se necessário

O QtQuick é a biblioteca padrão de tipos e funcionalidades básicas do QML

Excelente desempenho devido à execu ão em GPUç

INTRODUÇÃO AO QML

Page 44: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

INTRODUÇÃO AO QML

1. import QtQuick 2.32.3. Rectangle {4. width: 2005. height: 1006. color: "red"7.8. Text {9. anchors.centerIn: parent10. text: "Hello, World!"11. }12. }

1. Rectangle {2. width: 2003. height: 1004. color: "red"5.6. Text {7. anchors.centerIn: parent8. text: "Hello, World!"9. }10.11. MouseArea {12. anchors.fill: parent13. onClicked: parent.color = "blue"14. }15. }

Page 45: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

INTRODUÇÃO AO QML - PROPERTY BINDING

1. Rectangle {2. width: 4003. height: 2004.5. Rectangle {6. width: parent.width / 27. height: parent.height8. color: "green"9. }10.11. Rectangle {12. width: parent.width / 213. height: parent.height14. x: parent.width / 215. color: "red"16. }17. }

Page 46: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

METAS:

LAB 1 – MINI BROWSER

▸ Uso do módulo WebView▸ Prática com âncoras e layouts▸ Property bindings▸ Signals e handlers▸ Ícones e fontes

Page 47: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

METAS:

LAB 2 – ACESSANDO O ACELERÔMETRO E SENSOR DE PROXIMIDADE

▸ Prática com sensores▸ Tratando diferentes densidades de pixels▸ Anima ões de propriedadesç▸ Attached properties e signal handlers

Page 48: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

METAS:

LAB 3 – ACESSANDO A CÂMERA

▸ Uso do módulo de multimídia

Page 49: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

METAS:

LAB 4 – CONSTRUINDO UM LEITOR DE FEEDS RSS

▸ Prática com Model-View▸ Acesso remoto via XmlListModel▸ Navigation Drawer

Page 50: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

METAS:

LAB 5 – CONSTRUINDO UMA APLICAÇÃO CLIENTE-SERVIDOR COM RESTful

▸ WebServices com RESTful▸ Acesso remoto via JSONListModel▸ SwipeView e StackView

Page 51: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

QML ROCKS!

Grandes casos de sucesso já estão por aí

Page 52: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

ALGUMAS DICAS

Documenta ãoçConsulte e confie na documenta ão do Qtç

Arquitetura ainda é importanteMuitos projetos QML sofrem de problemas arquiteturais

Aprenda os fundamentosProperty bindings, signals e handlers, propriedades, etc

C++ ainda é importanteQML é uma tecnologia para UI/UX

Dê tempo ao tempoDemora um tempinho até você aprender a pensar de forma declarativa

Não abuse de bindingsOu sua aplica ão terá çproblemas de desempenho

Page 53: DESENVOLVENDO APLICAÇÕES ANDROID COM Qt · DESENVOLVENDO APLICAÇÕES ANDROID COM Qt Sandro Andrade – KDE/IFBA sandroandrade@kde.org

OBRIGADO!

Perguntas?Sandro Andrade – KDE/[email protected]