mirror of
https://github.com/actions/runner-images-sangeeth.git
synced 2025-12-20 06:29:50 +00:00
[ubuntu] Refactor android sdk build script (#8980)
This commit is contained in:
committed by
GitHub
parent
d4f6993ac9
commit
4d88245a29
@@ -9,26 +9,27 @@ source $HELPER_SCRIPTS/os.sh
|
|||||||
source $HELPER_SCRIPTS/install.sh
|
source $HELPER_SCRIPTS/install.sh
|
||||||
source $HELPER_SCRIPTS/etc-environment.sh
|
source $HELPER_SCRIPTS/etc-environment.sh
|
||||||
|
|
||||||
function filter_components_by_version {
|
add_filtered_instalaltion_components() {
|
||||||
minimumVersion=$1
|
local minimum_version=$1
|
||||||
shift
|
shift
|
||||||
toolsArr=("$@")
|
local tools_array=("$@")
|
||||||
|
|
||||||
for item in ${toolsArr[@]}
|
for item in ${tools_array[@]}; do
|
||||||
do
|
# Take the last argument after spliting string by ';'' and '-''
|
||||||
# take the last argument after spliting string by ';'' and '-''
|
item_version=$(echo "${item##*[-;]}")
|
||||||
version=$(echo "${item##*[-;]}")
|
|
||||||
if verlte $minimumVersion $version
|
# Semver 'comparison'. Add item to components array, if item's version is greater than or equal to minimum version
|
||||||
then
|
if [[ "$(printf "${minimum_version}\n${item_version}\n" | sort -V | head -n1)" == "$minimum_version" ]]; then
|
||||||
components+=($item)
|
components+=($item)
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_full_ndk_version {
|
get_full_ndk_version() {
|
||||||
majorVersion=$1
|
local major_version=$1
|
||||||
ndkFullVersion=$($SDKMANAGER --list | grep "ndk;${majorVersion}.*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
|
|
||||||
echo "$ndkFullVersion"
|
ndk_version=$($SDKMANAGER --list | grep "ndk;${major_version}\." | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
|
||||||
|
echo "$ndk_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set env variable for SDK Root (https://developer.android.com/studio/command-line/variables)
|
# Set env variable for SDK Root (https://developer.android.com/studio/command-line/variables)
|
||||||
@@ -45,78 +46,79 @@ mkdir -p ${ANDROID_SDK_ROOT}
|
|||||||
|
|
||||||
# Download the latest command line tools so that we can accept all of the licenses.
|
# Download the latest command line tools so that we can accept all of the licenses.
|
||||||
# See https://developer.android.com/studio/#command-tools
|
# See https://developer.android.com/studio/#command-tools
|
||||||
cmdlineToolsVersion=$(get_toolset_value '.android."cmdline-tools"')
|
cmdline_tools_package=$(get_toolset_value '.android."cmdline-tools"')
|
||||||
if [[ $cmdlineToolsVersion == "latest" ]]; then
|
if [[ $cmdline_tools_version == "latest" ]]; then
|
||||||
repository_xml_url="https://dl.google.com/android/repository/repository2-1.xml"
|
REPOSITORY_XML_URL="https://dl.google.com/android/repository/repository2-1.xml"
|
||||||
repository_xml_file=$(download_with_retry "$repository_xml_url")
|
repository_xml_file=$(download_with_retry "$REPOSITORY_XML_URL")
|
||||||
cmdlineToolsVersion=$(
|
cmdline_tools_package=$(
|
||||||
yq -p=xml \
|
yq -p=xml \
|
||||||
'.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \
|
'.sdk-repository.remotePackage[] | select(."+@path" == "cmdline-tools;latest" and .channelRef."+@ref" == "channel-0").archives.archive[].complete.url | select(contains("commandlinetools-linux"))' \
|
||||||
"${repository_xml_file}"
|
"${repository_xml_file}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if [[ -z $cmdlineToolsVersion ]]; then
|
if [[ -z $cmdline_tools_package ]]; then
|
||||||
echo "Failed to parse latest command-line tools version"
|
echo "Failed to parse latest command-line tools version"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
archive_path=$(download_with_retry "https://dl.google.com/android/repository/${cmdlineToolsVersion}")
|
# Install command line tools
|
||||||
|
archive_path=$(download_with_retry "https://dl.google.com/android/repository/${cmdline_tools_package}")
|
||||||
unzip -qq "$archive_path" -d ${ANDROID_SDK_ROOT}/cmdline-tools
|
unzip -qq "$archive_path" -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
|
# 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
|
mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest
|
||||||
|
|
||||||
# Check sdk manager installation
|
# Check sdk manager installation
|
||||||
${SDKMANAGER} --list 1>/dev/null
|
if ${SDKMANAGER} --list 1>/dev/null; then
|
||||||
if [ $? -eq 0 ]
|
|
||||||
then
|
|
||||||
echo "Android SDK manager was installed"
|
echo "Android SDK manager was installed"
|
||||||
else
|
else
|
||||||
echo "Android SDK manager was not installed"
|
echo "Android SDK manager was not installed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
minimumBuildToolVersion=$(get_toolset_value '.android.build_tools_min_version')
|
# Get toolset values and prepare environment variables
|
||||||
minimumPlatformVersion=$(get_toolset_value '.android.platform_min_version')
|
minimum_build_tool_version=$(get_toolset_value '.android.build_tools_min_version')
|
||||||
extras=$(get_toolset_value '.android.extra_list[]|"extras;" + .')
|
minimum_platform_version=$(get_toolset_value '.android.platform_min_version')
|
||||||
addons=$(get_toolset_value '.android.addon_list[]|"add-ons;" + .')
|
android_ndk_major_default=$(get_toolset_value '.android.ndk.default')
|
||||||
additional=$(get_toolset_value '.android.additional_tools[]')
|
android_ndk_major_versions=($(get_toolset_value '.android.ndk.versions[]'))
|
||||||
ANDROID_NDK_MAJOR_VERSIONS=($(get_toolset_value '.android.ndk.versions[]'))
|
android_ndk_major_latest=(${android_ndk_major_versions[-1]})
|
||||||
ANDROID_NDK_MAJOR_DEFAULT=$(get_toolset_value '.android.ndk.default')
|
|
||||||
|
|
||||||
components=("${extras[@]}" "${addons[@]}" "${additional[@]}")
|
ndk_default_full_version=$(get_full_ndk_version $android_ndk_major_default)
|
||||||
for ndk_version in "${ANDROID_NDK_MAJOR_VERSIONS[@]}"
|
ndk_latest_full_version=$(get_full_ndk_version $android_ndk_major_latest)
|
||||||
do
|
ANDROID_NDK=${ANDROID_SDK_ROOT}/ndk/${ndk_default_full_version}
|
||||||
ndk_full_version=$(get_full_ndk_version $ndk_version)
|
|
||||||
components+=("ndk;$ndk_full_version")
|
|
||||||
done
|
|
||||||
|
|
||||||
ANDROID_NDK_MAJOR_LATEST=(${ANDROID_NDK_MAJOR_VERSIONS[-1]})
|
|
||||||
ndkDefaultFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_DEFAULT)
|
|
||||||
ndkLatestFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST)
|
|
||||||
ANDROID_NDK="$ANDROID_SDK_ROOT/ndk/$ndkDefaultFullVersion"
|
|
||||||
# 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
|
# 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
|
||||||
setEtcEnvironmentVariable "ANDROID_NDK" "${ANDROID_NDK}"
|
setEtcEnvironmentVariable "ANDROID_NDK" "${ANDROID_NDK}"
|
||||||
setEtcEnvironmentVariable "ANDROID_NDK_HOME" "${ANDROID_NDK}"
|
setEtcEnvironmentVariable "ANDROID_NDK_HOME" "${ANDROID_NDK}"
|
||||||
setEtcEnvironmentVariable "ANDROID_NDK_ROOT" "${ANDROID_NDK}"
|
setEtcEnvironmentVariable "ANDROID_NDK_ROOT" "${ANDROID_NDK}"
|
||||||
setEtcEnvironmentVariable "ANDROID_NDK_LATEST_HOME" "${ANDROID_SDK_ROOT}/ndk/${ndkLatestFullVersion}"
|
setEtcEnvironmentVariable "ANDROID_NDK_LATEST_HOME" "${ANDROID_SDK_ROOT}/ndk/${ndk_latest_full_version}"
|
||||||
|
|
||||||
availablePlatforms=($($SDKMANAGER --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-[0-9]" | cut -d"|" -f 1))
|
# Prepare components for installation
|
||||||
allBuildTools=($($SDKMANAGER --list | grep "build-tools;" | cut -d"|" -f 1 | sort -u))
|
extras=$(get_toolset_value '.android.extra_list[] | "extras;" + .')
|
||||||
availableBuildTools=$(echo ${allBuildTools[@]//*rc[0-9]/})
|
addons=$(get_toolset_value '.android.addon_list[] | "add-ons;" + .')
|
||||||
|
additional=$(get_toolset_value '.android.additional_tools[]')
|
||||||
|
components=("${extras[@]}" "${addons[@]}" "${additional[@]}")
|
||||||
|
|
||||||
filter_components_by_version $minimumPlatformVersion "${availablePlatforms[@]}"
|
for ndk_major_version in "${android_ndk_major_versions[@]}"; do
|
||||||
filter_components_by_version $minimumBuildToolVersion "${availableBuildTools[@]}"
|
ndk_full_version=$(get_full_ndk_version $ndk_major_version)
|
||||||
|
components+=("ndk;$ndk_full_version")
|
||||||
|
done
|
||||||
|
|
||||||
|
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]/})
|
||||||
|
|
||||||
|
add_filtered_instalaltion_components $minimum_platform_version "${available_platforms[@]}"
|
||||||
|
add_filtered_instalaltion_components $minimum_build_tool_version "${available_build_tools[@]}"
|
||||||
|
|
||||||
|
# Install components
|
||||||
echo "y" | $SDKMANAGER ${components[@]}
|
echo "y" | $SDKMANAGER ${components[@]}
|
||||||
|
|
||||||
# Old skdmanager from sdk tools doesn't work with Java > 8, set version 8 explicitly
|
# Old skdmanager from sdk tools doesn't work with Java > 8, set version 8 explicitly
|
||||||
if isUbuntu20 || isUbuntu22; then
|
sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager
|
||||||
sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add required permissions
|
# Add required permissions
|
||||||
chmod -R a+rwx ${ANDROID_SDK_ROOT}
|
chmod -R a+rwx ${ANDROID_SDK_ROOT}
|
||||||
|
|
||||||
reloadEtcEnvironment
|
reloadEtcEnvironment
|
||||||
|
|
||||||
invoke_tests "Android"
|
invoke_tests "Android"
|
||||||
|
|||||||
@@ -54,11 +54,6 @@ IsPackageInstalled() {
|
|||||||
dpkg -S $1 &> /dev/null
|
dpkg -S $1 &> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
verlte() {
|
|
||||||
sortedVersion=$(printf "$1\n$2\n" | sort -V | head -n1)
|
|
||||||
[ "$1" = "$sortedVersion" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
get_toolset_value() {
|
get_toolset_value() {
|
||||||
local toolset_path="/imagegeneration/installers/toolset.json"
|
local toolset_path="/imagegeneration/installers/toolset.json"
|
||||||
local query=$1
|
local query=$1
|
||||||
|
|||||||
Reference in New Issue
Block a user