Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(730)

Side by Side Diff: build/android/gyp/apk_install.py

Issue 2069113002: [build/android] Switch hand-rolled 'ls' to StatDirectory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2013 The Chromium Authors. All rights reserved. 3 # Copyright 2013 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Installs an APK. 7 """Installs an APK.
8 8
9 """ 9 """
10 10
11 import optparse 11 import optparse
12 import os 12 import os
13 import re
14 import sys 13 import sys
15 14
16 from util import build_device 15 from util import build_device
17 from util import build_utils 16 from util import build_utils
18 from util import md5_check 17 from util import md5_check
19 18
20 BUILD_ANDROID_DIR = os.path.abspath( 19 BUILD_ANDROID_DIR = os.path.abspath(
21 os.path.join(os.path.dirname(__file__), '..')) 20 os.path.join(os.path.dirname(__file__), '..'))
22 sys.path.append(BUILD_ANDROID_DIR) 21 sys.path.append(BUILD_ANDROID_DIR)
23 22
24 import devil_chromium 23 import devil_chromium
25 from devil.android import apk_helper 24 from devil.android import apk_helper
26 from pylib import constants 25 from pylib import constants
27 26
28 27
29 def GetNewMetadata(device, apk_package):
30 """Gets the metadata on the device for the apk_package apk."""
31 output = device.RunShellCommand('ls -l /data/app/')
32 # Matches lines like:
33 # -rw-r--r-- system system 7376582 2013-04-19 16:34 \
34 # org.chromium.chrome.apk
35 # -rw-r--r-- system system 7376582 2013-04-19 16:34 \
36 # org.chromium.chrome-1.apk
37 apk_matcher = lambda s: re.match('.*%s(-[0-9]*)?(.apk)?$' % apk_package, s)
38 matches = filter(apk_matcher, output)
39 return matches[0] if matches else None
perezju 2016/06/15 14:54:45 Replaced below with device.GetInstallMetadata(apk_
40
41 def HasInstallMetadataChanged(device, apk_package, metadata_path): 28 def HasInstallMetadataChanged(device, apk_package, metadata_path):
42 """Checks if the metadata on the device for apk_package has changed.""" 29 """Checks if the metadata on the device for apk_package has changed."""
43 if not os.path.exists(metadata_path): 30 if not os.path.exists(metadata_path):
44 return True 31 return True
45 32
46 with open(metadata_path, 'r') as expected_file: 33 try:
47 return expected_file.read() != device.GetInstallMetadata(apk_package) 34 expected_metadata = build_utils.ReadJson(metadata_path)
35 except ValueError: # File is not json encoded.
36 return True
perezju 2016/06/15 14:54:45 Give some tolerance for old files (with the output
agrieve 2016/06/15 17:25:24 One step even better would be to change this file
perezju 2016/06/16 09:31:28 Had a quick look, but the change would be a bit mo
37
38 return expected_metadata != device.GetInstallMetadata(apk_package)
48 39
49 40
50 def RecordInstallMetadata(device, apk_package, metadata_path): 41 def RecordInstallMetadata(device, apk_package, metadata_path):
51 """Records the metadata from the device for apk_package.""" 42 """Records the metadata from the device for apk_package."""
52 metadata = GetNewMetadata(device, apk_package) 43 metadata = device.GetInstallMetadata(apk_package, refresh=True)
53 if not metadata: 44 if not metadata:
54 raise Exception('APK install failed unexpectedly.') 45 raise Exception('APK install failed unexpectedly.')
55 46
56 with open(metadata_path, 'w') as outfile: 47 build_utils.WriteJson(metadata, metadata_path)
57 outfile.write(metadata)
58 48
59 49
60 def main(): 50 def main():
61 parser = optparse.OptionParser() 51 parser = optparse.OptionParser()
62 parser.add_option('--apk-path', 52 parser.add_option('--apk-path',
63 help='Path to .apk to install.') 53 help='Path to .apk to install.')
64 parser.add_option('--split-apk-path', 54 parser.add_option('--split-apk-path',
65 help='Path to .apk splits (can specify multiple times, causes ' 55 help='Path to .apk splits (can specify multiple times, causes '
66 '--install-multiple to be used.', 56 '--install-multiple to be used.',
67 action='append') 57 action='append')
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 record_path=record_path, 106 record_path=record_path,
117 input_paths=[options.apk_path], 107 input_paths=[options.apk_path],
118 force=force_install) 108 force=force_install)
119 109
120 if options.stamp: 110 if options.stamp:
121 build_utils.Touch(options.stamp) 111 build_utils.Touch(options.stamp)
122 112
123 113
124 if __name__ == '__main__': 114 if __name__ == '__main__':
125 sys.exit(main()) 115 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | build/android/gyp/util/build_device.py » ('j') | build/android/gyp/util/build_device.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698