| # Copyright 2022 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/config/android/rules.gni") |
| |
| # Creates a stub .apk suitable for use with compressed system APKs. |
| # |
| # Variables: |
| # package_name: Package name to use for the stub. |
| # version_code: Version code for the stub. |
| # version_name: Version name for the stub. |
| # package_info_from_target: Use the package name and version_code from this |
| # apk/bundle target. |
| # static_library_name: For static library apks, name for the <static-library>. |
| # static_library_version: For static library apks, version for the |
| # <static-library> tag (for TrichromeLibrary, we set this to be the same |
| # as the package's version_code) |
| # stub_output: Path to output stub apk (default: do not create a stub). |
| # |
| # package_name and package_info_from_target are mutually exclusive. |
| template("system_image_stub_apk") { |
| # Android requires stubs end with -Stub.apk. |
| assert(filter_exclude([ invoker.stub_output ], [ "*-Stub.apk" ]) == [], |
| "stub_output \"${invoker.stub_output}\" must end with \"-Stub.apk\"") |
| |
| _resource_apk_path = "${target_out_dir}/$target_name.ap_" |
| _resource_apk_target_name = "${target_name}__compile_resources" |
| |
| _manifest_target_name = "${target_name}__manifest" |
| _manifest_path = "$target_gen_dir/$_manifest_target_name.xml" |
| action("$_manifest_target_name") { |
| outputs = [ _manifest_path ] |
| script = "//build/android/gyp/create_stub_manifest.py" |
| args = [ |
| "--output", |
| rebase_path(_manifest_path, root_build_dir), |
| ] |
| if (defined(invoker.static_library_name)) { |
| args += [ |
| "--static-library-name", |
| invoker.static_library_name, |
| ] |
| |
| # TODO(crbug.com/1408164): Make static_library_version mandatory. |
| if (defined(invoker.static_library_version)) { |
| args += [ |
| "--static-library-version", |
| invoker.static_library_version, |
| ] |
| } else { |
| args += [ "--static-library-version=1" ] |
| } |
| } |
| } |
| |
| action_with_pydeps(_resource_apk_target_name) { |
| script = "//build/android/gyp/compile_resources.py" |
| inputs = [ |
| _manifest_path, |
| android_sdk_jar, |
| ] |
| outputs = [ _resource_apk_path ] |
| args = [ |
| "--aapt2-path", |
| rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), |
| "--min-sdk-version=$default_min_sdk_version", |
| "--target-sdk-version=$default_android_sdk_version", |
| "--android-manifest", |
| rebase_path(_manifest_path, root_build_dir), |
| "--arsc-path", |
| rebase_path(_resource_apk_path, root_build_dir), |
| ] |
| deps = [ ":$_manifest_target_name" ] |
| if (defined(invoker.package_name)) { |
| _package_name = invoker.package_name |
| _version_code = invoker.version_code |
| _version_name = invoker.version_name |
| } else { |
| _target = invoker.package_info_from_target |
| deps += [ "${_target}$build_config_target_suffix" ] |
| _build_config = get_label_info(_target, "target_gen_dir") + "/" + |
| get_label_info(_target, "name") + ".build_config.json" |
| inputs += [ _build_config ] |
| _rebased_build_config = rebase_path(_build_config, root_build_dir) |
| _package_name = "@FileArg($_rebased_build_config:deps_info:package_name)" |
| _version_code = "@FileArg($_rebased_build_config:deps_info:version_code)" |
| _version_name = "@FileArg($_rebased_build_config:deps_info:version_name)" |
| } |
| args += [ |
| "--rename-manifest-package=$_package_name", |
| "--arsc-package-name=$_package_name", |
| "--version-code=$_version_code", |
| "--version-name=$_version_name", |
| "--include-resources", |
| rebase_path(android_sdk_jar, root_build_dir), |
| ] |
| } |
| |
| package_apk(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "keystore_name", |
| "keystore_path", |
| "keystore_password", |
| ]) |
| min_sdk_version = default_min_sdk_version |
| deps = [ ":$_resource_apk_target_name" ] |
| |
| packaged_resources_path = _resource_apk_path |
| output_apk_path = invoker.stub_output |
| } |
| } |
| |
| # Generates artifacts for system APKs. |
| # |
| # Variables: |
| # apk_or_bundle_target: Target that creates input bundle or apk. |
| # input_apk_or_bundle: Path to input .apk or .aab. |
| # static_library_name: For static library apks, name for the <static-library>. |
| # static_library_version: For static library apks, version for the |
| # <static-library> tag (for TrichromeLibrary, we set this to be the same |
| # as the package's version_code) |
| # output: Path to the output system .apk or .zip. |
| # fuse_apk: Fuse all apk splits into a single .apk (default: false). |
| # stub_output: Path to output stub apk (default: do not create a stub). |
| # |
| template("system_image_apks") { |
| if (defined(invoker.stub_output)) { |
| _stub_apk_target_name = "${target_name}__stub" |
| system_image_stub_apk(_stub_apk_target_name) { |
| forward_variables_from(invoker, |
| [ |
| "static_library_name", |
| "static_library_version", |
| ]) |
| package_info_from_target = invoker.apk_or_bundle_target |
| stub_output = invoker.stub_output |
| } |
| } |
| |
| action_with_pydeps(target_name) { |
| script = "//build/android/gyp/system_image_apks.py" |
| deps = [ invoker.apk_or_bundle_target ] |
| inputs = [ invoker.input_apk_or_bundle ] |
| if (defined(invoker.stub_output)) { |
| public_deps = [ ":$_stub_apk_target_name" ] |
| } |
| outputs = [ invoker.output ] |
| args = [ |
| "--input", |
| rebase_path(invoker.input_apk_or_bundle, root_out_dir), |
| "--output", |
| rebase_path(invoker.output, root_out_dir), |
| ] |
| |
| _is_bundle = |
| filter_exclude([ invoker.input_apk_or_bundle ], [ "*.aab" ]) == [] |
| |
| if (_is_bundle) { |
| _wrapper_path = "$root_out_dir/bin/" + |
| get_label_info(invoker.apk_or_bundle_target, "name") |
| args += [ |
| "--bundle-wrapper", |
| rebase_path(_wrapper_path, root_out_dir), |
| ] |
| inputs += [ _wrapper_path ] |
| deps += [ "//build/android:apk_operations_py" ] |
| if (defined(invoker.fuse_apk) && invoker.fuse_apk) { |
| args += [ "--fuse-apk" ] |
| } |
| } |
| } |
| } |