AddQtAndroidApk检测到错误的目标体系结构

AddQtAndroidApk detects wrong target architecture

本文关键字:目标 体系结构 错误 检测 AddQtAndroidApk      更新时间:2023-10-16

为了使用CMake部署用C++编写的Qt应用程序,我使用了两个CMake模块:https://github.com/taka-no-me/android-cmake

https://github.com/LaurentGomila/qt-android-cmake/

首先,我必须手动添加一个include路径,否则编译失败:"android-ndk-r12b/sources/android/native_app_glue/">

现在,一切都可以用Android的Qt二进制版本编译。我使用以下命令创建一个带有Qt二进制文件的APK:

if (ANDROID)
    add_qt_android_apk(my_app_apk fairyland)
endif ()

编译工作,但构建包失败:

Generating Android Package
  Input file: /home/me/Dokumente/Projekte/fairytale/buildandroid/qtdeploy.json
  Output directory: /home/me/Dokumente/Projekte/fairytale/buildandroid/
  Application binary: /home/me/Dokumente/Projekte/fairytale/buildandroid/libfairyland.so
  Android build platform: android-24
  Install to device: No
Copying Android package template.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/AndroidManifest.xml
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/templates/build.gradle. Same or newer file already in place.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/res/values/libs.xml
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/layout/splash.xml. Same or newer file already in place.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/res/values/strings.xml
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-de/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-el/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-es/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-et/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-fa/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-fr/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-id/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-it/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ja/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ms/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-nb/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-nl/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-pl/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-pt-rBR/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ro/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-rs/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ru/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-zh-rCN/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-zh-rTW/strings.xml. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/kde/necessitas/ministro/IMinistro.aidl. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/kde/necessitas/ministro/IMinistroCallback.aidl. Same or newer file already in place.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/src/org/qtproject/qt5/android/bindings/QtActivity.java
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java. Same or newer file already in place.
  -- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java. Same or newer file already in place.
Detecting dependencies of application.
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-readelf
Reading dependencies from /home/me/Dokumente/Projekte/fairytale/buildandroid/libfairyland.so
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-readelf
Reading dependencies from /home/me/Qt5.7.0/5.7/android_x86/plugins/platforms/android/libqtforandroid.so
Copying GNU STL library
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/libgnustl_shared.so
Copying 0 dependencies from Qt into package.
Checking if application binary is in package.
Copying gdbserver into package.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/gdbserver
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/libgdbserver.so
Copying Android sources from project.
  -- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/AndroidManifest.xml
Stripping libraries to minimize size.
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-strip
CMakeFiles/my_app_apk.dir/build.make:60: recipe for target 'run_android_deploy_qt' failed
gmake[2]: *** [run_android_deploy_qt] Error 9
CMakeFiles/Makefile2:206: recipe for target 'CMakeFiles/my_app_apk.dir/all' failed
gmake[1]: *** [CMakeFiles/my_app_apk.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
gmake: *** [all] Error 2

它使用的目标"i686"不存在,我在任何地方都没有指定。我的Bash脚本调用CMake和构建过程,如下所示:

if [ ! -d "./buildandroid" ] ; then
        mkdir ./buildandroid
fi
echo "$HOME"
export PATH="$HOME/Android/Sdk/tools/:$PATH"
export ANDROID_HOME="$HOME/Android/Sdk"
export PATH="$ANDROID_HOME/tools:$PATH"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export ANT_PATH=$(which ant)
cd ./buildandroid
# If build type Debug is used CMAKE_GDBSERVER has to specified for the command android_create_apk()
cmake -DJAVA_HOME="/usr/java/default/" -DANDROID_SDK="$ANDROID_HOME" -DQT_ANDROID_SDK_ROOT="$ANDROID_HOME" -DQT_ANDROID_ANT="$ANT_PATH" -DCMAKE_MODULE_PATH="../cmake" -DCMAKE_PREFIX_PATH="$HOME/Qt5.7.0/5.7/android_x86/lib/cmake" -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_NDK="$HOME/android-ndk-r12b" -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="x86"  -DANDROID_NATIVE_API_LEVEL="24" ../
cmake --build .
# Manual installation of the packed apk file for the emulator
#$ANDROID_HOME/platform-tools/adb install ./apk/bin/fairyland-debug.apk

add_qt_android_apk((的打包过程如何获得错误的体系结构,从而找不到请求的工具?

Btw。我对如何使用CMake部署Qt应用程序的建议持开放态度。我在互联网上找到的两个模块,当不使用qmake或Qt Creator时,它们似乎是最好的解决方案。

看起来https://github.com/LaurentGomila/qt-android-cmake/pull/10修复了此问题。我错误地发现了它。它还没有被合并到master中。

编辑:我还必须使用:

set_property(TARGET fairyland PROPERTY VERSION "1")

否则,生成的清单文件中的版本为空,生成不起作用。