/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page examples-android.html
    \title Qt for Android Examples
    \brief A list of selected Qt Examples for Android.

    This page lists Qt examples that have been tested to run on
    \l{Qt for Android}{Android}. However, most \l{Qt Examples and Tutorials}
    {Qt Examples} can be run on Android even though they are not listed here.

    \section1 Running the Examples

    To run examples from \l{Qt Creator Manual}{Qt Creator}, select \uicontrol
    Welcome > \uicontrol Examples, and then select an installed Qt for Android
    to filter the examples that have been tested to run on Android. For more
    information, see \l{Qt Creator: Building and Running an Example}
    {Building and Running an Example}.

    \section1 Essentials

    The following sections describe how to get started with developing
    applications for Android:

    \list
        \li \l{Getting Started with Qt for Android}
        \li \l{Qt Creator: Creating a Mobile Application}
        \li \l{Qt Creator: Deploying Applications to Android Devices}
        \li \l{Publishing to Google Play}
        \li \l{Porting to Android}
        \li \l{Adding OpenSSL Support for Android}
        \li \l{Qt for Android - Building from Source}
    \endlist

    \l {Qt Android Extras} is an Android specific module used to integrate Qt
    API with Java API by enabling communication between Qt code {C++ and QML}
    and Java code. The following examples demonstrate using the module:

    \list
        \li \l{Qt Notifier} .demonstrates how to call Java code from an
            Android application.
        \li \l{Qt JNI Messenger} demonstrates communication between Java code
            and QML or C++ using NJI calls.
    \endlist

    \section1 Qt Quick and QML Examples for Android

    The following Qt Quick and QML examples are useful when developing
    applications for Android. For a full list of Qt Quick examples
    including beginner-level tutorials, see \l{Qt Quick Examples and Tutorials}.

    \div {class="multi-column"}
    \div {class="doc-column"}
        \b{Touch and Key Interaction}
        \list
        \li \l{Qt Quick Examples - Touch Interaction}{Touch Interaction}
        \li \l{Qt Quick Examples - Key Interaction}{Key Interaction}
        \li \l{Qt Quick Examples - MouseArea}{MouseArea}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Images, Animation, and Layout}
        \list
        \li \l{Qt Quick Examples - Image Elements}{Image Elements}
        \li \l{Qt Quick Examples - Text}{Text}
        \li \l{Qt Quick Examples - Animation}{Animation}
        \li \l{Qt Quick Examples - Canvas}{Canvas}
        \li \l{Qt Quick Examples - Positioners}{Positioners}
        \li \l{Qt Quick Examples - Right to Left}{Right to Left}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Scenegraph}
        \list
        \li \l{Scene Graph - Custom Geometry}{Custom Geometry}
        \li \l{Scene Graph - Graph}{Graph}
        \li \l{Scene Graph - OpenGL Under QML}{OpenGL Under QML}
        \li \l{Scene Graph - Painted Item}{Painted Item}
        \li \l{Scene Graph - Rendering FBOs}{Rendering FBOs}
        \li \l{Scene Graph - Simple Material}{Simple Material}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Particles and Effects}
        \list
        \li \l{Qt Quick Particles Examples - Emitters}{Emitters} (Particles)
        \li \l{Qt Quick Particles Examples - Affectors}{Affectors}
        \li \l{Qt Quick Particles Examples - System}{System}
        \li \l{Qt Quick Particles Examples - Image Particles}{Image Particles}
        \li \l{Qt Quick Examples - Shader Effects}{Shader Effects}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Extending QML}
        \list
        \li \l{Extending QML - Grouped Properties Example}{Grouped Properties}
        \li \l{Extending QML - Methods Example}{Methods}
        \li \l{Extending QML - Signal Support Example}{Signal Support}
        \li \l{Extending QML - Attached Properties Example}{Attached Properties}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Multimedia}
        \list
        \li \l{QML Video Shader Effects Example}{Video Shader Effects Example}
        \li \l{QML Video Example}{Video Example}
        \li \l{QML Camera Example}{Camera Example}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Location}
        \list
        \li \l{Map Viewer (QML)}{Map Viewer Example}
        \li \l{Places Map (QML)}{Places Map Example}
        \li \l{Plane Spotter (QML)}{Plane Spotter Example}
        \endlist
    \enddiv
    \enddiv
*/
