This page contains details about Google Summer of Code 2011 project "QGIS mobile" THIS INFORMATION MIGHT BE OUTDATED, FOR THE CURRENT DEVELOPMENTS of QGIS on Android, please visit http://android.qgis.org

Here's the project page on GSoC 2011 site.

I created a public repository on GitHub https://github.com/qgis/qgis-android and all my weekly reports are at http://opengis.ch

Goal

The idea is to Port QGIS to Android and improve the GUI for using it on a Tablet PC. Qt, the base library of QGIS has already been ported to Android recently under the name Necessitas. A QT libs manager for android already exists as well under the name Ministro.
QGIS mobile should be finally packaged as an .apk pakage for easy distribution.

See also:

Timeline

Until midterm

The first part of the project would be dedicated to get all the other required libraries for building QGIS compiled for Android and to get a standard Qgis running under Android.

After midterm

The second part would then be dedicated to the UI improvement (based on a user case?) for using QGIS with a touchscreen interface, this would be a first version of QGIS Mobile.

GPS integration

Of utter importance is the integration of the mobile GPS device. This should be implemented using qgsGpsConnection, gpsNmeaConnection and qgsGpsDConnection

See also:

In case of extra time

A third part, depending on the difficulty of the two first parts (or as part of a future project), would be to create a prototype for an optimized UI for smaller Android devices with basic functionality.

Libraries Porting

these libraries need to be ported to Android.

I wrote scripts that do all the work, they are located in the scripts folder of the github repo

proj

Done using version 4.7.0

geos

Done using version 3.2.2

See also:

sqlite

Done using version 3.7.4

See also:

qwt

Done using version 5.2.0 and necessitas

See also:

gdal

Done using version 1.8.0

See also:
http://trac.osgeo.org/gdal/wiki/BuildingForAndroid

expat

Done using version 2.0.1

Compile QGIS

Current problems

This are the problems i'm currently dealing with:

real casts to double in ARM arch (SOLVED)

http://doc.qt.nokia.com/latest/qtglobal.html#qreal-typedef if the arm architecture checks of necessitas/Android/Qt/4762/armeabi/include/QtCore/qglobal.h are removed then it goes on.
Do we need to replace all instances of double with qreal? workaround is to typedef qreal to double in QtCore/qglobal.h, defining QT_COORD_TYPE should also do it bu seems no to work.

Undefined symbols (SOLVED)

Is it connected to qreal problem?

 <nowiki>

Linking CXX shared library /home/marco/apps/qgis-android/libs/armeabi-v7a/libqgis_core.so
CMakeFiles/qgis_core.dir/symbology-ng/qgslinesymbollayerv2.cpp.o: In function `QgsSimpleLineSymbolLayerV2::startRender(QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:62: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:65: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:78: undefined reference to `QPen::setDashPattern(QVector<double> const&)'
CMakeFiles/qgis_core.dir/symbology-ng/qgslinesymbollayerv2.cpp.o: In function `QgsSimpleLineSymbolLayerV2::renderPolyline(QPolygonF const&, QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:110: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:111: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgslinesymbollayerv2.cpp.o: In function `QgsLineDecorationSymbolLayerV2::startRender(QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp:620: undefined reference to `QColor::setAlphaF(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsmarkersymbollayerv2.cpp.o: In function `QgsSimpleMarkerSymbolLayerV2::startRender(QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:82: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:83: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:87: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:93: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:94: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:98: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:136: undefined reference to `QMatrix::scale(double, double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:142: undefined reference to `QMatrix::rotate(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsmarkersymbollayerv2.cpp.o: In function `QgsSimpleMarkerSymbolLayerV2::renderPoint(QPointF const&, QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:383: undefined reference to `QMatrix::translate(double, double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:390: undefined reference to `QMatrix::scale(double, double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:396: undefined reference to `QMatrix::rotate(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsmarkersymbollayerv2.cpp.o: In function `QgsSvgMarkerSymbolLayerV2::renderPoint(QPointF const&, QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:561: undefined reference to `QPainter::rotate(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:581: undefined reference to `QPainter::setOpacity(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsmarkersymbollayerv2.cpp.o: In function `QgsFontMarkerSymbolLayerV2::renderPoint(QPointF const&, QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:784: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:798: undefined reference to `QPainter::scale(double, double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp:802: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsfillsymbollayerv2.cpp.o: In function `QgsSimpleFillSymbolLayerV2::startRender(QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:55: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:62: undefined reference to `QMatrix::scale(double, double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:70: undefined reference to `QColor::setAlphaF(double)'
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:73: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsfillsymbollayerv2.cpp.o: In function `QgsSVGFillSymbolLayer::startRender(QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:212: undefined reference to `QTransform::scale(double, double)'
CMakeFiles/qgis_core.dir/symbology-ng/qgsfillsymbollayerv2.cpp.o: In function `QgsSVGFillSymbolLayer::renderPolygon(QPolygonF const&, QList<QPolygonF>*, QgsSymbolV2RenderContext&)':
/home/marco/dev/qgis/src/core/symbology-ng/qgsfillsymbollayerv2.cpp:263: undefined reference to `QTransform::rotate(double, Qt::Axis)'
CMakeFiles/qgis_core.dir/qgsdiagram.cpp.o: In function `QgsDiagram::setPenWidth(QPen&, QgsDiagramSettings const&, QgsRenderContext const&)':
/home/marco/dev/qgis/src/core/qgsdiagram.cpp:11: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/qgsdiagram.cpp:15: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/qgsdiagram.cpp.o: In function `QgsTextDiagram':
/home/marco/dev/qgis/src/core/qgsdiagram.cpp:49: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/qgsdiagram.cpp:49: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/qgslabel.cpp.o: In function `QgsLabel::renderLabel(QgsRenderContext&, QgsPoint, QString, QFont, QPen, int, int, double, double, double, int, int, int)':
/home/marco/dev/qgis/src/core/qgslabel.cpp:423: undefined reference to `QPainter::scale(double, double)'
/home/marco/dev/qgis/src/core/qgslabel.cpp:424: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/qgsmaprenderer.cpp.o: In function `QgsMapRenderer::render(QPainter*)':
/home/marco/dev/qgis/src/core/qgsmaprenderer.cpp:491: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/qgspallabeling.cpp.o: In function `QgsPalLayerSettings::readFromLayer(QgsVectorLayer*)':
/home/marco/dev/qgis/src/core/qgspallabeling.cpp:293: undefined reference to `QFont::setPointSizeF(double)'
CMakeFiles/qgis_core.dir/qgspallabeling.cpp.o: In function `QgsPalLabeling::drawLabelCandidateRect(pal::LabelPosition*, QPainter*, QgsMapToPixel const*)':
/home/marco/dev/qgis/src/core/qgspallabeling.cpp:1201: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/qgspallabeling.cpp.o: In function `QgsPalLabeling::drawLabel(pal::LabelPosition*, QPainter*, QFont const&, QColor const&, QgsMapToPixel const*, double, QColor const&, bool)':
/home/marco/dev/qgis/src/core/qgspallabeling.cpp:1256: undefined reference to `QPainter::rotate(double)'
/home/marco/dev/qgis/src/core/qgspallabeling.cpp:1260: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/qgspallabeling.cpp.o: In function `QgsPalLabeling::drawLabelBuffer(QPainter*, QString, QFont const&, double, QColor)':
/home/marco/dev/qgis/src/core/qgspallabeling.cpp:1292: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/qgsvectorlayer.cpp.o: In function `QgsVectorLayer::drawFeature(QgsRenderContext&, QgsFeature&, QImage*)':
/home/marco/dev/qgis/src/core/qgsvectorlayer.cpp:4286: undefined reference to `QPainter::scale(double, double)'
/home/marco/dev/qgis/src/core/qgsvectorlayer.cpp:4301: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerarrow.cpp.o: In function `QgsComposerArrow::initGraphicsSettings()':
/home/marco/dev/qgis/src/core/composer/qgscomposerarrow.cpp:54: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerarrow.cpp.o: In function `QgsComposerArrow::drawSVGMarker(QPainter*, QgsComposerArrow::MarkerType, QString const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposerarrow.cpp:205: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerarrow.cpp.o: In function `QgsComposerArrow::setOutlineWidth(double)':
/home/marco/dev/qgis/src/core/composer/qgscomposerarrow.cpp:248: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerarrow.cpp.o: In function `QgsComposerArrow::readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposerarrow.cpp:320: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:54: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:54: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:72: undefined reference to `QGraphicsRectItem::QGraphicsRectItem(double, double, double, double, QGraphicsItem*, QGraphicsScene*)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:78: undefined reference to `QTransform::translate(double, double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:84: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:72: undefined reference to `QGraphicsRectItem::QGraphicsRectItem(double, double, double, double, QGraphicsItem*, QGraphicsScene*)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:78: undefined reference to `QTransform::translate(double, double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:84: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::_readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:234: undefined reference to `QGraphicsItem::setZValue(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:253: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::mousePressEvent(QGraphicsSceneMouseEvent*)':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:343: undefined reference to `QTransform::translate(double, double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:347: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:348: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::changeItemRectangle(QPointF const&, QPointF const&, QGraphicsRectItem const*, double, double, QGraphicsRectItem*)':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:573: undefined reference to `QTransform::translate(double, double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:592: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::setSceneRect(QRectF const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:724: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::drawText(QPainter*, double, double, QString const&, QFont const&) const':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:755: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritem.cpp.o: In function `QgsComposerItem::drawText(QPainter*, QRectF const&, QString const&, QFont const&, Qt::AlignmentFlag, Qt::AlignmentFlag) const':
/home/marco/dev/qgis/src/core/composer/qgscomposeritem.cpp:770: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposeritemgroup.cpp.o: In function `QgsComposerItemGroup':
/home/marco/dev/qgis/src/core/composer/qgscomposeritemgroup.cpp:25: undefined reference to `QGraphicsItem::setZValue(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposeritemgroup.cpp:25: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerlabel.cpp.o: In function `QgsComposerLabel':
/home/marco/dev/qgis/src/core/composer/qgscomposerlabel.cpp:27: undefined reference to `QFont::setPointSizeF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerlabel.cpp:27: undefined reference to `QFont::setPointSizeF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerpicture.cpp.o: In function `QgsComposerPicture::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*)':
/home/marco/dev/qgis/src/core/composer/qgscomposerpicture.cpp:78: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposermap.cpp.o: In function `QgsComposerMap::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*)':
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:289: undefined reference to `QPainter::rotate(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:291: undefined reference to `QPainter::scale(double, double)'
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:331: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposermap.cpp.o: In function `QgsComposerMap::readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:794: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposermap.cpp.o: In function `QgsComposerMap::drawAnnotation(QPainter*, QPointF const&, int, QString const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:1106: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposermap.cpp.o: In function `QgsComposerMap::setGridPenWidth(double)':
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:1249: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposermap.cpp.o: In function `QgsComposerMap::drawCanvasItem(QGraphicsItem*, QPainter*, QStyleOptionGraphicsItem const*)':
/home/marco/dev/qgis/src/core/composer/qgscomposermap.cpp:1566: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposertable.cpp.o: In function `QgsComposerTable::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*)':
/home/marco/dev/qgis/src/core/composer/qgscomposertable.cpp:104: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerscalebar.cpp.o: In function `QgsComposerScaleBar::applyDefaultSettings()':
/home/marco/dev/qgis/src/core/composer/qgscomposerscalebar.cpp:127: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerscalebar.cpp:132: undefined reference to `QFont::setPointSizeF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerscalebar.cpp.o: In function `QgsComposerScaleBar::readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposerscalebar.cpp:331: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposershape.cpp.o: In function `QgsComposerShape::paint(QPainter*, QStyleOptionGraphicsItem const*, QWidget*)':
/home/marco/dev/qgis/src/core/composer/qgscomposershape.cpp:55: undefined reference to `QPainter::rotate(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposershape.cpp.o: In function `QgsComposerShape::readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposershape.cpp:115: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposershape.cpp.o: In function `QgsComposerShape::setLineWidth(double)':
/home/marco/dev/qgis/src/core/composer/qgscomposershape.cpp:166: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposershape.cpp.o: In function `QgsComposerShape::initGraphicsSettings()':
/home/marco/dev/qgis/src/core/composer/qgscomposershape.cpp:214: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerlegend.cpp.o: In function `QgsComposerLegend':
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:42: undefined reference to `QFont::setPointSizeF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:43: undefined reference to `QFont::setPointSizeF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:44: undefined reference to `QFont::setPointSizeF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:45: undefined reference to `QFont::setPointSizeF(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:42: undefined reference to `QFont::setPointSizeF(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerlegend.cpp.o:/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:43: more undefined references to `QFont::setPointSizeF(double)' follow
CMakeFiles/qgis_core.dir/composer/qgscomposerlegend.cpp.o: In function `QgsComposerLegend::drawSymbolV2(QPainter*, QgsSymbolV2*, double, double&, double&, int) const':
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:427: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposerlegend.cpp.o: In function `QgsComposerLegend::drawPointSymbol(QPainter*, QgsSymbol*, double, double&, double&, int) const':
/home/marco/dev/qgis/src/core/composer/qgscomposerlegend.cpp:472: undefined reference to `QPainter::scale(double, double)'
CMakeFiles/qgis_core.dir/composer/qgspaperitem.cpp.o: In function `QgsPaperItem::initialize()':
/home/marco/dev/qgis/src/core/composer/qgspaperitem.cpp:131: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:37: undefined reference to `QGraphicsItem::setZValue(double)'
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:37: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::readXML(QDomElement const&, QDomDocument const&)':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:219: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::addItemToZList(QgsComposerItem*)':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:254: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::alignSelectedItemsLeft()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:400: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::alignSelectedItemsHCenter()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:431: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::alignSelectedItemsRight()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:462: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::alignSelectedItemsTop()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:492: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::alignSelectedItemsVCenter()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:521: undefined reference to `QTransform::translate(double, double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o:/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:550: more undefined references to `QTransform::translate(double, double)' follow
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::updateZValues()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:571: undefined reference to `QGraphicsItem::setZValue(double)'
CMakeFiles/qgis_core.dir/composer/qgscomposition.cpp.o: In function `QgsComposition::loadGridAppearanceSettings()':
/home/marco/dev/qgis/src/core/composer/qgscomposition.cpp:731: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o: In function `QgsRasterLayer::legendAsPixmap(bool)':
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1331: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1334: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1337: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1365: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1371: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o:/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1411: more undefined references to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)' follow
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o: In function `QgsRasterLayer::legendAsPixmap(bool)':
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1529: undefined reference to `QMatrix::scale(double, double)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1534: undefined reference to `QMatrix::scale(double, double)'
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o: In function `QgsRasterLayer::legendAsPixmap(int)':
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1620: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1626: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1668: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1681: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1695: undefined reference to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)'
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o:/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1711: more undefined references to `QPen::QPen(QBrush const&, double, Qt::PenStyle, Qt::PenCapStyle, Qt::PenJoinStyle)' follow
CMakeFiles/qgis_core.dir/raster/qgsrasterlayer.cpp.o: In function `QgsRasterLayer::legendAsPixmap(int)':
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1778: undefined reference to `QMatrix::scale(double, double)'
/home/marco/dev/qgis/src/core/raster/qgsrasterlayer.cpp:1782: undefined reference to `QMatrix::scale(double, double)'
CMakeFiles/qgis_core.dir/renderer/qgscontinuouscolorrenderer.cpp.o: In function `QgsContinuousColorRenderer::renderFeature(QgsRenderContext&, QgsFeature&, QImage*, bool, double)':
/home/marco/dev/qgis/src/core/renderer/qgscontinuouscolorrenderer.cpp:134: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/renderer/qgscontinuouscolorrenderer.cpp:158: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/renderer/qgscontinuouscolorrenderer.cpp:168: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/renderer/qgsgraduatedsymbolrenderer.cpp.o: In function `QgsGraduatedSymbolRenderer::renderFeature(QgsRenderContext&, QgsFeature&, QImage*, bool, double)':
/home/marco/dev/qgis/src/core/renderer/qgsgraduatedsymbolrenderer.cpp:192: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/renderer/qgsgraduatedsymbolrenderer.cpp:205: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/renderer/qgsrenderer.cpp.o: In function `QgsRenderer::scaleBrush(QBrush&, double)':
/home/marco/dev/qgis/src/core/renderer/qgsrenderer.cpp:64: undefined reference to `QMatrix::scale(double, double)'
CMakeFiles/qgis_core.dir/renderer/qgssinglesymbolrenderer.cpp.o: In function `QgsSingleSymbolRenderer::renderFeature(QgsRenderContext&, QgsFeature&, QImage*, bool, double)':
/home/marco/dev/qgis/src/core/renderer/qgssinglesymbolrenderer.cpp:169: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/renderer/qgssinglesymbolrenderer.cpp:182: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/renderer/qgsuniquevaluerenderer.cpp.o: In function `QgsUniqueValueRenderer::renderFeature(QgsRenderContext&, QgsFeature&, QImage*, bool, double)':
/home/marco/dev/qgis/src/core/renderer/qgsuniquevaluerenderer.cpp:164: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/renderer/qgsuniquevaluerenderer.cpp:176: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/symbology/qgsmarkercatalogue.cpp.o: In function `QgsMarkerCatalogue::imageMarker(QString, double, QPen, QBrush, double)':
/home/marco/dev/qgis/src/core/symbology/qgsmarkercatalogue.cpp:144: undefined reference to `QPainter::setOpacity(double)'
CMakeFiles/qgis_core.dir/symbology/qgsmarkercatalogue.cpp.o: In function `QgsMarkerCatalogue::pictureMarker(QString, double, QPen, QBrush, double)':
/home/marco/dev/qgis/src/core/symbology/qgsmarkercatalogue.cpp:215: undefined reference to `QPainter::setOpacity(double)'
CMakeFiles/qgis_core.dir/symbology/qgssymbol.cpp.o: In function `QgsSymbol':
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:54: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:54: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:76: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:76: undefined reference to `QPen::setWidthF(double)'
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:91: undefined reference to `QPen::setWidthF(double)'
CMakeFiles/qgis_core.dir/symbology/qgssymbol.cpp.o:/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:91: more undefined references to `QPen::setWidthF(double)' follow
CMakeFiles/qgis_core.dir/symbology/qgssymbol.cpp.o: In function `QgsSymbol::getPointSymbolAsImage(double, bool, QColor, double, double, double, double)':
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:424: undefined reference to `QMatrix::rotate(double)'
CMakeFiles/qgis_core.dir/symbology/qgssymbol.cpp.o: In function `QgsSymbol::cache2(double, QColor, double)':
/home/marco/dev/qgis/src/core/symbology/qgssymbol.cpp:455: undefined reference to `QPen::setWidthF(double)'
</nowiki>

internalspatialite error

temporaly Dropped supporting spatialite

 <nowiki>

[ 23%] Building C object src/core/CMakeFiles/qgis_core.dir/spatialite/sqlite3.c.o
[ 23%] Building C object src/core/CMakeFiles/qgis_core.dir/spatialite/spatialite.c.o
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:88:19: error: iconv.h: No such file or directory
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:89:22: error: langinfo.h: No such file or directory
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaGetLocaleCharset':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8756: error: 'CODESET' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8756: error: (Each undeclared identifier is reported only once
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8756: error: for each function it appears in.)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaConvertCharset':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8774: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8774: error: expected ';' before 'cvt'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8775: error: 'cvt' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaCreateUTF8Converter':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8797: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8797: error: expected ';' before 'cvt'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:8798: error: 'cvt' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaFreeShapefile':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19076: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19076: error: expected ')' before 'shp'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaOpenShpRead':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19107: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19107: error: expected ';' before 'iconv_ret'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19121: error: 'iconv_ret' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaOpenShpWrite':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19401: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19401: error: expected ';' before 'iconv_ret'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19416: error: 'iconv_ret' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'parseDbfField':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:19844: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaWriteShpEntity':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:20993: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaFreeDbf':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:22888: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:22888: error: expected ')' before 'dbf'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c: In function 'gaiaOpenDbfRead':
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:22910: error: 'iconv_t' undeclared (first use in this function)
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:22910: error: expected ';' before 'iconv_ret'
/home/marco/dev/qgis/src/core/spatialite/spatialite.c:22924: error: 'iconv_ret' undeclared (first use in this function)
make2: * [src/core/CMakeFiles/qgis_core.dir/spatialite/spatialite.c.o] Error 1
make2:
Waiting for unfinished jobs....
make1:
[src/core/CMakeFiles/qgis_core.dir/all] Error 2
make: *
[all] Error 2
</nowiki>

Packaging

Use ant debug (or release - in this case you need to sign and zipalign the apk) to create the package or ant install for building (in debug mode) and installing. The .so need to be in libs/<ARMABI>/ and the share folder in assets so that they are automatically packaged. (I use sym links)

See also:
manual packaging: http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/

HOWTO

here a step by step tutorial:
  • Install Necessitas (http://sourceforge.net/projects/necessitas/files/)and choose at least:
    • NDK r5c (DEFAULT)
    • Qt 4.7.62.1-armeabi_v7a (DEFAULT)
    • Qt 4.7.62.1-src (NOT A DEFAULT, you need to select this. Until QtUiTools will be added to necessitas this is needed)
    • SDK API 11
  • get QGIS master from https://github.com/mbernasocchi/Quantum-GIS either by cloning or forking and cloning)
  • git checkout android
  • Clone git://github.com/mbernasocchi/qgis-android.git
  • configure scripts/config.conf
  • run scripts/build-all.sh
    • OR
    • run scripts/setup-env.sh
    • run scripts/build-libs.sh
    • run scripts/build-qgis.sh --configure
    • run scripts/update-apk-env.sh
    • run scripts/build-apk.sh
  • setup the device or emulator (see http://developer.android.com/guide/developing/index.html)
  • run scripts/run-apk.sh

example copy paste code

 cd dev
 #get necessitas
 wget http://downloads.sourceforge.net/project/necessitas/necessitas-0.3-online-sdk-installer-linux
 ./chmod +x necessitas-0.3-online-sdk-installer-linux
 ./necessitas-0.3-online-sdk-installer-linux
 # see below for adding a remote instead of cloning
 git clone git://github.com/mbernasocchi/Quantum-GIS.git
 cd Quantum-GIS
 git checkout android
 cd ..
 git clone git://github.com/mbernasocchi/qgis-android.git
 cp qgis-android/scripts/config.templ qgis-android/scripts/config.conf
 nano qgis-android/scripts/config.conf #configure to your wishes
 ./qgis-android/scripts/build-all.sh
 ./qgis-android/scripts/run-apk.sh

adding a remote

 git remote add mbernasocchi git://github.com/mbernasocchi/Quantum-GIS.git
 git checkout -b android
 git pull mbernasochi android

GUI Adaptations

Needed toolbars

  • Navigation
  • Layer load
  • basic digitizing (add, move nodes)
  • infotool
  • attribute table
  • measurements
  • layer legend
  • Layer properties add scrollbars

GPS

core/gps
app/gps
qgsGpsConnection sub class with parseData() (like nmeaConnection)
QIODevice subclass listening to android gps api and emitting readyRead()
extend QgsGpsDetector

Interesting link collection