| 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..c9098676f1b67e6486a07666c7c9a7db15181651 100755
|
| --- a/build/android/gyp/apk_install.py
|
| +++ b/build/android/gyp/apk_install.py
|
| @@ -23,6 +23,29 @@ sys.path.append(BUILD_ANDROID_DIR)
|
| from pylib import constants
|
| from pylib.utils import apk_helper
|
|
|
| +_DPI_TO_DENSITY = {
|
| + 120: 'ldpi',
|
| + 160: 'mdpi',
|
| + 240: 'hdpi',
|
| + 320: 'xhdpi',
|
| + 480: 'xxhdpi',
|
| + }
|
| +
|
| +
|
| +def RetrieveDeviceConfig(device):
|
| + """Probes the given device for its split-select config.
|
| +
|
| + For example: en-rUS-xhdpi:armeabi-v7a
|
| + Run "split-select --help" for more info about the format.
|
| + """
|
| + language = device.GetProp('persist.sys.language')
|
| + country = device.GetProp('persist.sys.country')
|
| + density_dpi = int(device.GetProp('ro.sf.lcd_density'))
|
| + density = _DPI_TO_DENSITY.get(density_dpi, 'tvdpi')
|
| + abi = device.product_cpu_abi
|
| + return '%s-r%s-%s:%s' % (language, country, density, abi)
|
| +
|
| +
|
| 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 +85,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 +114,34 @@ 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:
|
| + requiredSdkVersion = constants.ANDROID_SDK_VERSION_CODES.LOLLIPOP
|
| + actualSdkVersion = device.device.build_version_sdk
|
| + if actualSdkVersion < requiredSdkVersion:
|
| + raise Exception(('--split-apk-path requires sdk version %s. Device has '
|
| + 'version %s') % (requiredSdkVersion, actualSdkVersion))
|
| + device_config = RetrieveDeviceConfig(device.device)
|
| + active_splits = SelectSplits(
|
| + device_config,
|
| + options.apk_path,
|
| + options.split_apk_path,
|
| + options.android_sdk_tools)
|
| +
|
| + all_apks = [options.apk_path] + active_splits
|
| + device.device.adb.InstallMultiple(all_apks, reinstall=True)
|
| else:
|
| device.Install(options.apk_path, reinstall=True)
|
|
|
|
|