2020-10-07 13:49:40 +05:00
#!/bin/bash -e
2020-05-26 18:45:48 +03:00
################################################################################
## File: android.sh
## Desc: Installs Android SDK
################################################################################
# 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
2020-10-01 16:33:20 +03:00
function filter_components_by_version {
2020-10-01 11:03:39 +03:00
minimumVersion = $1
2020-09-29 17:26:59 +03:00
shift
toolsArr = ( " $@ " )
for item in ${ toolsArr [@] }
do
2020-10-05 10:46:06 +03:00
# take the last argument after spliting string by ';'' and '-''
2020-10-01 11:03:39 +03:00
version = $( echo " ${ item ##*[-;] } " )
if verlte $minimumVersion $version
2020-09-29 17:26:59 +03:00
then
2020-10-01 16:33:20 +03:00
components += ( $item )
2020-09-29 17:26:59 +03:00
fi
done
}
2021-02-04 13:34:30 +03:00
function get_full_ndk_version {
majorVersion = $1
ndkFullVersion = $( $SDKMANAGER --list | grep " ndk; ${ majorVersion } .* " | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
echo " $ndkFullVersion "
}
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
2020-05-26 18:45:48 +03:00
echo " ANDROID_SDK_ROOT= ${ ANDROID_SDK_ROOT } " | tee -a /etc/environment
# ANDROID_HOME is deprecated, but older versions of Gradle rely on it
echo " ANDROID_HOME= ${ ANDROID_SDK_ROOT } " | tee -a /etc/environment
# Create android sdk directory
mkdir -p ${ ANDROID_SDK_ROOT }
# Download the latest command line tools so that we can accept all of the licenses.
# See https://developer.android.com/studio/#command-tools
2022-05-31 10:05:22 +02:00
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").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \
/tmp/repository2-1.xml
)
if [ [ -z $cmdlineToolsVersion ] ] ; then
echo "Failed to parse latest command-line tools version"
exit 1
fi
fi
2021-07-07 15:16:46 +03:00
cmdlineTools = "android-cmdline-tools.zip"
2022-05-31 10:05:22 +02:00
download_with_retries " https://dl.google.com/android/repository/ ${ cmdlineToolsVersion } " "." $cmdlineTools
2021-07-07 15:16:46 +03:00
unzip -qq $cmdlineTools -d ${ ANDROID_SDK_ROOT } /cmdline-tools
# 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
rm -f $cmdlineTools
2020-05-26 18:45:48 +03:00
# Check sdk manager installation
2021-02-04 13:34:30 +03:00
${ SDKMANAGER } --list 1>/dev/null
2020-05-26 18:45:48 +03:00
if [ $? -eq 0 ]
then
echo "Android SDK manager was installed"
else
echo "Android SDK manager was not installed"
exit 1
fi
2021-01-15 21:12:26 +07:00
minimumBuildToolVersion = $( get_toolset_value '.android.build_tools_min_version' )
minimumPlatformVersion = $( get_toolset_value '.android.platform_min_version' )
extras = $( get_toolset_value '.android.extra_list[]|"extras;" + .' )
addons = $( get_toolset_value '.android.addon_list[]|"add-ons;" + .' )
additional = $( get_toolset_value '.android.additional_tools[]' )
2021-09-20 13:35:44 +03:00
ANDROID_NDK_MAJOR_VERSIONS = ( $( get_toolset_value '.android.ndk.versions[]' ) )
2022-07-28 18:08:57 +04:00
ANDROID_NDK_MAJOR_DEFAULT = $( get_toolset_value '.android.ndk.default' )
2020-08-20 13:39:33 +05:00
2021-09-20 13:35:44 +03:00
components = ( " ${ extras [@] } " " ${ addons [@] } " " ${ additional [@] } " )
for ndk_version in " ${ ANDROID_NDK_MAJOR_VERSIONS [@] } "
do
ndk_full_version = $( get_full_ndk_version $ndk_version )
components += ( " ndk; $ndk_full_version " )
done
2020-05-26 18:45:48 +03:00
2021-11-01 17:14:51 +03:00
ANDROID_NDK_MAJOR_LATEST = ( ${ ANDROID_NDK_MAJOR_VERSIONS [-1] } )
2022-07-28 18:08:57 +04:00
ndkDefaultFullVersion = $( get_full_ndk_version $ANDROID_NDK_MAJOR_DEFAULT )
2021-11-01 17:14:51 +03:00
ndkLatestFullVersion = $( get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST )
2022-07-28 18:08:57 +04:00
ANDROID_NDK = " $ANDROID_SDK_ROOT /ndk/ $ndkDefaultFullVersion "
2022-08-05 14:36:32 +04: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/virtual-environments/issues/5879
2022-07-28 18:08:57 +04:00
echo " ANDROID_NDK= ${ ANDROID_NDK } " | tee -a /etc/environment
echo " ANDROID_NDK_HOME= ${ ANDROID_NDK } " | tee -a /etc/environment
echo " ANDROID_NDK_ROOT= ${ ANDROID_NDK } " | tee -a /etc/environment
2021-11-01 17:14:51 +03:00
echo " ANDROID_NDK_LATEST_HOME= $ANDROID_SDK_ROOT /ndk/ $ndkLatestFullVersion " | tee -a /etc/environment
2021-01-21 11:32:27 +03:00
2021-10-29 01:15:55 +03:00
availablePlatforms = ( $( $SDKMANAGER --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-[0-9]" | cut -d"|" -f 1) )
2021-02-04 13:34:30 +03:00
allBuildTools = ( $( $SDKMANAGER --list | grep "build-tools;" | cut -d"|" -f 1 | sort -u) )
2020-10-02 13:54:37 +03:00
availableBuildTools = $( echo ${ allBuildTools [@]//*rc[0-9]/ } )
2020-08-20 13:39:33 +05:00
2020-10-01 16:33:20 +03:00
filter_components_by_version $minimumPlatformVersion " ${ availablePlatforms [@] } "
filter_components_by_version $minimumBuildToolVersion " ${ availableBuildTools [@] } "
2021-02-04 13:34:30 +03:00
echo "y" | $SDKMANAGER ${ components [@] }
2020-08-20 13:39:33 +05:00
2021-07-07 15:16:46 +03:00
# Old skdmanager from sdk tools doesn't work with Java > 8, set version 8 explicitly
2022-05-02 10:46:10 +02:00
if isUbuntu20 || isUbuntu22; then
2021-07-07 15:16:46 +03:00
sed -i " 2i export JAVA_HOME= ${ JAVA_HOME_8_X64 } " ${ ANDROID_SDK_ROOT } /tools/bin/sdkmanager
fi
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
2021-07-07 15:16:46 +03:00
reloadEtcEnvironment
2020-12-24 12:14:41 +03:00
invoke_tests "Android"