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

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

Issue 867483005: Don't let "aapt crunch" increase image size. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 | no next file » | 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 (c) 2012 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2012 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 """Process Android resources to generate R.java, and prepare for packaging. 7 """Process Android resources to generate R.java, and prepare for packaging.
8 8
9 This will crunch images and generate v14 compatible resources 9 This will crunch images and generate v14 compatible resources
10 (see generate_v14_compatible_resources.py). 10 (see generate_v14_compatible_resources.py).
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 build_utils.MakeDirectory(package_r_java_dir) 119 build_utils.MakeDirectory(package_r_java_dir)
120 package_r_java_path = os.path.join(package_r_java_dir, 'R.java') 120 package_r_java_path = os.path.join(package_r_java_dir, 'R.java')
121 open(package_r_java_path, 'w').write( 121 open(package_r_java_path, 'w').write(
122 re.sub(r'package [.\w]*;', 'package %s;' % package, r_java_contents)) 122 re.sub(r'package [.\w]*;', 'package %s;' % package, r_java_contents))
123 # TODO(cjhopman): These extra package's R.java files should be filtered to 123 # TODO(cjhopman): These extra package's R.java files should be filtered to
124 # only contain the resources listed in their R.txt files. At this point, we 124 # only contain the resources listed in their R.txt files. At this point, we
125 # have already compiled those other libraries, so doing this would only 125 # have already compiled those other libraries, so doing this would only
126 # affect how the code in this .apk target could refer to the resources. 126 # affect how the code in this .apk target could refer to the resources.
127 127
128 128
129 def CrunchDirectory(aapt, input_dir, output_dir):
130 """Crunches the images in input_dir and its subdirectories into output_dir.
131
132 If an image is already optimized, crunching often increases image size. In
133 this case, the crunched image is overwritten with the original image.
134 """
135 aapt_cmd = [aapt,
136 'crunch',
137 '-C', output_dir,
138 '-S', input_dir,
139 '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
140 build_utils.CheckOutput(aapt_cmd, stderr_filter=FilterCrunchStderr,
141 fail_func=DidCrunchFail)
142
143 # Check for images whose size increased during crunching and replace them
144 # with their originals (except for 9-patches, which must be crunched).
145 for dir_, _, files in os.walk(output_dir):
146 for crunched in files:
147 if crunched.endswith('.9.png'):
148 continue
149 if not crunched.endswith('.png'):
150 raise Exception('Unexpected file in crunched dir: ' + crunched)
151 crunched = os.path.join(dir_, crunched)
152 original = os.path.join(input_dir, os.path.relpath(crunched, output_dir))
153 original_size = os.path.getsize(original)
154 crunched_size = os.path.getsize(crunched)
155 if original_size < crunched_size:
156 shutil.copyfile(original, crunched)
157
158
129 def FilterCrunchStderr(stderr): 159 def FilterCrunchStderr(stderr):
130 """Filters out lines from aapt crunch's stderr that can safely be ignored.""" 160 """Filters out lines from aapt crunch's stderr that can safely be ignored."""
131 filtered_lines = [] 161 filtered_lines = []
132 for line in stderr.splitlines(True): 162 for line in stderr.splitlines(True):
133 # Ignore this libpng warning, which is a known non-error condition. 163 # Ignore this libpng warning, which is a known non-error condition.
134 # http://crbug.com/364355 164 # http://crbug.com/364355
135 if ('libpng warning: iCCP: Not recognizing known sRGB profile that has ' 165 if ('libpng warning: iCCP: Not recognizing known sRGB profile that has '
136 + 'been edited' in line): 166 + 'been edited' in line):
137 continue 167 continue
138 filtered_lines.append(line) 168 filtered_lines.append(line)
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 # This is the list of directories with resources to put in the final .zip 283 # This is the list of directories with resources to put in the final .zip
254 # file. The order of these is important so that crunched/v14 resources 284 # file. The order of these is important so that crunched/v14 resources
255 # override the normal ones. 285 # override the normal ones.
256 zip_resource_dirs = input_resource_dirs + [v14_dir] 286 zip_resource_dirs = input_resource_dirs + [v14_dir]
257 287
258 base_crunch_dir = os.path.join(temp_dir, 'crunch') 288 base_crunch_dir = os.path.join(temp_dir, 'crunch')
259 289
260 # Crunch image resources. This shrinks png files and is necessary for 290 # Crunch image resources. This shrinks png files and is necessary for
261 # 9-patch images to display correctly. 'aapt crunch' accepts only a single 291 # 9-patch images to display correctly. 'aapt crunch' accepts only a single
262 # directory at a time and deletes everything in the output directory. 292 # directory at a time and deletes everything in the output directory.
263 for idx, d in enumerate(input_resource_dirs): 293 for idx, input_dir in enumerate(input_resource_dirs):
264 crunch_dir = os.path.join(base_crunch_dir, str(idx)) 294 crunch_dir = os.path.join(base_crunch_dir, str(idx))
265 build_utils.MakeDirectory(crunch_dir) 295 build_utils.MakeDirectory(crunch_dir)
266 zip_resource_dirs.append(crunch_dir) 296 zip_resource_dirs.append(crunch_dir)
267 aapt_cmd = [aapt, 297 CrunchDirectory(aapt, input_dir, crunch_dir)
268 'crunch',
269 '-C', crunch_dir,
270 '-S', d,
271 '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
272 build_utils.CheckOutput(aapt_cmd, stderr_filter=FilterCrunchStderr,
273 fail_func=DidCrunchFail)
274 298
275 ZipResources(zip_resource_dirs, options.resource_zip_out) 299 ZipResources(zip_resource_dirs, options.resource_zip_out)
276 300
277 if options.all_resources_zip_out: 301 if options.all_resources_zip_out:
278 CombineZips([options.resource_zip_out] + dep_zips, 302 CombineZips([options.resource_zip_out] + dep_zips,
279 options.all_resources_zip_out) 303 options.all_resources_zip_out)
280 304
281 if options.R_dir: 305 if options.R_dir:
282 build_utils.DeleteDirectory(options.R_dir) 306 build_utils.DeleteDirectory(options.R_dir)
283 shutil.copytree(gen_dir, options.R_dir) 307 shutil.copytree(gen_dir, options.R_dir)
284 else: 308 else:
285 build_utils.ZipDir(options.srcjar_out, gen_dir) 309 build_utils.ZipDir(options.srcjar_out, gen_dir)
286 310
287 if options.depfile: 311 if options.depfile:
288 input_files += build_utils.GetPythonDependencies() 312 input_files += build_utils.GetPythonDependencies()
289 build_utils.WriteDepfile(options.depfile, input_files) 313 build_utils.WriteDepfile(options.depfile, input_files)
290 314
291 if options.stamp: 315 if options.stamp:
292 build_utils.Touch(options.stamp) 316 build_utils.Touch(options.stamp)
293 317
294 318
295 if __name__ == '__main__': 319 if __name__ == '__main__':
296 main() 320 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698