Warning, /education/gcompris/android/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 #============================================================================= 0002 # SPDX-FileCopyrightText: 2014 Johnny Jazeix <jazeix@gmail.com> 0003 # 0004 # SPDX-License-Identifier: BSD-3-Clause 0005 #============================================================================= 0006 #android build 0007 # copied/inspired from stellarium project (http://www.stellarium.org/wiki/index.php/Building_for_Android) 0008 0009 list(APPEND JAVA_SRCS "src/net/gcompris/GComprisActivity.java") 0010 0011 foreach(JavaSource ${JAVA_SRCS}) 0012 add_custom_command( 0013 OUTPUT ${CMAKE_BINARY_DIR}/android-build/${JavaSource} 0014 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${JavaSource} ${CMAKE_BINARY_DIR}/android-build/${JavaSource} 0015 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${JavaSource} 0016 ) 0017 list(APPEND TARGET_JAVA_FILES ${CMAKE_BINARY_DIR}/android-build/${JavaSource}) 0018 endforeach() 0019 0020 add_custom_target(java_src DEPENDS ${TARGET_JAVA_FILES}) 0021 0022 find_program(ANDROID_DEPLOY_QT NAMES androiddeployqt PATHS ${_qt5Core_install_prefix}/bin/) 0023 0024 # Look for androiddeployqt program 0025 if(NOT ANDROID_DEPLOY_QT) 0026 message(FATAL_ERROR "Could not find androiddeployqt. Make sure you set all the Qt5_* paths to the Qt for android compiled version.") 0027 endif() 0028 0029 # Set version 0030 set(ANDROID_VERSION_NAME ${GCOMPRIS_VERSION}) 0031 0032 # Set a name representing the build type 0033 set(APK_SUFFIX "-") 0034 0035 # _HOST have been removed from ECM in https://cgit.kde.org/extra-cmake-modules.git/commit/?id=731ba7036effcc430f98031e7f2a9826f6234cba 0036 set(_HOST "${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}") 0037 string(TOLOWER "${_HOST}" _HOST) 0038 0039 if(WITH_DOWNLOAD) 0040 set(APK_SUFFIX "-dl${APK_SUFFIX}") 0041 endif() 0042 0043 if(WITH_KIOSK_MODE) 0044 set(APK_SUFFIX "-kiosk${APK_SUFFIX}") 0045 endif() 0046 0047 if(Qt5Widgets_VERSION VERSION_GREATER_EQUAL "5.14.0") 0048 set(STDCPP_PATH "\"stdcpp-path\": \"${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/\"") 0049 else() 0050 set(STDCPP_PATH ",\"stdcpp-path\": \"${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so\"") 0051 endif() 0052 0053 set(ANDROID_TOOLCHAIN arm-linux-androideabi) 0054 if("${CMAKE_ANDROID_ARCH}" STREQUAL "arm64") 0055 set(ANDROID_TOOLCHAIN aarch64-linux-android) 0056 endif() 0057 0058 # set android package source for androiddeployqt json file 0059 set(PACKAGE_SOURCE_ANDROID ${CMAKE_BINARY_DIR}/tmpAndroid) 0060 set(ANDROID_SDK_ROOT $ENV{ANDROID_SDK_ROOT}) 0061 0062 if(Qt5Widgets_VERSION VERSION_GREATER_EQUAL "5.14.0") 0063 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml @ONLY) 0064 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configAndroid.json.cmake ${PACKAGE_SOURCE_ANDROID}/configAndroid.json @ONLY) 0065 # TODO Remove this file as soon as we have moved to plugins instead of rcc files for activities 0066 # This way, we'll use the one provided by Qt 0067 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/build_5.14.gradle ${PACKAGE_SOURCE_ANDROID}/build.gradle @ONLY) 0068 else() 0069 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest_5.12.xml.cmake ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml @ONLY) 0070 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configAndroid_5.12.json.cmake ${PACKAGE_SOURCE_ANDROID}/configAndroid.json @ONLY) 0071 endif() 0072 0073 # Get all po files in po/ to create the values-{locale} in order to have the locales available in android 0074 file(GLOB TRANSLATIONS_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "../po/*.po") 0075 foreach(PoSource ${TRANSLATIONS_FILES}) 0076 # Remove suffix ".po" 0077 string(REPLACE ".po" "" PoSource ${PoSource}) 0078 # Remove prefix "../po/gcompris_" 0079 string(REPLACE "../po/gcompris_" "" locale ${PoSource}) 0080 # replace _ par -r for locales with country 0081 string(REPLACE "_" "-r" locale ${locale}) 0082 0083 add_custom_command( 0084 OUTPUT ${locale} 0085 COMMAND cmake -E make_directory ${GCOMPRIS_TRANSLATIONS_DIR} 0086 COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/android-build/res/values-${locale} 0087 COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/android/strings.xml ${CMAKE_BINARY_DIR}/android-build/res/values-${locale}/strings.xml 0088 ) 0089 list(APPEND ALL_LOCALES ${locale}) 0090 endforeach() 0091 0092 add_custom_command( 0093 OUTPUT createApkFromAndroidDeployQtDebug 0094 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0095 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0096 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_BINARY_DIR}/android-build/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --debug --gradle 0097 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/android-build/build/outputs/apk/debug/android-build-debug.apk ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-debug-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0098 ) 0099 0100 add_custom_command( 0101 OUTPUT createApkFromAndroidDeployQtRelease 0102 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0103 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0104 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_BINARY_DIR}/android-build/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --release --gradle 0105 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/android-build/build/outputs/apk/release/android-build-release-unsigned.apk ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0106 ) 0107 0108 add_custom_command( 0109 OUTPUT createApkSignedAlignedFromAndroidDeployQtRelease 0110 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0111 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0112 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_BINARY_DIR}/android-build/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --gradle --sign $ENV{ANDROID_KEYSTORE} gcompris --storepass $ENV{ANDROID_KEYSTORE_PASSWD} 0113 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/android-build/build/outputs/apk/release/android-build-release-signed.apk ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0114 ) 0115 0116 add_custom_command( 0117 OUTPUT createAabFromAndroidDeploy 0118 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0119 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0120 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_BINARY_DIR}/android-build/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --aab --release --gradle 0121 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_BINARY_DIR}/android-build/build/outputs/bundle/release/android-build-release.aab ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-release${APK_SUFFIX}${GCOMPRIS_VERSION}.aab 0122 ) 0123 0124 add_custom_command( 0125 OUTPUT apkInstall 0126 DEPENDS ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0127 COMMAND ${ANDROID_SDK_ROOT}/platform-tools/adb install -r ${CMAKE_BINARY_DIR}/android-build/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0128 ) 0129 0130 # Command to create apk from Makefile 0131 add_custom_target(apk_debug 0132 DEPENDS ${ALL_LOCALES} move_translations_to_assets createApkFromAndroidDeployQtDebug java_src 0133 ) 0134 0135 # Command to create apk from Makefile 0136 add_custom_target(apk_release 0137 DEPENDS ${ALL_LOCALES} move_translations_to_assets createApkFromAndroidDeployQtRelease java_src 0138 ) 0139 0140 # Command to create aligned signed apk from Makefile 0141 add_custom_target(apk_aligned_signed 0142 DEPENDS ${ALL_LOCALES} move_translations_to_assets createApkSignedAlignedFromAndroidDeployQtRelease java_src 0143 ) 0144 0145 # Command to create aab from Makefile 0146 add_custom_target(aab_release 0147 DEPENDS ${ALL_LOCALES} move_translations_to_assets createAabFromAndroidDeploy java_src 0148 ) 0149 0150 # Command to install the signed aligned apk through adb from Makefile 0151 add_custom_target(apk_install 0152 DEPENDS apkInstall 0153 ) 0154 0155 # compile openssl needed to download from https 0156 include(ExternalProject) 0157 set(OPENSSL_DIR "${CMAKE_BINARY_DIR}/external/openssl/") 0158 0159 # For Qt 5.12.5 and above 5.13.0, it needs libcrypto_1_1.so and libssl_1_1.so 0160 set(suffix_libssl ".so") 0161 if(Qt5Core_VERSION VERSION_GREATER_EQUAL "5.12.5" AND NOT Qt5Core_VERSION MATCHES "5.13.0") 0162 set(suffix_libssl "_1_1.so") 0163 endif() 0164 0165 find_program(LLVM_STRIP NAMES llvm-strip PATHS ${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/) 0166 0167 ExternalProject_Add( 0168 ext_openssl 0169 DOWNLOAD_DIR ${CMAKE_BINARY_DIR} 0170 SOURCE_DIR ${OPENSSL_DIR} 0171 URL https://www.openssl.org/source/openssl-1.1.1w.tar.gz 0172 URL_HASH SHA256=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8 0173 BUILD_IN_SOURCE 1 0174 CONFIGURE_COMMAND 0175 ${CMAKE_COMMAND} -E env PATH=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin:$ENV{PATH} 0176 ./Configure --prefix=${CMAKE_BINARY_DIR}/android-build --openssldir=./ssl android-${CMAKE_ANDROID_ARCH} shared -D__ANDROID_API__=${CMAKE_ANDROID_API} 0177 BUILD_COMMAND 0178 ${CMAKE_COMMAND} -E env PATH=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin:$ENV{PATH} 0179 make SHLIB_VERSION_NUMBER= SHLIB_EXT=${suffix_libssl} build_libs && 0180 ${LLVM_STRIP} --strip-all libcrypto${suffix_libssl} && 0181 ${LLVM_STRIP} --strip-all libcrypto${suffix_libssl} 0182 INSTALL_COMMAND 0183 ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libcrypto${suffix_libssl}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/" && 0184 ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libssl${suffix_libssl}" "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/" 0185 ) 0186 0187 # 0188 add_custom_command( 0189 OUTPUT move_translations_to_assets 0190 COMMAND ${CMAKE_COMMAND} -E copy_directory ${GCOMPRIS_TRANSLATIONS_DIR} ${CMAKE_BINARY_DIR}/android-build/assets/share/GCompris 0191 ) 0192 0193 if(TARGET create-apk) 0194 set(PACKAGE_DIR ${PACKAGE_SOURCE_ANDROID}) 0195 set_target_properties(create-apk-GCompris PROPERTIES ANDROID_APK_DIR "${PACKAGE_DIR}") 0196 add_custom_target(gcompris-move-metadata ALL 0197 COMMAND cmake -E echo "Moving GCompris shared Android resources" 0198 COMMAND cmake -E make_directory ${PACKAGE_SOURCE_ANDROID} 0199 COMMAND cmake -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}" "${PACKAGE_SOURCE_ANDROID}" 0200 ) 0201 add_dependencies(create-apk gcompris-move-metadata) 0202 endif()