Commit 83e35a4e authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

Reland: Android: Add Monochrome32, Trichrome32 and SystemWebView32

This change adds a pure 32-bit version of Monochrome, Trichrome and
Webview to the 64-bit build configuration. Building these targets
generates a product equivalent to building the targets on a 32-bit
config. However, by adding these, we have the option of building all
Monochrome and Trichrome products on a single 64-bit builder, and, we
share the compilation work (as opposed to the obsolete process of "APK
merging" parts from a 32-bit build into 64-bit products).

The targets added here are the public versions.

This change was originally reverted, because it exacerbated an unknown
dependency problem with Trichrome, causing problems on trybots. That
issue was fixed separately, meaning that these changes should be able to
re-land safely:

Revert: 8faa5fc4
Trichrome fix: d2a17895

It is being relanded with a follow-on change (that was also reverted),
updated to handle WebView bundles:

a2897b6b

Also added to this version is coverage of the new webview bundles.

TBR'ing torne and agrieve as they've already reviewed the original
changes.

TBR=torne@chromium.org, agrieve@chromium.org

Bug: 1027573
Change-Id: Ie1c9f042a7046505b081bfb9312e48ee8ee3b197
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1960575Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#723897}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1985527
Cr-Commit-Position: refs/heads/master@{#728525}
parent 16315f99
......@@ -54,6 +54,32 @@ if (public_android_sdk) {
}
}
if (android_64bit_target_cpu) {
# These targets builds a 32-bit only Webview on a 64-bit config, analogous
# to what's built on a 32-bit config. This lets all Webviews build on a
# single configuration.
standalone_system_webview_apk_tmpl("system_webview_32_apk") {
apk_name = "SystemWebView32"
include_64_bit_webview = false
}
if (enable_webview_bundles) {
standalone_system_webview_apk_tmpl(
"system_webview_32_base_bundle_module") {
target_type = "android_app_bundle_module"
include_64_bit_webview = false
is_base_module = true
}
system_webview_bundle("system_webview_32_bundle") {
base_module_target = ":system_webview_32_base_bundle_module"
bundle_name = "SystemWebView32"
include_64_bit_webview = false
min_sdk_version = 21
}
}
}
android_resource_sizes_test("resource_sizes_system_webview_apk") {
apk_name = "SystemWebView"
data_deps = [
......@@ -143,6 +169,43 @@ if (public_android_sdk) {
static_library_provider = "//chrome/android:trichrome_library_64_32_apk"
}
}
template("trichrome_webview_32_tmpl") {
system_webview_apk_or_module_tmpl(target_name) {
forward_variables_from(invoker, "*")
android_manifest = trichrome_webview_32_android_manifest
android_manifest_dep =
"//android_webview/nonembedded:trichrome_webview_32_manifest"
use_trichrome_library = true
is_64_bit_browser = false
include_64_bit_webview = false
min_sdk_version = 29
deps = upstream_only_webview_deps
static_library_provider = "//chrome/android:trichrome_library_32_apk"
}
}
trichrome_webview_32_tmpl("trichrome_webview_32_apk") {
apk_name = "TrichromeWebView32"
uncompress_dex = true
}
if (enable_webview_bundles) {
trichrome_webview_32_tmpl("trichrome_webview_32_base_bundle_module") {
target_type = "android_app_bundle_module"
is_base_module = true
}
system_webview_bundle("trichrome_webview_32_bundle") {
base_module_target = ":trichrome_webview_32_base_bundle_module"
bundle_name = "TrichromeWebView32"
uncompress_dex = true
min_sdk_version = 29
static_library_provider = "//chrome/android:trichrome_library_32_apk"
}
}
}
}
......@@ -668,9 +731,19 @@ if (android_64bit_target_cpu) {
}
}
# These assets are needed by both monochrome and stand alone WebView, but not by
# Chrome or TrichromeWebView.
android_assets("monochrome_webview_assets") {
android_assets("webview_primary_abi_assets") {
if (use_v8_context_snapshot) {
deps = [
"//tools/v8_context_snapshot:v8_context_snapshot_assets",
]
} else {
deps = [
"//v8:v8_external_startup_data_assets",
]
}
}
android_assets("monochrome_webview_primary_abi_assets") {
deps = [
"//third_party/icu:icu_assets",
]
......@@ -679,11 +752,33 @@ android_assets("monochrome_webview_assets") {
} else {
deps += [ "//v8:v8_external_startup_data_assets" ]
}
if (android_64bit_target_cpu) {
}
if (android_64bit_target_cpu) {
android_assets("webview_secondary_abi_assets") {
deps = [
":v8_snapshot_secondary_abi_assets",
]
}
android_assets("monochrome_webview_secondary_abi_assets") {
deps = [
"//third_party/icu:icu_assets",
]
deps += [ ":v8_snapshot_secondary_abi_assets" ]
}
}
android_assets("weblayer_webview_assets") {
deps = [
":webview_primary_abi_assets",
"//third_party/icu:icu_assets",
]
if (android_64bit_target_cpu) {
deps += [ ":webview_secondary_abi_assets" ]
}
}
android_assets("stub_assets") {
renaming_sources = [ "$root_gen_dir/components/resources/about_credits.html" ]
renaming_destinations = [ "webview_licenses.notice" ]
......
......@@ -153,4 +153,14 @@ if (android_64bit_target_cpu) {
"library=libmonochrome_64.so",
]
}
jinja_template("trichrome_webview_32_manifest") {
input = "java/AndroidManifest.xml"
output = trichrome_webview_32_android_manifest
variables = trichrome_jinja_variables + [
"trichrome_version=$trichrome_32_version_code",
"manifest_package=$system_webview_package_name",
"library=libmonochrome.so",
]
}
}
......@@ -69,17 +69,17 @@ template("system_webview_apk_or_module_tmpl") {
_use_trichrome_library =
defined(use_trichrome_library) && use_trichrome_library
if (!_use_trichrome_library) {
deps += [ "//android_webview:monochrome_webview_assets" ]
}
# Pure 32-bit implies a 32-bit only Webview built on a 64-bit configuration.
_pure_32_bit =
android_64bit_target_cpu && defined(invoker.include_64_bit_webview) &&
!invoker.include_64_bit_webview
not_needed([ "_pure_32_bit" ])
# Flag whether additional deps and libs should be included for each ABI.
_include_primary_support = false
_include_secondary_support = false
if (!_use_trichrome_library) {
shared_libraries = [ "//android_webview:libwebviewchromium" ]
_include_primary_support = true
if (_is_bundle_module) {
# TODO(b/146491000): aapt2 currently doesn't support the --shared-lib
# flag for bundles, so this will only work on M+.
......@@ -87,10 +87,16 @@ template("system_webview_apk_or_module_tmpl") {
} else {
shared_resources = true
}
if (!android_64bit_target_cpu || !_pure_32_bit) {
shared_libraries = [ "//android_webview:libwebviewchromium" ]
_include_primary_support = true
}
if (android_64bit_target_cpu) {
secondary_abi_shared_libraries = [ "//android_webview:libwebviewchromium($android_secondary_abi_toolchain)" ]
_include_secondary_support = true
}
deps += [ "//third_party/icu:icu_assets" ]
} else {
uncompress_shared_libraries = true
app_as_shared_lib = true
......@@ -102,19 +108,12 @@ template("system_webview_apk_or_module_tmpl") {
native_lib_placeholders = [ "libdummy.so" ]
if (invoker.include_32_bit_webview) {
secondary_abi_shared_libraries = [ "//android_webview:monochrome_64($android_secondary_abi_toolchain)" ]
deps += [ "//android_webview:v8_snapshot_secondary_abi_assets" ]
_include_secondary_support = true
}
} else {
if (invoker.include_64_bit_webview) {
shared_libraries = [ "//android_webview:monochrome" ]
_include_primary_support = true
if (use_v8_context_snapshot) {
deps +=
[ "//tools/v8_context_snapshot:v8_context_snapshot_assets" ]
} else {
deps += [ "//v8:v8_external_startup_data_assets" ]
}
}
secondary_native_lib_placeholders = [ "libdummy.so" ]
}
......@@ -125,13 +124,17 @@ template("system_webview_apk_or_module_tmpl") {
if (_include_primary_support) {
deps += [
"//android_webview:webview_primary_abi_assets",
"//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
]
loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
}
if (_include_secondary_support) {
_trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
deps += [ _trampoline ]
deps += [
"//android_webview:webview_secondary_abi_assets",
_trampoline,
]
_secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
secondary_abi_loadable_modules =
[ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
......@@ -202,12 +205,26 @@ template("system_webview_apk_or_module_tmpl") {
} else {
version_code = trichrome_version_code
}
} else if (android_channel == "dev") {
version_code = webview_dev_version_code
} else if (android_channel == "beta") {
version_code = webview_beta_version_code
} else {
version_code = webview_stable_version_code
if (android_channel == "dev") {
if (_pure_32_bit) {
version_code = webview_32_dev_version_code
} else {
version_code = webview_dev_version_code
}
} else if (android_channel == "beta") {
if (_pure_32_bit) {
version_code = webview_32_beta_version_code
} else {
version_code = webview_beta_version_code
}
} else {
if (_pure_32_bit) {
version_code = webview_32_stable_version_code
} else {
version_code = webview_stable_version_code
}
}
}
}
if (!defined(version_name)) {
......
......@@ -11,7 +11,11 @@ template("system_webview_bundle") {
proguard_enabled = !is_java_debug
enable_language_splits = true
system_image_locale_whitelist = locales
is_multi_abi = android_64bit_target_cpu
is_multi_abi =
android_64bit_target_cpu && (!defined(invoker.include_64_bit_webview) ||
invoker.include_64_bit_webview) &&
(!defined(invoker.include_32_bit_webview) ||
invoker.include_32_bit_webview)
if (!defined(proguard_android_sdk_dep)) {
proguard_android_sdk_dep = webview_framework_dep
......
......@@ -14,6 +14,8 @@ system_webview_android_manifest =
trichrome_webview_android_manifest =
"$root_gen_dir/android_webview/trichrome_webview_apk/AndroidManifest.xml"
trichrome_webview_64_32_android_manifest = "$root_gen_dir/android_webview/trichrome_webview_64_32_apk/AndroidManifest.xml"
trichrome_webview_32_android_manifest =
"$root_gen_dir/android_webview/trichrome_webview_32_apk/AndroidManifest.xml"
upstream_only_webview_deps = [
"//android_webview:platform_service_bridge_upstream_implementation_java",
......
......@@ -90,6 +90,9 @@ _APKS = {
('WEBVIEW_STABLE', 'WEBVIEW_STABLE', '32_64'),
('WEBVIEW_BETA', 'WEBVIEW_BETA', '32_64'),
('WEBVIEW_DEV', 'WEBVIEW_DEV', '32_64'),
('WEBVIEW_32_STABLE', 'WEBVIEW_STABLE', '32'),
('WEBVIEW_32_BETA', 'WEBVIEW_BETA', '32'),
('WEBVIEW_32_DEV', 'WEBVIEW_DEV', '32'),
]
}
......
......@@ -48,15 +48,7 @@ if (is_mac) {
"webview_dev_version_code = \"@WEBVIEW_DEV_VERSION_CODE@\" "
if (target_cpu == "arm64" || target_cpu == "x64") {
_version_dictionary_template +=
"monochrome_32_version_code = \"@MONOCHROME_32_VERSION_CODE@\" " +
"monochrome_32_64_version_code = \"@MONOCHROME_32_64_VERSION_CODE@\" " +
"monochrome_64_32_version_code = \"@MONOCHROME_64_32_VERSION_CODE@\" " +
"monochrome_64_version_code = \"@MONOCHROME_64_VERSION_CODE@\" " +
"trichrome_32_version_code = \"@TRICHROME_32_VERSION_CODE@\" " +
"trichrome_32_64_version_code = \"@TRICHROME_32_64_VERSION_CODE@\" " +
"trichrome_64_32_version_code = \"@TRICHROME_64_32_VERSION_CODE@\" " +
"trichrome_64_version_code = \"@TRICHROME_64_VERSION_CODE@\" "
_version_dictionary_template += "monochrome_32_version_code = \"@MONOCHROME_32_VERSION_CODE@\" " + "monochrome_32_64_version_code = \"@MONOCHROME_32_64_VERSION_CODE@\" " + "monochrome_64_32_version_code = \"@MONOCHROME_64_32_VERSION_CODE@\" " + "monochrome_64_version_code = \"@MONOCHROME_64_VERSION_CODE@\" " + "trichrome_32_version_code = \"@TRICHROME_32_VERSION_CODE@\" " + "trichrome_32_64_version_code = \"@TRICHROME_32_64_VERSION_CODE@\" " + "trichrome_64_32_version_code = \"@TRICHROME_64_32_VERSION_CODE@\" " + "trichrome_64_version_code = \"@TRICHROME_64_VERSION_CODE@\" " + "webview_32_stable_version_code = \"@WEBVIEW_32_STABLE_VERSION_CODE@\" " + "webview_32_beta_version_code = \"@WEBVIEW_32_BETA_VERSION_CODE@\" " + "webview_32_dev_version_code = \"@WEBVIEW_32_DEV_VERSION_CODE@\" "
}
_script_arguments += [
......@@ -119,6 +111,9 @@ if (is_mac) {
"webview_beta_version_code",
"webview_dev_version_code",
"webview_stable_version_code",
"webview_32_beta_version_code",
"webview_32_dev_version_code",
"webview_32_stable_version_code",
])
chrome_version_name = chrome_version_full
......@@ -144,6 +139,9 @@ if (is_mac) {
"TrichromeChrome3264: $trichrome_32_64_version_code",
"TrichromeChrome6432: $trichrome_64_32_version_code",
"TrichromeChrome64: $trichrome_64_version_code",
"AndroidWebview32Stable: $webview_32_stable_version_code",
"AndroidWebview32Beta: $webview_32_beta_version_code",
"AndroidWebview32Dev: $webview_32_dev_version_code",
]
}
......
......@@ -51,6 +51,8 @@ trichrome_library_64_32_android_manifest =
"$target_gen_dir/trichrome_library_64_32_apk/AndroidManifest.xml"
trichrome_library_64_android_manifest =
"$target_gen_dir/trichrome_library_64_apk/AndroidManifest.xml"
trichrome_library_32_android_manifest =
"$target_gen_dir/trichrome_library_32_apk/AndroidManifest.xml"
app_hooks_impl = "java/src/org/chromium/chrome/browser/AppHooksImpl.java"
_chrome_version_java_file = "$target_gen_dir/templates/org/chromium/chrome/browser/ChromeVersionConstants.java"
......@@ -110,6 +112,14 @@ if (android_64bit_target_cpu) {
"manifest_package=$trichrome_library_package",
]
}
jinja_template("trichrome_library_32_android_manifest") {
input = "java/AndroidManifest_trichrome_library.xml"
output = trichrome_library_32_android_manifest
variables = trichrome_jinja_variables + [
"trichrome_version=$trichrome_32_version_code",
"manifest_package=$trichrome_library_package",
]
}
}
generate_ui_locale_resources("ui_locale_string_resources") {
......@@ -1861,6 +1871,14 @@ if (public_android_sdk) {
}
if (android_64bit_target_cpu) {
trichrome_library_apk_tmpl("trichrome_library_32_apk") {
apk_name = "TrichromeLibrary32"
android_manifest = trichrome_library_32_android_manifest
android_manifest_dep = ":trichrome_library_32_android_manifest"
is_64_bit_browser = false
include_64_bit_webview = false
}
trichrome_library_apk_tmpl("trichrome_library_64_32_apk") {
apk_name = "TrichromeLibrary6432"
android_manifest = trichrome_library_64_32_android_manifest
......@@ -2547,6 +2565,12 @@ if (public_android_sdk) {
}
if (android_64bit_target_cpu) {
monochrome_or_trichrome_public_bundle_tmpl("monochrome_32_public_bundle") {
bundle_suffix = "32"
is_64_bit_browser = false
include_64_bit_webview = false
}
monochrome_or_trichrome_public_bundle_tmpl("monochrome_64_public_bundle") {
bundle_suffix = "64"
is_64_bit_browser = true
......@@ -2576,6 +2600,14 @@ if (public_android_sdk) {
use_trichrome_library = true
static_library_provider = ":trichrome_library_64_32_apk"
}
monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_32_bundle") {
bundle_suffix = "32"
is_64_bit_browser = false
include_64_bit_webview = false
use_trichrome_library = true
static_library_provider = ":trichrome_library_32_apk"
}
}
}
......
......@@ -72,7 +72,10 @@ template("chrome_public_common_apk_or_module_tmpl") {
_is_modern = defined(invoker.is_modern) && invoker.is_modern
_is_monochrome = defined(invoker.is_monochrome) && invoker.is_monochrome
_is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
_is_64_bit_browser =
defined(invoker.is_64_bit_browser) && invoker.is_64_bit_browser
assert(_is_modern || !_is_modern) # Mark as used.
assert(_is_64_bit_browser || !_is_64_bit_browser) # Mark as used.
assert(!(_is_monochrome && _is_trichrome),
"Cannot be both trichrome and monochrome!")
......@@ -86,7 +89,9 @@ template("chrome_public_common_apk_or_module_tmpl") {
target_cpu == "arm" || (_is_monochrome && target_cpu == "arm64")
_add_unwind_tables =
_needs_32bit_lib && _add_unwind_tables_in_chrome_32bit_apk &&
defined(invoker.shared_libraries)
((android_64bit_target_cpu &&
defined(invoker.secondary_abi_shared_libraries)) ||
(!android_64bit_target_cpu && defined(invoker.shared_libraries)))
}
if (_add_unwind_tables) {
......@@ -99,11 +104,21 @@ template("chrome_public_common_apk_or_module_tmpl") {
if (defined(invoker.shared_library_for_unwind_asset)) {
library_target = invoker.shared_library_for_unwind_asset
} else {
library_target = "chrome"
if (_is_monochrome || _is_trichrome) {
library_target = "monochrome"
} else {
library_target = "chrome"
}
}
deps = invoker.shared_libraries
if (defined(android_secondary_abi_cpu)) {
deps += [ "//chrome/android:lib${library_target}($android_secondary_abi_toolchain)" ]
if (android_64bit_target_cpu) {
deps = [
"//chrome/android:lib${library_target}($android_secondary_abi_toolchain)",
]
} else {
deps = [
"//chrome/android:lib${library_target}",
]
}
}
} else if (defined(invoker.shared_library_for_unwind_asset)) {
......@@ -312,6 +327,7 @@ template("monochrome_public_common_apk_or_module_tmpl") {
[
"failed_manifest_expectation_file",
"failed_proguard_expectation_file",
"is_64_bit_browser",
"version_code",
"verify_manifest",
])
......@@ -365,10 +381,7 @@ template("monochrome_public_common_apk_or_module_tmpl") {
_include_primary_support = true
}
shared_library_for_unwind_asset = "monochrome"
_deps += [
"//android_webview:monochrome_webview_assets",
"//android_webview/glue",
"//android_webview/nonembedded:nonembedded_java",
"//chrome/android:monochrome_java",
......@@ -381,18 +394,27 @@ template("monochrome_public_common_apk_or_module_tmpl") {
if (_include_primary_support) {
_deps += [
"//android_webview:monochrome_webview_primary_abi_assets",
"//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
]
loadable_modules +=
[ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
}
if (_include_secondary_support) {
_trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
_deps += [ _trampoline ]
_trampoline =
"//third_party/crashpad/crashpad/handler:" +
"crashpad_handler_trampoline($android_secondary_abi_toolchain)"
_deps += [
"//android_webview:monochrome_webview_secondary_abi_assets",
_trampoline,
]
_secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
secondary_abi_loadable_modules +=
[ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
}
alternative_android_sdk_dep = webview_framework_dep
app_as_shared_lib = true
_pak_prefix = "monochrome"
......
......@@ -158,8 +158,8 @@ android_apk("weblayer_support_apk") {
deps = [
":weblayer_support_manifest",
"//android_webview:locale_pak_assets",
"//android_webview:monochrome_webview_assets",
"//android_webview:pak_file_assets",
"//android_webview:weblayer_webview_assets",
"//base:base_java",
"//weblayer:locale_pak_assets",
"//weblayer/browser/java",
......
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