Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-74813

androiddeployqt fails with overridden ANDROID_DEPLOYMENT_DEPENDENCIES and ANDROID_USE_LLVM = false

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P2: Important
    • None
    • 5.12.2
    • Build System
    • None
    • openSUSE Tumbleweed, Android NDK 17.2
    • Android

    Description

      When androiddeployqt is forced to use GNU readelf by setting ANDROID_USE_LLVM = false and deployment dependencies are overridden using ANDROID_DEPLOYMENT_DEPENDENCIES, it prints a lot of warnings like the following during build process:

        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Core.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Gui.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Network.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Qml.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Quick.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Svg.so. It has unmet dependencies: lib/,lib/,lib/,lib/libQt5Widgets.so,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5Concurrent.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
        -- Skipping /opt/qt/5.12.2/android_arm64_v8a/lib/libQt5AndroidExtras.so. It has unmet dependencies: lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/,lib/.
      ...
      

      And then it produces an APK that contains no Qt libraries. ANDROID_DEPLOYMENT_DEPENDENCIES is set to the following value:

      lib/libQt5Core.so lib/libQt5Gui.so lib/libQt5Network.so lib/libQt5Qml.so lib/libQt5Quick.so lib/libQt5Svg.so lib/libQt5Concurrent.so lib/libQt5AndroidExtras.so lib/libQt5QuickTemplates2.so lib/libQt5QuickControls2.so jar/QtAndroid.jar jar/QtAndroidBearer.jar jar/QtAndroidExtras.jar plugins/platforms/android/libqtforandroid.so plugins/iconengines/libqsvgicon.so plugins/imageformats/libqsvg.so qml/Qt/labs/calendar/DayOfWeekRow.qml qml/Qt/labs/calendar/DayOfWeekRow.qmlc qml/Qt/labs/calendar/libqtlabscalendarplugin.so qml/Qt/labs/calendar/MonthGrid.qml qml/Qt/labs/calendar/MonthGrid.qmlc qml/Qt/labs/calendar/qmldir qml/Qt/labs/calendar/WeekNumberColumn.qml qml/Qt/labs/calendar/WeekNumberColumn.qmlc qml/QtGraphicalEffects/Blend.qml qml/QtGraphicalEffects/BrightnessContrast.qml qml/QtGraphicalEffects/Colorize.qml qml/QtGraphicalEffects/ColorOverlay.qml qml/QtGraphicalEffects/ConicalGradient.qml qml/QtGraphicalEffects/Desaturate.qml qml/QtGraphicalEffects/DirectionalBlur.qml qml/QtGraphicalEffects/Displace.qml qml/QtGraphicalEffects/DropShadow.qml qml/QtGraphicalEffects/FastBlur.qml qml/QtGraphicalEffects/GammaAdjust.qml qml/QtGraphicalEffects/GaussianBlur.qml qml/QtGraphicalEffects/Glow.qml qml/QtGraphicalEffects/HueSaturation.qml qml/QtGraphicalEffects/InnerShadow.qml qml/QtGraphicalEffects/LevelAdjust.qml qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.so qml/QtGraphicalEffects/LinearGradient.qml qml/QtGraphicalEffects/MaskedBlur.qml qml/QtGraphicalEffects/OpacityMask.qml qml/QtGraphicalEffects/qmldir qml/QtGraphicalEffects/RadialBlur.qml qml/QtGraphicalEffects/RadialGradient.qml qml/QtGraphicalEffects/RectangularGlow.qml qml/QtGraphicalEffects/RecursiveBlur.qml qml/QtGraphicalEffects/ThresholdMask.qml qml/QtGraphicalEffects/ZoomBlur.qml qml/QtGraphicalEffects/private/DropShadowBase.qml qml/QtGraphicalEffects/private/DropShadowBase.qmlc qml/QtGraphicalEffects/private/FastGlow.qml qml/QtGraphicalEffects/private/FastGlow.qmlc qml/QtGraphicalEffects/private/FastInnerShadow.qml qml/QtGraphicalEffects/private/FastInnerShadow.qmlc qml/QtGraphicalEffects/private/FastMaskedBlur.qml qml/QtGraphicalEffects/private/FastMaskedBlur.qmlc qml/QtGraphicalEffects/private/GaussianDirectionalBlur.qml qml/QtGraphicalEffects/private/GaussianDirectionalBlur.qmlc qml/QtGraphicalEffects/private/GaussianGlow.qml qml/QtGraphicalEffects/private/GaussianGlow.qmlc qml/QtGraphicalEffects/private/GaussianInnerShadow.qml qml/QtGraphicalEffects/private/GaussianInnerShadow.qmlc qml/QtGraphicalEffects/private/GaussianMaskedBlur.qml qml/QtGraphicalEffects/private/GaussianMaskedBlur.qmlc qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.so qml/QtGraphicalEffects/private/qmldir qml/QtQml/qmldir qml/QtQml/Models.2/libmodelsplugin.so qml/QtQml/Models.2/qmldir qml/QtQuick/Controls.2/AbstractButton.qml qml/QtQuick/Controls.2/Action.qml qml/QtQuick/Controls.2/ActionGroup.qml qml/QtQuick/Controls.2/ApplicationWindow.qml qml/QtQuick/Controls.2/BusyIndicator.qml qml/QtQuick/Controls.2/Button.qml qml/QtQuick/Controls.2/ButtonGroup.qml qml/QtQuick/Controls.2/CheckBox.qml qml/QtQuick/Controls.2/CheckDelegate.qml qml/QtQuick/Controls.2/ComboBox.qml qml/QtQuick/Controls.2/Container.qml qml/QtQuick/Controls.2/Control.qml qml/QtQuick/Controls.2/DelayButton.qml qml/QtQuick/Controls.2/Dial.qml qml/QtQuick/Controls.2/Dialog.qml qml/QtQuick/Controls.2/DialogButtonBox.qml qml/QtQuick/Controls.2/Drawer.qml qml/QtQuick/Controls.2/Frame.qml qml/QtQuick/Controls.2/GroupBox.qml qml/QtQuick/Controls.2/ItemDelegate.qml qml/QtQuick/Controls.2/Label.qml qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so qml/QtQuick/Controls.2/Menu.qml qml/QtQuick/Controls.2/MenuBar.qml qml/QtQuick/Controls.2/MenuBarItem.qml qml/QtQuick/Controls.2/MenuItem.qml qml/QtQuick/Controls.2/MenuSeparator.qml qml/QtQuick/Controls.2/Page.qml qml/QtQuick/Controls.2/PageIndicator.qml qml/QtQuick/Controls.2/Pane.qml qml/QtQuick/Controls.2/Popup.qml qml/QtQuick/Controls.2/ProgressBar.qml qml/QtQuick/Controls.2/qmldir qml/QtQuick/Controls.2/RadioButton.qml qml/QtQuick/Controls.2/RadioDelegate.qml qml/QtQuick/Controls.2/RangeSlider.qml qml/QtQuick/Controls.2/RoundButton.qml qml/QtQuick/Controls.2/ScrollBar.qml qml/QtQuick/Controls.2/ScrollIndicator.qml qml/QtQuick/Controls.2/ScrollView.qml qml/QtQuick/Controls.2/Slider.qml qml/QtQuick/Controls.2/SpinBox.qml qml/QtQuick/Controls.2/StackView.qml qml/QtQuick/Controls.2/SwipeDelegate.qml qml/QtQuick/Controls.2/SwipeView.qml qml/QtQuick/Controls.2/Switch.qml qml/QtQuick/Controls.2/SwitchDelegate.qml qml/QtQuick/Controls.2/TabBar.qml qml/QtQuick/Controls.2/TabButton.qml qml/QtQuick/Controls.2/TextArea.qml qml/QtQuick/Controls.2/TextField.qml qml/QtQuick/Controls.2/ToolBar.qml qml/QtQuick/Controls.2/ToolButton.qml qml/QtQuick/Controls.2/ToolSeparator.qml qml/QtQuick/Controls.2/ToolTip.qml qml/QtQuick/Controls.2/Tumbler.qml qml/QtQuick/Controls.2/Material/ApplicationWindow.qml qml/QtQuick/Controls.2/Material/BoxShadow.qml qml/QtQuick/Controls.2/Material/BusyIndicator.qml qml/QtQuick/Controls.2/Material/Button.qml qml/QtQuick/Controls.2/Material/CheckBox.qml qml/QtQuick/Controls.2/Material/CheckDelegate.qml qml/QtQuick/Controls.2/Material/CheckIndicator.qml qml/QtQuick/Controls.2/Material/ComboBox.qml qml/QtQuick/Controls.2/Material/CursorDelegate.qml qml/QtQuick/Controls.2/Material/DelayButton.qml qml/QtQuick/Controls.2/Material/Dial.qml qml/QtQuick/Controls.2/Material/Dialog.qml qml/QtQuick/Controls.2/Material/DialogButtonBox.qml qml/QtQuick/Controls.2/Material/Drawer.qml qml/QtQuick/Controls.2/Material/ElevationEffect.qml qml/QtQuick/Controls.2/Material/Frame.qml qml/QtQuick/Controls.2/Material/GroupBox.qml qml/QtQuick/Controls.2/Material/ItemDelegate.qml qml/QtQuick/Controls.2/Material/Label.qml qml/QtQuick/Controls.2/Material/libqtquickcontrols2materialstyleplugin.so qml/QtQuick/Controls.2/Material/Menu.qml qml/QtQuick/Controls.2/Material/MenuBar.qml qml/QtQuick/Controls.2/Material/MenuBarItem.qml qml/QtQuick/Controls.2/Material/MenuItem.qml qml/QtQuick/Controls.2/Material/MenuSeparator.qml qml/QtQuick/Controls.2/Material/Page.qml qml/QtQuick/Controls.2/Material/PageIndicator.qml qml/QtQuick/Controls.2/Material/Pane.qml qml/QtQuick/Controls.2/Material/Popup.qml qml/QtQuick/Controls.2/Material/ProgressBar.qml qml/QtQuick/Controls.2/Material/qmldir qml/QtQuick/Controls.2/Material/RadioButton.qml qml/QtQuick/Controls.2/Material/RadioDelegate.qml qml/QtQuick/Controls.2/Material/RadioIndicator.qml qml/QtQuick/Controls.2/Material/RangeSlider.qml qml/QtQuick/Controls.2/Material/RectangularGlow.qml qml/QtQuick/Controls.2/Material/RoundButton.qml qml/QtQuick/Controls.2/Material/ScrollBar.qml qml/QtQuick/Controls.2/Material/ScrollIndicator.qml qml/QtQuick/Controls.2/Material/Slider.qml qml/QtQuick/Controls.2/Material/SliderHandle.qml qml/QtQuick/Controls.2/Material/SpinBox.qml qml/QtQuick/Controls.2/Material/StackView.qml qml/QtQuick/Controls.2/Material/SwipeDelegate.qml qml/QtQuick/Controls.2/Material/SwipeView.qml qml/QtQuick/Controls.2/Material/Switch.qml qml/QtQuick/Controls.2/Material/SwitchDelegate.qml qml/QtQuick/Controls.2/Material/SwitchIndicator.qml qml/QtQuick/Controls.2/Material/TabBar.qml qml/QtQuick/Controls.2/Material/TabButton.qml qml/QtQuick/Controls.2/Material/TextArea.qml qml/QtQuick/Controls.2/Material/TextField.qml qml/QtQuick/Controls.2/Material/ToolBar.qml qml/QtQuick/Controls.2/Material/ToolButton.qml qml/QtQuick/Controls.2/Material/ToolSeparator.qml qml/QtQuick/Controls.2/Material/ToolTip.qml qml/QtQuick/Controls.2/Material/Tumbler.qml qml/QtQuick/Layouts/libqquicklayoutsplugin.so qml/QtQuick/Layouts/qmldir qml/QtQuick/Templates.2/libqtquicktemplates2plugin.so qml/QtQuick/Templates.2/qmldir qml/QtQuick/Window.2/libwindowplugin.so qml/QtQuick/Window.2/qmldir qml/QtQuick.2/libqtquick2plugin.so qml/QtQuick.2/qmldir plugins/qmltooling/libqmldbg_debugger.so plugins/qmltooling/libqmldbg_inspector.so plugins/qmltooling/libqmldbg_local.so plugins/qmltooling/libqmldbg_messages.so plugins/qmltooling/libqmldbg_native.so plugins/qmltooling/libqmldbg_nativedebugger.so plugins/qmltooling/libqmldbg_preview.so plugins/qmltooling/libqmldbg_profiler.so plugins/qmltooling/libqmldbg_quickprofiler.so plugins/qmltooling/libqmldbg_server.so plugins/qmltooling/libqmldbg_tcp.so
      

      This seems to be caused by commit 6fdf398ab4b32c7a70af08191963c4e4f5a885fe in qtbase. The following patch fixes it for me:

      --- a/qtbase/src/tools/androiddeployqt/main.cpp
      +++ b/qtbase/src/tools/androiddeployqt/main.cpp
      @@ -1639,9 +1639,11 @@ QStringList getQtLibsFromElf(const Options &options, const QString &fileName)
                   const int pos = line.lastIndexOf('[') + 1;
                   library = QString::fromLatin1(line.mid(pos, line.length() - pos - 2));
               }
      -        QString libraryName = QLatin1String("lib/") + library;
      -        if (QFile::exists(absoluteFilePath(&options, libraryName)))
      -            ret += libraryName;
      +        if (!library.isEmpty()) {
      +            QString libraryName = QLatin1String("lib/") + library;
      +            if (QFile::exists(absoluteFilePath(&options, libraryName)))
      +                ret += libraryName;
      +        }
           }
       
           pclose(readElfCommand);
      

      Note that i am building with clang, but i want androiddeployqt to use GNU tools. I am not sure if this is supported, but i do not see how this code in androiddeployqt can work differently when compiling with GCC. Before the commit i have specified above, code which i have wrapped in if was executed only for lines of readelf output which contain "(NEEDED)", but now it is executed for every line.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            rampe Rami Potinkara
            vovams Vova Mshanetskiy
            Veli-Pekka Heinonen Veli-Pekka Heinonen
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes