2016-08-14 26 views
0

對於部署我的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時,它們似乎是最好的解決方案。

回答

0

似乎像https://github.com/LaurentGomila/qt-android-cmake/pull/10解決了這個問題。我錯誤地發現了它。它還沒有被合併到主人。

編輯: 我也有使用:

set_property(TARGET fairyland PROPERTY VERSION "1") 

否則的版本是在生成清單文件空,構建不起作用。