/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
**
** 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.
**
****************************************************************************/

    /*!

    \contentspage {Qt Creator Manual}
    \previouspage creator-connecting-mobile.html
    \page creator-developing-android.html
    \nextpage creator-developing-baremetal.html

    \title Connecting Android Devices

    You can connect Android devices to the development PC to run, debug,
    and analyze applications built for them from \QC.

    If you have a tool chain for building applications for Android devices
    installed on the development PC, you can add it to \QC. You can then add a
    \l{glossary-buildandrun-kit}{kit}
    with the Android device type, the tool chain, and the Qt version for Android,
    to build applications for and run them on Android devices. You can also
    allow \QC to automatically configure the kit.

    The Android Debug Bridge (adb) command line tool is integrated to \QC to
    enable you to deploy applications to connected Android devices, to run
    the applications on them, and to read logs from them. It includes a client
    and server that run on the development host and a daemon that runs on the
    emulator or device.

    \section1 Requirements

    To use \QC to develop Qt applications for Android, you need the following:

    \list

        \li \l{http://www.oracle.com/technetwork/java/javase/downloads/index.html}
            {Java SE Development Kit (JDK)} version 6, or later

        \li \l{http://www.gradle.org}{Gradle} for building application packages
            for Android devices (APK). Gradle is delivered with Qt 5.9, and
            later.

            \note Using Ant to build APKs is still possible when developing with
            Qt 5.8 or earlier together with Android SDK tools versions 25.2.5 or
            earlier, but Ant support has been deprecated since \QC 4.3 and will
            be removed in a future version.

        \li A tool chain for building applications for Android devices provided
            by the \l{http://developer.android.com/tools/sdk/ndk/index.html}
            {Android NDK} from Google.

        \li \l{http://developer.android.com/sdk/index.html}{Android SDK Tools}

            After installing the Tools, you can use the
            \l{https://developer.android.com/studio/command-line/sdkmanager.html}
            {sdkmanager} to get the API and tools packages required for
            development.

        \li On Windows, you also need the following:

          \list

            \li MinGW v4.8.0 revision 2

            \li Android Debug Bridge (ADB) driver on the Windows platform to
                enable USB debugging. The default USB driver on Windows does not
                allow debugging. For more information about obtaining the USB
                driver, see \l{http://developer.android.com/sdk/win-usb.html}.

                After installing the driver, try running a few basic
                \l{http://developer.android.com/tools/help/adb.html}{adb}
                commands to check that your device responds to them.

          \endlist

        \endlist

    \section1 Setting Up the Development Environment

    You must download and install the latest Android NDK and SDK, and update the
    SDK to get the build and platform tools needed for development. Since
    SDK tools version 25.3.0, \QC, you must use the
    \l{https://developer.android.com/studio/command-line/sdkmanager.html}
    {sdkmanager} command line tool for SDK package management and the
    \l{https://developer.android.com/studio/command-line/avdmanager.html}
    {avdmanager} tool for Android Virtual Device (AVD) management.

    In addition, you must install Qt for Android as part of Qt 5.2, or later.

    For more information, see \l{Qt for Android}.

    To configure connections between \QC and Android devices:

    \list 1

        \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices >
            \uicontrol Android to add paths to the Android NDK and SDK.

            You can use the \inlineimage download.png
            (\uicontrol Download) buttons to go to the sites where you can download
            the Android NDK and SDK.

            \image qtcreator-options-android1.png "Android options"

        \li Select the \uicontrol {Automatically create kits for Android tool chains}
            check box to allow \QC to create the kits for you. \QC displays a
            warning if it cannot find a suitable Qt version.

        \li Select the tool to use for building application packages:

            \list

                \li To use Gradle, select the \uicontrol {Use Gradle instead of Ant}
                    check box.

                \li To use Ant, add the path to the Ant executable in the
                    \uicontrol {Ant executable} field.

                    \note Ant support has been deprecated since \QC 4.3. We
                    recommend that you use Gradle instead.

            \endlist

        \li Select \uicontrol File > \uicontrol {New File or Project} > \uicontrol Application >
            \uicontrol {Qt Quick Application} > \uicontrol Choose, and
            follow the instructions of the wizard. For more information, see
            \l{Creating Qt Quick Projects}.

        \li To specify settings for deploying applications to Android, select
            \uicontrol Projects > \uicontrol Run for the \uicontrol Android kit, and then select
            \uicontrol Details to view the \uicontrol {Deploy configurations}. For more
            information about the options you have, see
            \l{Deploying Applications to Android Devices}.

        \li Enable debugging on your Android device.

            Debugging is enabled in different ways on different Android devices.
            Look for \uicontrol {USB Debugging} under \uicontrol {Developer Options}. On
            some devices \uicontrol {Developer Options} is hidden and becomes visible
            when you tap the \uicontrol {Build number} field in \uicontrol Settings >
            \uicontrol About several times.

        \li Connect the Android device to the development PC with a USB cable.
            You might be asked to select a device in the
            \uicontrol {Select Android Devices} dialog.
    \endlist

    \section1 Selecting Android Devices

    When you deploy an application to an Android device with Android
    version 4.2 or later, the \uicontrol {Select Android Devices} dialog opens. It
    lists the devices that are connected to the development PC. and their
    status. You can select devices from the \uicontrol {Compatible Devices} list for
    deployment.

    If \QC determines that a device is not ready for deployment, it places the
    device in the \uicontrol {Incompatible Devices} list, with information about the
    issue. For example, you might need to authorize the connection on the
    device. After you authorize the connection on the device, select
    \uicontrol {Refresh Device List}. The device is moved to the
    \uicontrol {Compatible Devices} list and you can select it for deployment.

    Other reasons for placing a device on the \uicontrol {Incompatible Devices} are
    that the Android version on the device is too old or that the tool chain
    used for building does not match the Android architecture on the device
    (for example, you cannot deploy an ARM build on an x86 device).

    \image qtcreator-android-select-devices.png "Select Android Devices dialog"

    AVDs are also listed. To create new AVDs, select
    \uicontrol {Create Android Virtual Device}.

    To set a device as the default device for a particular Android architecture,
    select the \uicontrol {Always use this device for architecture} check box. The
    \uicontrol {Select Android Devices} dialog will not appear until you switch to
    another project or restart \QC.

    \section1 Using the Android Emulator

    To run your application on the Android Emulator, you must create Android
    virtual devices (AVD). Select \uicontrol Tools > \uicontrol Options >
    \uicontrol Devices > \uicontrol Android >
    \uicontrol Add. If you run an application without a device connected to the
    development PC and without an AVD specified, \QC asks you to add an AVD.

    To manage AVDs, select \uicontrol {Start AVD Manager}.

    \note The Android Emulator has a bug that prevents it from starting on some
    systems. If the Android Emulator does not start, you can try starting it
    manually by running the \c {emulator-arm} command from the command line.

    \section1 Debugging on Android Devices

    Android devices support debugging multi-thread applications in version
    2.2.1 and later. If you use AVD, select Android 2.3, or later. For more
    information, see the Android documentation.

    In addition, debugging is supported at android-10 API level, or higher. In
    the run settings for the project, in the \uicontrol {Android build SDK} field,
    select android-10, or higher. For more information about Android API levels,
    see \l{http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels}
    {What is API Level?}.

    \note Select a \l{glossary-build-config}{debug build configuration} to build
    the application for debugging.

*/

