aboutsummaryrefslogtreecommitdiffstats
path: root/coin/provisioning/common/linux/android_linux.sh
diff options
context:
space:
mode:
Diffstat (limited to 'coin/provisioning/common/linux/android_linux.sh')
-rwxr-xr-xcoin/provisioning/common/linux/android_linux.sh206
1 files changed, 139 insertions, 67 deletions
diff --git a/coin/provisioning/common/linux/android_linux.sh b/coin/provisioning/common/linux/android_linux.sh
index ca9110b8..587eb027 100755
--- a/coin/provisioning/common/linux/android_linux.sh
+++ b/coin/provisioning/common/linux/android_linux.sh
@@ -1,37 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2017 The Qt Company Ltd.
-## Contact: http://www.qt.io/licensing/
-##
-## This file is part of the provisioning scripts of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:LGPL21$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see http://www.qt.io/terms-conditions. For further
-## information use the contact form at http://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 2.1 or version 3 as published by the Free
-## Software Foundation and appearing in the file LICENSE.LGPLv21 and
-## LICENSE.LGPLv3 included in the packaging of this file. Please review the
-## following information to ensure the GNU Lesser General Public License
-## requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-##
-## As a special exception, The Qt Company gives you certain additional
-## rights. These rights are described in The Qt Company LGPL Exception
-## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
# This script install Android sdk and ndk.
@@ -49,32 +18,74 @@ source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
targetFolder="/opt/android"
sdkTargetFolder="$targetFolder/sdk"
-basePath="http://ci-files01-hki.intra.qt.io/input/android"
+sudo mkdir -p "$sdkTargetFolder"
+
+basePath="http://ci-files01-hki.ci.qt.io/input/android"
+
+toolsVersion="2.1"
+toolsFile="commandlinetools-linux-6609375_latest.zip"
+ndkVersionLatest="r26b"
+ndkVersionDefault=$ndkVersionLatest
+sdkBuildToolsVersion="34.0.0"
+sdkApiLevel="android-34"
-toolsVersion="r26.1.1"
-toolsFile="sdk-tools-linux-4333796.zip"
-ndkVersion="r20"
-ndkFile="android-ndk-$ndkVersion-linux-x86_64.zip"
-sdkBuildToolsVersion="28.0.3"
-sdkApiLevel="android-28"
+toolsSha1="9172381ff070ee2a416723c1989770cf4b0d1076"
+ndkSha1Latest="fdf33d9f6c1b3f16e5459d53a82c7d2201edbcc4"
+ndkSha1Default=$ndkSha1Latest
-toolsSha1="8c7c28554a32318461802c1291d76fccfafde054"
-ndkSha1="8665fc84a1b1f0d6ab3b5fdd1e30200cc7b9adff"
+# Android 14 avd zip
+android14SystemZipName="android14system_UE1A_230829_036.tar.gz"
+android14SystemZipSha="ede80c6901e8fad1895c97a86542b8e072bb1ee5"
+android14SystemPath="$basePath/$android14SystemZipName"
+
+# Android Automotive max SDK level image
+sdkApiLevelAutomotiveMax="android-33"
+androidAutomotiveMaxUrl="$basePath/${sdkApiLevelAutomotiveMax}_automotive.tar.gz"
+androidAutomotiveMaxSha="b020a938ec46af2510047284406e9bed608cad03"
+# Android Automotive min SDK level image
+sdkApiLevelAutomotiveMin="android-29"
+androidAutomotiveMinUrl="$basePath/${sdkApiLevelAutomotiveMin}_automotive.tar.gz"
+androidAutomotiveMinSha="e6092585c00f87eb3b20a2eb7fdf6add42342d2f"
toolsTargetFile="/tmp/$toolsFile"
toolsSourceFile="$basePath/$toolsFile"
-ndkTargetFile="/tmp/$ndkFile"
-ndkSourceFile="$basePath/$ndkFile"
+echo "Download and unzip Android SDK"
DownloadURL "$toolsSourceFile" "$toolsSourceFile" "$toolsSha1" "$toolsTargetFile"
-DownloadURL "$ndkSourceFile" "$ndkSourceFile" "$ndkSha1" "$ndkTargetFile"
-echo "Unzipping Android NDK to '$targetFolder'"
-sudo unzip -q "$ndkTargetFile" -d "$targetFolder"
echo "Unzipping Android Tools to '$sdkTargetFolder'"
sudo unzip -q "$toolsTargetFile" -d "$sdkTargetFolder"
-rm "$ndkTargetFile"
rm "$toolsTargetFile"
+function InstallNdk() {
+
+ ndkVersion=$1
+ ndkSha1=$2
+
+ ndkFile="android-ndk-$ndkVersion-linux.zip"
+ ndkTargetFile="/tmp/$ndkFile"
+ ndkSourceFile="$basePath/$ndkFile"
+
+ DownloadURL "$ndkSourceFile" "$ndkSourceFile" "$ndkSha1" "$ndkTargetFile"
+ echo "Unzipping Android NDK to '$targetFolder'"
+ # Get the package base directory name as string
+ zipBase=$(sudo zipinfo -1 "$ndkTargetFile" 2>/dev/null | awk '!seen {sub("/.*",""); print; seen=1}')
+ sudo unzip -q "$ndkTargetFile" -d "$targetFolder"
+ rm "$ndkTargetFile"
+ androidNdkRoot="${targetFolder}/${zipBase}"
+}
+
+InstallNdk $ndkVersionDefault $ndkSha1Default
+SetEnvVar "ANDROID_NDK_ROOT_DEFAULT" "$androidNdkRoot"
+
+if [ "$ndkVersionDefault" != "$ndkVersionLatest" ]; then
+ InstallNdk $ndkVersionLatest $ndkSha1Latest
+fi
+SetEnvVar "ANDROID_NDK_ROOT_LATEST" "$androidNdkRoot"
+
+# To be used by vcpkg
+SetEnvVar "ANDROID_NDK_HOME" "$targetFolder/android-ndk-$ndkVersionDefault"
+export ANDROID_NDK_HOME="$targetFolder/android-ndk-$ndkVersionDefault"
+
echo "Changing ownership of Android files."
if uname -a |grep -q "el7"; then
sudo chown -R qt:wheel "$targetFolder"
@@ -88,46 +99,107 @@ sdkmanager_no_progress_bar_cmd="tr '\r' '\n' | grep -v '^\[[ =]*\]'"
# But don't let the pipeline hide sdkmanager failures.
set -o pipefail
+sudo mkdir "$sdkTargetFolder/cmdline-tools"
+sudo mv "$sdkTargetFolder/tools" "$sdkTargetFolder/cmdline-tools"
+
echo "Running SDK manager for platforms;$sdkApiLevel, platform-tools and build-tools;$sdkBuildToolsVersion."
# shellcheck disable=SC2031
if [ "$http_proxy" != "" ]; then
proxy_host=$(echo "$proxy" | cut -d'/' -f3 | cut -d':' -f1)
proxy_port=$(echo "$proxy" | cut -d':' -f3)
- echo "y" | "$sdkTargetFolder/tools/bin/sdkmanager" \
+ echo "y" | "$sdkTargetFolder/cmdline-tools/tools/bin/sdkmanager" --sdk_root=$sdkTargetFolder \
--no_https --proxy=http --proxy_host="$proxy_host" --proxy_port="$proxy_port" \
"platforms;$sdkApiLevel" "platform-tools" "build-tools;$sdkBuildToolsVersion" \
- | eval $sdkmanager_no_progress_bar_cmd
+ | eval "$sdkmanager_no_progress_bar_cmd"
else
- echo "y" | "$sdkTargetFolder/tools/bin/sdkmanager" \
+ echo "y" | "$sdkTargetFolder/cmdline-tools/tools/bin/sdkmanager" --sdk_root=$sdkTargetFolder \
"platforms;$sdkApiLevel" "platform-tools" "build-tools;$sdkBuildToolsVersion" \
- | eval $sdkmanager_no_progress_bar_cmd
+ | eval "$sdkmanager_no_progress_bar_cmd"
fi
echo "Checking the contents of Android SDK..."
ls -l "$sdkTargetFolder"
-SetEnvVar "ANDROID_SDK_HOME" "$sdkTargetFolder"
-SetEnvVar "ANDROID_NDK_HOME" "$targetFolder/android-ndk-$ndkVersion"
-SetEnvVar "ANDROID_NDK_ROOT" "$targetFolder/android-ndk-$ndkVersion"
+SetEnvVar "ANDROID_SDK_ROOT" "$sdkTargetFolder"
SetEnvVar "ANDROID_NDK_HOST" "linux-x86_64"
SetEnvVar "ANDROID_API_VERSION" "$sdkApiLevel"
# shellcheck disable=SC2129
-echo "Android SDK tools = $toolsVersion" >> ~/versions.txt
-echo "Android SDK Build Tools = $sdkBuildToolsVersion" >> ~/versions.txt
-echo "Android SDK API level = $sdkApiLevel" >> ~/versions.txt
-echo "Android NDK = $ndkVersion" >> ~/versions.txt
-
-cd "$sdkTargetFolder/tools/bin"
-./sdkmanager --install "emulator" \
- | eval $sdkmanager_no_progress_bar_cmd
-echo "y" | ./sdkmanager --install "system-images;android-21;google_apis;x86" \
- | eval $sdkmanager_no_progress_bar_cmd
-
+cat <<EOB >>~/versions.txt
+Android SDK tools = $toolsVersion
+Android SDK Build Tools = $sdkBuildToolsVersion
+Android SDK API level = $sdkApiLevel
+Android NDK = $ndkVersion
+EOB
+
+cd "$sdkTargetFolder/cmdline-tools/tools/bin"
+./sdkmanager --install "emulator" --sdk_root="$sdkTargetFolder" \
+ | eval "$sdkmanager_no_progress_bar_cmd"
+
+echo "Download and unzip Android Emulator version 34.1.19"
+emulatorFileName="emulator-linux_x64-11525734.zip"
+emulatorCiUrl="https://ci-files01-hki.ci.qt.io/input/android/$emulatorFileName"
+emulatorUrl="http://dl.google.com/android/repository/$emulatorFileName"
+emulatorTargetFile="$sdkTargetFolder/$emulatorFileName"
+emulatorSha1="d6cc94109b081c5f6042dcb71a453144f7e62ce7"
+DownloadURL "$emulatorCiUrl" "$emulatorUrl" "$emulatorSha1" "$emulatorTargetFile"
+echo "Unzipping the Android Emulator to '$sdkTargetFolder'"
+sudo unzip -o -q "$emulatorTargetFile" -d "$sdkTargetFolder"
+rm "$emulatorTargetFile"
+
+echo "y" | ./sdkmanager --install "system-images;android-26;google_apis;x86" \
+ | eval "$sdkmanager_no_progress_bar_cmd"
+
+echo "Extract stored Android 14 Beta $android14SystemZipName"
+DownloadURL "$android14SystemPath" "$android14SystemPath" "$android14SystemZipSha" \
+ "/tmp/$android14SystemZipName"
+sudo tar -xzf "/tmp/$android14SystemZipName" -C "$sdkTargetFolder/system-images"
echo "Checking the contents of Android SDK again..."
ls -l "$sdkTargetFolder"
-echo "no" | ./avdmanager create avd -n x86emulator -k "system-images;android-21;google_apis;x86" -c 2048M -f
+echo "no" | ./avdmanager create avd -n emulator_x86_api_26 -c 2048M -f \
+ -k "system-images;android-26;google_apis;x86"
+
+echo "no" | ./avdmanager create avd -n emulator_x86_64_api_34 -c 2048M -f \
+ -k "system-images;android-34;google_apis;x86_64"
+
+echo "Install maximum supported SDK level image for Android Automotive $sdkApiLevelAutomotiveMax"
+DownloadURL "$androidAutomotiveMaxUrl" "$androidAutomotiveMaxUrl" "$androidAutomotiveMaxSha" \
+ "/tmp/${sdkApiLevelAutomotiveMax}_automotive.tar.gz"
+sudo tar -xzf "/tmp/${sdkApiLevelAutomotiveMax}_automotive.tar.gz" -C "$sdkTargetFolder/system-images"
+echo "no" | ./avdmanager create avd -n automotive_emulator_x86_64_api_33 -c 2048M -f \
+ -k "system-images;${sdkApiLevelAutomotiveMax};android-automotive;x86_64"
+
+echo "Install minimum supported SDK level image for Android Automotive $sdkApiLevelAutomotiveMin"
+DownloadURL "$androidAutomotiveMinUrl" "$androidAutomotiveMinUrl" "$androidAutomotiveMinSha" \
+ "/tmp/${sdkApiLevelAutomotiveMin}_automotive.tar.gz"
+sudo tar -xzf "/tmp/${sdkApiLevelAutomotiveMin}_automotive.tar.gz" -C $sdkTargetFolder/system-images
+echo "no" | ./avdmanager create avd -n automotive_emulator_x86_64_api_29 -c 2048M -f \
+ -k "system-images;${sdkApiLevelAutomotiveMin};android-automotive;x86_64"
+
# Purely informative, show the list of avd devices
./avdmanager list avd
+
+# To be used by the VMs to start the emulator for tests
+emulator_script_filename="android_emulator_launcher.sh"
+scripts_dir_name="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+cp "${scripts_dir_name}/${emulator_script_filename}" "${HOME}"
+ANDROID_EMULATOR_RUNNER="${HOME}/${emulator_script_filename}"
+SetEnvVar "ANDROID_EMULATOR_RUNNER" "$ANDROID_EMULATOR_RUNNER"
+
+# Gradle Caching
+cp -r "${scripts_dir_name}/android/gradle_project" /tmp/gradle_project
+cd /tmp/gradle_project
+# Get Gradle files from qtbase
+qtbaseGradleUrl="https://code.qt.io/cgit/qt/qtbase.git/plain/src/3rdparty/gradle"
+commit_sha="0d91cc866f2799d56911bcdadabebb137eafcea8"
+curl "$qtbaseGradleUrl/gradle.properties?h=$commit_sha" > gradle.properties
+curl "$qtbaseGradleUrl/gradlew?h=$commit_sha" > gradlew
+curl "$qtbaseGradleUrl/gradlew.bat?h=$commit_sha" > gradlew.bat
+mkdir -p gradle/wrapper
+curl "$qtbaseGradleUrl/gradle/wrapper/gradle-wrapper.jar?h=$commit_sha" > gradle/wrapper/gradle-wrapper.jar
+curl "$qtbaseGradleUrl/gradle/wrapper/gradle-wrapper.properties?h=$commit_sha" > gradle/wrapper/gradle-wrapper.properties
+# Run Gradle
+chmod +x gradlew
+ANDROID_SDK_ROOT="$sdkTargetFolder" sh gradlew build