summaryrefslogtreecommitdiff
path: root/tests/manual/android/setup/setup_android.cmake
blob: c4dfb275b35aef92fd0bab78525090378fb562e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# CMake script to download OpenJDK and Android Command Line Tools.
# Execute with: cmake -P setup_android.cmake

set(JDK_VERSION "11.0.9.1+1")

set(ANDROID_CMDTOOLS_VERSION "8092744")
set(ANDROID_PLATFORM "android-31")
set(BUILD_TOOLS "31.0.0")
set(NDK_VERSION "22.1.7171670")

set(qtc_android_sdk_definitions "${CMAKE_CURRENT_LIST_DIR}/../../../../share/qtcreator/android/sdk_definitions.json")

if (EXISTS ${qtc_android_sdk_definitions} AND CMAKE_VERSION GREATER_EQUAL 3.19)
  file(READ ${qtc_android_sdk_definitions} sdk_definitions)

  string(JSON linux_url GET "${sdk_definitions}" common sdk_tools_url linux)
  string(REGEX REPLACE "^.*commandlinetools-linux-\([0-9]+\)_latest.zip" "\\1" ANDROID_CMDTOOLS_VERSION "${linux_url}")

  string(JSON essential_packages GET "${sdk_definitions}" common sdk_essential_packages default)
  string(REGEX REPLACE "^.*\"platforms;\(android-[0-9]+\)\",.*$" "\\1" ANDROID_PLATFORM "${essential_packages}")

  string(JSON sdk_essential_packages GET "${sdk_definitions}" specific_qt_versions 0 sdk_essential_packages)
  string(REGEX REPLACE "^.*\"build-tools;\([0-9.]+\)\".*$" "\\1" BUILD_TOOLS "${sdk_essential_packages}")
  string(REGEX REPLACE "^.*\"ndk;\([0-9.]+\)\".*$" "\\1" NDK_VERSION "${sdk_essential_packages}")

  foreach(var ANDROID_CMDTOOLS_VERSION ANDROID_PLATFORM BUILD_TOOLS NDK_VERSION)
    message("${var}: ${${var}}")
  endforeach()
endif()

function(download_jdk)
  string(REPLACE "+" "_" version_no_plus ${JDK_VERSION})
  string(REPLACE "+" "%2B" version_url_encode ${JDK_VERSION})
  if (WIN32)
    set(jdk_suffix "windows_hotspot_${version_no_plus}.zip")
  elseif(APPLE)
    set(jdk_suffix "mac_hotspot_${version_no_plus}.tar.gz")
  else()
    set(jdk_suffix "linux_hotspot_${version_no_plus}.tar.gz")
  endif()

  set(jdk_url "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-${version_url_encode}/OpenJDK11U-jdk_x64_${jdk_suffix}")

  message("Downloading: ${jdk_url}")
  file(DOWNLOAD ${jdk_url} ./jdk.zip SHOW_PROGRESS)
  execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ./jdk.zip COMMAND_ERROR_IS_FATAL ANY)
endfunction()

function(download_android_commandline)
  if (WIN32)
    set(android_cmdtools_suffix "win")
  elseif(APPLE)
    set(android_cmdtools_suffix "mac")
  else()
    set(android_cmdtools_suffix "linux")
  endif()

  set(android_cmdtools_url "https://dl.google.com/android/repository/commandlinetools-${android_cmdtools_suffix}-${ANDROID_CMDTOOLS_VERSION}_latest.zip")

  message("Downloading: ${android_cmdtools_url}")
  file(DOWNLOAD ${android_cmdtools_url} ./android_commandline_tools.zip SHOW_PROGRESS)
  file(MAKE_DIRECTORY android-sdk)
  file(MAKE_DIRECTORY android-cmdlinetools)
  execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ../android_commandline_tools.zip WORKING_DIRECTORY android-cmdlinetools COMMAND_ERROR_IS_FATAL ANY)
endfunction()

function(setup_android)
  set(sdkmanager "${CMAKE_CURRENT_LIST_DIR}/android-cmdlinetools/cmdline-tools/bin/sdkmanager")
  if (WIN32)
    set(sdkmanager "${sdkmanager}.bat")
  endif()

  set(ENV{JAVA_HOME} "${CMAKE_CURRENT_LIST_DIR}/jdk-${JDK_VERSION}")
  if (APPLE)
    set(ENV{JAVA_HOME} "$ENV{JAVA_HOME}/Contents/Home")
  endif()

  file(WRITE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n")
  execute_process(
    INPUT_FILE ${CMAKE_CURRENT_LIST_DIR}/accept_license.txt
    COMMAND ${sdkmanager} --licenses --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
    COMMAND_ERROR_IS_FATAL ANY)
   execute_process(
     COMMAND ${sdkmanager} --update --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
     COMMAND_ERROR_IS_FATAL ANY)
   execute_process(
     COMMAND ${sdkmanager}
        "platforms;${ANDROID_PLATFORM}"
        "build-tools;${BUILD_TOOLS}"
        "ndk;${NDK_VERSION}"
        "platform-tools"
        "cmdline-tools;latest"
        "tools"
        "emulator"
        "ndk-bundle" --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
        COMMAND_ERROR_IS_FATAL ANY)

  if (WIN32)
    execute_process(
      COMMAND ${sdkmanager}
        "extras;google;usb_driver"
        --sdk_root=${CMAKE_CURRENT_LIST_DIR}/android-sdk
        COMMAND_ERROR_IS_FATAL ANY)
  endif()
endfunction()

download_jdk()
download_android_commandline()
setup_android()