diff options
Diffstat (limited to 'cmake/QtPlatformAndroid.cmake')
-rw-r--r-- | cmake/QtPlatformAndroid.cmake | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/cmake/QtPlatformAndroid.cmake b/cmake/QtPlatformAndroid.cmake index cb335da831..4b5bf6ff13 100644 --- a/cmake/QtPlatformAndroid.cmake +++ b/cmake/QtPlatformAndroid.cmake @@ -27,6 +27,18 @@ if (NOT IS_DIRECTORY "${ANDROID_SDK_ROOT}") message(FATAL_ERROR "Could not find ANDROID_SDK_ROOT or path is not a directory: ${ANDROID_SDK_ROOT}") endif() +# Get the Android SDK jar for an API version other than the one specified with +# QT_ANDROID_API_VERSION. +function(qt_get_android_sdk_jar_for_api api out_jar_location) + set(jar_location "${ANDROID_SDK_ROOT}/platforms/${api}/android.jar") + if (NOT EXISTS "${jar_location}") + message(WARNING "Could not locate Android SDK jar for api '${api}', defaulting to ${QT_ANDROID_API_VERSION}") + set(${out_jar_location} ${QT_ANDROID_JAR} PARENT_SCOPE) + else() + set(${out_jar_location} ${jar_location} PARENT_SCOPE) + endif() +endfunction() + # Minimum recommend android SDK api version set(QT_ANDROID_API_VERSION "android-21") @@ -305,9 +317,62 @@ endfunction() function(qt_android_apply_arch_suffix target) get_target_property(target_type ${target} TYPE) - if (target_type STREQUAL "SHARED_LIBRARY") + if (target_type STREQUAL "SHARED_LIBRARY" OR target_type STREQUAL "MODULE_LIBRARY") set_property(TARGET "${target}" PROPERTY SUFFIX "_${CMAKE_ANDROID_ARCH_ABI}.so") elseif (target_type STREQUAL "STATIC_LIBRARY") set_property(TARGET "${target}" PROPERTY SUFFIX "_${CMAKE_ANDROID_ARCH_ABI}.a") endif() endfunction() + +# Add custom target to package the APK +function(qt_android_add_apk_target target) + get_target_property(deployment_file ${target} QT_ANDROID_DEPLOYMENT_SETTINGS_FILE) + if (NOT deployment_file) + message(FATAL_ERROR "Target ${target} is not a valid android executable target\n") + endif() + + set(deployment_tool "${QT_HOST_PATH}/bin/androiddeployqt") + set(apk_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/android-build") + add_custom_target(${target}_prepare_apk_dir + DEPENDS ${target} + COMMAND ${CMAKE_COMMAND} + -E copy $<TARGET_FILE:${target}> + "${apk_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>" + COMMENT "Copying ${target} binarty to apk folder" + ) + + add_custom_target(${target}_make_apk + DEPENDS ${target}_prepare_apk_dir + COMMAND ${deployment_tool} + --input ${deployment_file} + --output ${apk_dir} + COMMENT "Creating APK for ${target}" + ) +endfunction() + + +# Add a test for Android which will be run by the android test runner tool +function(qt_android_add_test target) + + set(deployment_tool "${QT_HOST_PATH}/bin/androiddeployqt") + set(test_runner "${QT_HOST_PATH}/bin/androidtestrunner") + + get_target_property(deployment_file ${target} QT_ANDROID_DEPLOYMENT_SETTINGS_FILE) + if (NOT deployment_file) + message(FATAL_ERROR "Target ${target} is not a valid android executable target\n") + endif() + + set(target_binary_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>") + set(apk_dir "${target_binary_dir}/android-build") + + add_test(NAME "${target}" + COMMAND "${test_runner}" + --androiddeployqt "${deployment_tool} --input ${deployment_file}" + --adb "${ANDROID_SDK_ROOT}/platform-tools/adb" + --path "${apk_dir}" + --skip-install-root + --make "${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target ${target}_make_apk" + --apk "${apk_dir}/${target}.apk" + --verbose + ) +endfunction() |