| 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"
|
|
|