對於部署我的Qt應用程序用C++編寫與CMake的我用兩個CMake的模塊: https://github.com/taka-no-me/android-cmakeAddQtAndroidApk檢測錯誤的目標架構
https://github.com/LaurentGomila/qt-android-cmake/
首先我必須手動添加包含路徑,否則編譯失敗:「android-ndk-r12b/sources/android/native_app_glue /」
現在所有的東西都可以編譯爲Android的Qt二進制版本。我用下面的命令來創建一個APK與Qt二進制:
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」我沒有指定任何地方。我這調用CMake和編譯過程bash腳本是這樣的:
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包裝過程中()得到錯誤的架構,因此並沒有找到所請求的工具嗎?
順便說一句。我願意提供如何使用CMake部署Qt應用程序的建議。我在互聯網上找到的兩個模塊,當不使用qmake或Qt Creator時,它們似乎是最好的解決方案。