|
| 1 | +#!/bin/bash |
| 2 | +# Copyright (c) Facebook, Inc. and its affiliates. |
| 3 | +# |
| 4 | +# This source code is licensed under the MIT license found in the |
| 5 | +# LICENSE file in the root directory of this source tree. |
| 6 | + |
| 7 | +# inspired by https://github.com/Originate/guide/blob/master/android/guide/Continuous%20Integration.md |
| 8 | + |
| 9 | +# shellcheck disable=SC1091 |
| 10 | +source "scripts/.tests.env" |
| 11 | + |
| 12 | +function getAndroidPackages { |
| 13 | + export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools.bin:$PATH" |
| 14 | + |
| 15 | + DEPS="$ANDROID_HOME/installed-dependencies" |
| 16 | + |
| 17 | + # Package names can be obtained using `sdkmanager --list` |
| 18 | + if [ ! -e "$DEPS" ] || [ ! "$CI" ]; then |
| 19 | + echo "Installing Android API level $ANDROID_SDK_TARGET_API_LEVEL, Google APIs, $AVD_ABI system image..." |
| 20 | + sdkmanager "system-images;android-$ANDROID_SDK_TARGET_API_LEVEL;google_apis;$AVD_ABI" |
| 21 | + echo "Installing build SDK for Android API level $ANDROID_SDK_BUILD_API_LEVEL..." |
| 22 | + sdkmanager "platforms;android-$ANDROID_SDK_BUILD_API_LEVEL" |
| 23 | + echo "Installing target SDK for Android API level $ANDROID_SDK_TARGET_API_LEVEL..." |
| 24 | + sdkmanager "platforms;android-$ANDROID_SDK_TARGET_API_LEVEL" |
| 25 | + echo "Installing SDK build tools, revision $ANDROID_SDK_BUILD_TOOLS_REVISION..." |
| 26 | + sdkmanager "build-tools;$ANDROID_SDK_BUILD_TOOLS_REVISION" |
| 27 | + # These moved to "system-images;android-$ANDROID_SDK_BUILD_API_LEVEL;google_apis;x86" starting with API level 25, but there is no ARM version. |
| 28 | + echo "Installing Google APIs $ANDROID_GOOGLE_API_LEVEL..." |
| 29 | + sdkmanager "add-ons;addon-google_apis-google-$ANDROID_GOOGLE_API_LEVEL" |
| 30 | + echo "Installing Android Support Repository" |
| 31 | + sdkmanager "extras;android;m2repository" |
| 32 | + $CI && touch "$DEPS" |
| 33 | + fi |
| 34 | +} |
| 35 | + |
| 36 | +function getAndroidNDK { |
| 37 | + NDK_HOME="/opt/ndk" |
| 38 | + DEPS="$NDK_HOME/installed-dependencies" |
| 39 | + |
| 40 | + if [ ! -e $DEPS ]; then |
| 41 | + cd $NDK_HOME || exit |
| 42 | + echo "Downloading NDK..." |
| 43 | + curl -o ndk.zip https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip |
| 44 | + unzip -o -q ndk.zip |
| 45 | + echo "Installed Android NDK at $NDK_HOME" |
| 46 | + touch $DEPS |
| 47 | + rm ndk.zip |
| 48 | + fi |
| 49 | +} |
| 50 | + |
| 51 | +function createAVD { |
| 52 | + AVD_PACKAGES="system-images;android-$ANDROID_SDK_TARGET_API_LEVEL;google_apis;$AVD_ABI" |
| 53 | + echo "Creating AVD with packages $AVD_PACKAGES" |
| 54 | + echo no | avdmanager create avd --name "$AVD_NAME" --force --package "$AVD_PACKAGES" --tag google_apis --abi "$AVD_ABI" |
| 55 | +} |
| 56 | + |
| 57 | +function launchAVD { |
| 58 | + # The AVD name here should match the one created in createAVD |
| 59 | + if [ "$CI" ] |
| 60 | + then |
| 61 | + "$ANDROID_HOME/emulator/emulator" -avd "$AVD_NAME" -no-audio -no-window |
| 62 | + else |
| 63 | + "$ANDROID_HOME/emulator/emulator" -avd "$AVD_NAME" |
| 64 | + fi |
| 65 | +} |
| 66 | + |
| 67 | +function waitForAVD { |
| 68 | + echo "Waiting for Android Virtual Device to finish booting..." |
| 69 | + local bootanim="" |
| 70 | + export PATH=$(dirname $(dirname $(command -v android)))/platform-tools:$PATH |
| 71 | + until [[ "$bootanim" =~ "stopped" ]]; do |
| 72 | + sleep 5 |
| 73 | + bootanim=$(adb -e shell getprop init.svc.bootanim 2>&1) |
| 74 | + echo "boot animation status=$bootanim" |
| 75 | + done |
| 76 | + echo "Android Virtual Device is ready." |
| 77 | +} |
| 78 | + |
| 79 | +function retry3 { |
| 80 | + local n=1 |
| 81 | + local max=3 |
| 82 | + local delay=1 |
| 83 | + while true; do |
| 84 | + "$@" && break || { |
| 85 | + if [[ $n -lt $max ]]; then |
| 86 | + ((n++)) |
| 87 | + echo "Command failed. Attempt $n/$max:" |
| 88 | + sleep $delay; |
| 89 | + else |
| 90 | + echo "The command has failed after $n attempts." >&2 |
| 91 | + return 1 |
| 92 | + fi |
| 93 | + } |
| 94 | + done |
| 95 | +} |
0 commit comments