From e32091634e0a9536b9943d1c92c53e9376837a76 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Tue, 29 Sep 2020 17:26:59 +0300 Subject: [PATCH 1/7] add dynamic installation for linux --- images/linux/scripts/installers/android.sh | 35 ++++++++++++++++------ images/linux/toolsets/toolset-1604.json | 8 ++--- images/linux/toolsets/toolset-1804.json | 8 ++--- images/linux/toolsets/toolset-2004.json | 8 ++--- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index 81f28ff7..b630de7d 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -9,6 +9,23 @@ set -e # Source the helpers for use with the script source $HELPER_SCRIPTS/os.sh +function install_android_packages { + minimumVersion=$( echo "$1" | sed 's/\.//g' ) + shift + toolsArr=("$@") + + for item in ${toolsArr[@]} + do + version=$(echo "${item##*[-;]}" | sed 's/\.//g') + echo "version is $version" + if (( $version >= $minimumVersion )) + then + echo "Start installing $item" + echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $item + fi + done +} + # 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 @@ -42,22 +59,22 @@ else fi toolset="$INSTALLER_SCRIPT_FOLDER/toolset.json" -platforms=$(jq -r '.android.platform_list[]|"platforms;" + .' $toolset) -buildtools=$(jq -r '.android.build_tools[]|"build-tools;" + .' $toolset) +minimumBuildToolVersion=$(jq -r '.android.build_tools_min_version' $toolset) +minimumPlatformVersion=$(jq -r '.android.platform_min_version' $toolset) extras=$(jq -r '.android.extra_list[]|"extras;" + .' $toolset) addons=$(jq -r '.android.addon_list[]|"add-ons;" + .' $toolset) additional=$(jq -r '.android.additional_tools[]' $toolset) # Install the following SDKs and build tools, passing in "y" to accept licenses. -echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $platforms $buildtools $extras $google_api_list $addons $additional +echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $extras $google_api_list $addons $additional -# Document what was added to the image +platforms=$(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android" | sed -E "s/[[:space:]]+//g" | sed -E "s/\|.*//g") +buildTools=$(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | sed -E "s/[[:space:]]+//g" | sed -E "s/\|.*//g") -google_api_versions_list=$(echo "$addons"|awk -F- '/addon-google_apis-google/ {print $5}') -constraint_layout_versions_list=$(echo "$extras"|awk -F';' '/constraint-layout;/ {print $8}') -constraint_layout_solver_versions_list=$(echo "$extras"|awk -F';' '/constraint-layout-solver;/ {print $8}') -platform_versions_list=$(echo "$platforms"|awk -F- '{print $2}') -buildtools_versions_list=$(echo "$buildtools"|awk -F';' '{print $2}') +platformsArr=(${platforms}) +install_android_packages $minimumPlatformVersion "${platformsArr[@]}" +buildToolsArr=(${buildTools}) +install_android_packages $minimumBuildToolVersion "${buildToolsArr[@]}" # Add required permissions chmod -R a+rwx ${ANDROID_SDK_ROOT} diff --git a/images/linux/toolsets/toolset-1604.json b/images/linux/toolsets/toolset-1604.json index 46aad66a..4d7bbe0e 100644 --- a/images/linux/toolsets/toolset-1604.json +++ b/images/linux/toolsets/toolset-1604.json @@ -62,12 +62,8 @@ } ], "android": { - "platform_list": [ - "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19","android-17","android-15","android-10" - ], - "build_tools": [ - "30.0.2", "30.0.1", "30.0.0", "29.0.3", "29.0.2", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0", "17.0.0" - ], + "platform_min_version": "10", + "build_tools_min_version": "17.0.0", "extra_list": [ "android;m2repository", "google;m2repository", diff --git a/images/linux/toolsets/toolset-1804.json b/images/linux/toolsets/toolset-1804.json index 2670b4cf..24e36c21 100644 --- a/images/linux/toolsets/toolset-1804.json +++ b/images/linux/toolsets/toolset-1804.json @@ -62,12 +62,8 @@ } ], "android": { - "platform_list": [ - "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19","android-17" - ], - "build_tools": [ - "30.0.2", "30.0.1", "30.0.0", "29.0.3", "29.0.2", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0", "17.0.0" - ], + "platform_min_version": "17", + "build_tools_min_version": "17.0.0", "extra_list": [ "android;m2repository", "google;m2repository", diff --git a/images/linux/toolsets/toolset-2004.json b/images/linux/toolsets/toolset-2004.json index 5ac23025..ba86c827 100644 --- a/images/linux/toolsets/toolset-2004.json +++ b/images/linux/toolsets/toolset-2004.json @@ -48,12 +48,8 @@ } ], "android": { - "platform_list": [ - "android-30", "android-29", "android-28", "android-27" - ], - "build_tools": [ - "30.0.2", "30.0.1", "30.0.0", "29.0.3", "29.0.2", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0" - ], + "platform_min_version": "27", + "build_tools_min_version": "27.0.0", "extra_list": [ "android;m2repository", "google;m2repository", From 89bf727a192d32243de1da348b947fd64538a29e Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 1 Oct 2020 11:03:39 +0300 Subject: [PATCH 2/7] add function to check version --- images/linux/scripts/installers/android.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index b630de7d..0e78dbe0 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -9,16 +9,20 @@ set -e # Source the helpers for use with the script source $HELPER_SCRIPTS/os.sh +verlte() { + sortedVersion=$(echo -e "$1\n$2" | sort -V | head -n1) + [ "$1" = "$sortedVersion" ] +} + function install_android_packages { - minimumVersion=$( echo "$1" | sed 's/\.//g' ) + minimumVersion=$1 shift toolsArr=("$@") for item in ${toolsArr[@]} do - version=$(echo "${item##*[-;]}" | sed 's/\.//g') - echo "version is $version" - if (( $version >= $minimumVersion )) + version=$(echo "${item##*[-;]}") + if verlte $minimumVersion $version then echo "Start installing $item" echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $item From d0f8592d884c5005edb5086ea6844fecab550ecb Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 1 Oct 2020 13:07:40 +0300 Subject: [PATCH 3/7] add function and clean up logic for array --- images/linux/scripts/helpers/install.sh | 5 +++++ images/linux/scripts/installers/android.sh | 17 +++++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/images/linux/scripts/helpers/install.sh b/images/linux/scripts/helpers/install.sh index 414980bb..bb1befe2 100644 --- a/images/linux/scripts/helpers/install.sh +++ b/images/linux/scripts/helpers/install.sh @@ -42,4 +42,9 @@ download_with_retries() { ## fi function IsPackageInstalled { dpkg -S $1 &> /dev/null +} + +verlte() { + sortedVersion=$(echo -e "$1\n$2" | sort -V | head -n1) + [ "$1" = "$sortedVersion" ] } \ No newline at end of file diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index 0e78dbe0..5365458d 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -9,12 +9,7 @@ set -e # Source the helpers for use with the script source $HELPER_SCRIPTS/os.sh -verlte() { - sortedVersion=$(echo -e "$1\n$2" | sort -V | head -n1) - [ "$1" = "$sortedVersion" ] -} - -function install_android_packages { +function install_android_package_gte_then { minimumVersion=$1 shift toolsArr=("$@") @@ -72,13 +67,11 @@ additional=$(jq -r '.android.additional_tools[]' $toolset) # Install the following SDKs and build tools, passing in "y" to accept licenses. echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $extras $google_api_list $addons $additional -platforms=$(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android" | sed -E "s/[[:space:]]+//g" | sed -E "s/\|.*//g") -buildTools=$(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | sed -E "s/[[:space:]]+//g" | sed -E "s/\|.*//g") +platforms=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1 | sed 's/platforms;android-//g')) +buildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | cut -d"|" -f 1 | sed 's/build-tools;//g')) -platformsArr=(${platforms}) -install_android_packages $minimumPlatformVersion "${platformsArr[@]}" -buildToolsArr=(${buildTools}) -install_android_packages $minimumBuildToolVersion "${buildToolsArr[@]}" +install_android_package_gte_then $minimumPlatformVersion "${platforms[@]}" +install_android_package_gte_then $minimumBuildToolVersion "${buildTools[@]}" # Add required permissions chmod -R a+rwx ${ANDROID_SDK_ROOT} From 16a27e20454d516beafa3d8ad96be3c4eac7953a Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 1 Oct 2020 13:08:53 +0300 Subject: [PATCH 4/7] add import --- images/linux/scripts/installers/android.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index 5365458d..e72a39f0 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -8,6 +8,7 @@ set -e # Source the helpers for use with the script source $HELPER_SCRIPTS/os.sh +source $HELPER_SCRIPTS/install.sh function install_android_package_gte_then { minimumVersion=$1 From 9956daab66bc926250cad276c8d095e8e050866c Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Thu, 1 Oct 2020 16:33:20 +0300 Subject: [PATCH 5/7] fix function accroding to comments --- images/linux/scripts/installers/android.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index e72a39f0..c0915939 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -10,7 +10,7 @@ set -e source $HELPER_SCRIPTS/os.sh source $HELPER_SCRIPTS/install.sh -function install_android_package_gte_then { +function filter_components_by_version { minimumVersion=$1 shift toolsArr=("$@") @@ -20,8 +20,7 @@ function install_android_package_gte_then { version=$(echo "${item##*[-;]}") if verlte $minimumVersion $version then - echo "Start installing $item" - echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $item + components+=($item) fi done } @@ -66,13 +65,15 @@ addons=$(jq -r '.android.addon_list[]|"add-ons;" + .' $toolset) additional=$(jq -r '.android.additional_tools[]' $toolset) # Install the following SDKs and build tools, passing in "y" to accept licenses. -echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager $extras $google_api_list $addons $additional +components=( "${extras[@]}" "${addons[@]}" "${additional[@]}" ) -platforms=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1 | sed 's/platforms;android-//g')) -buildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | cut -d"|" -f 1 | sed 's/build-tools;//g')) +availablePlatforms=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1)) +availableBuildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | cut -d"|" -f 1)) -install_android_package_gte_then $minimumPlatformVersion "${platforms[@]}" -install_android_package_gte_then $minimumBuildToolVersion "${buildTools[@]}" +filter_components_by_version $minimumPlatformVersion "${availablePlatforms[@]}" +filter_components_by_version $minimumBuildToolVersion "${availableBuildTools[@]}" + +echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager ${components[@]} # Add required permissions chmod -R a+rwx ${ANDROID_SDK_ROOT} From 6a8fd16499f8312b3f37b1c2abd9e733644db245 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Fri, 2 Oct 2020 13:54:37 +0300 Subject: [PATCH 6/7] get all build-tools --- images/linux/scripts/installers/android.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index c0915939..62c505c4 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -68,7 +68,8 @@ additional=$(jq -r '.android.additional_tools[]' $toolset) components=( "${extras[@]}" "${addons[@]}" "${additional[@]}" ) availablePlatforms=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1)) -availableBuildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "build-tools;" | cut -d"|" -f 1)) +allBuildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list --include_obsolete | grep "build-tools;" | cut -d"|" -f 1 | sort -u)) +availableBuildTools=$(echo ${allBuildTools[@]//*rc[0-9]/}) filter_components_by_version $minimumPlatformVersion "${availablePlatforms[@]}" filter_components_by_version $minimumBuildToolVersion "${availableBuildTools[@]}" From 3187ff66cf7f4db36e77fc0183c7f7214b9bcc08 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Mon, 5 Oct 2020 10:46:06 +0300 Subject: [PATCH 7/7] add comment --- images/linux/scripts/installers/android.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index 62c505c4..90d2013a 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -17,6 +17,7 @@ function filter_components_by_version { for item in ${toolsArr[@]} do + # take the last argument after spliting string by ';'' and '-'' version=$(echo "${item##*[-;]}") if verlte $minimumVersion $version then