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