Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -29,6 +29,10 @@ set(GCOMPRIS_MINOR_VERSION 98) set(GCOMPRIS_PATCH_VERSION 0) +if("${ANDROID_ARCH}" STREQUAL "arm64") +set(GCOMPRIS_PATCH_VERSION 1) +endif() + # Set the BUILD_DATE string(TIMESTAMP BUILD_DATE %Y%m) Index: android/AndroidManifest.xml.cmake =================================================================== --- android/AndroidManifest.xml.cmake +++ android/AndroidManifest.xml.cmake @@ -32,7 +32,7 @@ - + @ANDROID_INTERNET_PERMISSION@ Index: android/CMakeLists.txt =================================================================== --- android/CMakeLists.txt +++ android/CMakeLists.txt @@ -55,6 +55,10 @@ endif() set(ANDROID_TOOLCHAIN arm-linux-androideabi) +if("${ANDROID_ARCH}" STREQUAL "arm64") + set(ANDROID_TOOLCHAIN aarch64-linux-android) +endif() + # set android package source for androiddeployqt json file set(PACKAGE_SOURCE_ANDROID ${CMAKE_BINARY_DIR}/tmpAndroid) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml @ONLY) @@ -82,40 +86,42 @@ list(APPEND ALL_LOCALES ${locale}) endforeach() +find_program(ZIP_ALIGN NAMES zipalign PATHS ${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_BUILD_TOOLS_REVISION}/ ) + add_custom_command ( OUTPUT createApkFromAndroidDeployQtDebug DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} - COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --debug - COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/bin/QtApp-debug.apk ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-debug-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --debug --gradle + COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/build/outputs/apk/debug/android-debug.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-debug-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ) add_custom_command ( OUTPUT createApkFromAndroidDeployQtRelease DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} - COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --release - COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/bin/QtApp-release-unsigned.apk ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --release --gradle + COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/build/outputs/apk/release/android-release-unsigned.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ) add_custom_command ( OUTPUT createApkSignedFromAndroidDeployQtRelease - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk - COMMAND jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $ENV{ANDROID_KEYSTORE} -storepass $ENV{ANDROID_KEYSTORE_PASSWD} ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk gcompris + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $ENV{ANDROID_KEYSTORE} -storepass $ENV{ANDROID_KEYSTORE_PASSWD} ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk gcompris ) add_custom_command ( OUTPUT createApkSignedAlignedFromAndroidDeployQtRelease - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk - COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk - COMMAND ${ANDROID_SDK_ROOT}/build-tools/21.1.2/zipalign -v 4 ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${ZIP_ALIGN} -v 4 ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ) add_custom_command ( OUTPUT apkInstall - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk - COMMAND ${ANDROID_SDK_ROOT}/platform-tools/adb install -r ${CMAKE_CURRENT_BINARY_DIR}/bin/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk + COMMAND ${ANDROID_SDK_ROOT}/platform-tools/adb install -r ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk ) # Command to create apk from Makefile @@ -146,8 +152,15 @@ # compile openssl needed to download from https include(ExternalProject) set(OPENSSL_DIR "${CMAKE_BINARY_DIR}/external/openssl/") -configure_file("build_openssl.sh.in" "build_openssl.sh" @ONLY) +set(SCRIPT_BUILD "build_openssl.sh.in") +if("${ANDROID_ARCH}" STREQUAL "arm64") + set(SCRIPT_BUILD "build_openssl_64.sh.in") +endif() +message(STATUS "Building ${SCRIPT_BUILD}") + +configure_file("${SCRIPT_BUILD}" "build_openssl.sh" @ONLY) +if("${ANDROID_ARCH}" STREQUAL "arm") ExternalProject_Add( ext_openssl DOWNLOAD_DIR ${CMAKE_BINARY_DIR} @@ -158,12 +171,33 @@ BUILD_COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/build_openssl.sh" INSTALL_COMMAND "" ) - -add_custom_command( +add_custom_command( OUTPUT package_openssl COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libcrypto.so.1.0.0" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libcrypto.so" COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libssl.so.1.0.0" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libssl.so" ) +else() + # For Qt 5.12.5, it needs libcrypto_1_1.so and libssl_1_1.so + set(suffix_libssl "") + if(Qt5Core_VERSION VERSION_LESS "5.13.0") + set(suffix_libssl "_1_1") + endif() +ExternalProject_Add( + ext_openssl + DOWNLOAD_DIR ${CMAKE_BINARY_DIR} + SOURCE_DIR ${OPENSSL_DIR} + URL https://www.openssl.org/source/openssl-1.1.1c.tar.gz + URL_HASH SHA256=f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90 + CONFIGURE_COMMAND echo "Configuration not needed" + BUILD_COMMAND sh "${CMAKE_CURRENT_BINARY_DIR}/build_openssl.sh" + INSTALL_COMMAND "" + ) +add_custom_command( + OUTPUT package_openssl + COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libcrypto.so.1.1" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libcrypto${suffix_libssl}.so" + COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libssl.so.1.1" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libssl${suffix_libssl}.so" + ) +endif() # add_custom_command( Index: android/build_openssl.sh.in =================================================================== --- android/build_openssl.sh.in +++ android/build_openssl.sh.in @@ -3,15 +3,13 @@ # The only argument to the script is source directory. source_dir=$1 -export PATH=@ANDROID_NDK@/toolchains/@ANDROID_TOOLCHAIN@-4.9/prebuilt/@_HOST@/bin/:$PATH -echo $PATH -export CROSS_COMPILE="@ANDROID_TOOLCHAIN_PATH@@ANDROID_TOOLCHAIN@-" +export PATH=@ANDROID_NDK@/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH export NDK_SYSROOT=@ANDROID_NDK@ export ANDROID_NDK_ROOT=@ANDROID_NDK@ export ANDROID_DEV=@ANDROID_NDK@/platforms/android-@CMAKE_ANDROID_API@/arch-arm/usr export SYSROOT=@ANDROID_NDK@/platforms/android-@CMAKE_ANDROID_API@/arch-arm/ cd ${source_dir} @REMOVE_mandroid_FLAG_FOR_CLANG@ -./Configure --prefix=. --openssldir=./ssl android-armv7 no-asm shared -make && make libssl.so.1.0.0 libcrypto.so.1.0.0 +./Configure --prefix=@CMAKE_CURRENT_BINARY_DIR@ --openssldir=./ssl android-arm no-asm shared -D__ANDROID_API__=@CMAKE_ANDROID_API@ +make cd - Index: android/build_openssl_64.sh.in =================================================================== --- /dev/null +++ android/build_openssl_64.sh.in @@ -0,0 +1,16 @@ +#!/usr/bin/sh + +# The only argument to the script is source directory. +source_dir=$1 + +export PATH=@ANDROID_NDK@/toolchains/aarch64-linux-android-4.9/prebuilt/@_HOST@/bin/:$PATH +export NDK_SYSROOT=@ANDROID_NDK@ +export ANDROID_NDK_ROOT=@ANDROID_NDK@ +export ANDROID_DEV=@ANDROID_NDK@/platforms/android-@CMAKE_ANDROID_API@/arch-@ANDROID_ARCH@/usr +export SYSROOT=@ANDROID_NDK@/platforms/android-@CMAKE_ANDROID_API@/arch-@ANDROID_ARCH@/ +cd ${source_dir} +@REMOVE_mandroid_FLAG_FOR_CLANG@ +./Configure --prefix=@CMAKE_CURRENT_BINARY_DIR@ --openssldir=./ssl android-arm64 no-asm shared -D__ANDROID_API__=@CMAKE_ANDROID_API@ +make +cd - + Index: android/configAndroid.json.cmake =================================================================== --- android/configAndroid.json.cmake +++ android/configAndroid.json.cmake @@ -3,6 +3,7 @@ "qt": "@_qt5Core_install_prefix@", "sdk": "@ANDROID_SDK_ROOT@", "ndk": "@ANDROID_NDK@", + "sdkBuildToolsRevision": "@ANDROID_SDK_BUILD_TOOLS_REVISION@", "toolchain-prefix": "@ANDROID_TOOLCHAIN@", "tool-prefix": "@ANDROID_TOOLCHAIN@", "toolchain-version": "4.9", Index: tools/android_build_all_apk.sh =================================================================== --- tools/android_build_all_apk.sh +++ tools/android_build_all_apk.sh @@ -20,7 +20,7 @@ # Uncomment if this is not already done # make getSvnTranslations -Qt5_BaseDIR=~/Qt5.12.1/5.12.1 +Qt5_BaseDIR=~/Qt/5.12.5 export ANDROID_NDK_ROOT=$ANDROID_NDK # The current version @@ -58,11 +58,7 @@ fi cmake -DCMAKE_TOOLCHAIN_FILE=/usr/share/ECM/toolchain/Android.cmake \ - -DCMAKE_ANDROID_API=16 \ -DCMAKE_BUILD_TYPE=release \ - -DCMAKE_ANDROID_STL_TYPE=c++_shared \ - -DANDROID_TOOLCHAIN_PATH=/opt/android-16-arm/bin/ \ - -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ -DANDROID_ARCHITECTURE=$1 \ -DQt5_DIR=${Qt5_BaseDIR}/${QtTarget}/lib/cmake/Qt5 \ -DQt5Qml_DIR=${Qt5_BaseDIR}/${QtTarget}/lib/cmake/Qt5Qml \ @@ -95,21 +91,21 @@ cd ${builddir} f_cmake arm inapp OFF ON OFF -make +make -j 4 make BuildTranslations make apk_release && make apk_signed && make apk_signed_aligned f_cmake arm internal OFF ON OFF -make +make -j 4 make apk_release && make apk_signed && make apk_signed_aligned f_cmake arm no OFF ON OFF -make +make -j 4 make apk_release && make apk_signed && make apk_signed_aligned f_cmake arm no ON ON OFF make clean -make +make -j 4 make BuildTranslations make apk_release && make apk_signed && make apk_signed_aligned