aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool/android/install.sh
blob: 56683e890329f7c69dadfb57652862d7fb37673d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
#
# Copyright 2016 Google Inc. All Rights Reserved.
#
# This is the install 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 install succeeds; and '1' if the install 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

  "  ${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"
    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 1;;
      *) echo "Please answer 1, 2, or 3.";;
    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}