2020-10-23 17:59:08 +03:00
#!/bin/bash -e -o pipefail
2020-09-10 14:34:08 +03:00
source ~/utils/utils.sh
2020-10-05 10:57:58 +03:00
function filter_components_by_version {
minimumVersion = $1
2020-09-29 18:19:26 +03:00
shift
toolsArr =( " $@ " )
for item in ${ toolsArr [@] }
do
2020-10-05 10:57:58 +03:00
# take the last argument after spliting string by ';'' and '-''
version = $( echo " ${ item ##*[-;] } " )
if verlte $minimumVersion $version
2020-09-29 18:19:26 +03:00
then
2020-10-05 10:57:58 +03:00
components +=( $item )
2020-09-29 18:19:26 +03:00
fi
done
}
2021-02-01 12:56:44 +03:00
function get_full_ndk_version {
majorVersion = $1
ndkVersion = $( ${ SDKMANAGER } --list | grep "ndk; ${ majorVersion } .*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
echo " $ndkVersion "
}
2020-10-05 10:57:58 +03:00
components =()
2021-09-15 10:14:42 +03:00
ANDROID_PLATFORM = $( get_toolset_value '.android.platform_min_version' )
ANDROID_BUILD_TOOL = $( get_toolset_value '.android.build_tools_min_version' )
2020-09-10 14:34:08 +03:00
ANDROID_EXTRA_LIST =( $( get_toolset_value '.android."extra-list"[]' ) )
ANDROID_ADDON_LIST =( $( get_toolset_value '.android."addon-list"[]' ) )
2020-12-31 13:22:17 +05:00
ANDROID_ADDITIONAL_TOOLS =( $( get_toolset_value '.android."additional-tools"[]' ) )
2021-09-15 10:14:42 +03:00
ANDROID_NDK_MAJOR_VERSIONS =( $( get_toolset_value '.android.ndk."versions"[]' ) )
2022-07-29 10:50:39 +04:00
ANDROID_NDK_MAJOR_DEFAULT = $( get_toolset_value '.android.ndk.default' )
2021-09-15 10:14:42 +03:00
ANDROID_NDK_MAJOR_LATEST = $( get_toolset_value '.android.ndk."versions"[-1]' )
2021-07-07 15:16:23 +03:00
# Get the latest command line tools from https://developer.android.com/studio#cmdline-tools
2023-01-23 18:54:13 +03:00
# Newer version(s) require Java 11 by default
# See https://github.com/actions/runner-images/issues/6960
2020-09-10 14:34:08 +03:00
ANDROID_HOME = $HOME /Library/Android/sdk
ANDROID_OSX_SDK_FILE = tools-macosx.zip
2023-10-17 11:23:09 +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
cmdlineToolsVersion = $( get_toolset_value '.android."cmdline-tools"' )
if [[ $cmdlineToolsVersion == "latest" ]] ; then
repositoryXmlUrl = "https://dl.google.com/android/repository/repository2-1.xml"
download_with_retries $repositoryXmlUrl "/tmp" "repository2-1.xml"
cmdlineToolsVersion = $(
yq -p= xml \
'.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-mac"))' \
/tmp/repository2-1.xml
)
if [[ -z $cmdlineToolsVersion ]] ; then
echo "Failed to parse latest command-line tools version"
exit 1
fi
fi
2020-09-10 14:34:08 +03:00
2021-07-07 15:16:23 +03:00
echo "Downloading android command line tools..."
2023-10-17 11:23:09 +02:00
download_with_retries "https://dl.google.com/android/repository/ ${ cmdlineToolsVersion } " /tmp $ANDROID_OSX_SDK_FILE
2020-09-10 14:34:08 +03:00
2021-07-07 15:16:23 +03:00
echo "Uncompressing android command line tools..."
2020-09-10 14:34:08 +03:00
mkdir -p $HOME /Library/Android/sdk
2023-10-17 11:23:09 +02:00
unzip -q /tmp/$ANDROID_OSX_SDK_FILE -d $HOME /Library/Android/sdk/cmdline-tools
2021-07-07 15:16:23 +03:00
# Command line tools need to be placed in $HOME/Library/Android/sdk/cmdline-tools/latest to function properly
mv $HOME /Library/Android/sdk/cmdline-tools/cmdline-tools $HOME /Library/Android/sdk/cmdline-tools/latest
2023-10-17 11:23:09 +02:00
rm -f /tmp/$ANDROID_OSX_SDK_FILE
2020-09-10 14:34:08 +03:00
echo ANDROID_HOME is $ANDROID_HOME
2021-07-07 15:16:23 +03:00
export PATH = $PATH :$ANDROID_HOME /cmdline-tools/latest:$ANDROID_HOME /cmdline-tools/latest/bin
2020-09-10 14:34:08 +03:00
2021-07-07 15:16:23 +03:00
SDKMANAGER = $ANDROID_HOME /cmdline-tools/latest/bin/sdkmanager
2020-09-10 14:34:08 +03:00
echo "Installing latest tools & platform tools..."
echo y | $SDKMANAGER "tools" "platform-tools"
echo "Installing latest ndk..."
2021-09-15 10:14:42 +03:00
for ndk_version in " ${ ANDROID_NDK_MAJOR_VERSIONS [@] } "
do
ndk_full_version = $( get_full_ndk_version $ndk_version )
echo y | $SDKMANAGER "ndk; $ndk_full_version "
done
2022-07-21 11:33:26 +04:00
2022-07-29 10:50:39 +04:00
ndkDefault = $( get_full_ndk_version $ANDROID_NDK_MAJOR_DEFAULT )
ANDROID_NDK_HOME = $ANDROID_HOME /ndk/$ndkDefault
2021-09-15 10:14:42 +03:00
ndkLatest = $( get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST )
2021-02-01 12:56:44 +03:00
ANDROID_NDK_LATEST_HOME = $ANDROID_HOME /ndk/$ndkLatest
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
2022-07-29 10:50:39 +04:00
echo "export ANDROID_NDK= $ANDROID_NDK_HOME " >> " ${ HOME } /.bashrc"
echo "export ANDROID_NDK_HOME= $ANDROID_NDK_HOME " >> " ${ HOME } /.bashrc"
echo "export ANDROID_NDK_ROOT= $ANDROID_NDK_HOME " >> " ${ HOME } /.bashrc"
2021-02-01 12:56:44 +03:00
echo "export ANDROID_NDK_LATEST_HOME= $ANDROID_NDK_LATEST_HOME " >> " ${ HOME } /.bashrc"
2020-09-10 14:34:08 +03:00
2021-10-29 01:16:26 +03:00
availablePlatforms =( $( $SDKMANAGER --list | grep "platforms;android-[0-9]" | cut -d"|" -f 1 | sort -u) )
2020-10-05 10:57:58 +03:00
filter_components_by_version $ANDROID_PLATFORM " ${ availablePlatforms [@] } "
2021-07-07 15:16:23 +03:00
allBuildTools =( $( $SDKMANAGER --list --include_obsolete | grep "build-tools;" | cut -d"|" -f 1 | sort -u) )
2020-10-05 10:57:58 +03:00
availableBuildTools = $( echo ${ allBuildTools [@]//*rc[0-9]/ } )
filter_components_by_version $ANDROID_BUILD_TOOL " ${ availableBuildTools [@] } "
2021-07-07 15:16:23 +03:00
echo "y" | $SDKMANAGER ${ components [@] }
2020-09-10 14:34:08 +03:00
for extra_name in " ${ ANDROID_EXTRA_LIST [@] } "
do
echo "Installing extra $extra_name ..."
echo y | $SDKMANAGER "extras; $extra_name "
done
for addon_name in " ${ ANDROID_ADDON_LIST [@] } "
do
echo "Installing add-on $addon_name ..."
echo y | $SDKMANAGER "add-ons; $addon_name "
done
2020-12-31 13:22:17 +05:00
for tool_name in " ${ ANDROID_ADDITIONAL_TOOLS [@] } "
do
echo "Installing additional tool $tool_name ..."
echo y | $SDKMANAGER " $tool_name "
done
2023-10-18 10:17:43 +02:00
# Download SDK tools to preserve backward compatibility
sdkTools = "android-sdk-tools.zip"
sdkToolsVersion = $( get_toolset_value '.android."sdk-tools"' )
if [ " $sdkToolsVersion " != "null" ] ; then
download_with_retries "https://dl.google.com/android/repository/ ${ sdkToolsVersion } " "." $sdkTools
2023-10-26 11:28:45 +02:00
unzip -o -qq $sdkTools -d ${ ANDROID_SDK_ROOT }
2023-10-18 10:17:43 +02:00
rm -f $sdkTools
fi
2020-12-31 13:22:17 +05:00
invoke_tests "Android"