| Index: sky/tools/shelldb
|
| diff --git a/sky/tools/shelldb b/sky/tools/shelldb
|
| index 32ddc2cbb699a7370243834e1af80236ffac3e54..3800670c3b1dbd6171ab9c14fdb1047d537e4d12 100755
|
| --- a/sky/tools/shelldb
|
| +++ b/sky/tools/shelldb
|
| @@ -14,6 +14,8 @@ import subprocess
|
| import sys
|
| import time
|
| import urlparse
|
| +import hashlib
|
| +import tempfile
|
|
|
| SKY_TOOLS_DIR = os.path.dirname(os.path.abspath(__file__))
|
| SKY_ROOT = os.path.dirname(SKY_TOOLS_DIR)
|
| @@ -26,6 +28,7 @@ APK_NAME = 'SkyDemo.apk'
|
| ADB_PATH = os.path.join(SRC_ROOT,
|
| 'third_party/android_tools/sdk/platform-tools/adb')
|
| ANDROID_PACKAGE = "org.domokit.sky.demo"
|
| +SHA1_PATH = '/sdcard/%s/%s.sha1' % (ANDROID_PACKAGE, APK_NAME)
|
|
|
| PID_FILE_PATH = "/tmp/skydemo.pids"
|
| PID_FILE_KEYS = frozenset([
|
| @@ -193,12 +196,33 @@ class StartSky(object):
|
| pids['build_dir'] = os.path.abspath(args.build_dir)
|
|
|
| if args.install:
|
| - # -r to replace an existing apk, -d to allow version downgrade.
|
| - subprocess.check_call([ADB_PATH, 'install', '-r', '-d', apk_path])
|
| + # We might need to install a new APK, so check SHA1
|
| + source_sha1 = hashlib.sha1(open(apk_path, 'rb').read()).hexdigest()
|
| + dest_sha1 = subprocess.check_output([ADB_PATH, 'shell', 'cat', SHA1_PATH])
|
| + use_existing_apk = False
|
| + if source_sha1 == dest_sha1:
|
| + # Make sure that the APK didn't get uninstalled somehow
|
| + use_existing_apk = subprocess.check_output([
|
| + ADB_PATH, 'shell', 'pm', 'list', 'packages', ANDROID_PACKAGE
|
| + ])
|
| else:
|
| + # User is telling us not to bother installing an APK
|
| + use_existing_apk = True
|
| +
|
| + if use_existing_apk:
|
| + # APK is already on the device, we only need to stop it
|
| subprocess.check_call([
|
| ADB_PATH, 'shell', 'am', 'force-stop', ANDROID_PACKAGE
|
| ])
|
| + else:
|
| + # Slow path, need to upload a new APK to the device
|
| + # -r to replace an existing apk, -d to allow version downgrade.
|
| + subprocess.check_call([ADB_PATH, 'install', '-r', '-d', apk_path])
|
| + # record the SHA1 of the APK we just pushed
|
| + with tempfile.NamedTemporaryFile() as fp:
|
| + fp.write(source_sha1)
|
| + fp.seek(0)
|
| + subprocess.check_call([ADB_PATH, 'push', fp.name, SHA1_PATH])
|
|
|
| # Set up port forwarding for observatory
|
| port_string = 'tcp:%s' % OBSERVATORY_PORT
|
|
|