2020-10-07 13:49:40 +05:00
#!/bin/bash -e
2020-05-26 18:45:48 +03:00
################################################################################
2023-11-22 21:49:23 +01:00
## File: install-android-sdk.sh
## Desc: Install Android SDK and tools
2020-05-26 18:45:48 +03:00
################################################################################
# Source the helpers for use with the script
source $HELPER_SCRIPTS /os.sh
2020-10-01 13:08:53 +03:00
source $HELPER_SCRIPTS /install.sh
2021-07-07 15:16:46 +03:00
source $HELPER_SCRIPTS /etc-environment.sh
2020-05-26 18:45:48 +03:00
2024-03-14 10:53:11 +01:00
add_filtered_installation_components() {
2023-12-11 11:58:37 +01:00
local minimum_version = $1
2020-09-29 17:26:59 +03:00
shift
2023-12-11 11:58:37 +01:00
local tools_array =( " $@ " )
2020-09-29 17:26:59 +03:00
2023-12-11 11:58:37 +01:00
for item in ${ tools_array [@] } ; do
2024-03-14 10:53:11 +01:00
# Take the last argument after splitting string by ';'' and '-''
2023-12-11 11:58:37 +01:00
item_version = $( echo " ${ item ##*[-;] } " )
# Semver 'comparison'. Add item to components array, if item's version is greater than or equal to minimum version
if [[ " $( printf " ${ minimum_version } \n ${ item_version } \n" | sort -V | head -n1) " == " $minimum_version " ]] ; then
2020-10-01 16:33:20 +03:00
components +=( $item )
2020-09-29 17:26:59 +03:00
fi
done
}
2023-12-11 11:58:37 +01:00
get_full_ndk_version() {
local major_version = $1
ndk_version = $( $SDKMANAGER --list | grep "ndk; ${ major_version } \." | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
echo " $ndk_version "
2021-02-04 13:34:30 +03:00
}
2020-05-26 18:45:48 +03:00
# Set env variable for SDK Root (https://developer.android.com/studio/command-line/variables)
ANDROID_ROOT = /usr/local/lib/android
ANDROID_SDK_ROOT = ${ ANDROID_ROOT } /sdk
2021-07-07 15:16:46 +03:00
SDKMANAGER = ${ ANDROID_SDK_ROOT } /cmdline-tools/latest/bin/sdkmanager
2023-12-26 12:50:52 +01:00
set_etc_environment_variable "ANDROID_SDK_ROOT" " ${ ANDROID_SDK_ROOT } "
2020-05-26 18:45:48 +03:00
# ANDROID_HOME is deprecated, but older versions of Gradle rely on it
2023-12-26 12:50:52 +01:00
set_etc_environment_variable "ANDROID_HOME" " ${ ANDROID_SDK_ROOT } "
2020-05-26 18:45:48 +03:00
# Create android sdk directory
mkdir -p ${ ANDROID_SDK_ROOT }
2023-04-04 12:36:53 +02:00
# Download the latest command line tools so that we can accept all of the licenses.
# See https://developer.android.com/studio/#command-tools
2023-12-11 11:58:37 +01:00
cmdline_tools_package = $( get_toolset_value '.android."cmdline-tools"' )
if [[ $cmdline_tools_version == "latest" ]] ; then
REPOSITORY_XML_URL = "https://dl.google.com/android/repository/repository2-1.xml"
repository_xml_file = $( download_with_retry " $REPOSITORY_XML_URL " )
cmdline_tools_package = $(
yq -p= xml \
'.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \
" ${ repository_xml_file } "
2023-04-04 12:36:53 +02:00
)
2023-01-29 19:54:27 +01:00
2023-12-11 11:58:37 +01:00
if [[ -z $cmdline_tools_package ]] ; then
2023-04-04 12:36:53 +02:00
echo "Failed to parse latest command-line tools version"
exit 1
fi
2022-05-31 10:05:22 +02:00
fi
2023-12-11 11:58:37 +01:00
# Install command line tools
archive_path = $( download_with_retry "https://dl.google.com/android/repository/ ${ cmdline_tools_package } " )
2023-11-29 20:25:29 +01:00
unzip -qq " $archive_path " -d ${ ANDROID_SDK_ROOT } /cmdline-tools
2021-07-07 15:16:46 +03:00
# Command line tools need to be placed in ${ANDROID_SDK_ROOT}/sdk/cmdline-tools/latest to determine SDK root
mv ${ ANDROID_SDK_ROOT } /cmdline-tools/cmdline-tools ${ ANDROID_SDK_ROOT } /cmdline-tools/latest
2020-05-26 18:45:48 +03:00
# Check sdk manager installation
2023-12-11 11:58:37 +01:00
if ${ SDKMANAGER } --list 1>/dev/null; then
2020-05-26 18:45:48 +03:00
echo "Android SDK manager was installed"
else
echo "Android SDK manager was not installed"
exit 1
fi
2023-12-11 11:58:37 +01:00
# Get toolset values and prepare environment variables
minimum_build_tool_version = $( get_toolset_value '.android.build_tools_min_version' )
minimum_platform_version = $( get_toolset_value '.android.platform_min_version' )
android_ndk_major_default = $( get_toolset_value '.android.ndk.default' )
android_ndk_major_versions =( $( get_toolset_value '.android.ndk.versions[]' ) )
android_ndk_major_latest =( ${ android_ndk_major_versions [-1] } )
2020-08-20 13:39:33 +05:00
2023-12-11 11:58:37 +01:00
ndk_default_full_version = $( get_full_ndk_version $android_ndk_major_default )
ndk_latest_full_version = $( get_full_ndk_version $android_ndk_major_latest )
ANDROID_NDK = ${ ANDROID_SDK_ROOT } /ndk/${ ndk_default_full_version }
2022-08-10 13:55:34 +01:00
# ANDROID_NDK, ANDROID_NDK_HOME, and ANDROID_NDK_ROOT variables should be set as many customer builds depend on them https://github.com/actions/runner-images/issues/5879
2023-12-26 12:50:52 +01:00
set_etc_environment_variable "ANDROID_NDK" " ${ ANDROID_NDK } "
set_etc_environment_variable "ANDROID_NDK_HOME" " ${ ANDROID_NDK } "
set_etc_environment_variable "ANDROID_NDK_ROOT" " ${ ANDROID_NDK } "
set_etc_environment_variable "ANDROID_NDK_LATEST_HOME" " ${ ANDROID_SDK_ROOT } /ndk/ ${ ndk_latest_full_version } "
2021-02-04 13:34:30 +03:00
2023-12-11 11:58:37 +01:00
# Prepare components for installation
extras = $( get_toolset_value '.android.extra_list[] | "extras;" + .' )
addons = $( get_toolset_value '.android.addon_list[] | "add-ons;" + .' )
additional = $( get_toolset_value '.android.additional_tools[]' )
components =( " ${ extras [@] } " " ${ addons [@] } " " ${ additional [@] } " )
2020-08-20 13:39:33 +05:00
2023-12-11 11:58:37 +01:00
for ndk_major_version in " ${ android_ndk_major_versions [@] } " ; do
ndk_full_version = $( get_full_ndk_version $ndk_major_version )
components +=( "ndk; $ndk_full_version " )
done
2020-10-01 16:33:20 +03:00
2023-12-11 11:58:37 +01:00
available_platforms =( $( $SDKMANAGER --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-[0-9]" | cut -d"|" -f 1) )
all_build_tools =( $( $SDKMANAGER --list | grep "build-tools;" | cut -d"|" -f 1 | sort -u) )
available_build_tools = $( echo ${ all_build_tools [@]//*rc[0-9]/ } )
2024-03-14 10:53:11 +01:00
add_filtered_installation_components $minimum_platform_version " ${ available_platforms [@] } "
add_filtered_installation_components $minimum_build_tool_version " ${ available_build_tools [@] } "
2023-12-11 11:58:37 +01:00
# Install components
2021-02-04 13:34:30 +03:00
echo "y" | $SDKMANAGER ${ components [@] }
2020-08-20 13:39:33 +05:00
2020-08-28 16:17:22 +03:00
# Add required permissions
chmod -R a+rwx ${ ANDROID_SDK_ROOT }
2020-12-24 12:14:41 +03:00
2023-12-26 12:50:52 +01:00
reload_etc_environment
2023-12-11 11:58:37 +01:00
2020-12-24 12:14:41 +03:00
invoke_tests "Android"