构建 QML 应用程序的 APK 文件时出现链接错误

A linking error when building APK files of QML apps

我在 Windows 7 X64 机器上使用 Qt 5.12,下面是 Qt Creator 4.8 上的 Devices

如图所示,SDK、NDK 和 JDK 似乎没问题。

通过这条路,我去创建了一个简单的QML项目,名字叫"test_1":

File => New File or Project => Application (template) => Qt Quick Application - Empty => The project name (Test_1) => (Build System) qmake => Minimal Required Qt Version 5.12 => Kits (Android X86, Arm7 and Desktop) => Finish

代码如下:

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello QML World")
}

SDK包也如下:

这里有什么问题吗?

现在使用 套件测试程序:
桌面确定
Android X86Arm7 : 失败

这是 编译输出 window 的所有内容(红色部分):

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':processDebugResources'. Android resource linking failed Output: C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\merged_manifests\debug\processDebugManifest\merged\AndroidManifest.xml:39: error: 'orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density' is incompatible with attribute configChanges (attr) flags [locale=4, fontScale=1073741824, keyboard=16, keyboardHidden=32, layoutDirection=8192, mcc=1, mnc=2, navigation=64, orientation=128, screenLayout=256, screenSize=1024, smallestScreenSize=2048, touchscreen=8, uiMode=512]. error: failed processing manifest.

Command: C:\Users\Abbasi.gradle\caches\transforms-1\files-1.1\aapt2-3.2.0-4818971-windows.jaradb1c826b3da76392f22b7ff050e9c\aapt2-3.2.0-4818971-windows\aapt2.exe link -I\ C:\Users\Abbasi\AppData\Local\Android\sdk\platforms\android-21\android.jar\ --manifest\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\merged_manifests\debug\processDebugManifest\merged\AndroidManifest.xml\ -o\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\processed_res\debug\processDebugResources\out\resources-debug.ap_\ -R\ @C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\incremental\processDebugResources\resources-list-for-resources-debug.ap_.txt\ --auto-add-overlay\ --java\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\generated\not_namespaced_r_class_sources\debug\processDebugResources\r\ --custom-package\ org.qtproject.example.Test_1\ -0\ apk\ --no-version-vectors Daemon: AAPT2 aapt2-3.2.0-4818971-windows Daemon #0 Output: C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\merged_manifests\debug\processDebugManifest\merged\AndroidManifest.xml:39: AAPT: error: 'orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density' is incompatible with attribute configChanges (attr) flags [locale=4, fontScale=1073741824, keyboard=16, keyboardHidden=32, layoutDirection=8192, mcc=1, mnc=2, navigation=64, orientation=128, screenLayout=256, screenSize=1024, smallestScreenSize=2048, touchscreen=8, uiMode=512].

error: failed processing manifest. Command: C:\Users\Abbasi.gradle\caches\transforms-1\files-1.1\aapt2-3.2.0-4818971-windows.jaradb1c826b3da76392f22b7ff050e9c\aapt2-3.2.0-4818971-windows\aapt2.exe link -I\ C:\Users\Abbasi\AppData\Local\Android\sdk\platforms\android-21\android.jar\ --manifest\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\merged_manifests\debug\processDebugManifest\merged\AndroidManifest.xml\ -o\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\processed_res\debug\processDebugResources\out\resources-debug.ap_\ -R\ @C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\intermediates\incremental\processDebugResources\resources-list-for-resources-debug.ap_.txt\ --auto-add-overlay\ --java\ C:\Users\Abbasi\Desktop\Q_Apps\QML_Apps\Test_1\build-Test_1-Android_for_armeabi_v7a_Clang_Qt_5_12_0_for_Android_ARMv7-Debug\android-build\build\generated\not_namespaced_r_class_sources\debug\processDebugResources\r\ --custom-package\ org.qtproject.example.Test_1\ -0\ apk\ --no-version-vectors Daemon: AAPT2 aapt2-3.2.0-4818971-windows Daemon #0

  • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 7s 14 actionable tasks: 1 executed, 13 up-to-date Building the android package failed! -- For more information, run this command with --verbose. 13:40:16: The process "C:\Qt.12.0\android_armv7\bin\androiddeployqt.exe" exited with code 14. Error while building/deploying project Test_1 (kit: Android for armeabi-v7a (Clang Qt 5.12.0 for Android ARMv7)) When executing step "Build Android APK"

我什至选择了 android-ndk-r17c-windows-x86_64.zip 并将其替换为 NDK r18b,但结果没有任何变化!

请问是什么问题?这不是和我创建项目的路径有关吗? 我认为您也使用 Arm7 套件创建 Android 应用程序,构建应用程序是其创建的一部分。所以必须有一些方法来解决这个问题。同意? 你会帮忙吗。

似乎即使 Qt 文档说 API 21,它也没有真正起作用,如果我以 API 21.

为目标,我会得到相同的清单错误

此外,google 市场目前不接受目标低于 API 26 的应用程序。这是一个快速移动的目标。

然而,这并不意味着您必须将自己限制在 运行 Android 8 或更高版本的设备上。您可以在清单文件中指定下限 API。

为您的项目激活 Android 套件,然后转到项目设置,在 Build Steps 中,展开 Build Android APK 窗格,将 Android build SDK 设置为 andrid-28。再往下,有一个按钮 Create Templates - 单击它可以生成一个可编辑的清单文件。单击它后,它将向您的项目添加一个 AndroidManiest.xml 文件。双击它在清单编辑器中打开它,然后将 Minimum required SDK 设置为 19,并将目标 SDK 设置为 28.

这也意味着你真的只需要API 28,似乎APIs本身是"reverse-compatible"与旧版本,意味着你不需要API 19 将其用作最低要求版本。只要您提供较低的最低版本,应用程序应该可以正常运行,即使它针对的是最新版本。