Home | History | Annotate | Download | only in android
      1 #!/bin/bash
      2 # Copyright 2014 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 # URL from which the latest version of this script can be downloaded.
      7 script_url="http://src.chromium.org/svn/trunk/src/tools/android/adb_remote_setup.sh"
      8 
      9 # Replaces this file with the latest version of the script and runs it.
     10 update-self() {
     11   local script="${BASH_SOURCE[0]}"
     12   local new_script="${script}.new"
     13   local updater_script="${script}.updater"
     14   curl -sSf -o "$new_script" "$script_url" || return
     15   chmod +x "$new_script" || return
     16 
     17   # Replace this file with the newly downloaded script.
     18   cat > "$updater_script" << EOF
     19 #!/bin/bash
     20 if mv "$new_script" "$script"; then
     21   rm -- "$updater_script"
     22 else
     23   echo "Note: script update failed."
     24 fi
     25 ADB_REMOTE_SETUP_NO_UPDATE=1 exec /bin/bash "$script" $@
     26 EOF
     27   exec /bin/bash "$updater_script" "$@"
     28 }
     29 
     30 if [[ "$ADB_REMOTE_SETUP_NO_UPDATE" -ne 1 ]]; then
     31   update-self "$@" || echo 'Note: script update failed'
     32 fi
     33 
     34 if [[ $# -ne 1 && $# -ne 2 ]]; then
     35   cat <<'EOF'
     36 Usage: adb_remote_setup.sh REMOTE_HOST [REMOTE_ADB]
     37 
     38 Configures adb on a remote machine to communicate with a device attached to the
     39 local machine. This is useful for installing APKs, running tests, etc while
     40 working remotely.
     41 
     42 Arguments:
     43   REMOTE_HOST  hostname of remote machine
     44   REMOTE_ADB   path to adb on the remote machine (you can omit this if adb is in
     45                the remote host's path)
     46 EOF
     47   exit 1
     48 fi
     49 
     50 remote_host="$1"
     51 remote_adb="${2:-adb}"
     52 
     53 # Ensure adb is in the local machine's path.
     54 if ! which adb >/dev/null; then
     55   echo "error: adb must be in your local machine's path."
     56   exit 1
     57 fi
     58 
     59 if which kinit >/dev/null; then
     60   # Allow ssh to succeed without typing your password multiple times.
     61   kinit -R || kinit
     62 fi
     63 
     64 # Kill the adb server on the remote host.
     65 ssh "$remote_host" "$remote_adb kill-server"
     66 
     67 # Start the adb server locally.
     68 adb start-server
     69 
     70 # Forward various ports from the remote host to the local host:
     71 #   5037: adb
     72 #   8001: http server
     73 #   9031: sync server
     74 #   10000: net unittests
     75 #   10201: net unittests
     76 ssh -C \
     77     -R 5037:localhost:5037 \
     78     -L 8001:localhost:8001 \
     79     -L 9031:localhost:9031 \
     80     -R 10000:localhost:10000 \
     81     -R 10201:localhost:10201 \
     82     "$remote_host"
     83