简体   繁体   中英

/system/bin/sh: tr: not found - Android Azure Devops pipeline

I get the following error when I try to start the emulator from my pipeline in Azure:

nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > 
/dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop 
sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'

$ANDROID_HOME/platform-tools/adb devices

echo "Emulator started"
Generating script.
##[debug]which 'bash'
##[debug]found: '/bin/bash'
##[debug]Agent.Version=2.204.0
##[debug]agent.tempDirectory=/Users/runner/work/_temp
##[debug]check path : /Users/runner/work/_temp
========================== Starting Command Output ===========================
##[debug]which '/bin/bash'
##[debug]found: '/bin/bash'
##[debug]/bin/bash arg: /Users/runner/work/_temp/52b9227f-faa1- 
4557-9396- 
8b3c63435983.sh
##[debug]exec tool: /bin/bash
##[debug]arguments:
##[debug]   /Users/runner/work/_temp/52b9227f-faa1-4557-9396- 
8b3c63435983.sh
/bin/bash /Users/runner/work/_temp/52b9227f-faa1-4557-9396- 
8b3c63435983.sh
* daemon not running; starting now at tcp:5037
* daemon started successfully
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found

Given below is my pipeline yml

# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android

#trigger:
#- feature/azure-cicd

pool:
  vmImage: 'macos-latest'

steps:

- bash: | 
    # Install AVD files
    echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install 'system-images;android-19;google_apis;x86' 
    echo "AVD system-image successfully downloaded and installed." 
  displayName: 'Download and install emulator image'
  
- bash: | 
    # Create emulator
    echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-19;google_apis;x86' --force

    $ANDROID_HOME/emulator/emulator -list-avds 
  displayName: 'Create emulator'

- bash: | 
    # Start emulator in background
    nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > /dev/null 2>&1 &
    $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'

    $ANDROID_HOME/platform-tools/adb devices

    echo "Emulator started" 
  displayName: 'Start emulator'

- bash: | 
    ./gradlew testdevelopDebug connectedMockDebugAndroidTest --stacktrace --no-daemon
    ./gradlew --stop 
  displayName: 'Run Instrumented Tests' 
  continueOnError: true

This works perfect when I use android-28 instead of android-19

Is there any change that I need to make in my pipeline such that I can launch the emulator?

Any help is much appreciated

The adb call in yml was done to get the status and check that locally. In the yml I was trying to pass the while loop into adb.

This example depicts the right usage and solution:

https://codehunter.cc/a/android/detect-when-android-emulator-is-fully-booted

while [ "`adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM