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

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

Issue 2948083003: Android: Add exclude_xxxhdpi GN parameter to android_apk (Closed)
Patch Set: Don't enable it yet Created 3 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
« no previous file with comments | « no previous file | build/config/android/internal_rules.gni » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2014 The Chromium Authors. All rights reserved. 3 # Copyright 2014 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 # pylint: disable=C0301 7 # pylint: disable=C0301
8 """Package resources into an apk. 8 """Package resources into an apk.
9 9
10 See https://android.googlesource.com/platform/tools/base/+/master/legacy/ant-tas ks/src/main/java/com/android/ant/AaptExecTask.java 10 See https://android.googlesource.com/platform/tools/base/+/master/legacy/ant-tas ks/src/main/java/com/android/ant/AaptExecTask.java
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 action='store_true', 128 action='store_true',
129 help='Enables density splits') 129 help='Enables density splits')
130 parser.add_option('--language-splits', 130 parser.add_option('--language-splits',
131 default='[]', 131 default='[]',
132 help='GN list of languages to create splits for') 132 help='GN list of languages to create splits for')
133 parser.add_option('--locale-whitelist', 133 parser.add_option('--locale-whitelist',
134 default='[]', 134 default='[]',
135 help='GN list of languages to include. All other language ' 135 help='GN list of languages to include. All other language '
136 'configs will be stripped out. List may include ' 136 'configs will be stripped out. List may include '
137 'a combination of Android locales or Chrome locales.') 137 'a combination of Android locales or Chrome locales.')
138
139 parser.add_option('--apk-path', 138 parser.add_option('--apk-path',
140 help='Path to output (partial) apk.') 139 help='Path to output (partial) apk.')
140 parser.add_option('--exclude-xxxhdpi', action='store_true',
141 help='Do not include xxxhdpi drawables.')
142 parser.add_option('--xxxhdpi-whitelist',
143 default='[]',
144 help='GN list of globs that say which xxxhdpi images to '
145 'include even when --exclude-xxxhdpi is set.')
141 146
142 options, positional_args = parser.parse_args(args) 147 options, positional_args = parser.parse_args(args)
143 148
144 if positional_args: 149 if positional_args:
145 parser.error('No positional arguments should be given.') 150 parser.error('No positional arguments should be given.')
146 151
147 # Check that required options have been provided. 152 # Check that required options have been provided.
148 required_options = ('android_sdk_jar', 'aapt_path', 'configuration_name', 153 required_options = ('android_sdk_jar', 'aapt_path', 'configuration_name',
149 'android_manifest', 'version_code', 'version_name', 154 'android_manifest', 'version_code', 'version_name',
150 'apk_path') 155 'apk_path')
151 156
152 build_utils.CheckOptions(options, parser, required=required_options) 157 build_utils.CheckOptions(options, parser, required=required_options)
153 158
154 options.resource_zips = build_utils.ParseGnList(options.resource_zips) 159 options.resource_zips = build_utils.ParseGnList(options.resource_zips)
155 options.language_splits = build_utils.ParseGnList(options.language_splits) 160 options.language_splits = build_utils.ParseGnList(options.language_splits)
156 options.locale_whitelist = build_utils.ParseGnList(options.locale_whitelist) 161 options.locale_whitelist = build_utils.ParseGnList(options.locale_whitelist)
162 options.xxxhdpi_whitelist = build_utils.ParseGnList(options.xxxhdpi_whitelist)
157 return options 163 return options
158 164
159 165
160 def _ToAaptLocales(locale_whitelist): 166 def _ToAaptLocales(locale_whitelist):
161 """Converts the list of Chrome locales to aapt config locales.""" 167 """Converts the list of Chrome locales to aapt config locales."""
162 ret = set() 168 ret = set()
163 for locale in locale_whitelist: 169 for locale in locale_whitelist:
164 locale = _CHROME_TO_ANDROID_LOCALE_MAP.get(locale, locale) 170 locale = _CHROME_TO_ANDROID_LOCALE_MAP.get(locale, locale)
165 if locale is None or ('-' in locale and '-r' not in locale): 171 if locale is None or ('-' in locale and '-r' not in locale):
166 raise Exception('_CHROME_TO_ANDROID_LOCALE_MAP needs updating.' 172 raise Exception('_CHROME_TO_ANDROID_LOCALE_MAP needs updating.'
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 if 'Debug' in options.configuration_name: 301 if 'Debug' in options.configuration_name:
296 package_command += ['--debug-mode'] 302 package_command += ['--debug-mode']
297 303
298 if options.locale_whitelist: 304 if options.locale_whitelist:
299 aapt_locales = _ToAaptLocales(options.locale_whitelist) 305 aapt_locales = _ToAaptLocales(options.locale_whitelist)
300 package_command += ['-c', ','.join(aapt_locales)] 306 package_command += ['-c', ','.join(aapt_locales)]
301 307
302 return package_command 308 return package_command
303 309
304 310
311 def _ResourceNameFromPath(path):
312 return os.path.splitext(os.path.basename(path))[0]
313
314
315 def _CreateExtractPredicate(dep_zips, exclude_xxxhdpi, xxxhdpi_whitelist):
316 if not exclude_xxxhdpi:
317 # Do not extract dotfiles (e.g. ".gitkeep"). aapt ignores them anyways.
318 return lambda path: os.path.basename(path)[0] != '.'
319
320 # Returns True for all non-whitelisted, non-mipmap xxxhdpi.
Peter Wen 2017/06/22 15:00:00 s/True/False/? Looks like it returns True for all
agrieve 2017/06/22 19:06:04 Done.
321 naive_predicate = lambda path: (
322 not re.search(r'[/-]xxxhdpi[/-]', path) or
323 re.search(r'[/-]mipmap[/-]', path) or
324 build_utils.MatchesGlob(path, xxxhdpi_whitelist))
325
326 # Build a set of all non-xxxhdpi drawables to ensure that we never exclude any
327 # xxxhdpi drawable that does not exist in other densities.
328 non_xxxhdpi_drawables = set()
329 for resource_zip_path in dep_zips:
330 with zipfile.ZipFile(resource_zip_path) as zip_file:
331 for path in zip_file.namelist():
332 if re.search(r'[/-]drawable[/-]', path) and naive_predicate(path):
333 non_xxxhdpi_drawables.add(_ResourceNameFromPath(path))
334
335 return lambda path: (naive_predicate(path) or
336 _ResourceNameFromPath(path) not in non_xxxhdpi_drawables)
337
338
305 def _OnStaleMd5(package_command, options): 339 def _OnStaleMd5(package_command, options):
306 with build_utils.TempDir() as temp_dir: 340 with build_utils.TempDir() as temp_dir:
307 if options.resource_zips: 341 if options.resource_zips:
308 dep_zips = options.resource_zips 342 dep_zips = options.resource_zips
343 extract_predicate = _CreateExtractPredicate(
344 dep_zips, options.exclude_xxxhdpi, options.xxxhdpi_whitelist)
309 for z in dep_zips: 345 for z in dep_zips:
310 subdir = os.path.join(temp_dir, os.path.basename(z)) 346 subdir = os.path.join(temp_dir, os.path.basename(z))
311 if os.path.exists(subdir): 347 if os.path.exists(subdir):
312 raise Exception('Resource zip name conflict: ' + os.path.basename(z)) 348 raise Exception('Resource zip name conflict: ' + os.path.basename(z))
313 build_utils.ExtractAll(z, path=subdir) 349 build_utils.ExtractAll(z, path=subdir, predicate=extract_predicate)
314 package_command += PackageArgsForExtractedZip(subdir) 350 package_command += PackageArgsForExtractedZip(subdir)
315 351
316 build_utils.CheckOutput( 352 build_utils.CheckOutput(
317 package_command, print_stdout=False, print_stderr=False) 353 package_command, print_stdout=False, print_stderr=False)
318 354
319 if options.create_density_splits or options.language_splits: 355 if options.create_density_splits or options.language_splits:
320 CheckForMissedConfigs(options.apk_path, options.create_density_splits, 356 CheckForMissedConfigs(options.apk_path, options.create_density_splits,
321 options.language_splits) 357 options.language_splits)
322 358
323 if options.create_density_splits: 359 if options.create_density_splits:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 build_utils.CallAndWriteDepfileIfStale( 394 build_utils.CallAndWriteDepfileIfStale(
359 lambda: _OnStaleMd5(package_command, options), 395 lambda: _OnStaleMd5(package_command, options),
360 options, 396 options,
361 input_paths=input_paths, 397 input_paths=input_paths,
362 input_strings=input_strings, 398 input_strings=input_strings,
363 output_paths=output_paths) 399 output_paths=output_paths)
364 400
365 401
366 if __name__ == '__main__': 402 if __name__ == '__main__':
367 main(sys.argv[1:]) 403 main(sys.argv[1:])
OLDNEW
« no previous file with comments | « no previous file | build/config/android/internal_rules.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698