diff options
author | michaelbai <michaelbai@chromium.org> | 2015-09-18 14:01:08 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-18 21:01:43 +0000 |
commit | f35c662156e94e1344ffdb2230b1240e81c231b1 (patch) | |
tree | fcd325dddbe60d577a3bc401843cd36b581927a2 | |
parent | 2436ed21a5d41eac9168c22d9a7c7f654dba401d (diff) | |
download | chromium_src-f35c662156e94e1344ffdb2230b1240e81c231b1.zip chromium_src-f35c662156e94e1344ffdb2230b1240e81c231b1.tar.gz chromium_src-f35c662156e94e1344ffdb2230b1240e81c231b1.tar.bz2 |
Generate ResourceRewriter.java through dependency graph
- Added create-resource-rewriter option to generate ResourceRewriter.java
when building Java lib
- Added system_webview_glue_java target and make system_webview_apk to
depend on it.
- Removed unnecessary com.android.webview.chromium.R, there is
no new resource added in this package.
BUG=492166
Review URL: https://codereview.chromium.org/1340383003
Cr-Commit-Position: refs/heads/master@{#349764}
8 files changed, 144 insertions, 32 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp index 17cb5af..9a390f9 100644 --- a/android_webview/android_webview.gyp +++ b/android_webview/android_webview.gyp @@ -404,11 +404,22 @@ 'includes': [ '../build/java.gypi' ], }, { + 'target_name': 'system_webview_glue_java', + 'variables': { + 'android_sdk_jar': '../third_party/android_platform/webview/frameworks_6.0.jar', + 'java_in_dir': 'glue/java', + }, + 'includes': [ 'apk/system_webview_glue_common.gypi' ], + }, + { 'target_name': 'system_webview_apk', + 'dependencies': [ + 'system_webview_glue_java', + ], 'variables': { 'apk_name': 'SystemWebView', 'android_sdk_jar': '../third_party/android_platform/webview/frameworks_6.0.jar', - 'java_in_dir': 'glue/java', + 'java_in_dir': '../build/android/empty', 'resource_dir': 'apk/java/res', }, 'includes': [ 'apk/system_webview_apk_common.gypi' ], diff --git a/android_webview/apk/system_webview_apk_common.gypi b/android_webview/apk/system_webview_apk_common.gypi index decd716..2ccb878 100644 --- a/android_webview/apk/system_webview_apk_common.gypi +++ b/android_webview/apk/system_webview_apk_common.gypi @@ -8,15 +8,11 @@ 'type': 'none', 'dependencies': [ '<(DEPTH)/android_webview/android_webview.gyp:libwebviewchromium', - '<(DEPTH)/android_webview/android_webview.gyp:android_webview_java', - '<(DEPTH)/android_webview/android_webview.gyp:android_webview_pak', ], 'variables': { 'native_lib_target': 'libwebviewchromium', 'native_lib_version_name': '<(version_full)', 'never_lint': 1, - 'R_package': 'com.android.webview.chromium', - 'R_package_relpath': 'com/android/webview/chromium', 'shared_resources': 1, 'extensions_to_not_compress': '.lpak,.pak,.bin,.dat', 'asset_location': '<(INTERMEDIATE_DIR)/assets/', diff --git a/android_webview/apk/system_webview_glue_common.gypi b/android_webview/apk/system_webview_glue_common.gypi new file mode 100644 index 0000000..9b15be4 --- /dev/null +++ b/android_webview/apk/system_webview_glue_common.gypi @@ -0,0 +1,42 @@ +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# This is shared between system_webview_glue_java and system_webview_glue_next_java +{ + 'type': 'none', + 'dependencies': [ + '<(DEPTH)/android_webview/android_webview.gyp:android_webview_java', + '<(DEPTH)/android_webview/android_webview.gyp:android_webview_pak', + ], + 'variables': { + 'never_lint': 1, + 'resource_rewriter_package': 'com.android.webview.chromium', + 'resource_rewriter_dir': '<(intermediate_dir)/resource_rewriter', + 'resource_rewriter_path': '<(resource_rewriter_dir)/com/android/webview/chromium/ResourceRewriter.java', + 'additional_input_paths': ['<(resource_rewriter_path)'], + 'generated_src_dirs': ['<(resource_rewriter_dir)'], + }, + 'actions': [ + # Generate ResourceRewriter.java + { + 'action_name': 'generate_resource_rewriter', + 'message': 'generate ResourceRewriter for <(_target_name)', + 'inputs':[ + '<(DEPTH)/build/android/gyp/util/build_utils.py', + '<(DEPTH)/build/android/gyp/generate_resource_rewriter.py', + '>@(dependencies_res_zip_paths)', + ], + 'outputs': [ + '<(resource_rewriter_path)', + ], + 'action': [ + 'python', '<(DEPTH)/build/android/gyp/generate_resource_rewriter.py', + '--package-name', '<(resource_rewriter_package)', + '--dep-packages', '>(additional_res_packages)', + '--output-dir', '<(resource_rewriter_dir)', + ], + }, + ], + 'includes': [ '../../build/java.gypi' ], +} diff --git a/android_webview/glue/java/src/com/android/webview/chromium/ResourceRewriter.java b/android_webview/glue/java/src/com/android/webview/chromium/ResourceRewriter.java deleted file mode 100644 index 6f2902c..0000000 --- a/android_webview/glue/java/src/com/android/webview/chromium/ResourceRewriter.java +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package com.android.webview.chromium; - -/** - * Helper class used to fix up resource ids. - */ -class ResourceRewriter { - /** - * Rewrite the R 'constants' for the WebView library apk. - */ - public static void rewriteRValues(final int packageId) { - // This list must be kept up to date to include all R classes depended on directly or - // indirectly by android_webview_java. - // TODO(torne): find a better way to do this, http://crbug.com/492166. - com.android.webview.chromium.R.onResourcesLoaded(packageId); - org.chromium.android_webview.R.onResourcesLoaded(packageId); - org.chromium.components.web_contents_delegate_android.R.onResourcesLoaded(packageId); - org.chromium.content.R.onResourcesLoaded(packageId); - org.chromium.ui.R.onResourcesLoaded(packageId); - } -} diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java index 850f9d0..94e67dd 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java @@ -206,7 +206,8 @@ class WebViewChromium implements WebViewProvider, WebViewProvider.ScrollDelegate } else { Log.w(TAG, msg); TextView warningLabel = new TextView(mContext); - warningLabel.setText(mContext.getString(R.string.private_browsing_warning)); + warningLabel.setText(mContext.getString( + org.chromium.android_webview.R.string.private_browsing_warning)); mWebView.addView(warningLabel); } } diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java index 18a0596..289fde8 100644 --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java @@ -1160,7 +1160,8 @@ public class WebViewContentsClientAdapter extends AwContentsClient { // The ic_play_circle_outline_black_48dp icon is transparent so we need to draw it // on a gray background. Bitmap poster = BitmapFactory.decodeResource( - mContext.getResources(), R.drawable.ic_play_circle_outline_black_48dp); + mContext.getResources(), + org.chromium.android_webview.R.drawable.ic_play_circle_outline_black_48dp); result = Bitmap.createBitmap( poster.getWidth(), poster.getHeight(), poster.getConfig()); result.eraseColor(Color.GRAY); diff --git a/build/android/gyp/generate_resource_rewriter.py b/build/android/gyp/generate_resource_rewriter.py index 43ff883..2c892b6 100755 --- a/build/android/gyp/generate_resource_rewriter.py +++ b/build/android/gyp/generate_resource_rewriter.py @@ -3,3 +3,87 @@ # Copyright (c) 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. + +"""Generate ResourceRewriter.java which overwrites the given package's + resource id. +""" + +import argparse +import os +import sys + +from util import build_utils + +# Import jinja2 from third_party/jinja2 +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), + '..', + '..', + '..', + 'third_party'))) +import jinja2 + +RESOURCE_REWRITER="""/* AUTO-GENERATED FILE. DO NOT MODIFY. */ + +package {{ package }}; +/** + * Helper class used to fix up resource ids. + */ +class ResourceRewriter { + /** + * Rewrite the R 'constants' for the WebView. + */ + public static void rewriteRValues(final int packageId) { + {% for res_package in res_packages %} + {{ res_package }}.R.onResourcesLoaded(packageId); + {% endfor %} + } +} +""" + +def ParseArgs(args): + """Parses command line options. + + Returns: + An Namespace from argparse.parse_args() + """ + parser = argparse.ArgumentParser(prog='generate_resource_rewriter') + + parser.add_argument('--package-name', + required=True, + help='The package name of ResourceRewriter.') + parser.add_argument('--dep-packages', + required=True, + help='A list of packages whose resource id will be' + 'overwritten in ResourceRewriter.') + parser.add_argument('--output-dir', + required=True, + help='A output directory of generated' + ' ResourceRewriter.java') + + return parser.parse_args(args) + + +def CreateResourceRewriter(package, res_packages, output_dir): + output_dir = os.path.join(output_dir, *package.split('.')) + build_utils.MakeDirectory(output_dir) + java_path = os.path.join(output_dir, 'ResourceRewriter.java') + template = jinja2.Template(RESOURCE_REWRITER, + trim_blocks=True, + lstrip_blocks=True) + output = template.render(package=package, res_packages=res_packages) + with open(java_path, 'w') as f: + f.write(output) + + +def main(): + options = ParseArgs(sys.argv[1:]) + + CreateResourceRewriter( + options.package_name, + build_utils.ParseGypList(options.dep_packages), + options.output_dir) + return 0 + +if __name__ == '__main__': + sys.exit(main()) + diff --git a/build/java.gypi b/build/java.gypi index 885a1fa..c97b07e 100644 --- a/build/java.gypi +++ b/build/java.gypi @@ -187,7 +187,8 @@ 'python', '<(DEPTH)/build/android/gyp/process_resources.py', '--android-sdk', '<(android_sdk)', '--aapt-path', '<(android_aapt_path)', - '--non-constant-id', + # Need to generate onResourcesLoaded() in R.java, so could be used in java lib. + '--shared-resources', '--android-manifest', '<(android_manifest)', '--custom-package', '<(R_package)', |