Index: tools/android/adb_remote_setup.sh |
diff --git a/tools/android/adb_remote_setup.sh b/tools/android/adb_remote_setup.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..d3a9670efca573d5b5df90f901f53b080631cf8e |
--- /dev/null |
+++ b/tools/android/adb_remote_setup.sh |
@@ -0,0 +1,99 @@ |
+#!/bin/bash |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+# URL from which the latest version of this script can be downloaded. |
+# Gitiles returns the result as base64 formatted, so the result needs to be |
+# decoded. See https://code.google.com/p/gitiles/issues/detail?id=7 for |
+# more information about this security precaution. |
+script_url="https://chromium.googlesource.com/chromium/src.git/+/master" |
+script_url+="/tools/android/adb_remote_setup.sh" |
+script_url+="?format=TEXT" |
+ |
+# Replaces this file with the latest version of the script and runs it. |
+update-self() { |
+ local script="${BASH_SOURCE[0]}" |
+ local new_script="${script}.new" |
+ local updater_script="${script}.updater" |
+ curl -sSf "$script_url" | base64 --decode > "$new_script" || return |
+ chmod +x "$new_script" || return |
+ |
+ # Replace this file with the newly downloaded script. |
+ cat > "$updater_script" << EOF |
+#!/bin/bash |
+if mv "$new_script" "$script"; then |
+ rm -- "$updater_script" |
+else |
+ echo "Note: script update failed." |
+fi |
+ADB_REMOTE_SETUP_NO_UPDATE=1 exec /bin/bash "$script" $@ |
+EOF |
+ exec /bin/bash "$updater_script" "$@" |
+} |
+ |
+if [[ "$ADB_REMOTE_SETUP_NO_UPDATE" -ne 1 ]]; then |
+ update-self "$@" || echo 'Note: script update failed' |
+fi |
+ |
+if [[ $# -ne 1 && $# -ne 2 ]]; then |
+ cat <<'EOF' |
+Usage: adb_remote_setup.sh REMOTE_HOST [REMOTE_ADB] |
+ |
+Configures adb on a remote machine to communicate with a device attached to the |
+local machine. This is useful for installing APKs, running tests, etc while |
+working remotely. |
+ |
+Arguments: |
+ REMOTE_HOST hostname of remote machine |
+ REMOTE_ADB path to adb on the remote machine (you can omit this if adb is in |
+ the remote host's path) |
+EOF |
+ exit 1 |
+fi |
+ |
+remote_host="$1" |
+remote_adb="${2:-adb}" |
+ |
+# Ensure adb is in the local machine's path. |
+if ! which adb >/dev/null; then |
+ echo "error: adb must be in your local machine's path." |
+ exit 1 |
+fi |
+ |
+# Ensure local and remote versions of adb are the same. |
+remote_adb_version=$(ssh "$remote_host" "$remote_adb version") |
+local_adb_version=$(adb version) |
+if [[ "$local_adb_version" != "$remote_adb_version" ]]; then |
+ echo >&2 |
+ echo "WARNING: local adb is not the same version as remote adb." >&2 |
+ echo "This should be fixed since it may result in protocol errors." >&2 |
+ echo " local adb: $local_adb_version" >&2 |
+ echo " remote adb: $remote_adb_version" >&2 |
+ echo >&2 |
+ sleep 5 |
+fi |
+ |
+# Kill the adb server on the remote host. |
+ssh "$remote_host" "$remote_adb kill-server" |
+ |
+# Start the adb server locally. |
+adb start-server |
+ |
+# Forward various ports from the remote host to the local host: |
+# 5037: adb |
+# 8001: http server |
+# 9031: sync server |
+# 9041: search by image server |
+# 9051: policy server |
+# 10000: net unittests |
+# 10201: net unittests |
+ssh -C \ |
+ -R 5037:localhost:5037 \ |
+ -L 8001:localhost:8001 \ |
+ -L 9031:localhost:9031 \ |
+ -L 9041:localhost:9041 \ |
+ -L 9051:localhost:9051 \ |
+ -R 10000:localhost:10000 \ |
+ -R 10201:localhost:10201 \ |
+ "$remote_host" |