|  | #!/bin/bash | 
|  | set -eux | 
|  |  | 
|  | PYTORCH_DIR="$(cd $(dirname $0)/..; pwd -P)" | 
|  | PYTORCH_ANDROID_DIR=$PYTORCH_DIR/android | 
|  |  | 
|  | source "$PYTORCH_ANDROID_DIR/common.sh" | 
|  |  | 
|  | check_android_sdk | 
|  | check_gradle | 
|  |  | 
|  | # Run android instrumented tests on x86 emulator | 
|  |  | 
|  | ADB_PATH=$ANDROID_HOME/platform-tools/adb | 
|  |  | 
|  | echo "Expecting running emulator" | 
|  | $ADB_PATH devices | 
|  |  | 
|  | DEVICES_COUNT=$($ADB_PATH devices | awk 'NF' | wc -l) | 
|  | echo "DEVICES_COUNT:$DEVICES_COUNT" | 
|  |  | 
|  | if [ "$DEVICES_COUNT" -eq 1 ]; then | 
|  | echo "Unable to found connected android emulators" | 
|  | cat <<- EOF | 
|  | To start android emulator: | 
|  | 1. Install android sdkmanager packages | 
|  | $ANDROID_HOME/tools/bin/sdkmanager "system-images;android-25;google_apis;x86" | 
|  |  | 
|  | to specify proxy add params: --proxy=http --proxy_host=fwdproxy --proxy_port=8080 | 
|  |  | 
|  | 2. Create android virtual device | 
|  | $ANDROID_HOME/tools/bin/avdmanager create avd --name "x86_android25" --package "system-images;android-25;google_apis;x86" | 
|  |  | 
|  | 3. Start emulator in headless mode without audio | 
|  | $ANDROID_HOME/tools/emulator -avd x86_android25 -no-audio -no-window | 
|  |  | 
|  | 4. Check that emulator is running | 
|  | $ANDROID_HOME/platform-tools/adb devices | 
|  |  | 
|  | If everything is ok the output will be: | 
|  |  | 
|  | List of devices attached | 
|  | emulator-5554   device | 
|  | EOF | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | echo "Waiting for emulator boot completed" | 
|  | $ADB_PATH wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;' | 
|  |  | 
|  | { | 
|  | # The test currently takes about 10 minutes | 
|  | retry $GRADLE_PATH -PABI_FILTERS=x86 -p $PYTORCH_ANDROID_DIR connectedAndroidTest | 
|  | } || { | 
|  | echo "::error::Check https://github.com/pytorch/pytorch/tree/master/test/mobile/model_test to see how to fix the failed mobile test" | 
|  | exit 1 | 
|  | } |