【问题标题】:A linking error when building APK files of QML apps构建 QML 应用程序的 APK 文件时出现链接错误
【发布时间】:2021-12-05 11:21:24
【问题描述】:

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

如图所示,SDK、NDK 和 JDK 似乎都很好。

通过这条路径,我创建了一个名为“test_1”的简单 QML 项目:

文件 => 新文件或项目 => 应用程序(模板) => Qt Quick 应用程序-空=>项目名称(Test_1)=>(构建系统) qmake => 最低要求 Qt 版本 5.12 => 套件(Android X86、Arm7 和桌面)=> 完成

这是代码:

import QtQuick 2.12
import QtQuick.Window 2.12

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

SDK包也如下:

这里有什么问题吗?

现在使用 kits 测试程序:
桌面OK
Android X86Arm7 : 失败

下面是红色的编译输出窗口的所有内容:

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务“:processDebugResources”执行失败。 Android 资源链接失败输出: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 : 错误: 'orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density' 与属性 configChanges (attr) 标志不兼容 [locale=4, fontScale=1073741824,键盘=16,keyboardHidden=32,layoutDirection=8192,mcc=1,mnc=2,navigation=64,orientation=128,screenLayout=256,screenSize=1024,smallestScreenSize=2048,touchscreen=8,uiMode=512]。 错误:处理清单失败。

命令:C:\Users\Abbasi.gradle\caches\transforms-1\files-1.1\aapt2-3.2.0-4818971-windows.jar\83adb1c826b3da76392f22b7ff050e9c\aapt2-3.2.0-4818971-windows\aapt2。 exe 链接 -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_armeabi712_0_forAndroid_for_armeabi712_0_forAndroid_for_armeabi_C -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:\User s\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 守护进程:AAPT2 aapt2-3.2.0-4818971-windows 守护进程#0 输出: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: 错误: 'orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density' 与属性 configChanges (attr) 标志不兼容 [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]。

错误:处理清单失败。 命令:C:\Users\Abbasi.gradle\caches\transforms-1\files-1.1\aapt2-3.2.0-4818971-windows.jar\83adb1c826b3da76392f22b7ff050e9c\aapt2-3.2.0-4818971-windows\aapt2.exe 链接- 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_v7_12\Debug_for_armeabi_v7a_0forAndroid_Qt 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\A bbasi\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 守护进程:AAPT2 aapt2-3.2.0-4818971-windows 守护进程#0

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 通过https://help.gradle.org获得更多帮助

在 7 秒内构建失败 14 个可操作任务:1 个已执行,13 个最新构建 android 包失败! -- 有关详细信息,请使用 --verbose 运行此命令。 13:40:16:进程“C:\Qt\5.12.0\android_armv7\bin\androiddeployqt.exe”以代码 14 退出。构建/部署项目 Test_1 时出错(套件:Android for armeabi-v7a(Clang Qt 5.12 .0 for Android ARMv7)) 执行步骤“Build Android APK”时

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

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

【问题讨论】:

  • 项目是用旧版本的Qt创建的吗?
  • 正如我所说,它是 Qt Creator 4.8.0。我不确定,但上次我可以使用这些规范构建应用程序时,API 更高。这个问题不是和 API 有关吗?
  • 哪个 API 版本适合您?
  • 对于 API 27 和 28,它都可以正常工作并创建 APK 文件。我将测试更多的 API。但是可能会出现的一个问题是,构建的具有高 API 的 apk 文件可能无法在真正的 Android 设备上正常工作! :(

标签: android qt qml linker-errors armv7


【解决方案1】:

似乎即使 Qt 文档说 API 21,它也不起作用,如果我以 API 21 为目标,我会得到相同的清单错误。

此外,谷歌市场目前不接受针对低于 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,似乎 API 本身与旧版本“反向兼容”,这意味着您不需要 API 19 即可将其用作最低要求的版本。只要您提供较低的最低版本,即使它针对的是最新版本,该应用也应该可以正常工作。

【讨论】:

  • 谢谢。这是否意味着要在 Android 设备上运行每个 QML 应用程序,我需要再次“创建模板”?
  • 如果你不这样做,Qt 将使用一些“自动”清单文件,这意味着如果你想以任何方式修改它,你必须创建一个可编辑的模板。应用运行不需要它,您需要它才能对其进行自定义。
  • +1。 Arm7 是创建 apk 文件以在真实设备上工作的最佳工具包吗?我习惯先在Debug模式下使用它,然后在Release模式下使用。之后,Arm7 Release 创建的apk 将在设备上使用。请问这是正确的方法吗?如果是这样,除了 Arm7 上的 Debug 之外,我是否也应该为 Release 模式“创建模板”?
  • 该模板适用于“android”设备,您不需要多个,即使您针对不同的 android 架构和不同的构建版本。
  • 在 android 上使用 Window.FullScreen 可见性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2018-08-13
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多