Warning, /education/minuet/cmake/qt-android-mk-apk.cmake is written in an unsupported language. File is not indexed.
0001 include(CMakeParseArguments) 0002 0003 set(QT_ANDROID_MK_APK_DIR ${CMAKE_CURRENT_LIST_DIR}) 0004 0005 function(qt_android_build_apk) 0006 set(options) 0007 set(oneValueArgs 0008 TARGET PACKAGE_NAME ANDROID_EXTRA_FILES QML_ROOT_PATH 0009 SDK_BUILD_TOOLS_VERSION EXTRA_LIBS) 0010 set(multiValueArgs) 0011 cmake_parse_arguments(APK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 0012 0013 # Gather required variables to create the configuration file. 0014 0015 find_package(Qt5 COMPONENTS Core REQUIRED) 0016 # Qt5Core_DIR now points to $Qt5InstallPrefix/lib/cmake/Qt5Core, so 0017 # we get the parent directory three times: 0018 get_filename_component(QT5_INSTALL_PREFIX "${Qt5Core_DIR}/../../.." ABSOLUTE) 0019 message("Qt5 installed in ${QT5_INSTALL_PREFIX}") 0020 0021 # Adjust QML root path if not set: 0022 if(NOT APK_QML_ROOT_PATH) 0023 set(APK_QML_ROOT_PATH $<TARGET_FILE_DIR:${APK_TARGET}>) 0024 endif() 0025 0026 # Get the toolchain prefix, i.e. the folder name within the 0027 # toolchains/ folder without the compiler version 0028 # APK_NDK_TOOLCHAIN_PREFIX 0029 file(RELATIVE_PATH APK_NDK_TOOLCHAIN_PREFIX ${CMAKE_ANDROID_NDK} ${CMAKE_CXX_COMPILER}) 0030 string(REPLACE "/" ";" APK_NDK_TOOLCHAIN_PREFIX ${APK_NDK_TOOLCHAIN_PREFIX}) 0031 list(GET APK_NDK_TOOLCHAIN_PREFIX 1 APK_NDK_TOOLCHAIN_PREFIX) 0032 string(REPLACE "clang" "" NEW_CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION ${CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}) 0033 if(NOT NEW_CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION STREQUAL "") 0034 string(LENGTH "-${NEW_CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION}" VERSION_LENGTH) 0035 string(LENGTH "${APK_NDK_TOOLCHAIN_PREFIX}" FOLDER_LENGTH) 0036 math(EXPR PREFIX_LENGTH ${FOLDER_LENGTH}-${VERSION_LENGTH}) 0037 string(SUBSTRING "${APK_NDK_TOOLCHAIN_PREFIX}" 0 ${PREFIX_LENGTH} APK_NDK_TOOLCHAIN_PREFIX) 0038 endif() 0039 0040 # Get path to the target: 0041 set(APK_TARGET_OUTPUT_FILENAME $<TARGET_FILE:${APK_TARGET}>) 0042 0043 # Get Android SDK build tools version: 0044 if(NOT APK_SDK_BUILD_TOOLS_VERSION) 0045 file(GLOB sdk_versions RELATIVE $ENV{ANDROID_SDK_ROOT}/build-tools 0046 $ENV{ANDROID_SDK_ROOT}/build-tools/*) 0047 list(GET sdk_versions -1 APK_SDK_BUILD_TOOLS_VERSION) 0048 endif() 0049 0050 # Step 1: Create an intermediate config file. At this point, 0051 # the generator expressions will we use are not yet resolved. 0052 configure_file( 0053 ${QT_ANDROID_MK_APK_DIR}/qt-android-deployment.json.in 0054 ${CMAKE_CURRENT_BINARY_DIR}/${APK_TARGET}-config.json.pre) 0055 0056 # Step 2: Run file(CONFIGURE ...) to create the final config JSON 0057 # with generator expressions resolved: 0058 file( 0059 GENERATE 0060 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${APK_TARGET}-config.json 0061 INPUT ${CMAKE_CURRENT_BINARY_DIR}/${APK_TARGET}-config.json.pre) 0062 0063 # Step 3: Create a custom target which will build our APK: 0064 set(APK_DIR ${CMAKE_CURRENT_BINARY_DIR}/${APK_TARGET}-apk-build) 0065 if(NOT APK_ANDROID_EXTRA_FILES) 0066 set( 0067 APK_ANDROID_EXTRA_FILES 0068 ${QT5_INSTALL_PREFIX}/src/android/templates/) 0069 endif() 0070 if(JAVA_HOME) 0071 set(ANDROIDDEPLOYQT_EXTRA_ARGS 0072 ${ANDROIDDEPLOYQT_EXTRA_ARGS} --jdk '${JAVA_HOME}') 0073 endif() 0074 if(${CMAKE_BUILD_TYPE} STREQUAL "Release") 0075 set(ANDROIDDEPLOYQT_EXTRA_ARGS 0076 ${ANDROIDDEPLOYQT_EXTRA_ARGS} --release) 0077 set(APK_FILENAME ${APK_TARGET}-apk-build-release-unsigned.apk) 0078 else() 0079 set(APK_FILENAME ${APK_TARGET}-apk-build-debug.apk) 0080 endif() 0081 add_custom_target( 0082 ${APK_TARGET}-apk 0083 COMMAND ${CMAKE_COMMAND} -E remove_directory ${APK_DIR} 0084 COMMAND ${CMAKE_COMMAND} -E copy_directory 0085 ${QT5_INSTALL_PREFIX}/src/android/templates/ 0086 ${APK_DIR} 0087 COMMAND ${CMAKE_COMMAND} -E copy_directory 0088 ${APK_ANDROID_EXTRA_FILES}/ 0089 ${APK_DIR} 0090 COMMAND ${CMAKE_COMMAND} -E make_directory 0091 ${APK_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI} 0092 COMMAND ${CMAKE_COMMAND} -E copy 0093 ${APK_TARGET_OUTPUT_FILENAME} 0094 ${APK_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI} 0095 COMMAND ${QT5_INSTALL_PREFIX}/bin/androiddeployqt 0096 --verbose 0097 --output ${APK_DIR} 0098 --input ${CMAKE_CURRENT_BINARY_DIR}/${APK_TARGET}-config.json 0099 --deployment bundled 0100 --gradle 0101 ${ANDROIDDEPLOYQT_EXTRA_ARGS} 0102 ) 0103 0104 # Step 4: Create a custom target which pushes the created APK onto 0105 # the device. 0106 add_custom_target( 0107 ${APK_TARGET}-apk-install 0108 COMMAND $ENV{ANDROID_SDK_ROOT}/platform-tools/adb install -r 0109 ${APK_DIR}/build/outputs/apk/debug/${APK_FILENAME} 0110 DEPENDS 0111 ${APK_TARGET}-apk 0112 ) 0113 endfunction()