system_webview_apk_tmpl.gni 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. # Copyright 2015 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//android_webview/variables.gni")
  5. import("//base/android/resource_exclusions.gni")
  6. import("//build/config/android/abi.gni")
  7. import("//build/config/android/config.gni")
  8. import("//build/config/android/rules.gni")
  9. import("//build/config/locales.gni")
  10. import("//chrome/android/trichrome.gni")
  11. import("//chrome/version.gni")
  12. import("//device/vr/buildflags/buildflags.gni")
  13. import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
  14. import("//weblayer/variables.gni")
  15. import("//weblayer/weblayer_resource_exclusions.gni")
  16. declare_args() {
  17. # Android package name to use when compiling the system_webview_apk and
  18. # trichrome_webview_apk targets. This should be used if the Android build
  19. # on which you are going to install WebView is configured to load a
  20. # different package name than the default used in AOSP.
  21. system_webview_package_name = "com.android.webview"
  22. # Whether to enable standalone and trichrome WebView bundle build targets.
  23. enable_webview_bundles = true
  24. }
  25. template("system_webview_apk_or_module_tmpl") {
  26. if (!defined(invoker.target_type)) {
  27. _is_bundle_module = false
  28. _target_type = "android_apk"
  29. } else {
  30. _is_bundle_module = invoker.target_type == "android_app_bundle_module"
  31. _target_type = invoker.target_type
  32. }
  33. _exclude_weblayer_java =
  34. defined(invoker.exclude_weblayer_java) && invoker.exclude_weblayer_java
  35. target(_target_type, target_name) {
  36. forward_variables_from(invoker,
  37. "*",
  38. [
  39. "is_64_bit_browser",
  40. "include_32_bit_webview",
  41. "include_64_bit_webview",
  42. ])
  43. _omit_dex = defined(omit_dex) && omit_dex
  44. deps += [
  45. "//android_webview:locale_pak_assets",
  46. "//android_webview:pak_file_assets",
  47. ]
  48. if (_exclude_weblayer_java) {
  49. deps += [ "//android_webview:android_webview_no_weblayer_java" ]
  50. } else {
  51. if (_is_bundle_module && weblayer_in_split && webview_includes_weblayer) {
  52. deps += [
  53. # TODO(crbug.com/1105096): WebLayer resources are added to the base
  54. # module for now because of bugs with shared resources in splits.
  55. ":${target_name}__all_weblayer_resources",
  56. "//android_webview:android_webview_no_weblayer_java",
  57. "//weblayer/browser/java:base_module_java",
  58. ]
  59. if (defined(invoker.expected_android_manifest)) {
  60. _bundle_target_gen_dir =
  61. get_label_info(invoker.bundle_target, "target_gen_dir")
  62. _bundle_name = get_label_info(invoker.bundle_target, "name")
  63. extra_verification_manifest = "${_bundle_target_gen_dir}/${_bundle_name}__weblayer_bundle_module/AndroidManifest.merged.xml"
  64. extra_verification_manifest_dep = "${invoker.bundle_target}__weblayer_bundle_module__merge_manifests"
  65. }
  66. } else {
  67. deps += [ "//android_webview:android_webview_java" ]
  68. }
  69. # Resources from this target will be kept in the base bundle module
  70. # instead of in language splits.
  71. if (!defined(invoker.shared_resources_allowlist_target)) {
  72. shared_resources_allowlist_target =
  73. "//android_webview:system_webview_no_weblayer_apk"
  74. }
  75. }
  76. if (!_omit_dex) {
  77. product_config_java_packages = [ webview_product_config_java_package ]
  78. }
  79. if (webview_includes_weblayer) {
  80. if (_is_bundle_module) {
  81. deps += [ "//weblayer:bundle_locale_pak_assets" ]
  82. } else {
  83. deps += [ "//weblayer:locale_pak_assets" ]
  84. }
  85. if (!_omit_dex) {
  86. product_config_java_packages += [ weblayer_product_config_java_package ]
  87. }
  88. }
  89. if (!defined(alternative_android_sdk_dep)) {
  90. alternative_android_sdk_dep = webview_framework_dep
  91. }
  92. if (webview_devui_show_icon) {
  93. deps += [ "//android_webview/nonembedded:devui_launcher_icon_resources" ]
  94. }
  95. _use_trichrome_library =
  96. defined(use_trichrome_library) && use_trichrome_library
  97. assert(
  98. _use_trichrome_library == defined(invoker.static_library_provider),
  99. "If trichrome library is used, static_library_provider must be set " +
  100. "so that a dep can be added on the library APK.")
  101. _include_32_bit_webview = !defined(invoker.include_32_bit_webview) ||
  102. invoker.include_32_bit_webview
  103. if (android_64bit_target_cpu) {
  104. _include_64_bit_webview = !defined(invoker.include_64_bit_webview) ||
  105. invoker.include_64_bit_webview
  106. }
  107. # Pure 32-bit implies a 32-bit only Webview built on a 64-bit configuration.
  108. _pure_32_bit = android_64bit_target_cpu && !_include_64_bit_webview
  109. _pure_64_bit = android_64bit_target_cpu && !_include_32_bit_webview
  110. not_needed([
  111. "_include_32_bit_webview",
  112. "_pure_32_bit",
  113. "_pure_64_bit",
  114. ])
  115. # Flag whether additional deps and libs should be included for each ABI.
  116. _include_primary_support = false
  117. _include_secondary_support = false
  118. if (!_use_trichrome_library) {
  119. shared_resources = true
  120. if ((!android_64bit_target_cpu && _include_32_bit_webview) ||
  121. (android_64bit_target_cpu && !_pure_32_bit)) {
  122. shared_libraries = [ "//android_webview:libwebviewchromium" ]
  123. _include_primary_support = true
  124. }
  125. if (android_64bit_target_cpu && !_pure_64_bit) {
  126. secondary_abi_shared_libraries = [ "//android_webview:libwebviewchromium($android_secondary_abi_toolchain)" ]
  127. _include_secondary_support = true
  128. }
  129. deps += [ "//third_party/icu:icu_assets" ]
  130. } else {
  131. uncompress_shared_libraries = true
  132. app_as_shared_lib = true
  133. # Include placeholder libraries to ensure we are treated as the desired
  134. # architecture.
  135. if (android_64bit_target_cpu) {
  136. if (invoker.is_64_bit_browser) {
  137. native_lib_placeholders = [ "libdummy.so" ]
  138. if (_include_32_bit_webview) {
  139. secondary_abi_shared_libraries = [ "//android_webview:monochrome_64($android_secondary_abi_toolchain)" ]
  140. _include_secondary_support = true
  141. }
  142. } else {
  143. if (_include_64_bit_webview) {
  144. shared_libraries = [ "//android_webview:monochrome" ]
  145. _include_primary_support = true
  146. }
  147. secondary_native_lib_placeholders = [ "libdummy.so" ]
  148. static_library_provider_use_secondary_abi = true
  149. }
  150. # http://crbug.com/1042107.
  151. if (is_component_build) {
  152. if (invoker.is_64_bit_browser) {
  153. main_component_library = "libmonochrome_64.cr.so"
  154. } else {
  155. main_component_library = "libmonochrome.cr.so"
  156. }
  157. }
  158. } else {
  159. native_lib_placeholders = [ "libdummy.so" ]
  160. }
  161. }
  162. _libarcore_dir = get_label_info(
  163. "//third_party/arcore-android-sdk-client:com_google_ar_core_java($default_toolchain)",
  164. "target_out_dir") + "/com_google_ar_core_java/jni"
  165. not_needed([ "_libarcore_dir" ])
  166. _include_arcore =
  167. webview_includes_weblayer && enable_arcore && !_exclude_weblayer_java &&
  168. (_include_secondary_support || _include_primary_support)
  169. if (_include_primary_support) {
  170. deps += [
  171. "//android_webview:webview_primary_abi_assets",
  172. "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
  173. ]
  174. loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
  175. if (webview_includes_weblayer) {
  176. deps += [ "//base/android/linker:chromium_android_linker" ]
  177. loadable_modules +=
  178. [ "$root_out_dir/libchromium_android_linker$shlib_extension" ]
  179. }
  180. if (_include_arcore) {
  181. loadable_modules +=
  182. [ "$_libarcore_dir/$android_app_abi/libarcore_sdk_c.so" ]
  183. }
  184. }
  185. if (_include_secondary_support) {
  186. _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
  187. deps += [
  188. "//android_webview:webview_secondary_abi_assets",
  189. _trampoline,
  190. ]
  191. _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
  192. secondary_abi_loadable_modules =
  193. [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
  194. if (webview_includes_weblayer) {
  195. deps += [ "//base/android/linker:chromium_android_linker($android_secondary_abi_toolchain)" ]
  196. secondary_abi_loadable_modules +=
  197. [ "$_secondary_out_dir/libchromium_android_linker$shlib_extension" ]
  198. }
  199. if (_include_arcore) {
  200. secondary_abi_loadable_modules +=
  201. [ "$_libarcore_dir/$android_app_secondary_abi/libarcore_sdk_c.so" ]
  202. }
  203. }
  204. if (_include_arcore) {
  205. deps += [ "//third_party/arcore-android-sdk-client:com_google_ar_core_J__unpack_aar" ]
  206. }
  207. aapt_locale_allowlist = platform_pak_locales
  208. resource_exclusion_regex = common_resource_exclusion_regex
  209. resource_exclusion_exceptions = common_resource_exclusion_exceptions
  210. if (webview_includes_weblayer) {
  211. resource_values_filter_rules = weblayer_resource_values_filter_rules
  212. resource_exclusion_exceptions += weblayer_resource_exclusion_exceptions
  213. # Note: WebLayer's resource exclusion regex deliberately does not start
  214. # with "|".
  215. resource_exclusion_regex += "|" + weblayer_resource_exclusion_regex
  216. }
  217. # We only optimize resources for bundles since APKs are not shipped.
  218. # Resources only live in the base module atm as such we only need to set
  219. # these on the base module
  220. if (_is_bundle_module) {
  221. # Removes metadata needed for Resources.getIdentifier("resource_name").
  222. strip_resource_names = !is_java_debug
  223. # Shortens resource file names in apk eg: res/drawable/button.xml -> res/a.xml
  224. short_resource_paths = !is_java_debug
  225. # Removes unused resources from the apk. Only enabled on official builds
  226. # since it adds a slow step and serializes the build graph causing fewer
  227. # expensive tasks (eg: proguarding, resource optimization) to be run in
  228. # parallel by adding dependencies between them (adds around 10-20
  229. # seconds on my machine).
  230. strip_unused_resources = is_official_build
  231. }
  232. if (!_is_bundle_module) {
  233. # Used as an additional apk in test scripts.
  234. never_incremental = true
  235. command_line_flags_file = "webview-command-line"
  236. }
  237. if (!is_java_debug && !_omit_dex) {
  238. proguard_enabled = true
  239. if (!defined(proguard_configs)) {
  240. proguard_configs = []
  241. }
  242. proguard_configs += [
  243. "//android_webview/nonembedded/java/proguard.flags",
  244. "//base/android/proguard/chromium_apk.flags",
  245. "//base/android/proguard/chromium_code.flags",
  246. ]
  247. png_to_webp = true
  248. }
  249. if (!defined(version_code)) {
  250. if (_use_trichrome_library) {
  251. if (android_64bit_target_cpu) {
  252. if (invoker.is_64_bit_browser) {
  253. if (_include_32_bit_webview) {
  254. version_code = trichrome_64_32_version_code
  255. } else {
  256. version_code = trichrome_64_version_code
  257. }
  258. } else {
  259. if (_include_64_bit_webview) {
  260. version_code = trichrome_32_64_version_code
  261. } else {
  262. version_code = trichrome_32_version_code
  263. }
  264. }
  265. } else {
  266. version_code = trichrome_version_code
  267. }
  268. } else {
  269. if (android_channel == "dev") {
  270. if (_pure_32_bit) {
  271. version_code = webview_32_dev_version_code
  272. } else if (_pure_64_bit) {
  273. version_code = webview_64_dev_version_code
  274. } else {
  275. version_code = webview_dev_version_code
  276. }
  277. } else if (android_channel == "beta") {
  278. if (_pure_32_bit) {
  279. version_code = webview_32_beta_version_code
  280. } else if (_pure_64_bit) {
  281. version_code = webview_64_beta_version_code
  282. } else {
  283. version_code = webview_beta_version_code
  284. }
  285. } else {
  286. if (_pure_32_bit) {
  287. version_code = webview_32_stable_version_code
  288. } else if (_pure_64_bit) {
  289. version_code = webview_64_stable_version_code
  290. } else {
  291. version_code = webview_stable_version_code
  292. }
  293. }
  294. }
  295. }
  296. if (!defined(version_name)) {
  297. version_name = chrome_version_name
  298. }
  299. }
  300. }