Commit 554a99c8 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

[WebLayer] Fix AAR not working in when importing into project

The resources files were being renamed to no longer have an xml suffix.
In addition, we were including android support library resources, which
should be provided by the client.

Change-Id: I1d651c6db696defd5760c9c39dd6c7a9a57509ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1885178Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#710217}
parent d3e7171f
...@@ -21,10 +21,12 @@ from util import build_utils ...@@ -21,10 +21,12 @@ from util import build_utils
_ANDROID_BUILD_DIR = os.path.dirname(os.path.dirname(__file__)) _ANDROID_BUILD_DIR = os.path.dirname(os.path.dirname(__file__))
def _MergeRTxt(r_paths): def _MergeRTxt(r_paths, include_globs):
"""Merging the given R.txt files and returns them as a string.""" """Merging the given R.txt files and returns them as a string."""
all_lines = set() all_lines = set()
for r_path in r_paths: for r_path in r_paths:
if include_globs and not build_utils.MatchesGlob(r_path, include_globs):
continue
with open(r_path) as f: with open(r_path) as f:
all_lines.update(f.readlines()) all_lines.update(f.readlines())
return ''.join(sorted(all_lines)) return ''.join(sorted(all_lines))
...@@ -40,18 +42,21 @@ def _MergeProguardConfigs(proguard_configs): ...@@ -40,18 +42,21 @@ def _MergeProguardConfigs(proguard_configs):
return '\n'.join(ret) return '\n'.join(ret)
def _AddResources(aar_zip, resource_zips): def _AddResources(aar_zip, resource_zips, include_globs):
"""Adds all resource zips to the given aar_zip. """Adds all resource zips to the given aar_zip.
Ensures all res/values/* files have unique names by prefixing them. Ensures all res/values/* files have unique names by prefixing them.
""" """
for i, path in enumerate(resource_zips): for i, path in enumerate(resource_zips):
if include_globs and not build_utils.MatchesGlob(path, include_globs):
continue
with zipfile.ZipFile(path) as res_zip: with zipfile.ZipFile(path) as res_zip:
for info in res_zip.infolist(): for info in res_zip.infolist():
data = res_zip.read(info) data = res_zip.read(info)
dirname, basename = posixpath.split(info.filename) dirname, basename = posixpath.split(info.filename)
if 'values' in dirname: if 'values' in dirname:
basename = '{}_{}'.format(basename, i) root, ext = os.path.splitext(basename)
basename = '{}_{}{}'.format(root, i, ext)
info.filename = posixpath.join(dirname, basename) info.filename = posixpath.join(dirname, basename)
info.filename = posixpath.join('res', info.filename) info.filename = posixpath.join('res', info.filename)
aar_zip.writestr(info, data) aar_zip.writestr(info, data)
...@@ -84,6 +89,9 @@ def main(args): ...@@ -84,6 +89,9 @@ def main(args):
parser.add_argument( parser.add_argument(
'--jar-included-globs', '--jar-included-globs',
help='GN-list of globs for paths to include in jar.') help='GN-list of globs for paths to include in jar.')
parser.add_argument(
'--resource-included-globs',
help='GN-list of globs for paths to include in R.txt and resources zips.')
options = parser.parse_args(args) options = parser.parse_args(args)
...@@ -100,6 +108,8 @@ def main(args): ...@@ -100,6 +108,8 @@ def main(args):
options.jar_excluded_globs) options.jar_excluded_globs)
options.jar_included_globs = build_utils.ParseGnList( options.jar_included_globs = build_utils.ParseGnList(
options.jar_included_globs) options.jar_included_globs)
options.resource_included_globs = build_utils.ParseGnList(
options.resource_included_globs)
with tempfile.NamedTemporaryFile(delete=False) as staging_file: with tempfile.NamedTemporaryFile(delete=False) as staging_file:
try: try:
...@@ -115,7 +125,10 @@ def main(args): ...@@ -115,7 +125,10 @@ def main(args):
build_utils.AddToZipHermetic(z, 'classes.jar', src_path=jar_file.name) build_utils.AddToZipHermetic(z, 'classes.jar', src_path=jar_file.name)
build_utils.AddToZipHermetic( build_utils.AddToZipHermetic(
z, 'R.txt', data=_MergeRTxt(options.r_text_files)) z,
'R.txt',
data=_MergeRTxt(options.r_text_files,
options.resource_included_globs))
build_utils.AddToZipHermetic(z, 'public.txt', data='') build_utils.AddToZipHermetic(z, 'public.txt', data='')
if options.proguard_configs: if options.proguard_configs:
...@@ -123,7 +136,8 @@ def main(args): ...@@ -123,7 +136,8 @@ def main(args):
z, 'proguard.txt', z, 'proguard.txt',
data=_MergeProguardConfigs(options.proguard_configs)) data=_MergeProguardConfigs(options.proguard_configs))
_AddResources(z, options.dependencies_res_zips) _AddResources(z, options.dependencies_res_zips,
options.resource_included_globs)
for native_library in options.native_libraries: for native_library in options.native_libraries:
libname = os.path.basename(native_library) libname = os.path.basename(native_library)
......
...@@ -1805,6 +1805,11 @@ if (enable_java_templates) { ...@@ -1805,6 +1805,11 @@ if (enable_java_templates) {
if (defined(invoker.jar_included_patterns)) { if (defined(invoker.jar_included_patterns)) {
args += [ "--jar-included-globs=${invoker.jar_included_patterns}" ] args += [ "--jar-included-globs=${invoker.jar_included_patterns}" ]
} }
if (defined(invoker.resource_included_patterns)) {
args += [
"--resource-included-globs=${invoker.resource_included_patterns}",
]
}
} }
} }
......
...@@ -19,65 +19,47 @@ android_resources("client_resources") { ...@@ -19,65 +19,47 @@ android_resources("client_resources") {
android_manifest_dep = ":weblayer_client_manifest" android_manifest_dep = ":weblayer_client_manifest"
} }
template("weblayer_java") { android_library("java") {
android_library(target_name) { java_files = [
java_files = [ "org/chromium/weblayer/BrowserController.java",
"org/chromium/weblayer/BrowserController.java", "org/chromium/weblayer/BrowserFragmentController.java",
"org/chromium/weblayer/BrowserFragmentController.java", "org/chromium/weblayer/BrowserFragment.java",
"org/chromium/weblayer/BrowserFragment.java", "org/chromium/weblayer/BrowserObserver.java",
"org/chromium/weblayer/BrowserObserver.java", "org/chromium/weblayer/Callback.java",
"org/chromium/weblayer/Callback.java", "org/chromium/weblayer/ChildProcessService.java",
"org/chromium/weblayer/ChildProcessService.java", "org/chromium/weblayer/DownloadDelegate.java",
"org/chromium/weblayer/DownloadDelegate.java", "org/chromium/weblayer/FullscreenDelegate.java",
"org/chromium/weblayer/FullscreenDelegate.java", "org/chromium/weblayer/ListenableFuture.java",
"org/chromium/weblayer/ListenableFuture.java", "org/chromium/weblayer/ListenableResult.java",
"org/chromium/weblayer/ListenableResult.java", "org/chromium/weblayer/NavigationController.java",
"org/chromium/weblayer/NavigationController.java", "org/chromium/weblayer/Navigation.java",
"org/chromium/weblayer/Navigation.java", "org/chromium/weblayer/NavigationObserver.java",
"org/chromium/weblayer/NavigationObserver.java", "org/chromium/weblayer/ObserverList.java",
"org/chromium/weblayer/ObserverList.java", "org/chromium/weblayer/Profile.java",
"org/chromium/weblayer/Profile.java", "org/chromium/weblayer/ProfileManager.java",
"org/chromium/weblayer/ProfileManager.java", "org/chromium/weblayer/ThreadCheck.java",
"org/chromium/weblayer/ThreadCheck.java", "org/chromium/weblayer/UnsupportedVersionException.java",
"org/chromium/weblayer/UnsupportedVersionException.java", "org/chromium/weblayer/WebLayer.java",
"org/chromium/weblayer/WebLayer.java", ]
]
deps = [
":weblayer_client_manifest",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:com_android_support_support_fragment_java",
"//weblayer/browser/java:client_java",
]
deps += invoker.deps
# Needed for android.webkit.WebViewDelegate.
alternative_android_sdk_dep =
"//third_party/android_sdk:public_framework_system_java"
android_manifest_for_lint = weblayer_client_manifest
}
}
# This target should be used by client apps in the chromium repo that want to
# include the client library code and manifest.
weblayer_java("java") {
deps = [ deps = [
# This dep is needed to include the manifest that should be merged into the
# client app's manifest.
":client_resources", ":client_resources",
":weblayer_client_manifest",
"//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:com_android_support_support_fragment_java",
"//weblayer/browser/java:client_java",
] ]
}
# This target should only be used when generating the aar. The dist_aar rule # Needed for android.webkit.WebViewDelegate.
# adds the client manifest separately. alternative_android_sdk_dep =
weblayer_java("aar_java") { "//third_party/android_sdk:public_framework_system_java"
deps = []
android_manifest_for_lint = weblayer_client_manifest
} }
dist_aar("client_aar") { dist_aar("client_aar") {
deps = [ deps = [
":aar_java", ":java",
":weblayer_client_manifest", ":weblayer_client_manifest",
] ]
...@@ -87,6 +69,7 @@ dist_aar("client_aar") { ...@@ -87,6 +69,7 @@ dist_aar("client_aar") {
"org/chromium/weblayer/*", "org/chromium/weblayer/*",
"org/chromium/weblayer_private/*", "org/chromium/weblayer_private/*",
] ]
resource_included_patterns = [ "*/weblayer/public/java/*" ]
# dist_aar does not take the manifest from libraries in deps, so we have to # dist_aar does not take the manifest from libraries in deps, so we have to
# specify again here. # specify again here.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment