update android deps

This commit is contained in:
Alexander Frick 2023-04-28 07:28:37 -05:00
parent 8ddcf3d875
commit 91adede1e9
3 changed files with 914 additions and 396 deletions

View file

@ -21,11 +21,11 @@ import("//chrome/android/features/vr/public_vr_java_sources.gni")
import("//chrome/android/feed/feed_java_sources.gni") import("//chrome/android/feed/feed_java_sources.gni")
import("//chrome/android/modules/chrome_bundle_tmpl.gni") import("//chrome/android/modules/chrome_bundle_tmpl.gni")
import("//chrome/android/modules/chrome_feature_module_tmpl.gni") import("//chrome/android/modules/chrome_feature_module_tmpl.gni")
import("//chrome/android/monochrome_android_manifest_jinja_variables.gni")
import("//chrome/browser/commerce/price_tracking/android/java_sources.gni") import("//chrome/browser/commerce/price_tracking/android/java_sources.gni")
import("//chrome/browser/commerce/subscriptions/android/java_sources.gni") import("//chrome/browser/commerce/subscriptions/android/java_sources.gni")
import( import(
"//chrome/browser/commerce/subscriptions/test/android/test_java_sources.gni") "//chrome/browser/commerce/subscriptions/test/android/test_java_sources.gni")
import("//chrome/browser/page_info/buildflags.gni")
import("//chrome/browser/password_manager/buildflags.gni") import("//chrome/browser/password_manager/buildflags.gni")
import("//chrome/browser/share/android/java_sources.gni") import("//chrome/browser/share/android/java_sources.gni")
import("//chrome/chrome_paks.gni") import("//chrome/chrome_paks.gni")
@ -48,142 +48,25 @@ if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
} }
if (current_toolchain == default_toolchain) { if (current_toolchain == default_toolchain) {
_default_package = "org.chromium.thorium" # 32-bit library will have browser code in it. 64-bit is webview-only.
if (use_stable_package_name_for_trichrome) { if (android_64bit_target_cpu && !skip_secondary_abi_for_cq) {
_default_package += ".stable" _monochrome_browser_toolchain = android_secondary_abi_toolchain
# CHANGED BY ALEX313031 FOR THORIUM } else {
} else if (android_channel != "default" && android_channel != "stable") { _monochrome_browser_toolchain = current_toolchain
# android-binary-size trybot may checks if an internal Chrome variant's
# AndroidManifest is as expected by ensuring the differences between its
# AndroidManifest and its upstream target's .AndroidManifest.expected file
# are as expected. Upstream targets having a "org.chromium.chrome" package
# name will cause the comparison to output many unnecessary differences.
# See https://source.chromium.org/chromium/chromium/src/+/main:chrome/android/java/README.md
_default_package += "." + android_channel
} }
declare_args() {
# Android package name to use when compiling the public chrome targets
# (chrome_public_apk, monochrome_public_apk, etc. as well as the
# *_bundle variants). This is particularly useful when using
# monochrome_public_apk for WebView development, as the OS only accepts
# WebView providers which declare one of a handful of package names. See
# https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md#Changing-package-name
# for details.
chrome_public_manifest_package = _default_package
}
chrome_public_test_manifest_package = "org.chromium.thorium.tests"
chrome_public_jinja_variables =
default_chrome_public_jinja_variables +
[ "manifest_package=$chrome_public_manifest_package" ]
chrome_public_android_manifest =
"$target_gen_dir/chrome_public_apk/AndroidManifest.xml"
trichrome_library_android_manifest =
"$target_gen_dir/trichrome_library_apk/AndroidManifest.xml"
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" app_hooks_impl = "java/src/org/chromium/chrome/browser/AppHooksImpl.java"
# Exclude it from JNI registration if VR is not enabled. # Exclude it from JNI registration if VR is not enabled.
chrome_jni_sources_exclusions = [] chrome_jni_file_exclusions = []
if (!enable_vr) { if (!enable_vr) {
chrome_jni_sources_exclusions += [ "//chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java" ] chrome_jni_file_exclusions += [ "//chrome/android/features/vr/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java" ]
}
jinja_template("chrome_public_android_manifest") {
input = "java/AndroidManifest.xml"
output = chrome_public_android_manifest
variables = chrome_public_jinja_variables
variables += [
"min_sdk_version=$default_min_sdk_version",
"target_sdk_version=$android_sdk_version",
]
} }
jinja_template("chrome_public_android_feature_vr_manifest") { jinja_template("chrome_public_android_feature_vr_manifest") {
input = "features/vr/java/AndroidManifest.xml" input = "features/vr/java/AndroidManifest.xml"
output = feature_module_vr_android_manifest_path output = feature_module_vr_android_manifest_path
variables = chrome_public_jinja_variables variables = default_chrome_public_jinja_variables
variables += [
"min_sdk_version=$default_min_sdk_version",
"target_sdk_version=$android_sdk_version",
]
}
_use_stable_package_name_for_trichrome =
use_stable_package_name_for_trichrome && android_channel == "beta"
_use_high_package_name_for_64bit_only_trichrome = is_high_end_android
jinja_template("trichrome_library_android_manifest") {
input = "java/AndroidManifest_trichrome_library.xml"
output = trichrome_library_android_manifest
if (_use_stable_package_name_for_trichrome) {
_version_code = trichrome_beta_version_code
} else {
_version_code = trichrome_version_code
}
variables = trichrome_jinja_variables + [
"trichrome_version=$_version_code",
"manifest_package=$trichrome_library_package",
]
}
if (android_64bit_target_cpu) {
jinja_template("trichrome_library_64_32_android_manifest") {
input = "java/AndroidManifest_trichrome_library.xml"
output = trichrome_library_64_32_android_manifest
if (_use_stable_package_name_for_trichrome) {
_version_code = trichrome_64_32_beta_version_code
} else {
_version_code = trichrome_64_32_version_code
}
variables = trichrome_jinja_variables + [
"trichrome_version=$_version_code",
"manifest_package=$trichrome_library_package",
"use32bitAbi=",
]
}
jinja_template("trichrome_library_64_android_manifest") {
input = "java/AndroidManifest_trichrome_library.xml"
output = trichrome_library_64_android_manifest
if (_use_high_package_name_for_64bit_only_trichrome) {
if (_use_stable_package_name_for_trichrome) {
_version_code = trichrome_64_high_beta_version_code
} else {
_version_code = trichrome_64_high_version_code
}
} else {
if (_use_stable_package_name_for_trichrome) {
_version_code = trichrome_64_beta_version_code
} else {
_version_code = trichrome_64_version_code
}
}
variables = trichrome_jinja_variables + [
"trichrome_version=$_version_code",
"manifest_package=$trichrome_library_package",
"use32bitAbi=",
]
}
jinja_template("trichrome_library_32_android_manifest") {
input = "java/AndroidManifest_trichrome_library.xml"
output = trichrome_library_32_android_manifest
if (_use_stable_package_name_for_trichrome) {
_version_code = trichrome_32_beta_version_code
} else {
_version_code = trichrome_32_version_code
}
variables = trichrome_jinja_variables + [
"trichrome_version=$_version_code",
"manifest_package=$trichrome_library_package",
]
}
} }
generate_ui_locale_resources("ui_locale_string_resources") { generate_ui_locale_resources("ui_locale_string_resources") {
@ -243,6 +126,7 @@ if (current_toolchain == default_toolchain) {
"//chrome/browser/lens:java_resources", "//chrome/browser/lens:java_resources",
"//chrome/browser/password_check/android:java_resources", "//chrome/browser/password_check/android:java_resources",
"//chrome/browser/password_manager/android:java_resources", "//chrome/browser/password_manager/android:java_resources",
"//chrome/browser/quick_delete:java_resources",
"//chrome/browser/search_resumption:java_resources", "//chrome/browser/search_resumption:java_resources",
"//chrome/browser/signin/services/android:java_resources", "//chrome/browser/signin/services/android:java_resources",
"//chrome/browser/tab:java_resources", "//chrome/browser/tab:java_resources",
@ -343,7 +227,6 @@ if (current_toolchain == default_toolchain) {
deps = [ deps = [
":base_module_java", ":base_module_java",
":chrome_app_java_resources", ":chrome_app_java_resources",
":chrome_public_android_manifest",
":chrome_public_apk_template_resources", ":chrome_public_apk_template_resources",
":update_proto_java", ":update_proto_java",
":usage_stats_proto_java", ":usage_stats_proto_java",
@ -439,6 +322,7 @@ if (current_toolchain == default_toolchain) {
"//chrome/browser/privacy_guide/android:java", "//chrome/browser/privacy_guide/android:java",
"//chrome/browser/privacy_sandbox/android:java", "//chrome/browser/privacy_sandbox/android:java",
"//chrome/browser/profiles/android:java", "//chrome/browser/profiles/android:java",
"//chrome/browser/quick_delete:java",
"//chrome/browser/safe_browsing/android:java", "//chrome/browser/safe_browsing/android:java",
"//chrome/browser/safety_check/android:java", "//chrome/browser/safety_check/android:java",
"//chrome/browser/search_engines/android:java", "//chrome/browser/search_engines/android:java",
@ -620,6 +504,7 @@ if (current_toolchain == default_toolchain) {
"//components/webauthn/android:java", "//components/webauthn/android:java",
"//components/webrtc/android:java", "//components/webrtc/android:java",
"//components/webxr/android:ar_java_interfaces", "//components/webxr/android:ar_java_interfaces",
"//components/zoom/android:java",
"//content/public/android:content_java", "//content/public/android:content_java",
"//content/public/common:common_java", "//content/public/common:common_java",
"//device/gamepad:java", "//device/gamepad:java",
@ -646,13 +531,13 @@ if (current_toolchain == default_toolchain) {
"//services/shape_detection/public/mojom:mojom_java", "//services/shape_detection/public/mojom:mojom_java",
"//skia/public/mojom:mojom_java", "//skia/public/mojom:mojom_java",
"//third_party/android_deps:chromium_play_services_availability_java", "//third_party/android_deps:chromium_play_services_availability_java",
"//third_party/android_deps:com_google_android_play_core_java",
"//third_party/android_deps:com_google_code_findbugs_jsr305_java", "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
"//third_party/android_deps:com_google_guava_listenablefuture_java", "//third_party/android_deps:com_google_guava_listenablefuture_java",
"//third_party/android_deps:dagger_java", "//third_party/android_deps:dagger_java",
"//third_party/android_deps:guava_android_java", "//third_party/android_deps:guava_android_java",
"//third_party/android_deps:javax_inject_javax_inject_java", "//third_party/android_deps:javax_inject_javax_inject_java",
"//third_party/android_deps:material_design_java", "//third_party/android_deps:material_design_java",
"//third_party/android_deps:playcore_java",
"//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/android_deps:protobuf_lite_runtime_java",
"//third_party/android_media:android_media_java", "//third_party/android_media:android_media_java",
"//third_party/android_swipe_refresh:android_swipe_refresh_java", "//third_party/android_swipe_refresh:android_swipe_refresh_java",
@ -793,6 +678,10 @@ if (current_toolchain == default_toolchain) {
deps += deps +=
[ "//chrome/browser/supervised_user:website_parent_approval_java" ] [ "//chrome/browser/supervised_user:website_parent_approval_java" ]
} }
if (page_info_use_internal_android_resources) {
deps += [ "//clank/components/page_info:java_resources" ]
}
} }
# Template for strict mode detection enabling/disabling so that proguard strips out # Template for strict mode detection enabling/disabling so that proguard strips out
@ -904,6 +793,7 @@ if (current_toolchain == default_toolchain) {
] ]
deps = [ deps = [
"//chrome/browser/page_info:page_info_buildflags",
"//chrome/browser/password_manager:password_manager_buildflags", "//chrome/browser/password_manager:password_manager_buildflags",
"//device/vr/buildflags", "//device/vr/buildflags",
] ]
@ -936,7 +826,6 @@ if (current_toolchain == default_toolchain) {
":chrome_app_java_resources", ":chrome_app_java_resources",
":chrome_java", ":chrome_java",
":chrome_jni_headers", ":chrome_jni_headers",
":chrome_public_android_manifest",
":delegate_public_impl_java", ":delegate_public_impl_java",
"$google_play_services_package:google_play_services_base_java", "$google_play_services_package:google_play_services_base_java",
"$google_play_services_package:google_play_services_basement_java", "$google_play_services_package:google_play_services_basement_java",
@ -1053,6 +942,7 @@ if (current_toolchain == default_toolchain) {
"//chrome/browser/tabmodel/internal:java", "//chrome/browser/tabmodel/internal:java",
"//chrome/browser/tabpersistence:junit", "//chrome/browser/tabpersistence:junit",
"//chrome/browser/thumbnail:java", "//chrome/browser/thumbnail:java",
"//chrome/browser/touch_to_fill/common/android:junit",
"//chrome/browser/touch_to_fill/payments/android/internal:junit", "//chrome/browser/touch_to_fill/payments/android/internal:junit",
"//chrome/browser/ui/android/appmenu:java", "//chrome/browser/ui/android/appmenu:java",
"//chrome/browser/ui/android/appmenu/internal:junit", "//chrome/browser/ui/android/appmenu/internal:junit",
@ -1323,6 +1213,11 @@ if (current_toolchain == default_toolchain) {
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
} }
android_resources("chrome_unit_test_java_resources") {
testonly = true
sources = [ "//chrome/android/javatests/res/layout/bottombar_stub.xml" ]
}
android_library("chrome_unit_test_java") { android_library("chrome_unit_test_java") {
testonly = true testonly = true
resources_package = "org.chromium.chrome.test" resources_package = "org.chromium.chrome.test"
@ -1346,6 +1241,7 @@ if (current_toolchain == default_toolchain) {
"javatests/src/org/chromium/chrome/browser/crash/LogcatExtractionRunnableTest.java", "javatests/src/org/chromium/chrome/browser/crash/LogcatExtractionRunnableTest.java",
"javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceTest.java", "javatests/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceTest.java",
"javatests/src/org/chromium/chrome/browser/crypto/CipherFactoryTest.java", "javatests/src/org/chromium/chrome/browser/crypto/CipherFactoryTest.java",
"javatests/src/org/chromium/chrome/browser/customtabs/CustomTabBottomBarViewUnitTest.java",
"javatests/src/org/chromium/chrome/browser/customtabs/CustomTabLaunchCauseMetricsTest.java", "javatests/src/org/chromium/chrome/browser/customtabs/CustomTabLaunchCauseMetricsTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceManagerTest.java", "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceManagerTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceTest.java", "javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceTest.java",
@ -1360,6 +1256,8 @@ if (current_toolchain == default_toolchain) {
"javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java", "javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeUnitTest.java",
"javatests/src/org/chromium/chrome/browser/ntp/IncognitoDescriptionViewRenderTest.java", "javatests/src/org/chromium/chrome/browser/ntp/IncognitoDescriptionViewRenderTest.java",
"javatests/src/org/chromium/chrome/browser/ntp/TitleUtilTest.java", "javatests/src/org/chromium/chrome/browser/ntp/TitleUtilTest.java",
"javatests/src/org/chromium/chrome/browser/payments/CurrencyFormatterTest.java",
"javatests/src/org/chromium/chrome/browser/share/ShareUrlTest.java",
"javatests/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorViewBinderTest.java", "javatests/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorViewBinderTest.java",
"javatests/src/org/chromium/chrome/browser/tab/WebContentsStateBridgeTest.java", "javatests/src/org/chromium/chrome/browser/tab/WebContentsStateBridgeTest.java",
"javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java", "javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java",
@ -1373,6 +1271,8 @@ if (current_toolchain == default_toolchain) {
"javatests/src/org/chromium/chrome/browser/webapps/WebappLaunchCauseMetricsTest.java", "javatests/src/org/chromium/chrome/browser/webapps/WebappLaunchCauseMetricsTest.java",
] ]
deps = [ deps = [
":chrome_app_java_resources",
":chrome_unit_test_java_resources",
":chrome_unit_test_util_java", ":chrome_unit_test_util_java",
"//base:base_java", "//base:base_java",
"//base:base_java_test_support", "//base:base_java_test_support",
@ -1381,6 +1281,7 @@ if (current_toolchain == default_toolchain) {
"//chrome/browser/android/browserservices/intents:java", "//chrome/browser/android/browserservices/intents:java",
"//chrome/browser/android/browserservices/verification:java", "//chrome/browser/android/browserservices/verification:java",
"//chrome/browser/android/crypto:java", "//chrome/browser/android/crypto:java",
"//chrome/browser/commerce/android:java",
"//chrome/browser/commerce/subscriptions/android:subscriptions_java", "//chrome/browser/commerce/subscriptions/android:subscriptions_java",
"//chrome/browser/contextmenu:java", "//chrome/browser/contextmenu:java",
"//chrome/browser/download/android:download_java_tests", "//chrome/browser/download/android:download_java_tests",
@ -1414,6 +1315,7 @@ if (current_toolchain == default_toolchain) {
"//components/browser_ui/widget/android:java", "//components/browser_ui/widget/android:java",
"//components/commerce/core/android:core_java", "//components/commerce/core/android:core_java",
"//components/crash/android:java", "//components/crash/android:java",
"//components/dom_distiller/core/android:dom_distiller_core_java",
"//components/embedder_support/android:context_menu_java", "//components/embedder_support/android:context_menu_java",
"//components/embedder_support/android:util_java", "//components/embedder_support/android:util_java",
"//components/external_intents/android:java", "//components/external_intents/android:java",
@ -1442,6 +1344,7 @@ if (current_toolchain == default_toolchain) {
"//third_party/android_deps:espresso_java", "//third_party/android_deps:espresso_java",
"//third_party/android_deps:guava_android_java", "//third_party/android_deps:guava_android_java",
"//third_party/android_sdk:android_test_base_java", "//third_party/android_sdk:android_test_base_java",
"//third_party/android_sdk:android_test_mock_java",
"//third_party/android_support_test_runner:rules_java", "//third_party/android_support_test_runner:rules_java",
"//third_party/android_support_test_runner:runner_java", "//third_party/android_support_test_runner:runner_java",
"//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_annotation_annotation_java",
@ -1455,6 +1358,7 @@ if (current_toolchain == default_toolchain) {
"//third_party/mockito:mockito_java", "//third_party/mockito:mockito_java",
"//ui/android:ui_full_java", "//ui/android:ui_full_java",
"//ui/android:ui_java_test_support", "//ui/android:ui_java_test_support",
"//url:android_test_helper_java",
"//url:gurl_java", "//url:gurl_java",
"//url:gurl_junit_test_support", "//url:gurl_junit_test_support",
"//url:origin_java", "//url:origin_java",
@ -2102,8 +2006,14 @@ if (current_toolchain == default_toolchain) {
generate_jni_registration("chrome_jni_registration") { generate_jni_registration("chrome_jni_registration") {
targets = [ ":chrome_public_base_module_java" ] targets = [ ":chrome_public_base_module_java" ]
if (enable_vr) {
targets += [ "//chrome/android/features/vr:java" ]
}
manual_jni_registration = true manual_jni_registration = true
sources_exclusions = chrome_jni_sources_exclusions file_exclusions = chrome_jni_file_exclusions
if (allow_jni_multiplexing) {
enable_jni_multiplexing = true
}
} }
# The test apks do not use chromium linker, but using manual JNI registration # The test apks do not use chromium linker, but using manual JNI registration
@ -2111,8 +2021,28 @@ if (current_toolchain == default_toolchain) {
generate_jni_registration("chrome_jni_for_test_registration") { generate_jni_registration("chrome_jni_for_test_registration") {
testonly = true testonly = true
targets = [ ":chrome_public_base_module_java_for_test" ] targets = [ ":chrome_public_base_module_java_for_test" ]
if (enable_vr) {
targets += [ "//chrome/android/features/vr:java" ]
}
manual_jni_registration = true manual_jni_registration = true
sources_exclusions = chrome_jni_sources_exclusions file_exclusions = chrome_jni_file_exclusions
if (allow_jni_multiplexing) {
enable_jni_multiplexing = true
}
}
if (allow_jni_multiplexing) {
generate_jni_registration("monochrome_jni_registration") {
targets = [
":monochrome_java",
":chrome_all_java",
]
if (enable_vr) {
targets += [ "//chrome/android/features/vr:java" ]
}
file_exclusions = chrome_jni_file_exclusions
enable_jni_multiplexing = true
}
} }
# This template instantiates targets responsible for generating pak # This template instantiates targets responsible for generating pak
@ -2145,9 +2075,9 @@ if (current_toolchain == default_toolchain) {
if (enable_resource_allowlist_generation) { if (enable_resource_allowlist_generation) {
if (_is_trichrome || _is_monochrome) { if (_is_trichrome || _is_monochrome) {
_lib = "libmonochrome_pak_allowlist_inputs" _lib = "libmonochrome_inputs"
} else { } else {
_lib = "libchrome_pak_allowlist_inputs" _lib = "libchrome_inputs"
} }
_resource_allowlist_target = "${_variant}_resource_allowlist" _resource_allowlist_target = "${_variant}_resource_allowlist"
_resource_allowlist_file = _resource_allowlist_file =
@ -2155,17 +2085,11 @@ if (current_toolchain == default_toolchain) {
_lib_path = "/lib.unstripped/" + _lib + shlib_extension _lib_path = "/lib.unstripped/" + _lib + shlib_extension
generate_resource_allowlist(_resource_allowlist_target) { generate_resource_allowlist(_resource_allowlist_target) {
_fat_lib_toolchain = "" _fat_lib_toolchain = current_toolchain
if (_is_monochrome || _is_trichrome) { if (_is_monochrome || _is_trichrome) {
# Always use the 32-bit library's allowlist since the 64-bit one is
# webview-only.
# TODO(agrieve): For 64-bit primary, using libmonochrome_64 would be # TODO(agrieve): For 64-bit primary, using libmonochrome_64 would be
# more efficient. # more efficient.
if (android_64bit_target_cpu && !skip_secondary_abi_for_cq) { _fat_lib_toolchain = _monochrome_browser_toolchain
_fat_lib_toolchain = android_secondary_abi_toolchain
} else {
_fat_lib_toolchain = current_toolchain
}
} }
deps = [ ":${_lib}($_fat_lib_toolchain)" ] deps = [ ":${_lib}($_fat_lib_toolchain)" ]
@ -2479,9 +2403,6 @@ if (current_toolchain == default_toolchain) {
deps += [ ":chrome_apk_pak_assets" ] deps += [ ":chrome_apk_pak_assets" ]
} }
android_manifest = chrome_public_android_manifest
android_manifest_dep = ":chrome_public_android_manifest"
shared_libraries = [ ":libchrome" ] shared_libraries = [ ":libchrome" ]
version_name = chrome_version_name version_name = chrome_version_name
@ -2494,13 +2415,6 @@ if (current_toolchain == default_toolchain) {
enable_multidex = is_java_debug enable_multidex = is_java_debug
} }
chrome_public_apk_or_module_tmpl("chrome_modern_public_base_bundle_module") {
target_type = "android_app_bundle_module"
is_base_module = true
add_view_trace_events = true
bundle_target = ":chrome_modern_public_bundle"
}
android_library("monochrome_java") { android_library("monochrome_java") {
deps = [ deps = [
":base_module_java", ":base_module_java",
@ -2603,7 +2517,7 @@ if (current_toolchain == default_toolchain) {
"//components/media_router/browser/android:cast_options_provider_java", "//components/media_router/browser/android:cast_options_provider_java",
"//components/minidump_uploader:minidump_uploader_java", "//components/minidump_uploader:minidump_uploader_java",
"//components/module_installer/android:module_installer_java", "//components/module_installer/android:module_installer_java",
"//third_party/android_deps:com_google_android_play_core_java", "//third_party/android_deps:playcore_java",
"//third_party/androidx:androidx_annotation_annotation_java", "//third_party/androidx:androidx_annotation_annotation_java",
"//third_party/androidx:androidx_collection_collection_java", "//third_party/androidx:androidx_collection_collection_java",
"//ui/android:ui_no_recycler_view_java", "//ui/android:ui_no_recycler_view_java",
@ -2663,56 +2577,9 @@ if (current_toolchain == default_toolchain) {
# include_32_bit_webview: When compiling a 64-bit browser configuration, if # include_32_bit_webview: When compiling a 64-bit browser configuration, if
# true, a 32-bit WebView library will also be built and included. # true, a 32-bit WebView library will also be built and included.
template("monochrome_public_apk_or_module_tmpl") { template("monochrome_public_apk_or_module_tmpl") {
_android_manifest =
"$target_gen_dir/manifest/${target_name}/AndroidManifest.xml"
_split_android_manifest =
"$target_gen_dir/manifest/${target_name}/AndroidManifest_split.xml"
_is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome _is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
_is_bundle = invoker.target_type == "android_app_bundle_module" _is_bundle = invoker.target_type == "android_app_bundle_module"
# Generate the manifest here in the template, to avoid a growing collection
# of manually-instantiated manifests.
split_manifest_template("${target_name}__android_manifest") {
definitions_in_split = _is_bundle
includes = [ "java/AndroidManifest.xml" ]
split_input = "java/AndroidManifest_split.xml"
split_output = _split_android_manifest
variables = chrome_public_jinja_variables +
[ "include_arcore_manifest_flag=$enable_arcore" ]
if (_is_trichrome) {
input = "java/AndroidManifest_trichrome_chrome.xml"
variables += trichrome_jinja_variables
_is_64_bit_browser =
android_64bit_target_cpu && invoker.is_64_bit_browser
_include_32_bit_webview = !defined(invoker.include_32_bit_webview) ||
invoker.include_32_bit_webview
_include_64_bit_webview = android_64bit_target_cpu &&
(!defined(invoker.include_64_bit_webview) ||
invoker.include_64_bit_webview)
_version_code = TRICHROME_VERSION_MAP["${android_64bit_target_cpu}_${_is_64_bit_browser}_${_include_64_bit_webview}_${_include_32_bit_webview}"]
variables += [ "trichrome_version=$_version_code" ]
} else {
_arch = ""
if (android_64bit_target_cpu && invoker.is_64_bit_browser) {
_arch = "_64"
}
input = "java/AndroidManifest_monochrome.xml"
includes += [ "//android_webview/nonembedded/java/AndroidManifest.xml" ]
variables += monochrome_android_manifest_jinja_variables + [
"target_sdk_version=$android_sdk_version",
"webview_library=libmonochrome${_arch}.so",
]
}
# 32-bit is the common case, so remove the ABI variable in the 64-case.
if (android_64bit_target_cpu && invoker.is_64_bit_browser) {
variables -= [ use_32bit_abi_jinja_variable ]
}
output = _android_manifest
}
monochrome_public_common_apk_or_module_tmpl(target_name) { monochrome_public_common_apk_or_module_tmpl(target_name) {
forward_variables_from(invoker, forward_variables_from(invoker,
[ [
@ -2730,8 +2597,6 @@ if (current_toolchain == default_toolchain) {
"target_type", "target_type",
"use_chromium_linker", "use_chromium_linker",
]) ])
android_manifest = _android_manifest
android_manifest_dep = ":${target_name}__android_manifest"
if (!_is_trichrome) { if (!_is_trichrome) {
# Resource allowlist used when generating R.java files and causes # Resource allowlist used when generating R.java files and causes
@ -2792,8 +2657,6 @@ if (current_toolchain == default_toolchain) {
trichrome_library_apk_tmpl("trichrome_library_apk") { trichrome_library_apk_tmpl("trichrome_library_apk") {
apk_name = "TrichromeLibrary" apk_name = "TrichromeLibrary"
android_manifest = trichrome_library_android_manifest
android_manifest_dep = ":trichrome_library_android_manifest"
if (android_64bit_target_cpu) { if (android_64bit_target_cpu) {
is_64_bit_browser = false is_64_bit_browser = false
@ -2831,8 +2694,6 @@ if (current_toolchain == default_toolchain) {
trichrome_library_apk_tmpl("trichrome_library_64_apk") { trichrome_library_apk_tmpl("trichrome_library_64_apk") {
apk_name = "TrichromeLibrary64" apk_name = "TrichromeLibrary64"
android_manifest = trichrome_library_64_android_manifest
android_manifest_dep = ":trichrome_library_64_android_manifest"
is_64_bit_browser = true is_64_bit_browser = true
include_32_bit_webview = false include_32_bit_webview = false
if (enable_libs_and_assets_verification) { if (enable_libs_and_assets_verification) {
@ -2844,8 +2705,6 @@ if (current_toolchain == default_toolchain) {
if (!skip_secondary_abi_for_cq) { if (!skip_secondary_abi_for_cq) {
trichrome_library_apk_tmpl("trichrome_library_32_apk") { trichrome_library_apk_tmpl("trichrome_library_32_apk") {
apk_name = "TrichromeLibrary32" apk_name = "TrichromeLibrary32"
android_manifest = trichrome_library_32_android_manifest
android_manifest_dep = ":trichrome_library_32_android_manifest"
is_64_bit_browser = false is_64_bit_browser = false
include_64_bit_webview = false include_64_bit_webview = false
if (enable_libs_and_assets_verification) { if (enable_libs_and_assets_verification) {
@ -2856,8 +2715,6 @@ if (current_toolchain == default_toolchain) {
trichrome_library_apk_tmpl("trichrome_library_64_32_apk") { trichrome_library_apk_tmpl("trichrome_library_64_32_apk") {
apk_name = "TrichromeLibrary6432" apk_name = "TrichromeLibrary6432"
android_manifest = trichrome_library_64_32_android_manifest
android_manifest_dep = ":trichrome_library_64_32_android_manifest"
is_64_bit_browser = true is_64_bit_browser = true
include_32_bit_webview = true include_32_bit_webview = true
if (enable_libs_and_assets_verification) { if (enable_libs_and_assets_verification) {
@ -2868,95 +2725,12 @@ if (current_toolchain == default_toolchain) {
} }
} }
chrome_public_unit_test_apk_manifest =
"$root_gen_dir/chrome_public_unit_test_apk_manifest/AndroidManifest.xml"
chrome_public_test_apk_manifest =
"$root_gen_dir/chrome_public_test_apk_manifest/AndroidManifest.xml"
chrome_public_test_vr_apk_manifest =
"$root_gen_dir/chrome_public_test_vr_apk_manifest/AndroidManifest.xml"
monochrome_public_test_ar_apk_manifest =
"$root_gen_dir/monochrome_public_test_ar_apk_manifest/AndroidManifest.xml"
jinja_template("chrome_public_unit_test_apk_manifest") {
input = "javatests/AndroidManifest.xml"
includes = [ "java/AndroidManifest.xml" ]
output = chrome_public_unit_test_apk_manifest
variables = default_chrome_public_jinja_variables
variables += [
"manifest_package=$chrome_public_test_manifest_package",
"min_sdk_version=$default_min_sdk_version",
"target_sdk_version=$android_sdk_version",
]
}
jinja_template("chrome_public_test_apk_manifest") {
input = "javatests/AndroidManifest.xml"
includes = [ "java/AndroidManifest.xml" ]
output = chrome_public_test_apk_manifest
variables = default_chrome_public_jinja_variables
variables += [
"manifest_package=$chrome_public_test_manifest_package",
"min_sdk_version=$default_min_sdk_version",
"target_sdk_version=$android_sdk_version",
]
}
jinja_template("chrome_public_test_vr_apk_manifest") {
input = "javatests/AndroidManifest.xml"
includes = [ "java/AndroidManifest.xml" ]
output = chrome_public_test_vr_apk_manifest
variables = chrome_public_jinja_variables
variables += [
"min_sdk_version=$default_min_sdk_version",
"target_sdk_version=$android_sdk_version",
]
}
template("monochrome_public_test_ar_apk_manifest_tmpl") {
jinja_template(target_name) {
forward_variables_from(invoker, "*")
input = "javatests/AndroidManifest_monochrome.xml"
includes = [
"java/AndroidManifest.xml",
"java/AndroidManifest_monochrome.xml",
"javatests/AndroidManifest.xml",
"//android_webview/nonembedded/java/AndroidManifest.xml",
]
variables =
chrome_public_jinja_variables +
monochrome_android_manifest_jinja_variables +
[
"target_sdk_version=$android_sdk_version",
"test_manifest_package=$chrome_public_test_manifest_package",
"webview_library=$webview_library_name",
"include_arcore_manifest_flag=$enable_arcore",
]
}
}
monochrome_public_test_ar_apk_manifest_tmpl(
"monochrome_public_test_ar_apk_manifest") {
output = monochrome_public_test_ar_apk_manifest
webview_library_name = "libmonochrome.so"
}
if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
monochrome_public_test_ar_64_apk_manifest = "$root_gen_dir/monochrome_public_test_ar_64_apk_manifest/AndroidManifest.xml"
monochrome_public_test_ar_apk_manifest_tmpl(
"monochrome_public_test_ar_64_apk_manifest") {
output = monochrome_public_test_ar_64_apk_manifest
webview_library_name = "libmonochrome_64.so"
}
}
# As compared to chrome_public_test_apk, this target contains only unit tests # As compared to chrome_public_test_apk, this target contains only unit tests
# that require on device capabilities. These tests are smaller, more tightly # that require on device capabilities. These tests are smaller, more tightly
# scoped, and do not leave lingering state after execution. # scoped, and do not leave lingering state after execution.
# TODO(crbug.com/1238057): Set clear rules for what tests can be added here. # TODO(crbug.com/1238057): Set clear rules for what tests can be added here.
chrome_test_apk_tmpl("chrome_public_unit_test_apk") { chrome_test_apk_tmpl("chrome_public_unit_test_apk") {
apk_name = "ChromePublicUnitTest" apk_name = "ChromePublicUnitTest"
android_manifest = chrome_public_unit_test_apk_manifest
android_manifest_dep = ":chrome_public_unit_test_apk_manifest"
shared_libraries = [ ":libchromefortest" ] shared_libraries = [ ":libchromefortest" ]
deps = [ deps = [
":chrome_unit_test_java", ":chrome_unit_test_java",
@ -2991,6 +2765,7 @@ if (current_toolchain == default_toolchain) {
"//components/external_intents/android:unit_device_javatests", "//components/external_intents/android:unit_device_javatests",
"//components/infobars/android:unit_device_javatests", "//components/infobars/android:unit_device_javatests",
"//components/installedapp/android:unit_device_javatests", "//components/installedapp/android:unit_device_javatests",
"//components/messages/android:unit_device_javatests",
"//components/messages/android/internal:unit_device_javatests", "//components/messages/android/internal:unit_device_javatests",
"//components/payments/content/android:unit_device_javatests", "//components/payments/content/android:unit_device_javatests",
"//components/signin/public/android:unit_device_javatests", "//components/signin/public/android:unit_device_javatests",
@ -3019,8 +2794,6 @@ if (current_toolchain == default_toolchain) {
#enable_lint = true #enable_lint = true
apk_name = "ChromePublicTest" apk_name = "ChromePublicTest"
android_manifest = chrome_public_test_apk_manifest
android_manifest_dep = ":chrome_public_test_apk_manifest"
shared_libraries = [ ":libchromefortest" ] shared_libraries = [ ":libchromefortest" ]
deps = [ deps = [
":chrome_test_apk_template_resources", ":chrome_test_apk_template_resources",
@ -3066,9 +2839,8 @@ if (current_toolchain == default_toolchain) {
if (enable_vr) { if (enable_vr) {
chrome_test_apk_tmpl("chrome_public_test_vr_apk") { chrome_test_apk_tmpl("chrome_public_test_vr_apk") {
apk_name = "ChromePublicTestVr" apk_name = "ChromePublicTestVr"
android_manifest = chrome_public_test_vr_apk_manifest
android_manifest_dep = ":chrome_public_test_vr_apk_manifest"
shared_libraries = [ ":libchromefortest" ] shared_libraries = [ ":libchromefortest" ]
manifest_package = chrome_public_manifest_package
deps = [ deps = [
":chrome_test_vr_java", ":chrome_test_vr_java",
@ -3090,18 +2862,9 @@ if (current_toolchain == default_toolchain) {
min_sdk_version = 24 min_sdk_version = 24
target_sdk_version = android_sdk_version target_sdk_version = android_sdk_version
android_manifest = monochrome_public_test_ar_apk_manifest
android_manifest_dep = ":monochrome_public_test_ar_apk_manifest"
if (android_64bit_target_cpu) { if (android_64bit_target_cpu) {
if (skip_secondary_abi_for_cq) { is_64_bit_browser = skip_secondary_abi_for_cq
android_manifest = monochrome_public_test_ar_64_apk_manifest include_32_bit_webview = !skip_secondary_abi_for_cq
android_manifest_dep = ":monochrome_public_test_ar_64_apk_manifest"
is_64_bit_browser = true
include_32_bit_webview = false
} else {
is_64_bit_browser = false
include_64_bit_webview = true
}
} }
# This is where we would add the shared_libraries entry for # This is where we would add the shared_libraries entry for
@ -3247,18 +3010,6 @@ if (current_toolchain == default_toolchain) {
"--disable-fre", "--disable-fre",
] ]
instrumentation_test_runner("chrome_modern_public_bundle_smoke_test") {
apk_under_test = ":chrome_modern_public_bundle_apks"
android_test_apk = ":chrome_bundle_smoke_test_apk"
never_incremental = true
modules = [ "test_dummy" ]
if (!is_java_debug) {
proguard_mapping_path =
"$root_build_dir/apks/ChromeModernPublic.aab.mapping"
}
extra_args = _bundle_smoke_test_extra_args
}
instrumentation_test_runner("monochrome_public_bundle_smoke_test") { instrumentation_test_runner("monochrome_public_bundle_smoke_test") {
if (android_64bit_target_cpu && skip_secondary_abi_for_cq) { if (android_64bit_target_cpu && skip_secondary_abi_for_cq) {
apk_under_test = "//chrome/android:monochrome_64_public_bundle_apks" apk_under_test = "//chrome/android:monochrome_64_public_bundle_apks"
@ -3306,13 +3057,22 @@ if (current_toolchain == default_toolchain) {
never_incremental = true never_incremental = true
modules = [ "test_dummy" ] modules = [ "test_dummy" ]
extra_args = _bundle_smoke_test_extra_args extra_args = _bundle_smoke_test_extra_args
if (android_64bit_target_cpu && skip_secondary_abi_for_cq) { if (android_64bit_target_cpu) {
if (skip_secondary_abi_for_cq) {
apk_under_test = "//chrome/android:trichrome_chrome_64_bundle_apks" apk_under_test = "//chrome/android:trichrome_chrome_64_bundle_apks"
additional_apks = [ "//chrome/android:trichrome_library_64_apk" ] additional_apks = [ "//chrome/android:trichrome_library_64_apk" ]
if (!is_java_debug) { if (!is_java_debug) {
proguard_mapping_path = proguard_mapping_path =
"$root_build_dir/apks/TrichromeChrome64.aab.mapping" "$root_build_dir/apks/TrichromeChrome64.aab.mapping"
} }
} else {
apk_under_test = "//chrome/android:trichrome_chrome_64_32_bundle_apks"
additional_apks = [ "//chrome/android:trichrome_library_64_32_apk" ]
if (!is_java_debug) {
proguard_mapping_path =
"$root_build_dir/apks/TrichromeChrome6432.aab.mapping"
}
}
} else { } else {
apk_under_test = "//chrome/android:trichrome_chrome_bundle_apks" apk_under_test = "//chrome/android:trichrome_chrome_bundle_apks"
additional_apks = [ "//chrome/android:trichrome_library_apk" ] additional_apks = [ "//chrome/android:trichrome_library_apk" ]
@ -3364,33 +3124,6 @@ if (current_toolchain == default_toolchain) {
] ]
} }
chrome_bundle("chrome_modern_public_bundle") {
base_module_target = ":chrome_modern_public_base_bundle_module"
bundle_name = "ChromeModernPublic"
compress_shared_libraries = true
if (android_64bit_target_cpu) {
is_64_bit_browser = true
}
add_view_trace_events = true
manifest_package = chrome_public_manifest_package
min_sdk_version = default_min_sdk_version
module_descs = chrome_modern_module_descs
}
if (is_official_build) {
# Used for binary size monitoring.
create_app_bundle_minimal_apks("chrome_modern_public_minimal_apks") {
deps = [ ":chrome_modern_public_bundle" ]
bundle_path = "$root_build_dir/apks/ChromeModernPublic.aab"
}
android_resource_sizes_test(
"resource_sizes_chrome_modern_public_minimal_apks") {
file_path = "$root_build_dir/apks/ChromeModernPublic.minimal.apks"
data_deps = [ ":chrome_modern_public_minimal_apks" ]
}
}
template("monochrome_or_trichrome_public_bundle_tmpl") { template("monochrome_or_trichrome_public_bundle_tmpl") {
_base_module_target_name = "${invoker.target_name}__base_bundle_module" _base_module_target_name = "${invoker.target_name}__base_bundle_module"
_is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome _is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
@ -3982,6 +3715,9 @@ template("libchrome_impl") {
chrome_common_shared_library(target_name) { chrome_common_shared_library(target_name) {
sources = [ "../browser/android/chrome_entry_point.cc" ] sources = [ "../browser/android/chrome_entry_point.cc" ]
deps = [ ":chrome_jni_registration($default_toolchain)" ] deps = [ ":chrome_jni_registration($default_toolchain)" ]
if (allow_jni_multiplexing) {
enable_jni_multiplexing = true
}
if (defined(invoker.deps)) { if (defined(invoker.deps)) {
deps += invoker.deps deps += invoker.deps
} }
@ -3990,13 +3726,12 @@ template("libchrome_impl") {
deps += [ "//chrome/browser/android/vr:module_factory" ] deps += [ "//chrome/browser/android/vr:module_factory" ]
} }
module_descs = chrome_modern_module_descs
forward_variables_from(invoker, "*", [ "deps" ]) forward_variables_from(invoker, "*", [ "deps" ])
} }
} }
if (enable_resource_allowlist_generation) { if (enable_resource_allowlist_generation) {
libchrome_impl("libchrome_pak_allowlist_inputs") { libchrome_impl("libchrome_inputs") {
collect_inputs_only = true collect_inputs_only = true
} }
} }
@ -4007,7 +3742,7 @@ libchrome_impl("libchrome") {
if (enable_resource_allowlist_generation) { if (enable_resource_allowlist_generation) {
# Make sure allowlist_inputs is built first so when concurrent_links == 1 # Make sure allowlist_inputs is built first so when concurrent_links == 1
# it comes before the actual (very slow) link step. # it comes before the actual (very slow) link step.
deps = [ ":libchrome_pak_allowlist_inputs" ] deps = [ ":libchrome_inputs" ]
} }
} }
@ -4039,6 +3774,9 @@ chrome_common_shared_library("libchromefortest") {
if (enable_vr) { if (enable_vr) {
deps += [ "//chrome/browser/android/vr:test_support" ] deps += [ "//chrome/browser/android/vr:test_support" ]
} }
if (allow_jni_multiplexing) {
enable_jni_multiplexing = true
}
# Make this a partitioned library, since some partitioned code is linked in # Make this a partitioned library, since some partitioned code is linked in
# (otherwise, the library will warn at build time that it contains multiple # (otherwise, the library will warn at build time that it contains multiple
@ -4061,11 +3799,18 @@ template("libmonochrome_apk_or_bundle_tmpl") {
deps += invoker.deps deps += invoker.deps
} }
defines = []
if (webview_includes_weblayer) { if (webview_includes_weblayer) {
defines = [ "WEBVIEW_INCLUDES_WEBLAYER" ] defines += [ "WEBVIEW_INCLUDES_WEBLAYER" ]
deps += [ "//weblayer:weblayer_lib" ] deps += [ "//weblayer:weblayer_lib" ]
} }
if (allow_jni_multiplexing) {
defines += [ "JNI_REGISTRATION_REQUIRED" ]
deps += [ ":monochrome_jni_registration($default_toolchain)" ]
enable_jni_multiplexing = true
}
if (enable_vr) { if (enable_vr) {
deps += [ "//chrome/browser/android/vr:module_factory" ] deps += [ "//chrome/browser/android/vr:module_factory" ]
} }
@ -4082,7 +3827,7 @@ if (!android_64bit_target_cpu ||
current_toolchain == android_secondary_abi_toolchain)) { current_toolchain == android_secondary_abi_toolchain)) {
# Avoiding a real link for this step allows the actual libmonochrome to # Avoiding a real link for this step allows the actual libmonochrome to
# run at the same time as R8. # run at the same time as R8.
libmonochrome_apk_or_bundle_tmpl("libmonochrome_pak_allowlist_inputs") { libmonochrome_apk_or_bundle_tmpl("libmonochrome_inputs") {
collect_inputs_only = true collect_inputs_only = true
} }
@ -4092,7 +3837,7 @@ if (!android_64bit_target_cpu ||
if (enable_resource_allowlist_generation) { if (enable_resource_allowlist_generation) {
# Make sure allowlist_inputs is built first so when concurrent_links == 1 # Make sure allowlist_inputs is built first so when concurrent_links == 1
# it comes before the actual (very slow) link step. # it comes before the actual (very slow) link step.
deps = [ ":libmonochrome_pak_allowlist_inputs" ] deps = [ ":libmonochrome_inputs" ]
} }
} }

View file

@ -0,0 +1,759 @@
# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//android_webview/variables.gni")
import("//base/android/linker/config.gni")
import("//base/android/resource_exclusions.gni")
import("//build/config/android/rules.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/locales.gni")
import("//chrome/android/features/dev_ui/dev_ui_module.gni")
import("//chrome/android/modules/chrome_bundle_tmpl.gni")
import("//chrome/android/trichrome.gni")
import("//chrome/common/features.gni")
import("//chrome/version.gni")
import("//components/crash/android/silent_java_assert_reporting.gni")
import("//components/optimization_guide/features.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//weblayer/variables.gni")
import("channel.gni")
declare_args() {
# Android package name to use when compiling the public chrome targets
# (chrome_public_apk, monochrome_public_apk, etc. as well as the
# *_bundle variants). This is particularly useful when using
# monochrome_public_apk for WebView development, as the OS only accepts
# WebView providers which declare one of a handful of package names. See
# https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/build-instructions.md#Changing-package-name
# for details.
chrome_public_manifest_package = "org.chromium.thorium"
if (use_stable_package_name_for_trichrome) {
chrome_public_manifest_package += ".stable"
# CHANGED BY ALEX313031 FOR THORIUM
} else if (android_channel != "default" && android_channel != "stable") {
chrome_public_manifest_package += "." + android_channel
}
}
chrome_public_test_manifest_package = "org.chromium.thorium.tests"
default_chrome_public_jinja_variables = [
"channel=$android_channel",
"enable_cardboard=$enable_cardboard",
"enable_vr=$enable_vr",
"enable_arcore=$enable_arcore",
"zygote_preload_class=org.chromium.content_public.app.ZygotePreload",
]
monochrome_android_manifest_jinja_variables =
[ "sandboxed_service_exported=true" ]
# Generates an AndroidManifest.xml along with an optional second manifest
# dependent on the original.
#
# Variables:
# input: The base manifest template with the main application definition.
# output: Output path for |input|.
# split_input: Path to an alternate manifest that will be built if
# definitions_in_split is true.
# split_output: Output path for |split_input|.
# variables: Variables to pass to the jinja templates.
# definitions_in_split: If true will pass definitions_in_split=true in the
# variables passed to |input| and generate |split_output|.
template("split_manifest_template") {
_definitions_in_split =
defined(invoker.definitions_in_split) && invoker.definitions_in_split
jinja_template(target_name) {
forward_variables_from(invoker,
[
"includes",
"input",
"output",
"variables",
])
if (_definitions_in_split) {
variables += [ "definitions_in_split=true" ]
}
}
if (_definitions_in_split) {
jinja_template("${target_name}__split") {
forward_variables_from(invoker,
[
"includes",
"variables",
])
if (!defined(includes)) {
includes = []
}
includes += [ invoker.input ]
input = invoker.split_input
output = invoker.split_output
_rebased_input = rebase_path(invoker.input, "//")
variables += [ "base_manifest=${_rebased_input}" ]
}
} else {
not_needed(invoker,
[
"split_input",
"split_output",
])
}
}
# A template used to declare any target that will implement a full Chromium
# or Chrome application, either as an APK, or an app bundle module.
#
# Variables:
# target_type: Either 'android_apk' or 'android_app_bundle_module'.
# apk_name: For APK target types, the final APK name without a suffix.
# shared_libraries: List of native shared libraries targets to include in
# the final target (e.g. [ ":libchrome" ]).
# is_monochrome: Indicates that this target contains chrome and webview
# packaged together and can only run on Android N+.
# is_trichrome: Indicates this target relies on a trichrome static library
# target and can only run on Android P+.
# png_to_webp: Optional. If true, convert image resources to webp format.
# requires Android K+, since these were not supported by Android properly
# before 4.3.0.
#
# Plus all other variables accepted by android_apk() or
# android_app_bundle_module(), depending on the target type.
#
template("chrome_common_apk_or_module_tmpl") {
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
_target_type = invoker.target_type
assert(_target_type == "android_apk" ||
_target_type == "android_app_bundle_module" ||
_target_type == "instrumentation_test_apk")
_is_monochrome = defined(invoker.is_monochrome) && invoker.is_monochrome
_is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
_is_bundle = _target_type == "android_app_bundle_module"
_is_test = _target_type == "instrumentation_test_apk"
assert(!(_is_test && _is_monochrome), "Unsupported configuration")
assert(!(_is_test && _is_trichrome), "Unsupported configuration")
if (_is_test) {
testonly = true
}
_is_64_bit_browser =
android_64bit_target_cpu &&
(!defined(invoker.is_64_bit_browser) || invoker.is_64_bit_browser)
if (_is_trichrome || _is_monochrome) {
_include_64_bit_webview =
android_64bit_target_cpu && (!defined(invoker.include_64_bit_webview) ||
invoker.include_64_bit_webview)
_include_32_bit_webview = !defined(invoker.include_32_bit_webview) ||
invoker.include_32_bit_webview
_include_primary_abi = !android_64bit_target_cpu || _is_64_bit_browser ||
_include_64_bit_webview
_include_secondary_abi = android_64bit_target_cpu &&
(!_is_64_bit_browser || _include_32_bit_webview)
if (_include_secondary_abi) {
_secondary_out_dir =
get_label_info("X($android_secondary_abi_toolchain)", "root_out_dir")
not_needed([ "_secondary_out_dir" ])
}
}
assert(!(_is_monochrome && _is_trichrome),
"Cannot be both trichrome and monochrome!")
assert(_is_trichrome == defined(invoker.static_library_provider),
"If trichrome library is used, static_library_provider must be set " +
"so that a dep can be added on the library APK.")
if (_is_trichrome) {
_version_code = TRICHROME_VERSION_MAP["${android_64bit_target_cpu}_${_is_64_bit_browser}_${_include_64_bit_webview}_${_include_32_bit_webview}"]
} else if (_is_monochrome) {
_version_code = MONOCHROME_VERSION_MAP["${android_64bit_target_cpu}_${_is_64_bit_browser}_${_include_64_bit_webview}_${_include_32_bit_webview}"]
} else {
_version_code = chrome_version_code
}
if (defined(invoker.manifest_package)) {
_manifest_package = invoker.manifest_package
} else if (_is_test) {
_manifest_package = chrome_public_test_manifest_package
} else {
_manifest_package = chrome_public_manifest_package
}
_android_manifest = "$target_gen_dir/$target_name/AndroidManifest.xml"
_split_android_manifest =
"$target_gen_dir/$target_name/AndroidManifest_split.xml"
_android_manifest_target_name = "${target_name}__android_manifest"
split_manifest_template(_android_manifest_target_name) {
definitions_in_split = _is_bundle
split_input = "//chrome/android/java/AndroidManifest_split.xml"
split_output = _split_android_manifest
includes = []
output = _android_manifest
variables = default_chrome_public_jinja_variables +
[ "manifest_package=$_manifest_package" ]
if (_is_trichrome) {
input = "//chrome/android/java/AndroidManifest_trichrome_chrome.xml"
includes = [ "//chrome/android/java/AndroidManifest.xml" ]
variables +=
trichrome_jinja_variables + [ "trichrome_version=$_version_code" ]
} else if (_is_monochrome) {
input = "//chrome/android/java/AndroidManifest_monochrome.xml"
includes = [
"//android_webview/nonembedded/java/AndroidManifest.xml",
"//chrome/android/java/AndroidManifest.xml",
]
variables += monochrome_android_manifest_jinja_variables
if (_is_64_bit_browser) {
variables += [ "webview_library=libmonochrome_64.so" ]
} else {
variables += [ "webview_library=libmonochrome.so" ]
}
} else {
input = "//chrome/android/java/AndroidManifest.xml"
}
if (_is_monochrome || _is_trichrome) {
_force_32_bit = _include_32_bit_webview && _include_64_bit_webview &&
!_is_64_bit_browser
variables += [ "force_32_bit=$_force_32_bit" ]
}
if (_is_test) {
includes += [ input ]
input = "//chrome/android/javatests/AndroidManifest.xml"
}
if (defined(invoker.jinja_input)) {
includes += [ input ]
input = invoker.jinja_input
}
if (defined(invoker.jinja_extra_variables)) {
variables += invoker.jinja_extra_variables
}
if (defined(invoker.jinja_extra_includes)) {
includes += invoker.jinja_extra_includes
}
}
target(_target_type, target_name) {
android_manifest = _android_manifest
android_manifest_dep = ":$_android_manifest_target_name"
manifest_package = _manifest_package
if (defined(invoker.min_sdk_version)) {
min_sdk_version = invoker.min_sdk_version
} else if (_is_trichrome) {
min_sdk_version = 29
}
if (defined(invoker.version_name)) {
version_name = invoker.version_name
} else {
version_name = chrome_version_name
}
if (defined(invoker.version_code)) {
# Override for the actual versionCode, but not for trichrome_version.
version_code = invoker.version_code
} else {
version_code = _version_code
}
if (defined(invoker.expected_android_manifest)) {
expected_android_manifest_version_code_offset = chrome_version_code
expected_android_manifest_library_version_offset = chrome_version_code
}
if (_target_type == "android_apk") {
command_line_flags_file = "chrome-command-line"
}
if (_is_bundle) {
is_base_module = true
# Sets ISOLATED_SPLITS_ENABLED in BuildConfig.java.
isolated_splits_enabled = true
}
product_config_java_packages = [ "org.chromium.thorium.browser" ]
if (_is_monochrome) {
alternative_android_sdk_dep = webview_framework_dep
app_as_shared_lib = true
# Resource allowlist used when generating R.java files and causes
# only the webview subset of resources to be marked as non-final.
# Strings in this target will also be kept in the base apk rather than placed in the language splits.
shared_resources_allowlist_target =
"//android_webview:system_webview_no_weblayer_apk"
# Ensure the localized resources for all locales are used, even when
# a smaller set is specified through aapt_locale_allowlist.
shared_resources_allowlist_locales = platform_pak_locales
product_config_java_packages += [ webview_product_config_java_package ]
if (webview_includes_weblayer) {
product_config_java_packages += [ weblayer_product_config_java_package ]
}
}
if (enable_silent_java_assert_reporting) {
custom_assertion_handler = crash_reporting_assertion_handler
}
if (allow_jni_multiplexing) {
enable_jni_multiplexing = true
}
# Include resource strings files only for supported locales.
aapt_locale_allowlist = platform_pak_locales
resource_exclusion_regex = common_resource_exclusion_regex
resource_exclusion_exceptions = common_resource_exclusion_exceptions
# Exceptions (rationale in https://crbug.com/691733):
resource_exclusion_exceptions += [
"*ic_file_download_white*", # Bottom edge seems misaligned.
"*ic_lock.*", # Bottom edge seems misaligned.
]
# Most of these, with the exception of resource_exclusion_exceptions,
# are currently duplicated in system_webview_apk_tmpl.gni.
# Used only by alert dialog on tiny screens.
_material_package = "com_google_android_material.*"
resource_exclusion_regex += "|${_material_package}values-small"
# Used only by date picker (which chrome doesn't use).
resource_exclusion_regex += "|${_material_package}-(w480dp-port|w360dp-port|h480dp-land|h360dp-land)"
# Material design layouts that cause views to be kept that we don't use.
# Instead of manually filtering, unused resource removal would be better:
# https://crbug.com/636448
resource_exclusion_regex += "|${_material_package}/xml.*badge_"
if (!is_java_debug) {
# TODO(crbug.com/993340): Update test goldens with webp versions of images.
if (!_is_test) {
png_to_webp = true
}
proguard_enabled = true
proguard_configs = [ "//chrome/android/proguard/main.flags" ]
if (_is_monochrome) {
proguard_configs +=
[ "//android_webview/nonembedded/java/proguard.flags" ]
}
if (_is_test) {
proguard_configs += [ "//chrome/android/proguard/apk_for_test.flags" ]
}
if (defined(invoker.proguard_configs)) {
proguard_configs += invoker.proguard_configs
}
# We only optimize resources for bundles since APKs are not shipped.
# Resources only live in the base module atm as such we only need to set
# these on the base module
if (_is_bundle) {
# Removes metadata needed for Resources.getIdentifier("resource_name").
strip_resource_names = true
# Shortens resource file names in apk eg: res/drawable/button.xml -> res/a.xml
short_resource_paths = true
# Removes unused resources from the apk. Only enabled on official builds
# since it adds a slow step and serializes the build graph causing fewer
# expensive tasks (eg: proguarding, resource optimization) to be run in
# parallel by adding dependencies between them (adds around 10-20
# seconds on my machine).
strip_unused_resources = is_official_build
# Resources config for blocklisting resource names from obfuscation
resources_config_paths = [ "//chrome/android/aapt2.config" ]
if (_is_monochrome || _is_trichrome) {
resources_config_paths += [ "//android_webview/aapt2.config" ]
}
if (defined(invoker.resources_config_paths)) {
resources_config_paths += invoker.resources_config_paths
}
}
}
deps = [
"//chrome/android:chrome_base_module_resources",
"//chrome/android:chrome_public_non_pak_assets",
]
# TODO(agrieve): Make unconditional when moving to trampoline.
if (_is_monochrome || _is_trichrome) {
deps += [ "//components/crash/android:handler_java" ]
}
if (_is_monochrome) {
deps += [ "//chrome/android:base_monochrome_module_java" ]
} else {
deps += [ "//chrome/android:base_module_java" ]
}
if (defined(invoker.deps)) {
deps += invoker.deps
}
if (!_is_trichrome) {
# These go in trichrome library.
deps += [
"//gin:v8_snapshot_assets",
"//third_party/icu:icu_assets",
]
# TODO(agrieve): This is excluded from trichrome in preparation for
# "synchronized proguarding", which we've since abandoned. Enable for
# trichrome, or just remove the version check altogether.
build_config_include_product_version_resource = true
deps += [ "//chrome/android:product_version_resources" ]
}
if (_is_bundle) {
# Required to support macro resources.
# See https://crbug.com/1278419
deps += [ ":${target_name}__all_dfm_resources" ]
} else {
# For bundles, this exists in the "chrome" split.
deps += [ "//chrome/android:chrome_all_java" ]
if (dfmify_dev_ui) {
# For bundles, Dev UI is a feature in a DFM.
deps += [ "//chrome/android/features/dev_ui:java" ]
}
if (enable_vr) {
# For bundles, VR is a feature in a DFM.
deps += [ "//chrome/android/features/vr:java" ]
}
}
if (_is_monochrome) {
deps += [
"//android_webview/glue:glue_java",
"//android_webview/nonembedded:monochrome_devui_launcher_icon_resources",
"//android_webview/nonembedded:nonembedded_java",
]
# For bundles, this lives in chrome split.
if (!_is_bundle) {
deps += [ "//chrome/android:monochrome_java" ]
}
if (_include_primary_abi) {
deps += [ "//android_webview:monochrome_webview_primary_abi_assets" ]
}
if (_include_secondary_abi) {
deps += [ "//android_webview:monochrome_webview_secondary_abi_assets" ]
}
}
if (_is_bundle && _is_monochrome) {
deps += [ "//chrome/android:monochrome_bundle_module_pak_assets" ]
} else if (_is_bundle && _is_trichrome) {
deps += [ "//chrome/android:trichrome_chrome_bundle_module_pak_assets" ]
} else if (_is_bundle) {
deps += [ "//chrome/android:chrome_bundle_module_pak_assets" ]
} else if (_is_monochrome) {
deps += [ "//chrome/android:monochrome_apk_pak_assets" ]
} else {
assert(!_is_trichrome)
deps += [ "//chrome/android:chrome_apk_pak_assets" ]
}
if (defined(invoker.add_upstream_only_deps) &&
invoker.add_upstream_only_deps) {
if (_is_monochrome) {
deps += upstream_only_webview_deps
} else if (!_is_trichrome) {
deps += [
"//chrome/android:chrome_public_apk_base_module_resources",
"//chrome/android:chrome_public_base_module_java",
"//chrome/android:chrome_public_non_pak_assets",
"//components/browser_ui/styles/android:chrome_public_apk_resources",
]
}
if (_is_bundle) {
deps += [
# deps in delegate_public_impl_java are put into the Chrome module, but the language deps
# are needed by the base module.
"//components/language/android:ulp_delegate_public_java",
]
} else {
deps += [ "//chrome/android:delegate_public_impl_java" ]
}
if (_is_test) {
deps += [ "//chrome/android:chrome_public_base_module_java_for_test" ]
}
}
# https://crbug.com/1415351
assert_no_deps = [
"//third_party/androidx:androidx_window_extensions_core_core_java",
"//third_party/androidx:androidx_window_sidecar_sidecar_java",
"//third_party/androidx:androidx_window_window_java_java",
]
if (defined(invoker.assert_no_deps)) {
assert_no_deps += invoker.assert_no_deps
}
# Unwind tables are included in the stack_unwinder DFM on Android, so they
# aren't needed for bundle builds. However, we keep them for non-bundle
# builds, such as test and development apks (e.g. chrome_public_apk), to
# allow tests and developers to use them directly.
if (!defined(invoker.shared_libraries) && !_is_bundle &&
add_unwind_tables_in_chrome_32bit_apk &&
(target_cpu == "arm" ||
(target_cpu == "arm64" && !_is_64_bit_browser))) {
if (_is_test) {
deps += [ "//chrome/android:libchromefortest_unwind_table_assets" ]
} else if (_is_monochrome || _is_trichrome) {
deps += [ "//chrome/android:libmonochrome_unwind_table_assets" ]
} else {
deps += [ "//chrome/android:libchrome_unwind_table_assets" ]
}
}
data_deps = []
if (defined(invoker.data_deps)) {
data_deps += invoker.data_deps
}
# Prefer to add this data_dep on the final target instead of java targets
# like chrome_all_java so that all other targets can build in parallel with
# lint.
if (!disable_android_lint) {
data_deps += [ "//chrome/android:android_lint" ]
}
shared_libraries = []
loadable_modules = []
if (android_64bit_target_cpu) {
secondary_abi_shared_libraries = []
secondary_abi_loadable_modules = []
}
if (defined(invoker.loadable_modules)) {
loadable_modules = invoker.loadable_modules
}
if (defined(invoker.secondary_abi_loadable_modules)) {
secondary_abi_loadable_modules = invoker.secondary_abi_loadable_modules
}
if (_is_64_bit_browser && build_hwasan_splits) {
_hwasan_toolchain = "//build/toolchain/android:android_clang_arm64_hwasan"
}
if (defined(invoker.shared_libraries)) {
shared_libraries += invoker.shared_libraries
} else if (_is_test) {
shared_libraries += [ "//chrome/android:libchromefortest" ]
} else if (_is_monochrome) {
if (android_64bit_target_cpu) {
# Build //android_webview:monochrome with the opposite bitness that
# Chrome runs in.
if (_is_64_bit_browser) {
shared_libraries += [ "//chrome/android:libmonochrome_64" ]
if (_include_32_bit_webview) {
secondary_abi_shared_libraries += [ "//android_webview:monochrome_64($android_secondary_abi_toolchain)" ]
}
if (build_hwasan_splits) {
shared_libraries +=
[ "//chrome/android:libmonochrome_64($_hwasan_toolchain)" ]
}
} else {
if (_include_64_bit_webview) {
shared_libraries += [ "//android_webview:monochrome" ]
}
secondary_abi_shared_libraries += [
"//chrome/android:libmonochrome($android_secondary_abi_toolchain)",
]
}
} else {
shared_libraries += [ "//chrome/android:libmonochrome" ]
}
} else if (!_is_trichrome) {
shared_libraries += [ "//chrome/android:libchrome" ]
}
if (enable_arcore) {
# The arcore manifest needs to be merged into the base module because
# the Play Store verifies the com.google.ar.core.min_apk_version
# meta-data tag is in the base manifest.
deps += [
"//third_party/arcore-android-sdk-client:arcore_base_manifest_java",
]
# For Trichrome, the primary abi arcore library is added to
# TrichromeLibrary.apk, so it's not needed here.
if (!_is_trichrome) {
_arcore_target = "//third_party/arcore-android-sdk-client:com_google_ar_core_J__unpack_aar"
deps += [ _arcore_target ]
_libarcore_dir = get_label_info(_arcore_target, "target_out_dir") +
"/com_google_ar_core_java/jni"
if (android_64bit_target_cpu) {
if (_is_64_bit_browser) {
loadable_modules +=
[ "$_libarcore_dir/arm64-v8a/libarcore_sdk_c.so" ]
} else {
secondary_abi_loadable_modules +=
[ "$_libarcore_dir/armeabi-v7a/libarcore_sdk_c.so" ]
}
} else {
loadable_modules +=
[ "$_libarcore_dir/armeabi-v7a/libarcore_sdk_c.so" ]
}
}
}
library_always_compress = []
if (defined(invoker.library_always_compress)) {
library_always_compress = invoker.library_always_compress
}
# TODO(agrieve): Use Crashpad trampoline in chrome_public_apk.
if (!_is_monochrome && !_is_trichrome) {
deps +=
[ "//components/crash/core/app:chrome_crashpad_handler_named_as_so" ]
loadable_modules += [ "$root_out_dir/libchrome_crashpad_handler.so" ]
library_always_compress += [ "libchrome_crashpad_handler.so" ]
} else if (!_is_trichrome) {
# Crashpad trampoline lives in TrichromeLibrary.apk.
# https://chromium.googlesource.com/chromium/src/+/main/docs/android_native_libraries.md#Crashpad-Packaging
if (_include_primary_abi) {
deps += [
"//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
]
loadable_modules +=
[ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
}
if (_include_secondary_abi) {
deps += [ "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)" ]
secondary_abi_loadable_modules +=
[ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
}
}
# The Chromium Linker depends on ASharedMemory_create() introduced in O.
use_chromium_linker = chromium_linker_supported && _is_trichrome
if (use_chromium_linker) {
if (android_64bit_target_cpu && !_is_64_bit_browser) {
deps += [ "//base/android/linker:chromium_android_linker($android_secondary_abi_toolchain)" ]
secondary_abi_loadable_modules +=
[ "$_secondary_out_dir/libchromium_android_linker$shlib_extension" ]
} else {
deps += [ "//base/android/linker:chromium_android_linker" ]
loadable_modules +=
[ "$root_out_dir/libchromium_android_linker$shlib_extension" ]
}
if (_is_64_bit_browser && build_hwasan_splits) {
deps += [
"//base/android/linker:chromium_android_linker($_hwasan_toolchain)",
]
_hwasan_outdir = get_label_info(":($_hwasan_toolchain)", "root_out_dir")
loadable_modules +=
[ "$_hwasan_outdir/libchromium_android_linker$shlib_extension" ]
}
}
if (build_with_internal_optimization_guide) {
if (android_64bit_target_cpu && !_is_64_bit_browser) {
_secondary_optimization_guide = "//components/optimization_guide/internal:optimization_guide_internal($android_secondary_abi_toolchain)"
deps += [ _secondary_optimization_guide ]
secondary_abi_loadable_modules +=
[ "$_secondary_out_dir/liboptimization_guide_internal.so" ]
} else {
deps += [ "//components/optimization_guide/internal:optimization_guide_internal" ]
loadable_modules +=
[ "$root_out_dir/liboptimization_guide_internal.so" ]
}
}
if (_is_trichrome) {
if (android_64bit_target_cpu && !_is_64_bit_browser) {
static_library_provider_use_secondary_abi = true
}
# Include placeholder libraries to make Chrome multiarch in the same way
# as Monochrome, even though Chrome only runs with one of the two
# bitnesses. This allows the "32-bit" and "64-bit" versions of Chrome to
# depend on their respective versions of the shared library APK even
# though they're functionally the same.
if (_include_primary_abi && loadable_modules == []) {
native_lib_placeholders = [ "libdummy.so" ]
}
if (_include_secondary_abi && secondary_abi_loadable_modules == []) {
secondary_native_lib_placeholders = [ "libdummy.so" ]
}
# http://crbug.com/1042107.
if (is_component_build) {
if (_is_64_bit_browser) {
main_component_library = "libmonochrome_64.cr.so"
} else {
main_component_library = "libmonochrome.cr.so"
}
}
}
if (_is_test) {
bundles_supported = true
deps += [ "//third_party/androidx:androidx_test_runner_java" ]
# For EmbeddedTestServer.
additional_apks = [ "//net/android:net_test_support_apk" ]
if (defined(invoker.additional_apks)) {
additional_apks += invoker.additional_apks
}
}
forward_variables_from(invoker,
"*",
TESTONLY_AND_VISIBILITY + [
"additional_apks",
"assert_no_deps",
"data_deps",
"deps",
"loadable_modules",
"manifest_package",
"proguard_configs",
"resources_config_paths",
"secondary_abi_loadable_modules",
"secondary_abi_shared_libraries",
"shared_libraries",
"version_code",
"version_name",
])
}
}
# For creating chrome targets without internal customizations.
template("chrome_public_apk_or_module_tmpl") {
chrome_common_apk_or_module_tmpl(target_name) {
add_upstream_only_deps = true
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
}
}
template("chrome_public_test_apk_tmpl") {
chrome_common_apk_or_module_tmpl(target_name) {
add_upstream_only_deps = true
target_type = "instrumentation_test_apk"
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
}
}
# TODO(https://crbug.com/1427610): Remove.
template("monochrome_public_common_apk_or_module_tmpl") {
chrome_common_apk_or_module_tmpl(target_name) {
forward_variables_from(invoker, "*")
if (!defined(is_monochrome)) {
is_trichrome = true
}
}
}
template("chrome_public_common_apk_or_module_tmpl") {
chrome_common_apk_or_module_tmpl(target_name) {
forward_variables_from(invoker, "*")
}
}

View file

@ -321,11 +321,11 @@ CHAR_LIMIT guidelines:
<message name="IDS_ALLOW_CHROME_SIGNIN_SUMMARY" desc="Summary for a checkbox in Google services that controls sign-in and sync prompts."> <message name="IDS_ALLOW_CHROME_SIGNIN_SUMMARY" desc="Summary for a checkbox in Google services that controls sign-in and sync prompts.">
Shows prompts to sign in to Thorium Shows prompts to sign in to Thorium
</message> </message>
<message name="IDS_AUTOCOMPLETE_SEARCHES_AND_URLS_TITLE" desc="Title for a checkbox in Settings that controls URL and search autocompletion and informs the user about the data shared by this feature."> <message name="IDS_IMPROVE_SEARCH_SUGGESTIONS_TITLE" desc="Title for a checkbox in Settings that controls URL and search autocompletion and informs the user about the data shared by this feature.">
Autocomplete searches and URLs Improve search suggestions
</message> </message>
<message name="IDS_AUTOCOMPLETE_SEARCHES_AND_URLS_SUMMARY" desc="Summary for a checkbox in Settings that controls URL and search autocompletion and informs the user about the data shared by this feature."> <message name="IDS_IMPROVE_SEARCH_SUGGESTIONS_SUMMARY" desc="Summary for a checkbox in Settings that controls URL and search autocompletion and informs the user about the data shared by this feature.">
Sends some cookies and searches from the address bar and search box to your default search engine When you type in the address bar or search box, Thorium sends what you type to your default search engine to get better suggestions. This is off in Incognito.
</message> </message>
<message name ="IDS_SETTINGS_INCOGNITO_TAB_LOCK_TITLE" desc = "Title for a toggle in Settings that allows users to lock their existing Incognito tabs with a device reauthentication mechanism."> <message name ="IDS_SETTINGS_INCOGNITO_TAB_LOCK_TITLE" desc = "Title for a toggle in Settings that allows users to lock their existing Incognito tabs with a device reauthentication mechanism.">
Lock Incognito tabs when you leave Thorium Lock Incognito tabs when you leave Thorium
@ -1347,6 +1347,9 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_TITLE" desc="Label of the dropdown that selects the time range for which browsing data will be deleted."> <message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_TITLE" desc="Label of the dropdown that selects the time range for which browsing data will be deleted.">
Time range Time range
</message> </message>
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_15_MINUTES" desc="The option to delete browsing data from the last 15 minutes.">
Last 15 minutes
</message>
<message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_HOUR" desc="The option to delete browsing data from the last hour."> <message name="IDS_CLEAR_BROWSING_DATA_TAB_PERIOD_HOUR" desc="The option to delete browsing data from the last hour.">
Last hour Last hour
</message> </message>
@ -3048,17 +3051,32 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_SIGNIN_TITLE" desc="Title for the screen that asks users to sign-in and turn on Sync. [CHAR_LIMIT=27]"> <message name="IDS_SIGNIN_TITLE" desc="Title for the screen that asks users to sign-in and turn on Sync. [CHAR_LIMIT=27]">
Turn on sync? Turn on sync?
</message> </message>
<message name="IDS_SYNC_CONSENT_TITLE" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. The tone should be informative and inviting. [CHAR_LIMIT=35]"> <message name="IDS_HISTORY_SYNC_CONSENT_TITLE_A" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on history sync. The value proposition of sync here is to allow a user to proceed their web navigation on a different device. The tone should be informative and inviting. [CHAR_LIMIT=35]">
Turn on sync Pick up where you left off
</message> </message>
<message name="IDS_SYNC_CONSENT_TITLE_VARIATION" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. [CHAR_LIMIT=20]"> <message name="IDS_HISTORY_SYNC_CONSENT_TITLE_B" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on history sync. Devices include phones, tables and computers. The tone should be informative and inviting. [CHAR_LIMIT=35]">
Sync Browse across devices
</message> </message>
<message name="IDS_SYNC_CONSENT_SUBTITLE" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on sync. This string explains to users that they can back up their Thorium data and use it on all their computers, phones, and other devices; a user's Thorium data includes their bookmarks, passwords, history, settings, and more. The word 'stuff' can be translated as 'data' or similar if there is no natural translation of 'stuff'. Maintain the level of formality that your language generally uses in the Thorium app. The tone should be informative and inviting. [CHAR_LIMIT=100]"> <message name="IDS_HISTORY_SYNC_CONSENT_TITLE_C" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on history sync. Typing refers to typing urls in the address bar. The tone should be informative and inviting. [CHAR_LIMIT=35]">
Back up your stuff and use it on any device Save time and type less
</message> </message>
<message name="IDS_SYNC_CONSENT_SUBTITLE_VARIATION" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on sync. This string explains to users that they can get their Thorium data on all their computers, phones, and other devices; a user's Thorium data includes their bookmarks, passwords, history, settings, and more. Maintain the level of formality that your language generally uses in the Thorium app. The tone should be informative and inviting. [CHAR_LIMIT=100]"> <message name="IDS_HISTORY_SYNC_CONSENT_TITLE_D" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on history sync. Suggestions refers to suggested entries in the address bar. The tone should be informative and inviting. [CHAR_LIMIT=35]">
Sync your data on all devices Get better suggestions
</message>
<message name="IDS_HISTORY_SYNC_CONSENT_TITLE_E" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on history sync. The tone should be informative and inviting. [CHAR_LIMIT=35]">
Sync your tabs and history
</message>
<message name="IDS_HISTORY_SYNC_CONSENT_SUBTITLE_A" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on browsing history sync. Sync is short for synchronization. Devices include phones, tablets and computers. The tone should be informative and inviting. [CHAR_LIMIT=100]">
To continue browsing on another device, sync your tabs and history
</message>
<message name="IDS_HISTORY_SYNC_CONSENT_SUBTITLE_C" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on browsing history sync. Sync is short for synchronization. The tone should be informative and inviting. [CHAR_LIMIT=100]">
To quickly get back to sites youve visited, sync your tabs and history
</message>
<message name="IDS_HISTORY_SYNC_CONSENT_SUBTITLE_D" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on browsing history sync. Sync is short for synchronization. The tone should be informative and inviting. [CHAR_LIMIT=100]">
To see better suggestions in your address bar, sync your tabs and history
</message>
<message name="IDS_HISTORY_SYNC_CONSENT_SUBTITLE_E" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on browsing history sync. Sync is short for synchronization. Devices include phones, tablets and computers. The tone should be informative and inviting. [CHAR_LIMIT=100]">
To get back to the sites youve visited on other devices, sync your tabs and history
</message> </message>
<message name="IDS_SIGNIN_SYNC_TITLE" desc="Title of Sync feature for the screen that asks users to sign-in and turn on Sync."> <message name="IDS_SIGNIN_SYNC_TITLE" desc="Title of Sync feature for the screen that asks users to sign-in and turn on Sync.">
Sync your passwords, history &amp; more on all devices Sync your passwords, history &amp; more on all devices
@ -3072,15 +3090,6 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_SYNC_CONSENT_DETAILS_DESCRIPTION" desc="This string appears in the footer on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. The first sentence informs the user where they can go to change their mind or to customize what Thorium data types they choose to sync (a user's Thorium data includes their bookmarks, passwords, history, settings, and more). The second sentence informs the user that if they choose to sync, then their history may be used to personalize Search and other services. Translate 'history' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=59c3162. [CHAR_LIMIT=200]."> <message name="IDS_SYNC_CONSENT_DETAILS_DESCRIPTION" desc="This string appears in the footer on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. The first sentence informs the user where they can go to change their mind or to customize what Thorium data types they choose to sync (a user's Thorium data includes their bookmarks, passwords, history, settings, and more). The second sentence informs the user that if they choose to sync, then their history may be used to personalize Search and other services. Translate 'history' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=59c3162. [CHAR_LIMIT=200].">
You can always choose what to sync in <ph name="BEGIN_LINK1">&lt;LINK1&gt;</ph>settings<ph name="END_LINK1">&lt;/LINK1&gt;</ph>. Google may personalize Search and other services based on your history. You can always choose what to sync in <ph name="BEGIN_LINK1">&lt;LINK1&gt;</ph>settings<ph name="END_LINK1">&lt;/LINK1&gt;</ph>. Google may personalize Search and other services based on your history.
</message> </message>
<message name="IDS_SYNC_CONSENT_BOOKMARKS_TEXT" desc="This string appears as an item in a list of sync data types on a full-page screen that asks users if they want to turn on sync. Translate 'bookmarks' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=59c31bb. [CHAR_LIMIT=25]">
Bookmarks
</message>
<message name="IDS_SYNC_CONSENT_AUTOFILL_TEXT" desc="This string appears as an item in a list of sync data types on a full-page screen that asks users if they want to turn on sync. Translate 'autofill' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=77d3626. [CHAR_LIMIT=25]">
Autofill
</message>
<message name="IDS_SYNC_CONSENT_HISTORY_TEXT" desc="This string appears as an item in a list of sync data types on a full-page screen that asks users if they want to turn on sync. Translate 'history' according to https://localization.google.com/glossary/termset?gid=27517723&amp;tsid=59c3162. Translate 'and more' so that it conveys that there are additional similar items that are not listed. [CHAR_LIMIT=30]">
History and more
</message>
<message name="IDS_SIGNIN_ACCEPT_BUTTON" desc="Text for the confirmation button in the sign-in screen. By clicking this button users signs in and turns on Sync. [CHAR_LIMIT=20]"> <message name="IDS_SIGNIN_ACCEPT_BUTTON" desc="Text for the confirmation button in the sign-in screen. By clicking this button users signs in and turns on Sync. [CHAR_LIMIT=20]">
Yes, I'm in Yes, I'm in
</message> </message>
@ -3395,7 +3404,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
Restore tab group of <ph name="TAB_COUNT">%1$s<ex>5</ex></ph> tabs as a new background tab group. Restore tab group of <ph name="TAB_COUNT">%1$s<ex>5</ex></ph> tabs as a new background tab group.
</message> </message>
<message name="IDS_WEB_FEED_AWARENESS" desc="Educating the user about the web feed."> <message name="IDS_WEB_FEED_AWARENESS" desc="Educating the user about the web feed.">
See content you follow here Explore content to follow
</message> </message>
<!-- Video tutorials --> <!-- Video tutorials -->
@ -3603,6 +3612,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_MENU_HISTORY" desc="Menu item for opening the history page. [CHAR_LIMIT=27]"> <message name="IDS_MENU_HISTORY" desc="Menu item for opening the history page. [CHAR_LIMIT=27]">
History History
</message> </message>
<message name="IDS_MENU_QUICK_DELETE" desc="Menu item for quick delete functionality that allows users to quickly delete their last 15 minutes browsing data. [CHAR_LIMIT=27]">
Delete last 15 minutes
</message>
<message name="IDS_MENU_DOWNLOADS" desc="Menu item for opening the downloads page. [CHAR_LIMIT=27]"> <message name="IDS_MENU_DOWNLOADS" desc="Menu item for opening the downloads page. [CHAR_LIMIT=27]">
Downloads Downloads
</message> </message>
@ -3612,12 +3624,6 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_MENU_EDIT_BOOKMARK" desc="Menu item for editing the content of the bookmark for the current page. [CHAR_LIMIT=27]"> <message name="IDS_MENU_EDIT_BOOKMARK" desc="Menu item for editing the content of the bookmark for the current page. [CHAR_LIMIT=27]">
Edit Bookmark Edit Bookmark
</message> </message>
<message name="IDS_MENU_ADD_TO_READING_LIST" desc="Menu item for adding the current page to the reading list. [CHAR_LIMIT=27]">
Add to reading list
</message>
<message name="IDS_MENU_DELETE_FROM_READING_LIST" desc="Menu item for removing the current page from the reading list. [CHAR_LIMIT=27]">
Delete from reading list
</message>
<message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR_LIMIT=27]"> <message name="IDS_MENU_FIND_IN_PAGE" desc="Menu item allowing users to find text within the current page. [CHAR_LIMIT=27]">
Find in page Find in page
</message> </message>
@ -4034,6 +4040,15 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_IDENTITY_DISC" desc="The content description for a toolbar button displaying user profile picture. Tapping on this button navigates to 'Sync and Google services' page in settings"> <message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_IDENTITY_DISC" desc="The content description for a toolbar button displaying user profile picture. Tapping on this button navigates to 'Sync and Google services' page in settings">
Manage account Manage account
</message> </message>
<message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_IDENTITY_DISC_WITH_NAME_AND_EMAIL" desc="The content description for a toolbar button displaying user profile picture. Tapping on this button navigates to 'Sync and Google services' page in settings">
Signed in as <ph name="USER_NAME">%1$s<ex>Peter Parker</ex></ph>. <ph name="USER_EMAIL">%2$s<ex>peter.parker@gmail.com</ex></ph>. Button. Opens settings.
</message>
<message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_IDENTITY_DISC_WITH_NAME" desc="The content description for a toolbar button displaying user profile picture, for users who don't have a readable email address. Tapping on this button navigates to 'Sync and Google services' page in settings">
Signed in as <ph name="USER_NAME">%s<ex>Bruce Wayne</ex></ph>. Button. Opens settings.
</message>
<message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_SIGNED_OUT_IDENTITY_DISC" desc="The content description for a toolbar button displaying the signed-out avatar. Tapping on this button navigates to 'Turn on Sync' page in settings">
Signed out. Button. Opens dialog to sign in and turn on sync.
</message>
<message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_HOME" desc="Content description for the home button."> <message name="IDS_ACCESSIBILITY_TOOLBAR_BTN_HOME" desc="Content description for the home button.">
Home Home
</message> </message>
@ -4170,7 +4185,7 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
Send to your devices Send to your devices
</message> </message>
<!-- Omnibox Autocomplete --> <!-- Omnibox Suggestions -->
<message name="IDS_OMNIBOX_CONFIRM_DELETE" desc="A message within a modal dialog that confirms the user wants to delete a suggestion from the list dropdown in the omnibox"> <message name="IDS_OMNIBOX_CONFIRM_DELETE" desc="A message within a modal dialog that confirms the user wants to delete a suggestion from the list dropdown in the omnibox">
Remove suggestion from history? Remove suggestion from history?
</message> </message>
@ -5241,10 +5256,6 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
Save to device Save to device
</message> </message>
<message name="IDS_SHARING_COPIED" desc="Text shown in the toast notification when Copy is selected in the sharing hub.">
Copied
</message>
<message name="IDS_TEXT_COPIED" desc="Text shown in the toast notification when Copy Text is selected in the sharing hub."> <message name="IDS_TEXT_COPIED" desc="Text shown in the toast notification when Copy Text is selected in the sharing hub.">
Text Copied Text Copied
</message> </message>
@ -5558,9 +5569,6 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
</message> </message>
<!-- WebID Account Selection strings --> <!-- WebID Account Selection strings -->
<message name="IDS_ACCOUNT_SELECTION_SHEET_TITLE_AUTO" desc="Header for sign in sheet. Sheet is shown to inform user of sign in. Sign in occurs automatically. (User can cancel)." translateable="false">
Signing in to <ph name="SITE_ETLD_PLUS_ONE">%1$s<ex>rp.example</ex></ph> with <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE">%2$s<ex>idp.com</ex></ph>
</message>
<message name="IDS_ACCOUNT_SELECTION_SHEET_TITLE_EXPLICIT" desc="Header for sign in sheet. Sheet is shown to prompt user for sign in consent."> <message name="IDS_ACCOUNT_SELECTION_SHEET_TITLE_EXPLICIT" desc="Header for sign in sheet. Sheet is shown to prompt user for sign in consent.">
Sign in to <ph name="SITE_ETLD_PLUS_ONE">%1$s<ex>rp.example</ex></ph> with <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE">%2$s<ex>idp.com</ex></ph> Sign in to <ph name="SITE_ETLD_PLUS_ONE">%1$s<ex>rp.example</ex></ph> with <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE">%2$s<ex>idp.com</ex></ph>
</message> </message>
@ -5592,7 +5600,10 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_ACCOUNT_SELECTION_SHEET_CLOSED" desc="Accessibility string read when the Account Selection bottom sheet showing a list of the user's accounts is closed." is_accessibility_with_no_ui="true"> <message name="IDS_ACCOUNT_SELECTION_SHEET_CLOSED" desc="Accessibility string read when the Account Selection bottom sheet showing a list of the user's accounts is closed." is_accessibility_with_no_ui="true">
Sign in bottom sheet is closed. Sign in bottom sheet is closed.
</message> </message>
<message name="IDS_VERIFY_SHEET_TITLE" desc="Header for verify sheet."> <message name="IDS_VERIFY_SHEET_TITLE_AUTO_REAUTHN" desc="Header for verify sheet for auto re-authentication.">
Signing you in…
</message>
<message name="IDS_VERIFY_SHEET_TITLE" desc="Header for verify sheet for explicit sign-in.">
Verifying… Verifying…
</message> </message>
@ -5626,6 +5637,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
<message name="IDS_SETTINGS_HTTPS_FIRST_MODE_SUMMARY" desc="Secondary, continued explanation of HTTPS-First Mode in settings."> <message name="IDS_SETTINGS_HTTPS_FIRST_MODE_SUMMARY" desc="Secondary, continued explanation of HTTPS-First Mode in settings.">
Upgrade navigations to HTTPS and warn you before loading sites that dont support it Upgrade navigations to HTTPS and warn you before loading sites that dont support it
</message> </message>
<message name="IDS_SETTINGS_HTTPS_FIRST_MODE_WITH_ADVANCED_PROTECTION_SUMMARY" desc="Secondary, continued explanation of HTTPS-Only Mode in Security settings when the user can't change the setting">
Upgrade navigations to HTTPS and warn you before loading sites that dont support it. You cant change this setting because you have Advanced Protection enabled.
</message>
<!-- Auto-darken web content --> <!-- Auto-darken web content -->
<message name="IDS_AUTO_DARK_MESSAGE_TITLE" desc="Message shown that informs the user auto darkening of website contents has been enabled."> <message name="IDS_AUTO_DARK_MESSAGE_TITLE" desc="Message shown that informs the user auto darkening of website contents has been enabled.">