Index: build/android/gyp/write_build_config.py |
diff --git a/build/android/gyp/write_build_config.py b/build/android/gyp/write_build_config.py |
index e0b727b14badf14f147ce5d43146b9ec19854b2c..c7501f36769b22dcdfd8c9530359fe04df23612f 100755 |
--- a/build/android/gyp/write_build_config.py |
+++ b/build/android/gyp/write_build_config.py |
@@ -203,6 +203,8 @@ def main(argv): |
parser.add_option('--android-manifest', help='Path to android manifest.') |
parser.add_option('--is-locale-resource', action='store_true', |
help='Whether it is locale resource.') |
+ parser.add_option('--resource-dirs', action='append', default=[], |
+ help='GYP-list of resource dirs') |
# android_assets options |
parser.add_option('--asset-sources', help='List of asset sources.') |
@@ -374,7 +376,7 @@ def main(argv): |
# resources, and (like Android's default build system) we allow a library to |
# refer to the resources in any of its dependents. |
config['javac']['srcjars'] = [ |
- c['srcjar'] for c in direct_resources_deps if 'srcjar' in c] |
+ c['srcjar'] for c in all_resources_deps if 'srcjar' in c] |
# Used to strip out R.class for android_prebuilt()s. |
if options.type == 'java_library': |
@@ -415,6 +417,40 @@ def main(argv): |
deps_info['r_text'] = options.r_text |
if options.is_locale_resource: |
deps_info['is_locale_resource'] = True |
+ # Record resources_dirs of this target so dependendent libraries can pick up |
+ # them and pass to Lint. |
+ lint_info = deps_info['lint'] = {} |
+ resource_dirs = [] |
+ lint_info['resources_zips'] = [] |
+ for gyp_list in options.resource_dirs: |
+ resource_dirs += build_utils.ParseGypList(gyp_list) |
+ if resource_dirs: |
+ lint_info['resources_dirs'] = resource_dirs |
+ # There things become ugly. Resource targets may have resource dependencies |
+ # as well. Some of these dependencies are resources from other libraries |
+ # so we should not lint them here (they should be linted within their |
+ # libraries). But others are just generated resources that also contribute |
+ # to this library and we should check them. These generated resources has no |
+ # package_name so we skip all direct deps that has package names. |
+ for c in direct_resources_deps: |
+ if 'package_name' not in c: |
+ lint_info['resources_zips'].append(c['resources_zip']) |
+ |
+ if options.supports_android and options.type in ('android_apk', |
+ 'java_library'): |
+ # GN's project model doesn't exactly match traditional Android project |
+ # model: GN splits resources into separate targets, while in Android |
+ # resources are part of the library/APK. Android Lint expects an Android |
+ # project - with java sources and resources combined. So we assume that |
+ # direct resource dependencies of the library/APK are the resources of this |
+ # library in Android project sense. |
+ lint_info = config['lint'] = {} |
+ lint_info['resources_dirs'] = [] |
+ lint_info['resources_zips'] = [] |
+ for c in direct_resources_deps: |
+ lint_info['resources_dirs'] += c['lint'].get('resources_dirs', []) |
+ lint_info['resources_zips'] += c['lint'].get('resources_zips', []) |
+ |
if options.type in ('android_resources','android_apk', 'resource_rewriter'): |
config['resources'] = {} |