You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

585 lines
20 KiB

// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Build rules to build shim apexes.
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
genrule {
name: "com.android.apex.cts.shim.pem",
out: ["com.android.apex.cts.shim.pem"],
cmd: "openssl genrsa -out $(out) 4096",
}
genrule {
name: "com.android.apex.cts.shim.pubkey",
srcs: [":com.android.apex.cts.shim.pem"],
out: ["com.android.apex.cts.shim.pubkey"],
tools: ["avbtool"],
cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)",
}
apex_key {
name: "com.android.apex.cts.shim.key",
private_key: ":com.android.apex.cts.shim.pem",
public_key: ":com.android.apex.cts.shim.pubkey",
installable: false,
}
genrule {
name: "com.android.apex.cts.shim.debug.pem",
out: ["com.android.apex.cts.shim.debug.pem"],
cmd: "openssl genrsa -out $(out) 4096",
}
genrule {
name: "com.android.apex.cts.shim.debug.pubkey",
srcs: [":com.android.apex.cts.shim.debug.pem"],
out: ["com.android.apex.cts.shim.debug.pubkey"],
tools: ["avbtool"],
cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)",
}
apex_key {
name: "com.android.apex.cts.shim.debug.key",
private_key: ":com.android.apex.cts.shim.debug.pem",
public_key: ":com.android.apex.cts.shim.debug.pubkey",
installable: false,
}
genrule {
name: "generate_hash_of_dev_null",
out: ["hash.txt"],
cmd: "sha512sum -b /dev/null | cut -d' ' -f1 | tee $(out)",
}
prebuilt_etc {
name: "hash_of_dev_null",
src: ":generate_hash_of_dev_null",
filename: "hash.txt",
installable: false,
}
apex {
name: "com.android.apex.cts.shim.v3",
manifest: "manifest_v3.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShim", "CtsShimPriv"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2",
manifest: "manifest_v2.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShim", "CtsShimPriv"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_sign_payload_with_different_key",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.debug.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_without_apk_in_apex",
manifest: "manifest_v2.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_no_hashtree",
manifest: "manifest_v2.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShim", "CtsShimPriv"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
generate_hashtree: false,
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_unsigned_payload",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShim", "CtsShimPriv"],
installable: false,
allowed_files: "default_shim_allowed_list.txt",
test_only_unsigned_payload: true,
updatable: false,
}
override_apex {
name: "com.android.apex.cts.shim.v2_different_package_name",
package_name: "com.android.apex.cts.shim.different",
// Use rebootless APEX to re-use this APEX in the rebootless update test case.
base: "com.android.apex.cts.shim.v2_rebootless",
}
genrule {
name: "generate_empty_hash",
out: ["hash.txt"],
cmd: "touch $(out)",
}
prebuilt_etc {
name: "empty_hash",
src: ":generate_empty_hash",
filename: "hash.txt",
installable: false,
}
// Use empty hash.txt to make sure that this apex has wrong SHA512, hence trying
// to stage it should fail.
apex {
name: "com.android.apex.cts.shim.v2_wrong_sha",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["empty_hash"],
installable: false,
updatable: false,
}
prebuilt_etc {
name: "apex_shim_additional_file",
src: "additional_file",
filename: "additional_file",
installable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_additional_file",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null", "apex_shim_additional_file"],
installable: false,
updatable: false,
}
prebuilt_etc {
name: "apex_shim_additional_folder",
src: "additional_file",
filename: "additional_file",
sub_dir: "additional_folder",
installable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_additional_folder",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null", "apex_shim_additional_folder"],
installable: false,
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_with_pre_install_hook",
manifest: "manifest_v2_with_pre_install_hook.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_with_post_install_hook",
manifest: "manifest_v2_with_post_install_hook.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
updatable: false,
}
genrule {
name: "generate_hash_v1",
srcs: [
":com.android.apex.cts.shim.v2",
":com.android.apex.cts.shim.v2_without_apk_in_apex",
":com.android.apex.cts.shim.v2_additional_file",
":com.android.apex.cts.shim.v2_additional_folder",
":com.android.apex.cts.shim.v2_different_certificate",
":com.android.apex.cts.shim.v2_different_package_name",
":com.android.apex.cts.shim.v2_no_hashtree",
":com.android.apex.cts.shim.v2_signed_bob",
":com.android.apex.cts.shim.v2_signed_bob_rot",
":com.android.apex.cts.shim.v2_signed_bob_rot_rollback",
":com.android.apex.cts.shim.v2_with_pre_install_hook",
":com.android.apex.cts.shim.v2_with_post_install_hook",
":com.android.apex.cts.shim.v2_sdk_target_p",
":com.android.apex.cts.shim.v2_apk_in_apex_sdk_target_p",
":com.android.apex.cts.shim.v2_rebootless",
":com.android.apex.cts.shim.v3",
":com.android.apex.cts.shim.v3_rebootless",
":com.android.apex.cts.shim.v3_signed_bob",
":com.android.apex.cts.shim.v3_signed_bob_rot",
],
out: ["hash.txt"],
cmd: "sha512sum -b $(in) | cut -d' ' -f1 | tee $(out)",
}
prebuilt_etc {
name: "hash_v1",
src: ":generate_hash_v1",
filename: "hash.txt",
installable: false,
}
apex {
name: "com.android.apex.cts.shim.v1",
manifest: "manifest.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_v1"],
apps: ["CtsShim", "CtsShimPriv"],
allowed_files: "default_shim_allowed_list.txt",
updatable: false,
}
// This is to install the flattened version of com.android.apex.cts.shim.
// Because com.android.apex.cts.shim is provided as prebuilt and the build system
// doesn't support install "flattened" version from "prebult" yet, GSI, which should
// have both "flatttened" and "unflattened" APEXes, is missing the flattened version
// of com.android.apex.cts.shim.
// TODO(b/159426728): When the build system can install "flattened" from "prebuilts",
// this can be removed.
override_apex {
name: "com.android.apex.cts.shim.v1_with_prebuilts",
base: "com.android.apex.cts.shim.v1",
apps: ["CtsShimPrebuilt", "CtsShimPrivPrebuilt"],
allowed_files: "prebuilts_shim_allowed_list.txt",
}
genrule {
name: "com.android.apex.cts.shim_not_pre_installed.pem",
out: ["com.android.apex.cts.shim_not_pre_installed.pem"],
cmd: "openssl genrsa -out $(out) 4096",
}
genrule {
name: "com.android.apex.cts.shim_not_pre_installed.pubkey",
srcs: [":com.android.apex.cts.shim_not_pre_installed.pem"],
out: ["com.android.apex.cts.shim_not_pre_installed.pubkey"],
tools: ["avbtool"],
cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)",
}
apex_key {
name: "com.android.apex.cts.shim_not_pre_installed.key",
private_key: ":com.android.apex.cts.shim_not_pre_installed.pem",
public_key: ":com.android.apex.cts.shim_not_pre_installed.pubkey",
installable: false,
}
apex {
name: "com.android.apex.cts.shim_not_pre_installed",
manifest: "manifest_not_pre_installed.json",
androidManifest: "AndroidManifestNotPreInstalled.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim_not_pre_installed.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v2_different_certificate",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
certificate: ":com.android.apex.cts.shim.debug.cert",
updatable: false,
}
android_app_certificate {
name: "com.android.apex.cts.shim.debug.cert",
certificate: "com.android.apex.cts.shim.debug.cert",
}
// Build rules to build shim apex with rotated keys
// We name the original key used to sign cts.shim.v1 package as alice.
// We then create a second key called bob. The second key bob is used to rotate the
// original key alice.
// Create private key bob in pem format
genrule {
name: "com.android.apex.rotation.key.bob.pem",
out: ["bob.pem"],
cmd: "openssl req -x509 -newkey rsa:4096 -nodes -days 999999 -subj '/DN=/EMAILADDRESS=android@android.com/CN=Android/OU=Android/O=Android/L=Mountain View/ST=California/C=US' -keyout $(out)",
}
// Converts bob's private key to pk8 format
genrule {
name: "com.android.apex.rotation.key.bob.pk8",
srcs: [":com.android.apex.rotation.key.bob.pem"],
out: ["bob.pk8"],
cmd: "openssl pkcs8 -topk8 -inform PEM -outform DER -in $(in) -out $(out) -nocrypt",
}
// Extract bob's public key from its private key
genrule {
name: "com.android.apex.rotation.key.bob.x509.pem",
srcs: [":com.android.apex.rotation.key.bob.pem"],
out: ["bob.x509.pem"],
cmd: "openssl req -x509 -key $(in) -newkey rsa:4096 -nodes -days 999999 -subj '/DN=/EMAILADDRESS=android@android.com/CN=Android/OU=Android/O=Android/L=Mountain View/ST=California/C=US' -out $(out)",
}
// Create lineage file for rotating alice to bob
genrule {
name: "com.android.apex.rotation.key.bob.rot",
srcs: [
"alice.pk8",
"alice.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
":com.android.apex.rotation.key.bob.x509.pem",
],
out: ["bob.rot"],
tools: [":apksigner"],
cmd: "$(location :apksigner) rotate --out $(out) --old-signer --key $(location alice.pk8) --cert $(location alice.x509.pem) --new-signer --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem)",
}
// Create lineage file for rotating alice to bob with rollback capability
genrule {
name: "com.android.apex.rotation.key.bob.rot.rollback",
srcs: [
"alice.pk8",
"alice.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
":com.android.apex.rotation.key.bob.x509.pem",
],
out: ["bob.rot"],
tools: [":apksigner"],
cmd: "$(location :apksigner) rotate --out $(out) --old-signer --key $(location alice.pk8) --cert $(location alice.x509.pem) --set-rollback true --new-signer --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem)",
}
// v2 cts shim package signed by bob, without lineage
genrule {
name: "com.android.apex.cts.shim.v2_signed_bob",
out: ["com.android.apex.cts.shim.v2_signed_bob"],
tools: [":apksigner"],
srcs: [
":com.android.apex.cts.shim.v2",
":com.android.apex.rotation.key.bob.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
],
dist: {
targets: ["com.android.apex.cts.shim.v2_signed_bob"],
dest: "com.android.apex.cts.shim.v2_signed_bob.apex",
},
cmd: "$(location :apksigner) sign --v1-signing-enabled false --v2-signing-enabled false --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem) --out $(out) $(location :com.android.apex.cts.shim.v2)",
}
// v2 cts shim package signed by bob + lineage
genrule {
name: "com.android.apex.cts.shim.v2_signed_bob_rot",
out: ["com.android.apex.cts.shim.v2_signed_bob_rot"],
tools: [":apksigner"],
srcs: [
":com.android.apex.cts.shim.v2",
":com.android.apex.rotation.key.bob.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
":com.android.apex.rotation.key.bob.rot",
],
dist: {
targets: ["com.android.apex.cts.shim.v2_signed_bob_rot"],
dest: "com.android.apex.cts.shim.v2_signed_bob_rot.apex",
},
cmd: "$(location :apksigner) sign --v1-signing-enabled false --v2-signing-enabled false --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem) --lineage $(location :com.android.apex.rotation.key.bob.rot) --out $(out) $(location :com.android.apex.cts.shim.v2)",
}
// v2 cts shim package signed by bob + lineage + rollback capability
genrule {
name: "com.android.apex.cts.shim.v2_signed_bob_rot_rollback",
out: ["com.android.apex.cts.shim.v2_signed_bob_rot_rollback"],
tools: [":apksigner"],
srcs: [
":com.android.apex.cts.shim.v2",
":com.android.apex.rotation.key.bob.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
":com.android.apex.rotation.key.bob.rot.rollback",
],
dist: {
targets: ["com.android.apex.cts.shim.v2_signed_bob_rot_rollback"],
dest: "com.android.apex.cts.shim.v2_signed_bob_rot_rollback.apex",
},
cmd: "$(location :apksigner) sign --v1-signing-enabled false --v2-signing-enabled false --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem) --lineage $(location :com.android.apex.rotation.key.bob.rot.rollback) --out $(out) $(location :com.android.apex.cts.shim.v2)",
}
// v3 cts shim package signed by bob
genrule {
name: "com.android.apex.cts.shim.v3_signed_bob",
out: ["com.android.apex.cts.shim.v3_signed_bob"],
tools: [":apksigner"],
srcs: [
":com.android.apex.cts.shim.v3",
":com.android.apex.rotation.key.bob.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
],
dist: {
targets: ["com.android.apex.cts.shim.v3_signed_bob"],
dest: "com.android.apex.cts.shim.v3_signed_bob.apex",
},
cmd: "$(location :apksigner) sign --v1-signing-enabled false --v2-signing-enabled false --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem) --out $(out) $(location :com.android.apex.cts.shim.v3)",
}
// v3 cts shim package signed by bob + lineage
genrule {
name: "com.android.apex.cts.shim.v3_signed_bob_rot",
out: ["com.android.apex.cts.shim.v3_signed_bob_rot"],
tools: [":apksigner"],
srcs: [
":com.android.apex.cts.shim.v3",
":com.android.apex.rotation.key.bob.x509.pem",
":com.android.apex.rotation.key.bob.pk8",
":com.android.apex.rotation.key.bob.rot",
],
dist: {
targets: ["com.android.apex.cts.shim.v3_signed_bob_rot"],
dest: "com.android.apex.cts.shim.v3_signed_bob_rot.apex",
},
cmd: "$(location :apksigner) sign --v1-signing-enabled false --v2-signing-enabled false --key $(location :com.android.apex.rotation.key.bob.pk8) --cert $(location :com.android.apex.rotation.key.bob.x509.pem) --lineage $(location :com.android.apex.rotation.key.bob.rot) --out $(out) $(location :com.android.apex.cts.shim.v3)",
}
// This one is only used in ApexdHostTest and not meant to be installed
// and hence shouldn't be allowed in hash.txt of v1 shim APEX.
apex {
name: "com.android.apex.cts.shim.v2_legacy",
manifest: "manifest_v2.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShim", "CtsShimPriv"],
installable: false,
min_sdk_version: "29",
updatable: false,
}
genrule {
name: "com.android.apex.cts.shim.v2_no_pb",
srcs: [":com.android.apex.cts.shim.v2_legacy"],
out: ["com.android.apex.cts.shim.v2_no_pb.apex"],
tools: ["zip2zip"],
cmd: "$(location zip2zip) -i $(in) -x apex_manifest.pb -o $(out)",
}
// Apex shim that targets an old sdk (P)
apex {
name: "com.android.apex.cts.shim.v2_sdk_target_p",
// Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case.
manifest: "manifest_v2_rebootless.json",
androidManifest: "AndroidManifestSdkTargetP.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
apps: ["CtsShim", "CtsShimPriv"],
updatable: false,
}
// Apex shim with apk-in-apex that targets sdk P
apex {
name: "com.android.apex.cts.shim.v2_apk_in_apex_sdk_target_p",
manifest: "manifest_v2.json",
androidManifest: "AndroidManifest.xml",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
apps: ["CtsShimTargetPSdk"],
installable: false,
updatable: false,
}
// Apex shim with unsigned apk
genrule {
name: "com.android.apex.cts.shim.v2_unsigned_apk_container",
// Use shim.v2_rebootless to re-use same APEX in the rebootless update test case.
srcs: [":com.android.apex.cts.shim.v2_rebootless"],
out: ["com.android.apex.cts.shim.v2_unsigned_apk_container.apex"],
cmd: "cp -v $(in) $(out) && zip -d $(out) META-INF*",
}
// Apex shim for testing rebootless updates
apex {
name: "com.android.apex.cts.shim.v2_rebootless",
manifest: "manifest_v2_rebootless.json",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
updatable: false,
}
apex {
name: "com.android.apex.cts.shim.v3_rebootless",
manifest: "manifest_v3_rebootless.json",
file_contexts: ":apex.test-file_contexts",
key: "com.android.apex.cts.shim.key",
prebuilts: ["hash_of_dev_null"],
installable: false,
updatable: false,
}