-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.11
-
None
-
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 |
664893,4 | Fix malformed JSON if permissions are empty | dev | qt/qtbase | Status: MERGED | +2 | 0 |