/****************************************************************************
**
** Copyright (C) 2020 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 android.html
\title Qt for Android
\brief Provides information about Android support in Qt.
\ingroup supportedplatform

Qt for Android enables you to run Qt 5 applications on Android devices.
All Qt modules (essentials and add-ons) are supported except the following:

\list
    \li Qt WebEngine
    \li Qt Serial Port
    \li Qt Virtual Keyboard
    \li Platform-specific extras: Qt Mac Extras, Qt Windows Extras, and
        Qt X11 Extras
\endlist

The following configurations are supported:

\target android-supported-configurations
\section1 Supported Configurations

\include supported-platforms.qdocinc android

    \table 50%
    \header \li {4,1} Target Devices used in Automated Testing
        \header \li Device \li OS Version \li Architecture \li Form Factor
        \row \li \l{Pixel 2}
             \li Android 11 (API 30)
             \li arm64_v8a
             \li Mobile
        \row \li \l{Pixel 2 XL}
             \li Android 11 (API 30)
             \li arm64_v8a
             \li Mobile
        \row \li \l{Pixel 4}
             \li Android 10 (API 29)
             \li armv7
             \li Mobile
        \row \li \l{Pixel 4A}
             \li Android 12 (API 31)
             \li armv7, arm64_v8a
             \li Mobile
        \row \li \l{Pixel 6 Pro}
             \li Android 12 (API 31)
             \li arm64_v8a
             \li Mobile
        \row \li \l{Samsung Galaxy S10}
             \li Android 9 (API 28)
             \li armv7, arm64_v8a
             \li Mobile
        \row \li \l{Samsung Galaxy S21}
             \li Android 12 (API 31)
             \li armv7, arm64_v8a
             \li Mobile
        \row \li \l{Samsung Galaxy Tab S4}
             \li Android 10 (API 29)
             \li armv7, arm64_v8a
             \li Tablet
        \row \li \l{Motorola Moto G5 Plus}
             \li Android 8 [UP1A.230519.001] (API 27)
             \li arm64_v8a
             \li Mobile
        \endtable

    \note Qt for Android support is inclusive of \b{but not limited to} these devices.

    \note The above table is accurate at the time of this Qt patch release only.
    It may change during the patch release cycle and should only be used as a
    reference for what the Qt Company can rapidly reproduce bugs on.

The following list summarizes what you can do with Qt for Android:

\list
    \li Run \l{Qt Widgets}{Widget-based} and \l{QML Applications}{QML}
        applications on a device or an emulator.
    \li Support for the \l{Material Style}{Material Style} with
        Qt Quick Controls.
    \li Handle \l{Qt Multimedia}{Multimedia} content in your
        Qt Quick 2 applications.
    \li Get \l{Qt Sensors}{sensor} readings.
    \li Retrieve positioning data using satellite or network information.
    \li Connect and exchange data with \l{Qt Bluetooth}{Bluetooth}
        and \l{Qt NFC}{NFC}-enabled devices.
    \li Integrate Java code into your application using \l{Qt Android Extras}.
    \li Develop secure applications using OpenSSL library.
    \li Create \l{Android Services}.
    \li Create and deploy Application Package (APK) and Android App Bundle (AAB)
        packages using Qt Creator.
\endlist

The following topics provide more details about how to use Qt for Android:
\list
 \li \l{Getting Started with Qt for Android}{Getting Started}
 \li \l{Porting to Android}{Porting a Qt Application}
 \li \l{Qt for Android Examples}{Qt Examples on Android}
 \li \l{Deploying an Application on Android}
 \li \l{Qt Creator: Deploying Applications to Android Devices}
 \li \l{Adding OpenSSL Support for Android}
 \li \l{Android Services}{Creating Android Services}
 \li \l{Third-party Android Libraries}
     {Including third-party Android libraries in an application}
 \li \l{Publishing to Google Play}
 \li \l{Android Platform Notes}
 \li \l{Qt for Android - Building from Source}
 \li \l{Android GNU C++ run-time licensing}
\endlist
*/

/*!
\page android-getting-started.html
\title Getting Started with Qt for Android
\brief Provides instructions to install and configure your development environment.

\section1 Installing the Prerequisites

In order to use \l{Qt for Android}, you need the following:

\list
    \li Java Development Kit (JDK) provided by \l{AdoptOpenJDK} for all platforms,
        is required to build Android apps. Other alternatives such as \l{OpenJDK}
        for Linux or \l{Java SE Development Kit} for Windows are also supported.

        \note As of Qt 5.15.8, JDK 11 or later is supported for Qt for Android.

    \li \l{Gradle} for building application packages (APK) and app bundles
        (AAB) for Android devices. Gradle is delivered with Qt 5.9, and later.

        \note Using Ant to build APKs is no longer supported.

    \target android-sdk
    \li \l{Android: The Android SDK Tools}{The Android Command-line SDK Tools}
        to install the following packages that are required to compile Qt
        applications for Android:

        \list
            \li Platform tools
            \li Build tools
            \li At least one SDK platform
            \li \l {android-ndk}{The Android NDK}, which contains toolchains
                and debuggers for Android.
        \endlist

        \note Qt Creator 4.12 or later can set up the SDK Tools, NDK, and
        essential packages automatically. For more information, see
        \l {Qt Creator: Specifying Android Device Settings}.

        \note If you are using the SDK Tools 26.x or below, the JDK 8 is required.
        Versions higher than 8 might cause issues for \l {android-sdk}{the Android SDK tools}.

        \note If your Qt version is earlier than v5.9, use the SDK tools package
        v25.2.5 or earlier.

    \target android-ndk
    \li \l{Android: The Android NDK}{The Android NDK}
        can be installed using the \c sdkmanager tool. Alternatively, you can
        download it and extract it manually to a path of your choosing.
\endlist

Different Qt versions depend on different NDK versions, as listed below:

\table
    \header
        \li Qt version
        \li NDK version
        \li Toolchain
    \row
        \li Qt 5.14.0 or later
            Qt 5.13.2 or later
            Qt 5.12.6 or later
        \li NDK r20b or r21
        \li \e android-clang
    \row
        \li Qt 5.12.0 to 5.12.5
            Qt 5.13.0 to 5.13.1
        \li NDK r19c
        \li \e android-clang
    \row
        \li Qt 5.11 and earlier
        \li NDK r10e
        \li \e GCC toolchain
\endtable

\note Qt 5.14.0 and 5.14.1 with NDK r21 have a bug fixed at \l {QTBUG-81461}.

\note Make sure to unpack the Android SDK and NDK to a writeable location that Qt Creator
can access later. Otherwise, Qt Creator won't be able to use \c sdkmanager or find all
components even if they were installed manually.

\section2 Installing the Android SDK Essentials

After downloading and unpacking the Commandline SDK Tools, use the \c sdkmanager
command line tool to install the essential packages:

\badcode
cd <ANDROID_SDK_ROOT>/tools/bin/
./sdkmanager --sdk_root=<ANDROID_SDK_ROOT> --install "cmdline-tools;latest"
./sdkmanager --sdk_root=<ANDROID_SDK_ROOT> --install "platform-tools" "platforms;android-29" "build-tools;29.0.2" "ndk;21.3.6528147"
\endcode

\l {Android: Android Studio}{Android Studio} or the Qt Creator's
\l{Qt Creator: Managing Android SDK Packages}{SDK Manager UI} can also be used
to install the essential SDK packages.

To use the \l {Android: Android Emulator}{Android Emulator}, install it by
entering:

\badcode
./sdkmanager --sdk_root=<ANDROID_SDK_ROOT> --install "emulator" "patcher;v4"
\endcode

\section1 Host Specific Configuration

\section2 Windows

The default USB driver on Windows does not allow debugging using
Android Debug Bridge (ADB) tool. You must install the additional USB driver
provided by the \e extras Android SDK package. To install it, run the following:

\badcode
sdkmanager.bat --sdk_root=<ANDROID_SDK_ROOT> --install "extras;google;usb_driver"
\endcode

After the package installation is complete, install the driver from
\c{<ANDROID_SDK_ROOT>/extras/google/usb_driver}. Try running a few basic
\l{Android: adb}{adb} commands now and check whether your Android device
responds to them.

\section2 Linux 64-bit

If you're developing on a 64-bit Linux machine, you must install the
following dependencies in order to run 32-bit executables like \c adb, which
allows Qt Creator to find devices to deploy to:

\badcode
sudo apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
\endcode

\target emulator dependencies
To run the Android emulator, the following dependencies are also necessary:

\badcode
sudo apt-get install libsdl1.2debian:i386
\endcode

\section2 Qt Creator IDE

The Qt Creator IDE can be used to develop Qt applications for Android. For more
information, see \l{Qt Creator: Connecting Android Devices}.

\section1 Testing Your Setup

Now you can test your development setup by running the examples shipped with the
Qt installation. For more information, see \l {Qt for Android Examples}.

To develop a simple application from scratch, see
\l {Qt Creator: Creating a Mobile Application}.
*/
