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

Invalid JSON generated for *-deployment-settings.json file

XMLWordPrintable

    • 8540c0a82 (dev)

      I've built Qt for Android on Ubuntu with the following configure args:

      -DCMAKE_BUILD_TYPE=Debug -DFEATURE_developer_build=ON -DQT_BUILD_TESTS=ON -DQT_BUILD_TESTS_BY_DEFAULT=OFF -DQT_BUILD_EXAMPLES=ON -DQT_BUILD_EXAMPLES_BY_DEFAULT=OFF -DWARNINGS_ARE_ERRORS=OFF -DANDROID_ABI=x86_64 -DANDROID_SDK_ROOT=/home/mitch/dev/Android -DCMAKE_TOOLCHAIN_FILE=/home/mitch/dev/Android/ndk/26.1.10909125/build/cmake/android.toolchain.cmake
      

      With https://codereview.qt-project.org/c/qt/qtbase/+/664669 applied, I get the following error message when building a simple Qt Quick app:

      10:52:55: Initializing deployment to Android device/simulator
      10:52:55: Deploying to 
      10:52:55: Running steps for project untitled15...
      10:52:55: Starting: "/usr/bin/cmake" --build /home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug --target all
      [1/1 71.4/sec] Copying appuntitled15 binary to apk folder
      10:52:55: The command "/usr/bin/cmake --build /home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug --target all" finished successfully.
      10:52:55: Starting: "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/bin/androiddeployqt" --input /home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug/android-appuntitled15-deployment-settings.json --output /home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug/android-build-appuntitled15 --android-platform android-35 --jdk /home/mitch/dev/jdk-17.0.13+11 --gradle
      Invalid json file: /home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug/android-appuntitled15-deployment-settings.json. Reason: illegal value at offset 2957.
      

      android-appuntitled15-deployment-settings.json looks like this:

      {
         "description": "This file is generated by cmake to be read by androiddeployqt and should not be modified by hand.",
         "qt": {
            "x86_64": "/home/mitch/dev/qt-dev-android-debug/qtbase"
         },
         "qtDataDirectory": {
            "x86_64": "."
         },
         "qtLibExecsDirectory": {
            "x86_64": "libexec"
         },
         "qtLibsDirectory": {
            "x86_64": "lib"
         },
         "qtPluginsDirectory": {
            "x86_64": "plugins"
         },
         "qtQmlDirectory": {
            "x86_64": "qml"
         },
         "sdk": "/home/mitch/dev/Android",
         "sdkBuildToolsRevision": "35.0.0",
         "ndk": "/home/mitch/dev/Android/ndk/26.1.10909125",
         "toolchain-prefix": "llvm",
         "tool-prefix": "llvm",
         "useLLVM": true,
         "toolchain-version": "clang",
         "ndk-host": "linux-x86_64",
         "abi": "x86_64",
         "architectures": { "x86_64":"x86_64-linux-android" },
         "android-deploy-plugins":"/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_messages_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_local_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_server_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_debugger_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_inspector_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_native_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_nativedebugger_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_preview_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_profiler_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_quickprofiler_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_tcp_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/networkinformation/libplugins_networkinformation_qandroidnetworkinformation_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/tls/libplugins_tls_qcertonlybackend_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/platforms/libplugins_platforms_qtforandroid_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qgif_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qico_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qjpeg_x86_64.so;;;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/iconengines/libplugins_iconengines_qsvgicon_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qsvg_x86_64.so",
         "permissions": ,
         "application-binary": "appuntitled15",
         "qml-import-paths" : "/home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug/untitled15,/home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug",
         "qml-root-path" : [ "/home/mitch/dev/temp/untitled15","/home/mitch/dev/temp/untitled15","/home/mitch/dev/temp/untitled15" ],
         "qml-importscanner-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/libexec/qmlimportscanner",
         "qml-dom-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/bin/qmldom",
         "qml-files-for-code-generator" : [  ],
         "rcc-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/libexec/rcc",
         "extraPrefixDirs" : [ "/home/mitch/dev/qt-dev-android-debug/qtbase","/home/mitch/dev/Android/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/sysroot" ],
         "extraLibraryDirs" : [  ],
         "zstdCompression": false,
         "generate-java-qtquickview-contents": false,
         "stdcpp-path": "/home/mitch/dev/Android/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/"
      }
      

      If I remove newlines from the json file with tr '\n' ' ', I get:

      {    "description": "This file is generated by cmake to be read by androiddeployqt and should not be modified by hand.",    "qt": {       "x86_64": "/home/mitch/dev/qt-dev-android-debug/qtbase"    },    "qtDataDirectory": {       "x86_64": "."    },    "qtLibExecsDirectory": {       "x86_64": "libexec"    },    "qtLibsDirectory": {       "x86_64": "lib"    },    "qtPluginsDirectory": {       "x86_64": "plugins"    },    "qtQmlDirectory": {       "x86_64": "qml"    },    "sdk": "/home/mitch/dev/Android",    "sdkBuildToolsRevision": "35.0.0",    "ndk": "/home/mitch/dev/Android/ndk/26.1.10909125",    "toolchain-prefix": "llvm",    "tool-prefix": "llvm",    "useLLVM": true,    "toolchain-version": "clang",    "ndk-host": "linux-x86_64",    "abi": "x86_64",    "architectures": { "x86_64":"x86_64-linux-android" },    "android-deploy-plugins":"/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_messages_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_local_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_server_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_debugger_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_inspector_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_native_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_nativedebugger_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_preview_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_profiler_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_quickprofiler_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/qmltooling/libplugins_qmltooling_qmldbg_tcp_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/networkinformation/libplugins_networkinformation_qandroidnetworkinformation_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/tls/libplugins_tls_qcertonlybackend_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/platforms/libplugins_platforms_qtforandroid_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qgif_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qico_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qjpeg_x86_64.so;;;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/iconengines/libplugins_iconengines_qsvgicon_x86_64.so;/home/mitch/dev/qt-dev-android-debug/qtbase/plugins/imageformats/libplugins_imageformats_qsvg_x86_64.so",    "permissions": ,    "application-binary": "appuntitled15",    "qml-import-paths" : "/home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug/untitled15,/home/mitch/dev/temp/untitled15-qt_dev_android_debug-Debug",    "qml-root-path" : [ "/home/mitch/dev/temp/untitled15","/home/mitch/dev/temp/untitled15","/home/mitch/dev/temp/untitled15" ],    "qml-importscanner-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/libexec/qmlimportscanner",    "qml-dom-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/bin/qmldom",    "qml-files-for-code-generator" : [  ],    "rcc-binary" : "/home/mitch/dev/qt-dev-debug-no-asan/qtbase/libexec/rcc",    "extraPrefixDirs" : [ "/home/mitch/dev/qt-dev-android-debug/qtbase","/home/mitch/dev/Android/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/sysroot" ],    "extraLibraryDirs" : [  ],    "zstdCompression": false,    "generate-java-qtquickview-contents": false,    "stdcpp-path": "/home/mitch/dev/Android/ndk/26.1.10909125/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/" }
      

      2957 is the comma (or the space before it):

      "permissions": ,
      

      A working *deployment-settings.json file just doesn't have that permissions entry, and if I remove it, the build succeeds.

      If I grep for other keys from that file in qtbase, I get:

      mitch@mitch-ubuntu:~/dev/qt-dev/qtbase$ git grep "android-deploy-plugins"
      src/corelib/Qt6AndroidMacros.cmake:    string(APPEND file_contents "   \"android-deploy-plugins\":\"${plugin_targets}\",\n")
      src/tools/androiddeployqt/main.cpp:        const auto androidDeployPlugins = jsonObject.value("android-deploy-plugins"_L1).toString();
      

      So the permissions entry is added by src/corelib/Qt6AndroidMacros.cmake like this:

          __qt_internal_collect_plugin_targets_from_dependencies_v2("${target}" plugin_targets)
          __qt_internal_collect_plugin_library_files_v2("${target}" "${plugin_targets}" plugin_targets)
          string(APPEND file_contents "   \"android-deploy-plugins\":\"${plugin_targets}\",\n")
      
          _qt_internal_android_convert_permissions(permissions_genex ${target} JSON)
          string(APPEND file_contents "   \"permissions\": ${permissions_genex},\n")
      

      However, if I search for "permissions" in I find _qt_internal_generate_android_permissions_json, which isn't called anywhere from what I can see.

      Was it meant to be called and that's why it's generating this invalid JSON? Or is _qt_internal_android_convert_permissions just buggy?

        For Gerrit Dashboard: QTBUG-138823
        # Subject Branch Project Status CR V

            semlanik Alexey Edelev
            mitch_curtis Mitch Curtis
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes