运行add_qt_android_apk

时间:2016-10-05 23:53:39

标签: android c++ android-ndk cmake

在我的CMake项目中,我使用了android.toolchain.cmake。

我将以下环境变量作为定义传递:

export ANDROID_ABI="armeabi-v7a" # x86
export ANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" # "x86-4.9"
export ANDROID_API_LEVEL="23"
export QT_DIR="$HOME/Qt/5.7/android_armv7"
export ANDROID_STANDALONE_TOOLCHAIN="$HOME/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/"
export ANDROID_PREFIX="sdk-android-armv7" # sdk-android-x86
export ANDROID_TARGET="armv7" # x86
export QTAV_LIB_DIR="lib_android_arm" # lib_android_x86

我按以下方式传递变量:

cmake -DUSE_COMPRESSED_FILES=1 -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="$QT_DIR/lib/cmake" -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_NDK="$HOME/android-ndk-r12b" -DCMAKE_BUILD_TYPE=Debug -DANDROID_ABI="$ANDROID_ABI" -DANDROID_TOOLCHAIN_NAME="$ANDROID_TOOLCHAIN_NAME" -DANDROID_STANDALONE_TOOLCHAIN="$ANDROID_STANDALONE_TOOLCHAIN" -DANDROID_NATIVE_API_LEVEL="$ANDROID_API_LEVEL" -DQT_DIR="$QT_DIR" -DANDROID_PREFIX="$ANDROID_PREFIX" -DANDROID_TARGET="$ANDROID_TARGET" -DQTAV_LIB_DIR="$QTAV_LIB_DIR" ../

cmake --build .

当"剥离库以最小化尺寸。"它说: Command does not exist: /home/peter/android-ndk-r12b/toolchains/armeabi-v7a-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip

路径应该是" arm-linux-androideabi-4.9"而不是" armeabi-v7a-4.9"。为什么使用ANDROID_ABI而不是ANDROID_TOOLCHAIN_NAME?

我对x86没有这些问题:

export ANDROID_ABI="x86"
export ANDROID_TOOLCHAIN_NAME="x86-4.9"
export ANDROID_API_LEVEL="23"
export QT_DIR="$HOME/Qt5.7.0/5.7/android_x86"
export ANDROID_STANDALONE_TOOLCHAIN="$HOME/android-ndk-r12b/toolchains/x86-4.9/"
export ANDROID_PREFIX="sdk-android-x86"
export ANDROID_TARGET="x86"
export QTAV_LIB_DIR="lib_android_x86"

编辑: strip命令由android.toolchain.cmake文件设置:

 set( CMAKE_STRIP        "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}"   CACHE PATH "strip" )

ANDROID_TOOLCHAIN_ROOT是这样设置的,因为我指定了NDK路径:

# setup paths and STL for NDK
if( BUILD_WITH_ANDROID_NDK )
 set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" )

所以我猜ANDROID_GCC_TOOLCHAIN_NAME一定是错的? ANDROID_NDK_TOOLCHAINS_SUBPATH以" prebuilt"开头所以这是正确的。 ANDROID_NDK_TOOLCHAINS_PATH以"工具链"结束。所以它也是正确的。

如果ANDROID_GCC_TOOLCHAIN_NAME不是Clang(它不是),则会设置:

set( ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" )

所以一切都应该正常,因为我的ANDROID_TOOLCHAIN_NAME被指定为" arm-linux-androideabi-4.9"以上,但没有。

EDIT2:

ANDROID_ABI是使用的值。在文件" android.toolchain.cmake"但它的值也被复制到ANDROID_NDK_ABI_NAME,它既不用于任何条带路径。

EDIT3: AddQtAndroidApk.cmake可能是一个错误,而不是工具链,因为输出实际上是:

Stripping libraries to minimize size.
Command does not exist: /home/peter/android-ndk-r12b/toolchains/armeabi-v7a-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip
CMakeFiles/my_app_apk.dir/build.make:60: recipe for target 'run_android_deploy_qt' failed

1 个答案:

答案 0 :(得分:0)

文件qtdeploy.json.in以某种方式获得了错误的条目

"toolchain-prefix": "@ANDROID_ABI@",

对于x86来说没问题。当然应该是:

 "toolchain-prefix": "@ANDROID_TOOLCHAIN_MACHINE_NAME@",

除此之外我删除了没有必要的语句设置“ANDROID_STANDALONE_TOOLCHAIN”。我使用

获得了必要的信息
cmake -DCMAKE_VERBOSE_MAKEFILE=on ...
make VERBOSE=1

并查看Qt CMake软件包。