BUILD.gn 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. # Copyright 2019 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/system_webview_apk_tmpl.gni")
  5. import("//build/config/android/abi.gni")
  6. import("//build/config/android/config.gni")
  7. import("//build/config/android/rules.gni")
  8. import("//build/config/python.gni")
  9. import("//device/vr/buildflags/buildflags.gni")
  10. import("//third_party/icu/config.gni")
  11. import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
  12. import("//weblayer/variables.gni")
  13. android_assets("weblayer_shell_assets") {
  14. testonly = true
  15. sources = [ "$root_out_dir/weblayer_shell.pak" ]
  16. disable_compression = true
  17. deps = [ "//weblayer/shell:shell_pak" ]
  18. }
  19. android_resources("weblayer_shell_resources") {
  20. sources = [
  21. "shell_apk/res/drawable-mdpi/avatar_sunglasses.png",
  22. "shell_apk/res/layout/alt_shell_browser_controls.xml",
  23. "shell_apk/res/layout/bottom_controls.xml",
  24. "shell_apk/res/layout/main.xml",
  25. "shell_apk/res/layout/shell_browser_controls.xml",
  26. "shell_apk/res/menu/app_menu.xml",
  27. "shell_apk/res/menu/controls_menu.xml",
  28. "shell_apk/res/values/strings.xml",
  29. "shell_apk/res/values/styles.xml",
  30. ]
  31. }
  32. android_library("weblayer_shell_java") {
  33. testonly = true
  34. resources_package = "org.chromium.weblayer.shell"
  35. # The google_play_services_base_java dependency is necessary for the
  36. # google_play_services_version definition in the manifest.
  37. deps = [
  38. ":weblayer_shell_resources",
  39. "$google_play_services_package:google_play_services_base_java",
  40. "//base:base_java",
  41. "//components/strictmode/android:java",
  42. "//third_party/androidx:androidx_annotation_annotation_java",
  43. "//third_party/androidx:androidx_appcompat_appcompat_java",
  44. "//third_party/androidx:androidx_fragment_fragment_java",
  45. "//weblayer/public/java",
  46. ]
  47. sources = [
  48. "shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java",
  49. "shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java",
  50. "shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java",
  51. ]
  52. }
  53. template("weblayer_shell_apk_helper") {
  54. _weblayer_shell_manifest =
  55. "$target_gen_dir/manifest_$target_name/AndroidManifest.xml"
  56. _manifest_target = target_name + "_manifest"
  57. jinja_template(_manifest_target) {
  58. input = "shell_apk/AndroidManifest.xml"
  59. output = _weblayer_shell_manifest
  60. if (defined(invoker.weblayer_package)) {
  61. variables = [ "weblayer_package=" + invoker.weblayer_package ]
  62. }
  63. }
  64. android_apk(target_name + "_apk") {
  65. testonly = true
  66. deps = [
  67. ":$_manifest_target",
  68. ":weblayer_shell_assets",
  69. ":weblayer_shell_java",
  70. ]
  71. apk_name = invoker.apk_name
  72. # Adding an "_incremental" suffix to the APK name confuses wrapper scripts
  73. # so for simplicity just disable incremental builds for WebLayer Shell.
  74. never_incremental = true
  75. android_manifest = _weblayer_shell_manifest
  76. min_sdk_version = default_min_sdk_version
  77. target_sdk_version = 28
  78. android_manifest_dep = ":$_manifest_target"
  79. command_line_flags_file = "weblayer-command-line"
  80. proguard_enabled = !is_java_debug
  81. # Add a native lib so the ABI is compatible with the implementation APK.
  82. native_lib_placeholders = [ "libdummy.so" ]
  83. }
  84. }
  85. weblayer_shell_apk_helper("weblayer_shell") {
  86. weblayer_package = "org.chromium.weblayer.support"
  87. apk_name = "WebLayerShell"
  88. }
  89. weblayer_shell_apk_helper("weblayer_shell_system_webview") {
  90. apk_name = "WebLayerShellSystemWebView"
  91. }
  92. generate_wrapper("run_browserfragment_shell") {
  93. testonly = true
  94. wrapper_script = "$root_out_dir/bin/run_browserfragment_shell"
  95. executable = "//weblayer/tools/run_weblayer_shell.py"
  96. executable_args = [
  97. "--shell-apk-path",
  98. "@WrappedPath(apks/BFShell.apk)",
  99. "--support-apk-path",
  100. "@WrappedPath(apks/BFSandbox.apk)",
  101. "--support-apk-path",
  102. "@WrappedPath(apks/WebLayerSupport.apk)",
  103. ]
  104. deps = [
  105. ":browser_sandbox_apk",
  106. ":browserfragment_shell_apk",
  107. ":weblayer_support_apk",
  108. ]
  109. }
  110. generate_wrapper("run_weblayer_shell") {
  111. testonly = true
  112. wrapper_script = "$root_out_dir/bin/run_weblayer_shell"
  113. executable = "//weblayer/tools/run_weblayer_shell.py"
  114. executable_args = [
  115. "--shell-apk-path",
  116. "@WrappedPath(apks/WebLayerShell.apk)",
  117. "--support-apk-path",
  118. "@WrappedPath(apks/WebLayerSupport.apk)",
  119. ]
  120. deps = [
  121. ":weblayer_shell_apk",
  122. ":weblayer_support_apk",
  123. ]
  124. }
  125. generate_wrapper("run_weblayer_shell_trichrome") {
  126. testonly = true
  127. wrapper_script = "$root_out_dir/bin/run_weblayer_shell_trichrome"
  128. executable = "//weblayer/tools/run_weblayer_shell.py"
  129. executable_args = [
  130. "--shell-apk-path",
  131. "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
  132. "--support-apk-path",
  133. "@WrappedPath(apks/TrichromeLibrary.apk)",
  134. "--switch-webview-to",
  135. "@WrappedPath(apks/TrichromeWebView.apk)",
  136. ]
  137. deps = [
  138. ":weblayer_shell_system_webview_apk",
  139. "//android_webview:trichrome_webview_apk",
  140. "//chrome/android:trichrome_library_apk",
  141. ]
  142. }
  143. if (enable_chrome_android_internal) {
  144. generate_wrapper("run_weblayer_shell_monochrome") {
  145. testonly = true
  146. wrapper_script = "$root_out_dir/bin/run_weblayer_shell_monochrome"
  147. executable = "//weblayer/tools/run_weblayer_shell.py"
  148. executable_args = [
  149. "--shell-apk-path",
  150. "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
  151. "--switch-webview-to",
  152. "@WrappedPath(apks/Monochrome.apk)",
  153. ]
  154. deps = [
  155. ":weblayer_shell_system_webview_apk",
  156. "//clank/java:monochrome_apk",
  157. ]
  158. }
  159. generate_wrapper("run_weblayer_shell_webview_google") {
  160. testonly = true
  161. wrapper_script = "$root_out_dir/bin/run_weblayer_shell_webview_google"
  162. executable = "//weblayer/tools/run_weblayer_shell.py"
  163. executable_args = [
  164. "--shell-apk-path",
  165. "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
  166. "--switch-webview-to",
  167. "@WrappedPath(apks/SystemWebViewGoogle.apk)",
  168. ]
  169. deps = [
  170. ":weblayer_shell_system_webview_apk",
  171. "//clank/android_webview:system_webview_google_apk",
  172. ]
  173. }
  174. generate_wrapper("run_weblayer_shell_trichrome_google") {
  175. testonly = true
  176. wrapper_script = "$root_out_dir/bin/run_weblayer_shell_trichrome_google"
  177. executable = "//weblayer/tools/run_weblayer_shell.py"
  178. executable_args = [
  179. "--shell-apk-path",
  180. "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
  181. "--support-apk-path",
  182. "@WrappedPath(apks/TrichromeLibraryGoogle.apk)",
  183. "--switch-webview-to",
  184. "@WrappedPath(apks/TrichromeWebViewGoogle.apk)",
  185. ]
  186. deps = [
  187. ":weblayer_shell_system_webview_apk",
  188. "//clank/android_webview:trichrome_webview_google_apk",
  189. "//clank/java:trichrome_library_google_apk",
  190. ]
  191. }
  192. }
  193. generate_wrapper("run_weblayer_shell_webview") {
  194. testonly = true
  195. wrapper_script = "$root_out_dir/bin/run_weblayer_shell_webview"
  196. executable = "//weblayer/tools/run_weblayer_shell.py"
  197. executable_args = [
  198. "--shell-apk-path",
  199. "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
  200. "--switch-webview-to",
  201. "@WrappedPath(apks/SystemWebView.apk)",
  202. ]
  203. deps = [
  204. ":weblayer_shell_system_webview_apk",
  205. "//android_webview:system_webview_apk",
  206. ]
  207. }
  208. weblayer_support_manifest =
  209. "$target_gen_dir/weblayer_support_manifest/AndroidManifest.xml"
  210. jinja_template("weblayer_support_manifest") {
  211. input = "support_apk/AndroidManifest.xml"
  212. output = weblayer_support_manifest
  213. }
  214. android_apk("weblayer_support_apk") {
  215. testonly = true
  216. # Test runner does not support having "additional apks" that are incremental.
  217. never_incremental = true
  218. deps = [
  219. ":weblayer_support_manifest",
  220. "//android_webview:locale_pak_assets",
  221. "//android_webview:pak_file_assets",
  222. "//android_webview:weblayer_webview_assets",
  223. "//weblayer:locale_pak_assets",
  224. "//weblayer/browser/java",
  225. "//weblayer/browser/java:test_java",
  226. ]
  227. # Transitive dependencies
  228. deps += [
  229. "//components/safe_browsing/android:safe_browsing_java",
  230. "//components/viz/service:service_java",
  231. "//media/base/android:media_java",
  232. "//media/capture/video/android:capture_java",
  233. "//mojo/public/java:system_java",
  234. "//net/android:net_java",
  235. ]
  236. # default upstream classes
  237. deps += [ "//weblayer/browser/java:upstream_java" ]
  238. # Add the Chromium linker for WebView compatibility support on L-M.
  239. deps += [ "//base/android/linker:chromium_android_linker" ]
  240. loadable_modules =
  241. [ "$root_out_dir/libchromium_android_linker$shlib_extension" ]
  242. if (enable_arcore) {
  243. _libarcore_dir = get_label_info(
  244. "//third_party/arcore-android-sdk-client:com_google_ar_core_java($default_toolchain)",
  245. "target_out_dir") + "/com_google_ar_core_java/jni"
  246. loadable_modules +=
  247. [ "$_libarcore_dir/$android_app_abi/libarcore_sdk_c.so" ]
  248. deps += [
  249. "//third_party/arcore-android-sdk-client:com_google_ar_core_J__unpack_aar",
  250. "//third_party/arcore-android-sdk-client:com_google_ar_core_java__ignored_manifest",
  251. ]
  252. }
  253. apk_name = "WebLayerSupport"
  254. android_manifest = weblayer_support_manifest
  255. min_sdk_version = default_min_sdk_version
  256. target_sdk_version = 28
  257. android_manifest_dep = ":weblayer_support_manifest"
  258. shared_resources = true
  259. version_name = chrome_version_name
  260. version_code = webview_stable_version_code
  261. product_config_java_packages = [ weblayer_product_config_java_package ]
  262. shared_libraries = [ "//weblayer:libweblayer_test" ]
  263. }
  264. script_test("weblayer_shell_wpt") {
  265. script = "//testing/scripts/run_wpt_tests.py"
  266. args = [
  267. "--product",
  268. "android_weblayer",
  269. "--browser-apk",
  270. "@WrappedPath(apks/WebLayerShell.apk)",
  271. "--additional-apk",
  272. "@WrappedPath(apks/WebLayerSupport.apk)",
  273. "--webdriver-binary",
  274. "@WrappedPath(clang_x64/chromedriver)",
  275. "-v",
  276. ]
  277. data_deps = [
  278. ":weblayer_shell_apk",
  279. ":weblayer_support_apk",
  280. "//chrome/test/chromedriver:chromedriver($host_toolchain)",
  281. "//third_party/blink/tools:wpt_tests_android_isolate",
  282. ]
  283. }
  284. # TODO(rayankans): Update `run_weblayer_shell` to also deploy the browserfragment shell with a
  285. # browser sandbox APK.
  286. browserfragment_shell_manifest =
  287. "$target_gen_dir/browserfragment_shell_manifest/AndroidManifest.xml"
  288. jinja_template("browserfragment_shell_manifest") {
  289. input = "browserfragment_shell_apk/AndroidManifest.xml"
  290. output = browserfragment_shell_manifest
  291. }
  292. android_resources("browserfragment_shell_resources") {
  293. sources = [
  294. "browserfragment_shell_apk/res/layout/main.xml",
  295. "browserfragment_shell_apk/res/values/styles.xml",
  296. ]
  297. }
  298. android_library("browserfragment_shell_java") {
  299. testonly = true
  300. resources_package = "org.chromium.browserfragment.shell"
  301. sources = [ "browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java" ]
  302. deps = [
  303. ":browserfragment_shell_resources",
  304. "//base:base_java",
  305. "//third_party/android_deps:com_google_guava_guava_android_java",
  306. "//third_party/androidx:androidx_appcompat_appcompat_java",
  307. "//third_party/androidx:androidx_fragment_fragment_java",
  308. "//weblayer/public/java:browserfragment_java",
  309. ]
  310. }
  311. android_apk("browserfragment_shell_apk") {
  312. testonly = true
  313. # Test runner does not support having "additional apks" that are incremental.
  314. never_incremental = true
  315. deps = [
  316. ":browserfragment_shell_java",
  317. ":browserfragment_shell_manifest",
  318. ]
  319. apk_name = "BFShell"
  320. android_manifest = browserfragment_shell_manifest
  321. min_sdk_version = default_min_sdk_version
  322. target_sdk_version = 28
  323. android_manifest_dep = ":browserfragment_shell_manifest"
  324. }
  325. browser_sandbox_manifest =
  326. "$target_gen_dir/browser_sandbox_manifest/AndroidManifest.xml"
  327. jinja_template("browser_sandbox_manifest") {
  328. input = "browser_sandbox_apk/AndroidManifest.xml"
  329. output = browser_sandbox_manifest
  330. }
  331. android_apk("browser_sandbox_apk") {
  332. testonly = true
  333. # Test runner does not support having "additional apks" that are incremental.
  334. never_incremental = true
  335. deps = [
  336. ":browser_sandbox_manifest",
  337. "//weblayer/public/java:browserfragment_sandbox_java",
  338. ]
  339. apk_name = "BFSandbox"
  340. android_manifest = browser_sandbox_manifest
  341. min_sdk_version = default_min_sdk_version
  342. target_sdk_version = 28
  343. android_manifest_dep = ":browser_sandbox_manifest"
  344. shared_resources = true
  345. }