xref: /aosp_15_r20/external/cronet/build/config/android/system_image.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2022 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/android/rules.gni")
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker# Creates a stub .apk suitable for use with compressed system APKs.
8*6777b538SAndroid Build Coastguard Worker#
9*6777b538SAndroid Build Coastguard Worker# Variables:
10*6777b538SAndroid Build Coastguard Worker#   package_name: Package name to use for the stub.
11*6777b538SAndroid Build Coastguard Worker#   version_code: Version code for the stub.
12*6777b538SAndroid Build Coastguard Worker#   version_name: Version name for the stub.
13*6777b538SAndroid Build Coastguard Worker#   package_info_from_target: Use the package name and version_code from this
14*6777b538SAndroid Build Coastguard Worker#       apk/bundle target.
15*6777b538SAndroid Build Coastguard Worker#   static_library_name: For static library apks, name for the <static-library>.
16*6777b538SAndroid Build Coastguard Worker#   static_library_version: For static library apks, version for the
17*6777b538SAndroid Build Coastguard Worker#       <static-library> tag (for TrichromeLibrary, we set this to be the same
18*6777b538SAndroid Build Coastguard Worker#       as the package's version_code)
19*6777b538SAndroid Build Coastguard Worker#   stub_output: Path to output stub apk (default: do not create a stub).
20*6777b538SAndroid Build Coastguard Worker#
21*6777b538SAndroid Build Coastguard Worker# package_name and package_info_from_target are mutually exclusive.
22*6777b538SAndroid Build Coastguard Workertemplate("system_image_stub_apk") {
23*6777b538SAndroid Build Coastguard Worker  # Android requires stubs end with -Stub.apk.
24*6777b538SAndroid Build Coastguard Worker  assert(filter_exclude([ invoker.stub_output ], [ "*-Stub.apk" ]) == [],
25*6777b538SAndroid Build Coastguard Worker         "stub_output \"${invoker.stub_output}\" must end with \"-Stub.apk\"")
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Worker  _resource_apk_path = "${target_out_dir}/$target_name.ap_"
28*6777b538SAndroid Build Coastguard Worker  _resource_apk_target_name = "${target_name}__compile_resources"
29*6777b538SAndroid Build Coastguard Worker
30*6777b538SAndroid Build Coastguard Worker  _manifest_target_name = "${target_name}__manifest"
31*6777b538SAndroid Build Coastguard Worker  _manifest_path = "$target_gen_dir/$_manifest_target_name.xml"
32*6777b538SAndroid Build Coastguard Worker  action("$_manifest_target_name") {
33*6777b538SAndroid Build Coastguard Worker    outputs = [ _manifest_path ]
34*6777b538SAndroid Build Coastguard Worker    script = "//build/android/gyp/create_stub_manifest.py"
35*6777b538SAndroid Build Coastguard Worker    args = [
36*6777b538SAndroid Build Coastguard Worker      "--output",
37*6777b538SAndroid Build Coastguard Worker      rebase_path(_manifest_path, root_build_dir),
38*6777b538SAndroid Build Coastguard Worker    ]
39*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.static_library_name)) {
40*6777b538SAndroid Build Coastguard Worker      args += [
41*6777b538SAndroid Build Coastguard Worker        "--static-library-name",
42*6777b538SAndroid Build Coastguard Worker        invoker.static_library_name,
43*6777b538SAndroid Build Coastguard Worker      ]
44*6777b538SAndroid Build Coastguard Worker
45*6777b538SAndroid Build Coastguard Worker      # TODO(crbug.com/1408164): Make static_library_version mandatory.
46*6777b538SAndroid Build Coastguard Worker      if (defined(invoker.static_library_version)) {
47*6777b538SAndroid Build Coastguard Worker        args += [
48*6777b538SAndroid Build Coastguard Worker          "--static-library-version",
49*6777b538SAndroid Build Coastguard Worker          invoker.static_library_version,
50*6777b538SAndroid Build Coastguard Worker        ]
51*6777b538SAndroid Build Coastguard Worker      } else {
52*6777b538SAndroid Build Coastguard Worker        args += [ "--static-library-version=1" ]
53*6777b538SAndroid Build Coastguard Worker      }
54*6777b538SAndroid Build Coastguard Worker    }
55*6777b538SAndroid Build Coastguard Worker  }
56*6777b538SAndroid Build Coastguard Worker
57*6777b538SAndroid Build Coastguard Worker  _target_sdk_version = default_android_sdk_version
58*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.override_target_sdk)) {
59*6777b538SAndroid Build Coastguard Worker    _target_sdk_version = invoker.override_target_sdk
60*6777b538SAndroid Build Coastguard Worker  }
61*6777b538SAndroid Build Coastguard Worker
62*6777b538SAndroid Build Coastguard Worker  action_with_pydeps(_resource_apk_target_name) {
63*6777b538SAndroid Build Coastguard Worker    script = "//build/android/gyp/compile_resources.py"
64*6777b538SAndroid Build Coastguard Worker    inputs = [
65*6777b538SAndroid Build Coastguard Worker      _manifest_path,
66*6777b538SAndroid Build Coastguard Worker      android_sdk_jar,
67*6777b538SAndroid Build Coastguard Worker    ]
68*6777b538SAndroid Build Coastguard Worker    outputs = [ _resource_apk_path ]
69*6777b538SAndroid Build Coastguard Worker    args = [
70*6777b538SAndroid Build Coastguard Worker      "--aapt2-path",
71*6777b538SAndroid Build Coastguard Worker      rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir),
72*6777b538SAndroid Build Coastguard Worker      "--min-sdk-version=$default_min_sdk_version",
73*6777b538SAndroid Build Coastguard Worker      "--target-sdk-version=$_target_sdk_version",
74*6777b538SAndroid Build Coastguard Worker      "--android-manifest",
75*6777b538SAndroid Build Coastguard Worker      rebase_path(_manifest_path, root_build_dir),
76*6777b538SAndroid Build Coastguard Worker      "--arsc-path",
77*6777b538SAndroid Build Coastguard Worker      rebase_path(_resource_apk_path, root_build_dir),
78*6777b538SAndroid Build Coastguard Worker    ]
79*6777b538SAndroid Build Coastguard Worker    deps = [ ":$_manifest_target_name" ]
80*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.package_name)) {
81*6777b538SAndroid Build Coastguard Worker      _package_name = invoker.package_name
82*6777b538SAndroid Build Coastguard Worker      _version_code = invoker.version_code
83*6777b538SAndroid Build Coastguard Worker      _version_name = invoker.version_name
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker      # TODO(crbug.com/1408164): Make static_library_version mandatory.
86*6777b538SAndroid Build Coastguard Worker      if (defined(invoker.static_library_version)) {
87*6777b538SAndroid Build Coastguard Worker        assert(invoker.static_library_version == _version_code,
88*6777b538SAndroid Build Coastguard Worker               "$invoker.static_library_version must equal $_version_code.")
89*6777b538SAndroid Build Coastguard Worker      }
90*6777b538SAndroid Build Coastguard Worker    } else {
91*6777b538SAndroid Build Coastguard Worker      _target = invoker.package_info_from_target
92*6777b538SAndroid Build Coastguard Worker      deps += [ "${_target}$build_config_target_suffix" ]
93*6777b538SAndroid Build Coastguard Worker      _build_config = get_label_info(_target, "target_gen_dir") + "/" +
94*6777b538SAndroid Build Coastguard Worker                      get_label_info(_target, "name") + ".build_config.json"
95*6777b538SAndroid Build Coastguard Worker      inputs += [ _build_config ]
96*6777b538SAndroid Build Coastguard Worker      _rebased_build_config = rebase_path(_build_config, root_build_dir)
97*6777b538SAndroid Build Coastguard Worker      _package_name = "@FileArg($_rebased_build_config:deps_info:package_name)"
98*6777b538SAndroid Build Coastguard Worker      _version_code = "@FileArg($_rebased_build_config:deps_info:version_code)"
99*6777b538SAndroid Build Coastguard Worker      _version_name = "@FileArg($_rebased_build_config:deps_info:version_name)"
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard Worker      # TODO(crbug.com/1408164): Make static_library_version mandatory.
102*6777b538SAndroid Build Coastguard Worker      # Pass this through to ensure that the version code in the build config is
103*6777b538SAndroid Build Coastguard Worker      # the same as the static library version.
104*6777b538SAndroid Build Coastguard Worker      if (defined(invoker.static_library_version)) {
105*6777b538SAndroid Build Coastguard Worker        args += [
106*6777b538SAndroid Build Coastguard Worker          "--static-library-version",
107*6777b538SAndroid Build Coastguard Worker          invoker.static_library_version,
108*6777b538SAndroid Build Coastguard Worker        ]
109*6777b538SAndroid Build Coastguard Worker      }
110*6777b538SAndroid Build Coastguard Worker    }
111*6777b538SAndroid Build Coastguard Worker
112*6777b538SAndroid Build Coastguard Worker    args += [
113*6777b538SAndroid Build Coastguard Worker      "--rename-manifest-package=$_package_name",
114*6777b538SAndroid Build Coastguard Worker      "--arsc-package-name=$_package_name",
115*6777b538SAndroid Build Coastguard Worker      "--version-code=$_version_code",
116*6777b538SAndroid Build Coastguard Worker      "--version-name=$_version_name",
117*6777b538SAndroid Build Coastguard Worker      "--include-resources",
118*6777b538SAndroid Build Coastguard Worker      rebase_path(android_sdk_jar, root_build_dir),
119*6777b538SAndroid Build Coastguard Worker    ]
120*6777b538SAndroid Build Coastguard Worker  }
121*6777b538SAndroid Build Coastguard Worker
122*6777b538SAndroid Build Coastguard Worker  package_apk(target_name) {
123*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
124*6777b538SAndroid Build Coastguard Worker                           [
125*6777b538SAndroid Build Coastguard Worker                             "keystore_name",
126*6777b538SAndroid Build Coastguard Worker                             "keystore_path",
127*6777b538SAndroid Build Coastguard Worker                             "keystore_password",
128*6777b538SAndroid Build Coastguard Worker                           ])
129*6777b538SAndroid Build Coastguard Worker    min_sdk_version = default_min_sdk_version
130*6777b538SAndroid Build Coastguard Worker    deps = [ ":$_resource_apk_target_name" ]
131*6777b538SAndroid Build Coastguard Worker
132*6777b538SAndroid Build Coastguard Worker    packaged_resources_path = _resource_apk_path
133*6777b538SAndroid Build Coastguard Worker    output_apk_path = invoker.stub_output
134*6777b538SAndroid Build Coastguard Worker  }
135*6777b538SAndroid Build Coastguard Worker}
136*6777b538SAndroid Build Coastguard Worker
137*6777b538SAndroid Build Coastguard Worker# Generates artifacts for system APKs.
138*6777b538SAndroid Build Coastguard Worker#
139*6777b538SAndroid Build Coastguard Worker# Variables:
140*6777b538SAndroid Build Coastguard Worker#   apk_or_bundle_target: Target that creates input bundle or apk.
141*6777b538SAndroid Build Coastguard Worker#   input_apk_or_bundle: Path to input .apk or .aab.
142*6777b538SAndroid Build Coastguard Worker#   static_library_name: For static library apks, name for the <static-library>.
143*6777b538SAndroid Build Coastguard Worker#   static_library_version: For static library apks, version for the
144*6777b538SAndroid Build Coastguard Worker#       <static-library> tag (for TrichromeLibrary, we set this to be the same
145*6777b538SAndroid Build Coastguard Worker#       as the package's version_code)
146*6777b538SAndroid Build Coastguard Worker#   output: Path to the output system .apk or .zip.
147*6777b538SAndroid Build Coastguard Worker#   fuse_apk: Fuse all apk splits into a single .apk (default: false).
148*6777b538SAndroid Build Coastguard Worker#   stub_output: Path to output stub apk (default: do not create a stub).
149*6777b538SAndroid Build Coastguard Worker#
150*6777b538SAndroid Build Coastguard Workertemplate("system_image_apks") {
151*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.stub_output)) {
152*6777b538SAndroid Build Coastguard Worker    _stub_apk_target_name = "${target_name}__stub"
153*6777b538SAndroid Build Coastguard Worker    system_image_stub_apk(_stub_apk_target_name) {
154*6777b538SAndroid Build Coastguard Worker      forward_variables_from(invoker,
155*6777b538SAndroid Build Coastguard Worker                             [
156*6777b538SAndroid Build Coastguard Worker                               "static_library_name",
157*6777b538SAndroid Build Coastguard Worker                               "static_library_version",
158*6777b538SAndroid Build Coastguard Worker                               "override_target_sdk"
159*6777b538SAndroid Build Coastguard Worker                             ])
160*6777b538SAndroid Build Coastguard Worker      package_info_from_target = invoker.apk_or_bundle_target
161*6777b538SAndroid Build Coastguard Worker      stub_output = invoker.stub_output
162*6777b538SAndroid Build Coastguard Worker    }
163*6777b538SAndroid Build Coastguard Worker  }
164*6777b538SAndroid Build Coastguard Worker
165*6777b538SAndroid Build Coastguard Worker  action_with_pydeps(target_name) {
166*6777b538SAndroid Build Coastguard Worker    script = "//build/android/gyp/system_image_apks.py"
167*6777b538SAndroid Build Coastguard Worker    deps = [ invoker.apk_or_bundle_target ]
168*6777b538SAndroid Build Coastguard Worker    inputs = [ invoker.input_apk_or_bundle ]
169*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.stub_output)) {
170*6777b538SAndroid Build Coastguard Worker      public_deps = [ ":$_stub_apk_target_name" ]
171*6777b538SAndroid Build Coastguard Worker    }
172*6777b538SAndroid Build Coastguard Worker    outputs = [ invoker.output ]
173*6777b538SAndroid Build Coastguard Worker    args = [
174*6777b538SAndroid Build Coastguard Worker      "--input",
175*6777b538SAndroid Build Coastguard Worker      rebase_path(invoker.input_apk_or_bundle, root_out_dir),
176*6777b538SAndroid Build Coastguard Worker      "--output",
177*6777b538SAndroid Build Coastguard Worker      rebase_path(invoker.output, root_out_dir),
178*6777b538SAndroid Build Coastguard Worker    ]
179*6777b538SAndroid Build Coastguard Worker
180*6777b538SAndroid Build Coastguard Worker    _is_bundle =
181*6777b538SAndroid Build Coastguard Worker        filter_exclude([ invoker.input_apk_or_bundle ], [ "*.aab" ]) == []
182*6777b538SAndroid Build Coastguard Worker
183*6777b538SAndroid Build Coastguard Worker    if (_is_bundle) {
184*6777b538SAndroid Build Coastguard Worker      _wrapper_path = "$root_out_dir/bin/" +
185*6777b538SAndroid Build Coastguard Worker                      get_label_info(invoker.apk_or_bundle_target, "name")
186*6777b538SAndroid Build Coastguard Worker      args += [
187*6777b538SAndroid Build Coastguard Worker        "--bundle-wrapper",
188*6777b538SAndroid Build Coastguard Worker        rebase_path(_wrapper_path, root_out_dir),
189*6777b538SAndroid Build Coastguard Worker      ]
190*6777b538SAndroid Build Coastguard Worker      inputs += [ _wrapper_path ]
191*6777b538SAndroid Build Coastguard Worker      deps += [ "//build/android:apk_operations_py" ]
192*6777b538SAndroid Build Coastguard Worker      if (defined(invoker.fuse_apk) && invoker.fuse_apk) {
193*6777b538SAndroid Build Coastguard Worker        args += [ "--fuse-apk" ]
194*6777b538SAndroid Build Coastguard Worker      }
195*6777b538SAndroid Build Coastguard Worker    }
196*6777b538SAndroid Build Coastguard Worker  }
197*6777b538SAndroid Build Coastguard Worker}
198