misc: wait for device readyness in the exec wrapper

Updates #23824

Change-Id: I5472a05eb2cf571ccc84c76c6f592bf4dd2e3cb4
Reviewed-on: https://go-review.googlesource.com/c/163621
Run-TryBot: Elias Naur <mail@eliasnaur.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/misc/android/go_android_exec.go b/misc/android/go_android_exec.go
index 2376e29..e36edac 100644
--- a/misc/android/go_android_exec.go
+++ b/misc/android/go_android_exec.go
@@ -59,6 +59,11 @@
 	log.SetFlags(0)
 	log.SetPrefix("go_android_exec: ")
 
+	// In case we're booting a device or emulator alongside androidtest.bash
+	// wait for it to be ready. adb wait-for-device is not enough, we have to
+	// wait for sys.boot_completed.
+	run("wait-for-device", "shell", "while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;")
+
 	// Prepare a temporary directory that will be cleaned up at the end.
 	deviceGotmp := fmt.Sprintf("/data/local/tmp/%s-%d",
 		filepath.Base(os.Args[1]), os.Getpid())