1// Copyright (C) 2019 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// Build rules to build shim apexes. 16 17package { 18 default_applicable_licenses: ["Android-Apache-2.0"], 19} 20 21genrule { 22 name: "com.android.apex.cts.shim.pem", 23 out: ["com.android.apex.cts.shim.pem"], 24 cmd: "openssl genrsa -out $(out) 4096", 25} 26 27genrule { 28 name: "com.android.apex.cts.shim.pubkey", 29 srcs: [":com.android.apex.cts.shim.pem"], 30 out: ["com.android.apex.cts.shim.pubkey"], 31 tools: ["avbtool"], 32 cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)", 33} 34 35apex_key { 36 name: "com.android.apex.cts.shim.key", 37 private_key: ":com.android.apex.cts.shim.pem", 38 public_key: ":com.android.apex.cts.shim.pubkey", 39 installable: false, 40} 41 42genrule { 43 name: "com.android.apex.cts.shim.debug.pem", 44 out: ["com.android.apex.cts.shim.debug.pem"], 45 cmd: "openssl genrsa -out $(out) 4096", 46} 47 48genrule { 49 name: "com.android.apex.cts.shim.debug.pubkey", 50 srcs: [":com.android.apex.cts.shim.debug.pem"], 51 out: ["com.android.apex.cts.shim.debug.pubkey"], 52 tools: ["avbtool"], 53 cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)", 54} 55 56apex_key { 57 name: "com.android.apex.cts.shim.debug.key", 58 private_key: ":com.android.apex.cts.shim.debug.pem", 59 public_key: ":com.android.apex.cts.shim.debug.pubkey", 60 installable: false, 61} 62 63genrule { 64 name: "generate_hash_of_dev_null", 65 out: ["hash.txt"], 66 cmd: "sha512sum -b /dev/null | cut -d' ' -f1 | tee $(out)", 67} 68 69prebuilt_etc { 70 name: "hash_of_dev_null", 71 src: ":generate_hash_of_dev_null", 72 filename: "hash.txt", 73 installable: false, 74} 75 76apex { 77 name: "com.android.apex.cts.shim.v3", 78 manifest: "manifest_v3.json", 79 androidManifest: "AndroidManifest.xml", 80 file_contexts: ":apex.test-file_contexts", 81 key: "com.android.apex.cts.shim.key", 82 prebuilts: ["hash_of_dev_null"], 83 apps: ["CtsShim", "CtsShimPriv"], 84 installable: false, 85 allowed_files: "default_shim_allowed_list.txt", 86 updatable: false, 87} 88 89apex { 90 name: "com.android.apex.cts.shim.v2", 91 manifest: "manifest_v2.json", 92 androidManifest: "AndroidManifest.xml", 93 file_contexts: ":apex.test-file_contexts", 94 key: "com.android.apex.cts.shim.key", 95 prebuilts: ["hash_of_dev_null"], 96 apps: ["CtsShim", "CtsShimPriv"], 97 installable: false, 98 allowed_files: "default_shim_allowed_list.txt", 99 updatable: false, 100} 101 102apex { 103 name: "com.android.apex.cts.shim.v2_sign_payload_with_different_key", 104 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 105 manifest: "manifest_v2_rebootless.json", 106 androidManifest: "AndroidManifest.xml", 107 file_contexts: ":apex.test-file_contexts", 108 key: "com.android.apex.cts.shim.debug.key", 109 prebuilts: ["hash_of_dev_null"], 110 installable: false, 111 allowed_files: "default_shim_allowed_list.txt", 112 updatable: false, 113} 114 115apex { 116 name: "com.android.apex.cts.shim.v2_without_apk_in_apex", 117 manifest: "manifest_v2.json", 118 androidManifest: "AndroidManifest.xml", 119 file_contexts: ":apex.test-file_contexts", 120 key: "com.android.apex.cts.shim.key", 121 prebuilts: ["hash_of_dev_null"], 122 installable: false, 123 allowed_files: "default_shim_allowed_list.txt", 124 updatable: false, 125} 126 127apex { 128 name: "com.android.apex.cts.shim.v2_no_hashtree", 129 manifest: "manifest_v2.json", 130 androidManifest: "AndroidManifest.xml", 131 file_contexts: ":apex.test-file_contexts", 132 key: "com.android.apex.cts.shim.key", 133 prebuilts: ["hash_of_dev_null"], 134 apps: ["CtsShim", "CtsShimPriv"], 135 installable: false, 136 allowed_files: "default_shim_allowed_list.txt", 137 generate_hashtree: false, 138 updatable: false, 139} 140 141apex { 142 name: "com.android.apex.cts.shim.v2_unsigned_payload", 143 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 144 manifest: "manifest_v2_rebootless.json", 145 androidManifest: "AndroidManifest.xml", 146 file_contexts: ":apex.test-file_contexts", 147 key: "com.android.apex.cts.shim.key", 148 prebuilts: ["hash_of_dev_null"], 149 apps: ["CtsShim", "CtsShimPriv"], 150 installable: false, 151 allowed_files: "default_shim_allowed_list.txt", 152 test_only_unsigned_payload: true, 153 updatable: false, 154} 155 156override_apex { 157 name: "com.android.apex.cts.shim.v2_different_package_name", 158 package_name: "com.android.apex.cts.shim.different", 159 // Use rebootless APEX to re-use this APEX in the rebootless update test case. 160 base: "com.android.apex.cts.shim.v2_rebootless", 161} 162 163genrule { 164 name: "generate_empty_hash", 165 out: ["hash.txt"], 166 cmd: "touch $(out)", 167} 168 169prebuilt_etc { 170 name: "empty_hash", 171 src: ":generate_empty_hash", 172 filename: "hash.txt", 173 installable: false, 174} 175 176// Use empty hash.txt to make sure that this apex has wrong SHA512, hence trying 177// to stage it should fail. 178apex { 179 name: "com.android.apex.cts.shim.v2_wrong_sha", 180 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 181 manifest: "manifest_v2_rebootless.json", 182 androidManifest: "AndroidManifest.xml", 183 file_contexts: ":apex.test-file_contexts", 184 key: "com.android.apex.cts.shim.key", 185 prebuilts: ["empty_hash"], 186 installable: false, 187 updatable: false, 188} 189 190prebuilt_etc { 191 name: "apex_shim_additional_file", 192 src: "additional_file", 193 filename: "additional_file", 194 installable: false, 195} 196 197apex { 198 name: "com.android.apex.cts.shim.v2_additional_file", 199 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 200 manifest: "manifest_v2_rebootless.json", 201 androidManifest: "AndroidManifest.xml", 202 file_contexts: ":apex.test-file_contexts", 203 key: "com.android.apex.cts.shim.key", 204 prebuilts: ["hash_of_dev_null", "apex_shim_additional_file"], 205 installable: false, 206 updatable: false, 207} 208 209prebuilt_etc { 210 name: "apex_shim_additional_folder", 211 src: "additional_file", 212 filename: "additional_file", 213 sub_dir: "additional_folder", 214 installable: false, 215} 216 217apex { 218 name: "com.android.apex.cts.shim.v2_additional_folder", 219 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 220 manifest: "manifest_v2_rebootless.json", 221 androidManifest: "AndroidManifest.xml", 222 file_contexts: ":apex.test-file_contexts", 223 key: "com.android.apex.cts.shim.key", 224 prebuilts: ["hash_of_dev_null", "apex_shim_additional_folder"], 225 installable: false, 226 updatable: false, 227} 228 229apex { 230 name: "com.android.apex.cts.shim.v2_with_pre_install_hook", 231 manifest: "manifest_v2_with_pre_install_hook.json", 232 androidManifest: "AndroidManifest.xml", 233 file_contexts: ":apex.test-file_contexts", 234 key: "com.android.apex.cts.shim.key", 235 prebuilts: ["hash_of_dev_null"], 236 installable: false, 237 updatable: false, 238} 239 240apex { 241 name: "com.android.apex.cts.shim.v2_with_post_install_hook", 242 manifest: "manifest_v2_with_post_install_hook.json", 243 androidManifest: "AndroidManifest.xml", 244 file_contexts: ":apex.test-file_contexts", 245 key: "com.android.apex.cts.shim.key", 246 prebuilts: ["hash_of_dev_null"], 247 installable: false, 248 updatable: false, 249} 250 251genrule { 252 name: "generate_hash_v1", 253 srcs: [ 254 ":com.android.apex.cts.shim.v2", 255 ":com.android.apex.cts.shim.v2_without_apk_in_apex", 256 ":com.android.apex.cts.shim.v2_additional_file", 257 ":com.android.apex.cts.shim.v2_additional_folder", 258 ":com.android.apex.cts.shim.v2_different_certificate", 259 ":com.android.apex.cts.shim.v2_different_package_name", 260 ":com.android.apex.cts.shim.v2_no_hashtree", 261 ":com.android.apex.cts.shim.v2_signed_bob", 262 ":com.android.apex.cts.shim.v2_signed_bob_rot", 263 ":com.android.apex.cts.shim.v2_signed_bob_rot_rollback", 264 ":com.android.apex.cts.shim.v2_with_pre_install_hook", 265 ":com.android.apex.cts.shim.v2_with_post_install_hook", 266 ":com.android.apex.cts.shim.v2_sdk_target_p", 267 ":com.android.apex.cts.shim.v2_apk_in_apex_sdk_target_p", 268 ":com.android.apex.cts.shim.v2_rebootless", 269 ":com.android.apex.cts.shim.v3", 270 ":com.android.apex.cts.shim.v3_rebootless", 271 ":com.android.apex.cts.shim.v3_signed_bob", 272 ":com.android.apex.cts.shim.v3_signed_bob_rot", 273 ], 274 out: ["hash.txt"], 275 cmd: "sha512sum -b $(in) | cut -d' ' -f1 | tee $(out)", 276} 277 278prebuilt_etc { 279 name: "hash_v1", 280 src: ":generate_hash_v1", 281 filename: "hash.txt", 282 installable: false, 283} 284 285apex { 286 name: "com.android.apex.cts.shim.v1", 287 manifest: "manifest.json", 288 androidManifest: "AndroidManifest.xml", 289 file_contexts: ":apex.test-file_contexts", 290 key: "com.android.apex.cts.shim.key", 291 prebuilts: ["hash_v1"], 292 apps: ["CtsShim", "CtsShimPriv"], 293 allowed_files: "default_shim_allowed_list.txt", 294 updatable: false, 295} 296 297// This is to install the flattened version of com.android.apex.cts.shim. 298// Because com.android.apex.cts.shim is provided as prebuilt and the build system 299// doesn't support install "flattened" version from "prebult" yet, GSI, which should 300// have both "flatttened" and "unflattened" APEXes, is missing the flattened version 301// of com.android.apex.cts.shim. 302// TODO(b/159426728): When the build system can install "flattened" from "prebuilts", 303// this can be removed. 304override_apex { 305 name: "com.android.apex.cts.shim.v1_with_prebuilts", 306 base: "com.android.apex.cts.shim.v1", 307 apps: ["CtsShimPrebuilt", "CtsShimPrivPrebuilt"], 308 allowed_files: "prebuilts_shim_allowed_list.txt", 309} 310 311genrule { 312 name: "com.android.apex.cts.shim_not_pre_installed.pem", 313 out: ["com.android.apex.cts.shim_not_pre_installed.pem"], 314 cmd: "openssl genrsa -out $(out) 4096", 315} 316 317genrule { 318 name: "com.android.apex.cts.shim_not_pre_installed.pubkey", 319 srcs: [":com.android.apex.cts.shim_not_pre_installed.pem"], 320 out: ["com.android.apex.cts.shim_not_pre_installed.pubkey"], 321 tools: ["avbtool"], 322 cmd: "$(location avbtool) extract_public_key --key $(in) --output $(out)", 323} 324 325apex_key { 326 name: "com.android.apex.cts.shim_not_pre_installed.key", 327 private_key: ":com.android.apex.cts.shim_not_pre_installed.pem", 328 public_key: ":com.android.apex.cts.shim_not_pre_installed.pubkey", 329 installable: false, 330} 331 332apex { 333 name: "com.android.apex.cts.shim_not_pre_installed", 334 manifest: "manifest_not_pre_installed.json", 335 androidManifest: "AndroidManifestNotPreInstalled.xml", 336 file_contexts: ":apex.test-file_contexts", 337 key: "com.android.apex.cts.shim_not_pre_installed.key", 338 prebuilts: ["hash_of_dev_null"], 339 installable: false, 340 updatable: false, 341} 342 343apex { 344 name: "com.android.apex.cts.shim.v2_different_certificate", 345 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 346 manifest: "manifest_v2_rebootless.json", 347 androidManifest: "AndroidManifest.xml", 348 file_contexts: ":apex.test-file_contexts", 349 key: "com.android.apex.cts.shim.key", 350 prebuilts: ["hash_of_dev_null"], 351 installable: false, 352 certificate: ":com.android.apex.cts.shim.debug.cert", 353 updatable: false, 354} 355 356android_app_certificate { 357 name: "com.android.apex.cts.shim.debug.cert", 358 certificate: "com.android.apex.cts.shim.debug.cert", 359} 360 361// Build rules to build shim apex with rotated keys 362 363// We name the original key used to sign cts.shim.v1 package as alice. 364// We then create a second key called bob. The second key bob is used to rotate the 365// original key alice. 366 367// Create private key bob in pem format 368genrule { 369 name: "com.android.apex.rotation.key.bob.pem", 370 out: ["bob.pem"], 371 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)", 372} 373 374// Converts bob's private key to pk8 format 375genrule { 376 name: "com.android.apex.rotation.key.bob.pk8", 377 srcs: [":com.android.apex.rotation.key.bob.pem"], 378 out: ["bob.pk8"], 379 cmd: "openssl pkcs8 -topk8 -inform PEM -outform DER -in $(in) -out $(out) -nocrypt", 380} 381 382// Extract bob's public key from its private key 383genrule { 384 name: "com.android.apex.rotation.key.bob.x509.pem", 385 srcs: [":com.android.apex.rotation.key.bob.pem"], 386 out: ["bob.x509.pem"], 387 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)", 388} 389 390// Create lineage file for rotating alice to bob 391genrule { 392 name: "com.android.apex.rotation.key.bob.rot", 393 srcs: [ 394 "alice.pk8", 395 "alice.x509.pem", 396 ":com.android.apex.rotation.key.bob.pk8", 397 ":com.android.apex.rotation.key.bob.x509.pem", 398 ], 399 out: ["bob.rot"], 400 tools: [":apksigner"], 401 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)", 402} 403 404// Create lineage file for rotating alice to bob with rollback capability 405genrule { 406 name: "com.android.apex.rotation.key.bob.rot.rollback", 407 srcs: [ 408 "alice.pk8", 409 "alice.x509.pem", 410 ":com.android.apex.rotation.key.bob.pk8", 411 ":com.android.apex.rotation.key.bob.x509.pem", 412 ], 413 out: ["bob.rot"], 414 tools: [":apksigner"], 415 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)", 416} 417 418// v2 cts shim package signed by bob, without lineage 419genrule { 420 name: "com.android.apex.cts.shim.v2_signed_bob", 421 out: ["com.android.apex.cts.shim.v2_signed_bob"], 422 tools: [":apksigner"], 423 srcs: [ 424 ":com.android.apex.cts.shim.v2", 425 ":com.android.apex.rotation.key.bob.x509.pem", 426 ":com.android.apex.rotation.key.bob.pk8", 427 ], 428 dist: { 429 targets: ["com.android.apex.cts.shim.v2_signed_bob"], 430 dest: "com.android.apex.cts.shim.v2_signed_bob.apex", 431 }, 432 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)", 433} 434 435// v2 cts shim package signed by bob + lineage 436genrule { 437 name: "com.android.apex.cts.shim.v2_signed_bob_rot", 438 out: ["com.android.apex.cts.shim.v2_signed_bob_rot"], 439 tools: [":apksigner"], 440 srcs: [ 441 ":com.android.apex.cts.shim.v2", 442 ":com.android.apex.rotation.key.bob.x509.pem", 443 ":com.android.apex.rotation.key.bob.pk8", 444 ":com.android.apex.rotation.key.bob.rot", 445 ], 446 dist: { 447 targets: ["com.android.apex.cts.shim.v2_signed_bob_rot"], 448 dest: "com.android.apex.cts.shim.v2_signed_bob_rot.apex", 449 }, 450 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)", 451} 452 453// v2 cts shim package signed by bob + lineage + rollback capability 454genrule { 455 name: "com.android.apex.cts.shim.v2_signed_bob_rot_rollback", 456 out: ["com.android.apex.cts.shim.v2_signed_bob_rot_rollback"], 457 tools: [":apksigner"], 458 srcs: [ 459 ":com.android.apex.cts.shim.v2", 460 ":com.android.apex.rotation.key.bob.x509.pem", 461 ":com.android.apex.rotation.key.bob.pk8", 462 ":com.android.apex.rotation.key.bob.rot.rollback", 463 ], 464 dist: { 465 targets: ["com.android.apex.cts.shim.v2_signed_bob_rot_rollback"], 466 dest: "com.android.apex.cts.shim.v2_signed_bob_rot_rollback.apex", 467 }, 468 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)", 469} 470 471// v3 cts shim package signed by bob 472genrule { 473 name: "com.android.apex.cts.shim.v3_signed_bob", 474 out: ["com.android.apex.cts.shim.v3_signed_bob"], 475 tools: [":apksigner"], 476 srcs: [ 477 ":com.android.apex.cts.shim.v3", 478 ":com.android.apex.rotation.key.bob.x509.pem", 479 ":com.android.apex.rotation.key.bob.pk8", 480 ], 481 dist: { 482 targets: ["com.android.apex.cts.shim.v3_signed_bob"], 483 dest: "com.android.apex.cts.shim.v3_signed_bob.apex", 484 }, 485 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)", 486} 487 488// v3 cts shim package signed by bob + lineage 489genrule { 490 name: "com.android.apex.cts.shim.v3_signed_bob_rot", 491 out: ["com.android.apex.cts.shim.v3_signed_bob_rot"], 492 tools: [":apksigner"], 493 srcs: [ 494 ":com.android.apex.cts.shim.v3", 495 ":com.android.apex.rotation.key.bob.x509.pem", 496 ":com.android.apex.rotation.key.bob.pk8", 497 ":com.android.apex.rotation.key.bob.rot", 498 ], 499 dist: { 500 targets: ["com.android.apex.cts.shim.v3_signed_bob_rot"], 501 dest: "com.android.apex.cts.shim.v3_signed_bob_rot.apex", 502 }, 503 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)", 504} 505 506// This one is only used in ApexdHostTest and not meant to be installed 507// and hence shouldn't be allowed in hash.txt of v1 shim APEX. 508apex { 509 name: "com.android.apex.cts.shim.v2_legacy", 510 manifest: "manifest_v2.json", 511 androidManifest: "AndroidManifest.xml", 512 file_contexts: ":apex.test-file_contexts", 513 key: "com.android.apex.cts.shim.key", 514 prebuilts: ["hash_of_dev_null"], 515 apps: ["CtsShim", "CtsShimPriv"], 516 installable: false, 517 min_sdk_version: "29", 518 updatable: false, 519} 520 521genrule { 522 name: "com.android.apex.cts.shim.v2_no_pb", 523 srcs: [":com.android.apex.cts.shim.v2_legacy"], 524 out: ["com.android.apex.cts.shim.v2_no_pb.apex"], 525 tools: ["zip2zip"], 526 cmd: "$(location zip2zip) -i $(in) -x apex_manifest.pb -o $(out)", 527} 528 529// Apex shim that targets an old sdk (P) 530apex { 531 name: "com.android.apex.cts.shim.v2_sdk_target_p", 532 // Use manifest_v2_rebootless to also re-use this APEX in the rebootless update test case. 533 manifest: "manifest_v2_rebootless.json", 534 androidManifest: "AndroidManifestSdkTargetP.xml", 535 file_contexts: ":apex.test-file_contexts", 536 key: "com.android.apex.cts.shim.key", 537 prebuilts: ["hash_of_dev_null"], 538 installable: false, 539 apps: ["CtsShim", "CtsShimPriv"], 540 updatable: false, 541} 542 543// Apex shim with apk-in-apex that targets sdk P 544apex { 545 name: "com.android.apex.cts.shim.v2_apk_in_apex_sdk_target_p", 546 manifest: "manifest_v2.json", 547 androidManifest: "AndroidManifest.xml", 548 file_contexts: ":apex.test-file_contexts", 549 key: "com.android.apex.cts.shim.key", 550 prebuilts: ["hash_of_dev_null"], 551 apps: ["CtsShimTargetPSdk"], 552 installable: false, 553 updatable: false, 554} 555 556// Apex shim with unsigned apk 557genrule { 558 name: "com.android.apex.cts.shim.v2_unsigned_apk_container", 559 // Use shim.v2_rebootless to re-use same APEX in the rebootless update test case. 560 srcs: [":com.android.apex.cts.shim.v2_rebootless"], 561 out: ["com.android.apex.cts.shim.v2_unsigned_apk_container.apex"], 562 cmd: "cp -v $(in) $(out) && zip -d $(out) META-INF*", 563} 564 565// Apex shim for testing rebootless updates 566apex { 567 name: "com.android.apex.cts.shim.v2_rebootless", 568 manifest: "manifest_v2_rebootless.json", 569 file_contexts: ":apex.test-file_contexts", 570 key: "com.android.apex.cts.shim.key", 571 prebuilts: ["hash_of_dev_null"], 572 installable: false, 573 updatable: false, 574} 575 576apex { 577 name: "com.android.apex.cts.shim.v3_rebootless", 578 manifest: "manifest_v3_rebootless.json", 579 file_contexts: ":apex.test-file_contexts", 580 key: "com.android.apex.cts.shim.key", 581 prebuilts: ["hash_of_dev_null"], 582 installable: false, 583 updatable: false, 584} 585