Chromium Code Reviews| Index: build/android/gyp/apk_install.py |
| diff --git a/build/android/gyp/apk_install.py b/build/android/gyp/apk_install.py |
| index 419dc170bb8e9066ba0d1fe9ae590808c0c797e5..64298b114965539350f8c566adb5a8473e833d04 100755 |
| --- a/build/android/gyp/apk_install.py |
| +++ b/build/android/gyp/apk_install.py |
| @@ -23,6 +23,22 @@ sys.path.append(BUILD_ANDROID_DIR) |
| from pylib import constants |
| from pylib.utils import apk_helper |
| +def RetrieveDeviceConfig(device): |
| + """Probes the given device for its split-select config.""" |
| + SHELL_CONFIG_COMMAND = ('echo $(getprop persist.sys.language)-' |
|
jbudorick
2015/05/19 15:06:59
I have questions about this that I'll ask you abou
agrieve
2015/05/19 18:34:53
Acknowledged.
|
| + 'r$(getprop persist.sys.country)-' |
| + '$(D=$(getprop ro.sf.lcd_density);' |
| + ' D=${D/120/ldpi};' |
| + ' D=${D/160/mdpi};' |
| + ' D=${D/240/hdpi};' |
| + ' D=${D/320/xhdpi};' |
| + ' D=${D/480/xxhdpi};' |
| + ' D=${D/[0-9]*/tvdpi/};' |
| + ' echo $D):' |
| + '$(getprop ro.product.cpu.abi)') |
| + return device.RunShellCommand(SHELL_CONFIG_COMMAND)[0] |
| + |
| + |
| def GetNewMetadata(device, apk_package): |
| """Gets the metadata on the device for the apk_package apk.""" |
| output = device.RunShellCommand('ls -l /data/app/') |
| @@ -62,6 +78,9 @@ def main(): |
| help='Path to .apk splits (can specify multiple times, causes ' |
| '--install-multiple to be used.', |
| action='append') |
| + parser.add_option('--android-sdk-tools', |
| + help='Path to the Android SDK build tools folder. ' + |
| + 'Required when using --split-apk-path.') |
| parser.add_option('--install-record', |
| help='Path to install record (touched only when APK is installed).') |
| parser.add_option('--build-device-configuration', |
| @@ -88,13 +107,28 @@ def main(): |
| # the build, then the APK has to be installed (regardless of the md5 record). |
| force_install = HasInstallMetadataChanged(device, apk_package, metadata_path) |
| + def SelectSplits(target_config, base_apk, split_apks, android_sdk_tools): |
| + cmd = [os.path.join(android_sdk_tools, 'split-select'), |
| + '--target', target_config, |
| + '--base', base_apk, |
| + ] |
| + for split in split_apks: |
| + cmd.extend(('--split', split)) |
| + |
| + # split-select outputs one path per line and a blank line at the end. |
| + output = build_utils.CheckOutput(cmd) |
| + return [x for x in output.split('\n') if x] |
| + |
| def Install(): |
| - # TODO: Filter splits using split-select. |
| - active_splits = options.split_apk_path |
| - if active_splits: |
| - device.adb.InstallMultiple( |
| - [options.apk_path] + active_splits, |
| - reinstall=True) |
| + if options.split_apk_path: |
|
jbudorick
2015/05/19 15:12:48
This should check against a minimum SDK level, e.g
|
| + device_config = RetrieveDeviceConfig(device) |
| + active_splits = SelectSplits(device_config, options.apk_path, |
|
jbudorick
2015/05/19 15:06:59
nit: either indent params on subsequent lines to t
agrieve
2015/05/19 18:34:52
Done.
|
| + options.split_apk_path, options.android_sdk_tools) |
| + |
| + all_apks = [options.apk_path] + active_splits |
| + apk_names = [os.path.basename(path) for path in all_apks] |
| + print('Installing apks: ' + ', '.join(apk_names)) |
|
jbudorick
2015/05/19 15:06:59
nit: We don't typically use the python3 print synt
agrieve
2015/05/19 18:34:53
Done.
|
| + device.device.adb.InstallMultiple(all_apks, reinstall=True) |
| else: |
| device.Install(options.apk_path, reinstall=True) |