#!/bin/bash # # Copyright 2016 Google Inc. All Rights Reserved. # # This is the test setup script for generating an Android image based off the # current working build tree. make is called to relink the object files and # generate the new Android image to be flashed. The device is then rebooted into # bootloader mode and fastboot is used to flash the new image. The device is # then rebooted so the user's test script can run. # # This script is intended to be used by binary_search_state.py, as # part of the binary search triage on the Android source tree. It should # return '0' if the setup succeeds; and '1' if the setup fails (the image # could not build or be flashed). # source android/common.sh manual_flash() { echo echo "Please manually flash the built image to your device." echo "To do so follow these steps:" echo " 1. Boot your device into fastboot mode." echo " 2. cd to '${BISECT_ANDROID_SRC}'" echo " 2. Run 'source build/envsetup.sh'" echo " 3. Run 'lunch'" echo " 4. Run '${ADB_DEVICE}fastboot flashall -w'" echo "Or see the following link for more in depth steps:" echo "https://source.android.com/source/running.html" echo while true; do sleep 1 read -p "Was the flashing of the image successful? " choice case $choice in [Yy]*) return 0;; [Nn]*) return 1;; *) echo "Please answer y or n.";; esac done } auto_flash() { echo echo "Please ensure your Android device is on and in fastboot mode so" echo "fastboot flash may run." echo sleep 1 read -p $'Press enter to continue and retry the flashing' notused echo " ${ADB_DEVICE}fastboot flashall -w" fastboot flashall -w } flash() { echo echo "FLASHING" echo "Rebooting device into fastboot mode." echo " ${ADB_DEVICE}adb reboot bootloader" adb reboot bootloader echo echo "Waiting for device to reach fastboot mode." echo "(will timeout after 60 seconds)" # fastboot will block indefinitely until device comes online. # Grab random variable to test if device is online. # If takes >60s then we error out and ask the user for help. timeout 60 fastboot getvar 0 2>/dev/null fastboot_flash_status=$? if [[ ${fastboot_flash_status} -eq 0 ]]; then echo echo "Flashing image." echo " ${ADB_DEVICE}fastboot flashall -w" fastboot flashall -w fastboot_flash_status=$? fi while [[ ${fastboot_flash_status} -ne 0 ]] ; do echo echo "fastboot flash has failed! From here you can:" echo "1. Debug and/or flash manually" echo "2. Retry flashing automatically" echo "3. Abort this installation and skip this image" echo "4. Abort this installation and mark test as failed" sleep 1 read -p "Which method would you like to do? " choice case $choice in 1) manual_flash && break;; 2) auto_flash && break;; 3) return 125;; 4) return 1;; *) echo "Please answer 1, 2, 3, or 4.";; esac done } # Number of jobs make will use. Can be customized and played with. MAKE_JOBS=${BISECT_NUM_JOBS} # Set ADB_DEVICE to "ANDROID_SERIAL=${ANDROID_SERIAL}" or "" if device id not # set. This is used for debugging info so users can confirm which device # commands are being sent to. ADB_DEVICE=${ANDROID_SERIAL:+"ANDROID_SERIAL=${ANDROID_SERIAL} "} echo echo "INSTALLATION BEGIN" echo cd ${BISECT_ANDROID_SRC} echo "BUILDING IMAGE" make -j ${MAKE_JOBS} make_status=$? exit_val=0 if [[ ${make_status} -eq 0 ]]; then flash exit_val=$? else echo "ERROR:" echo "make returned a non-zero status: ${make_status}. Skipping image..." exit_val=1 fi exit ${exit_val}