/****************************************************************************
**
** 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 known to work for \l{Qt for Android}{Android}.
    This page is not an exclusive list, meaning most
    \l{Qt Examples and Tutorials}{Qt Examples} are compatible with Android but
    are not listed here.

    \section1 Running the Examples

    To run the examples from \l{Qt Creator Manual}{Qt Creator}, open the \gui
    Welcome mode and select the example from \gui Examples. Entering the search
    term \gui Android filters these examples from the other \l{Qt Examples and
    Tutorials}{Qt Examples}. For more information, visit
    \l{Qt Creator: Building and Running an Example}{Building and Running an Example}.

    \section1 Essentials

    These examples and tutorials give instructions on how to get started
    as well as information related to Qt for Android.

    \list
    \li \l{Getting Started with Qt for Android}{Getting Started}
    \li \l{Qt Creator: Creating a Mobile Application}{Creating a Mobile Application}
    \li \l{Qt Creator: Deploying Applications to Android Devices}{Deploying to the Device}
    \li \l{Porting to Android}{Porting a Qt Application}
    \li \l{Publishing to Google Play}
    \li \l{Adding OpenSSL Support for Android}
    \li \l{Building Qt 5 for Android}{Building from Sources}
    \li \l{Qt Notifier} - demonstrates how to call Java code from an Android application
    \endlist

    \section1 Qt Quick and QML Examples for Android

    These are a list of Qt Quick and QML examples for Android. For a full list
    of Qt Quick examples including beginner-level tutorials, visit
    \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
    \enddiv
*/
