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