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.
6 # URL from which the latest version of this script can be downloaded.
7 # Gitiles returns the result as base64 formatted, so the result needs to be
8 # decoded. See https://code.google.com/p/gitiles/issues/detail?id=7 for
9 # more information about this security precaution.
10 script_url
="https://chromium.googlesource.com/chromium/src.git/+/master"
11 script_url
+="/tools/android/adb_remote_setup.sh"
12 script_url
+="?format=TEXT"
14 # Replaces this file with the latest version of the script and runs it.
16 local script="${BASH_SOURCE[0]}"
17 local new_script
="${script}.new"
18 local updater_script
="${script}.updater"
19 curl
-sSf "$script_url" | base64
--decode > "$new_script" ||
return
20 chmod +x
"$new_script" ||
return
22 # Replace this file with the newly downloaded script.
23 cat > "$updater_script" << EOF
25 if mv "$new_script" "$script"; then
26 rm -- "$updater_script"
28 echo "Note: script update failed."
30 ADB_REMOTE_SETUP_NO_UPDATE=1 exec /bin/bash "$script" $@
32 exec /bin
/bash
"$updater_script" "$@"
35 if [[ "$ADB_REMOTE_SETUP_NO_UPDATE" -ne 1 ]]; then
36 update-self
"$@" ||
echo 'Note: script update failed'
39 if [[ $# -ne 1 && $# -ne 2 ]]; then
41 Usage: adb_remote_setup.sh REMOTE_HOST [REMOTE_ADB]
43 Configures adb on a remote machine to communicate with a device attached to the
44 local machine. This is useful for installing APKs, running tests, etc while
48 REMOTE_HOST hostname of remote machine
49 REMOTE_ADB path to adb on the remote machine (you can omit this if adb is in
50 the remote host's path)
56 remote_adb
="${2:-adb}"
58 # Ensure adb is in the local machine's path.
59 if ! which adb
>/dev
/null
; then
60 echo "error: adb must be in your local machine's path."
64 if which kinit
>/dev
/null
; then
65 # Allow ssh to succeed without typing your password multiple times.
69 # Ensure local and remote versions of adb are the same.
70 remote_adb_version
=$
(ssh "$remote_host" "$remote_adb version")
71 local_adb_version
=$
(adb version
)
72 if [[ "$local_adb_version" != "$remote_adb_version" ]]; then
74 echo "WARNING: local adb is not the same version as remote adb." >&2
75 echo "This should be fixed since it may result in protocol errors." >&2
76 echo " local adb: $local_adb_version" >&2
77 echo " remote adb: $remote_adb_version" >&2
82 # Kill the adb server on the remote host.
83 ssh "$remote_host" "$remote_adb kill-server"
85 # Start the adb server locally.
88 # Forward various ports from the remote host to the local host:
92 # 9041: search by image server
94 # 10000: net unittests
95 # 10201: net unittests
97 -R 5037:localhost
:5037 \
98 -L 8001:localhost
:8001 \
99 -L 9031:localhost
:9031 \
100 -L 9041:localhost
:9041 \
101 -L 9051:localhost
:9051 \
102 -R 10000:localhost
:10000 \
103 -R 10201:localhost
:10201 \