1// Copyright (C) 2018 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// These apex definitions will generate the prebuilt test data. The modules 16// are disabled so as not to pollute the build. 17 18package { 19 default_applicable_licenses: ["Android-Apache-2.0"], 20} 21 22apex_key { 23 name: "com.android.apex.test_package.key", 24 public_key: "com.android.apex.test_package.avbpubkey", 25 private_key: "com.android.apex.test_package.pem", 26 installable: false, 27} 28 29apex_key { 30 name: "com.android.apex.brand.new.key", 31 public_key: "com.android.apex.brand.new.avbpubkey", 32 private_key: "com.android.apex.brand.new.pem", 33 installable: false, 34} 35 36apex_key { 37 name: "com.android.apex.brand.new.another.key", 38 public_key: "com.android.apex.brand.new.another.avbpubkey", 39 private_key: "com.android.apex.brand.new.another.pem", 40 installable: false, 41} 42 43apex_key { 44 name: "com.android.apex.compressed.key", 45 public_key: "com.android.apex.compressed.avbpubkey", 46 private_key: "com.android.apex.compressed.pem", 47 installable: false, 48} 49 50apex { 51 name: "apex.apexd_test", 52 manifest: "manifest.json", 53 file_contexts: ":apex.test-file_contexts", 54 prebuilts: ["sample_prebuilt_file"], 55 key: "com.android.apex.test_package.key", 56 installable: false, 57 payload_fs_type: "ext4", // many tests rely on this to be 'ext4' 58 min_sdk_version: "29", // test requires hashtree to be present. 59} 60 61apex { 62 name: "apex.apexd_test_for_corruption", 63 manifest: "manifest.json", 64 file_contexts: ":apex.test-file_contexts", 65 // For corruption to be effective, the file should be big enough and random. 66 prebuilts: ["sample_big_prebuilt_file"], 67 key: "com.android.apex.test_package.key", 68 installable: false, 69 updatable: false, 70} 71 72apex { 73 name: "apex.apexd_bootstrap_test", 74 manifest: "manifest_bootstrap.json", 75 file_contexts: ":apex.test-file_contexts", 76 prebuilts: ["sample_prebuilt_file"], 77 key: "com.android.apex.test_package.key", 78 installable: false, 79 min_sdk_version: "29", // test requires hashtree to be present. 80} 81 82apex { 83 name: "com.android.apex.compressed.v1", 84 manifest: "manifest_compressed.json", 85 file_contexts: ":apex.test-file_contexts", 86 prebuilts: ["sample_prebuilt_file"], 87 key: "com.android.apex.compressed.key", 88 installable: false, 89 test_only_force_compression: true, 90 updatable: false, 91} 92 93apex { 94 name: "com.android.apex.compressed.v1_different_digest", 95 manifest: "manifest_compressed.json", 96 file_contexts: ":apex.test-file_contexts", 97 prebuilts: ["hash_of_dev_null"], 98 key: "com.android.apex.compressed.key", 99 installable: false, 100 test_only_force_compression: true, 101 updatable: false, 102} 103 104apex { 105 name: "com.android.apex.brand.new", 106 manifest: "manifest_brand_new.json", 107 file_contexts: ":apex.test-file_contexts", 108 prebuilts: ["sample_prebuilt_file"], 109 key: "com.android.apex.brand.new.key", 110 installable: false, 111 min_sdk_version: "34", 112} 113 114apex { 115 name: "com.android.apex.brand.new.v2", 116 manifest: "manifest_brand_new_v2.json", 117 file_contexts: ":apex.test-file_contexts", 118 prebuilts: ["sample_prebuilt_file"], 119 key: "com.android.apex.brand.new.key", 120 installable: false, 121 min_sdk_version: "34", 122} 123 124apex { 125 name: "com.android.apex.brand.new.v2.diffkey", 126 manifest: "manifest_brand_new_v2.json", 127 file_contexts: ":apex.test-file_contexts", 128 prebuilts: ["sample_prebuilt_file"], 129 key: "com.android.apex.brand.new.another.key", 130 installable: false, 131 min_sdk_version: "34", 132} 133 134java_genrule { 135 // Generates an apex which has a different public key outside the filesystem image 136 name: "gen_key_mismatch_with_image_apex", 137 out: ["apex.apexd_test_wrong_public_key.apex"], 138 srcs: [":apex.apexd_test"], 139 tools: [ 140 "soong_zip", 141 "zipalign", 142 ], 143 cmd: "unzip -q $(in) -d $(genDir) && " + // unzip input 144 "echo 'different-key' >> $(genDir)/apex_pubkey && " + // modify the public key 145 "$(location soong_zip) -d -C $(genDir) -D $(genDir) " + 146 "-s apex_manifest.pb -s apex_payload.img -s apex_pubkey " + 147 "-o $(genDir)/unaligned.apex && " + 148 "$(location zipalign) -f 4096 $(genDir)/unaligned.apex " + 149 "$(genDir)/apex.apexd_test_wrong_public_key.apex", 150} 151 152java_genrule { 153 // Generates a compressed apex which doesn't have an original_apex file in it 154 name: "gen_capex_without_apex", 155 out: ["com.android.apex.compressed.v1_without_apex.capex"], 156 srcs: [":com.android.apex.compressed.v1"], 157 tools: ["soong_zip"], 158 cmd: "unzip -q $(in) -d $(genDir) && rm $(genDir)/original_apex && " + 159 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 160 "-o $(genDir)/com.android.apex.compressed.v1_without_apex.capex", 161} 162 163java_genrule { 164 // Generates a compressed apex which has different version of original_apex in it 165 name: "gen_capex_with_v2_apex", 166 out: ["com.android.apex.compressed.v1_with_v2_apex.capex"], 167 srcs: [":com.android.apex.compressed.v2"], 168 tools: [ 169 "soong_zip", 170 "conv_apex_manifest", 171 ], 172 cmd: "unzip -q $(in) -d $(genDir) && " + 173 "$(location conv_apex_manifest) setprop version 1 $(genDir)/apex_manifest.pb && " + 174 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 175 "-o $(genDir)/com.android.apex.compressed.v1_with_v2_apex.capex", 176} 177 178java_genrule { 179 // Generates a compressed apex which can be opened but not decompressed 180 name: "gen_capex_not_decompressible", 181 out: ["com.android.apex.compressed.v1_not_decompressible.capex"], 182 srcs: [":com.android.apex.compressed.v1"], 183 tools: [ 184 "soong_zip", 185 "conv_apex_manifest", 186 ], 187 cmd: "unzip -q $(in) -d $(genDir) && echo '' > $(genDir)/original_apex && " + 188 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 189 "-o $(genDir)/com.android.apex.compressed.v1_not_decompressible.capex", 190} 191 192java_genrule { 193 // Generates a capex which has same module name as com.android.apex.compressed, but 194 // is contains a different public key. 195 name: "gen_key_mismatch_capex", 196 out: ["com.android.apex.compressed_different_key.capex"], 197 srcs: [":apex.apexd_test_no_inst_key"], 198 tools: [ 199 "soong_zip", 200 "zipalign", 201 "conv_apex_manifest", 202 "apex_compression_tool", 203 "avbtool", 204 ], 205 cmd: "mkdir $(genDir)/tempdir && unzip -q $(in) -d $(genDir)/tempdir && " + 206 "$(location conv_apex_manifest) setprop name com.android.apex.compressed $(genDir)/tempdir/apex_manifest.pb && " + 207 "$(location soong_zip) -d -C $(genDir)/tempdir -D $(genDir)/tempdir " + 208 "-s apex_manifest.pb -s apex_payload.img -s apex_pubkey " + 209 "-o $(genDir)/unaligned.apex && " + 210 "$(location zipalign) -f 4096 $(genDir)/unaligned.apex " + 211 "$(genDir)/com.android.apex.compressed_different_key.apex && " + 212 "HOST_OUT_BIN=$$(dirname $(location apex_compression_tool)) && " + 213 "$(location apex_compression_tool) compress " + 214 "--apex_compression_tool_path=\"$$HOST_OUT_BIN\" " + 215 "--input=$(genDir)/com.android.apex.compressed_different_key.apex " + 216 "--output=$(genDir)/com.android.apex.compressed_different_key.capex", 217} 218 219java_genrule { 220 // Generates a capex which has a different public key than original_apex 221 name: "gen_key_mismatch_with_original_capex", 222 out: ["com.android.apex.compressed_key_mismatch_with_original.capex"], 223 srcs: [":com.android.apex.compressed.v1"], 224 tools: ["soong_zip"], 225 cmd: "unzip -q $(in) -d $(genDir) && " + // unzip input 226 "echo 'different-key' >> $(genDir)/apex_pubkey && " + // modify the public key 227 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + // repack the compressed APEX 228 "-o $(genDir)/com.android.apex.compressed_key_mismatch_with_original.capex", 229} 230 231java_genrule { 232 // Generates an apex which has a different manifest outside the filesystem 233 // image. 234 name: "gen_manifest_mismatch_compressed_apex_v2", 235 out: ["com.android.apex.compressed.v2_manifest_mismatch.apex"], 236 srcs: [":com.android.apex.compressed.v2_original"], 237 tools: [ 238 "soong_zip", 239 "zipalign", 240 "conv_apex_manifest", 241 ], 242 cmd: "unzip -q $(in) -d $(genDir) && " + 243 "$(location conv_apex_manifest) setprop version 137 $(genDir)/apex_manifest.pb && " + 244 "$(location soong_zip) -d -C $(genDir) -D $(genDir) " + 245 "-s apex_manifest.pb -s apex_payload.img -s apex_pubkey " + 246 "-o $(genDir)/unaligned.apex && " + 247 "$(location zipalign) -f 4096 $(genDir)/unaligned.apex " + 248 "$(genDir)/com.android.apex.compressed.v2_manifest_mismatch.apex", 249} 250 251apex { 252 name: "com.android.apex.compressed.v1_different_digest_original", 253 manifest: "manifest_compressed.json", 254 file_contexts: ":apex.test-file_contexts", 255 prebuilts: ["hash_of_dev_null"], 256 key: "com.android.apex.compressed.key", 257 installable: false, 258 compressible: false, 259 updatable: false, 260} 261 262apex { 263 name: "com.android.apex.compressed.v2", 264 manifest: "manifest_compressed_v2.json", 265 file_contexts: ":apex.test-file_contexts", 266 prebuilts: ["sample_prebuilt_file"], 267 key: "com.android.apex.compressed.key", 268 installable: false, 269 test_only_force_compression: true, 270 updatable: false, 271} 272 273apex { 274 name: "com.android.apex.compressed.v2_original", 275 manifest: "manifest_compressed_v2.json", 276 file_contexts: ":apex.test-file_contexts", 277 prebuilts: ["sample_prebuilt_file"], 278 key: "com.android.apex.compressed.key", 279 installable: false, 280 compressible: false, 281 updatable: false, 282} 283 284apex { 285 name: "apex.apexd_test_f2fs", 286 manifest: "manifest.json", 287 file_contexts: ":apex.test-file_contexts", 288 prebuilts: ["sample_prebuilt_file"], 289 key: "com.android.apex.test_package.key", 290 installable: false, 291 min_sdk_version: "current", 292 payload_fs_type: "f2fs", 293 updatable: false, 294} 295 296apex { 297 name: "apex.apexd_test_erofs", 298 manifest: "manifest.json", 299 file_contexts: ":apex.test-file_contexts", 300 prebuilts: ["sample_prebuilt_file"], 301 key: "com.android.apex.test_package.key", 302 installable: false, 303 min_sdk_version: "current", 304 payload_fs_type: "erofs", 305 updatable: false, 306} 307 308apex { 309 name: "apex.apexd_test_v2", 310 manifest: "manifest_v2.json", 311 file_contexts: ":apex.test-file_contexts", 312 prebuilts: ["sample_prebuilt_file"], 313 key: "com.android.apex.test_package.key", 314 installable: false, 315 updatable: false, 316} 317 318apex { 319 name: "apex.apexd_test_v2_legacy", 320 manifest: "manifest_v2.json", 321 file_contexts: ":apex.test-file_contexts", 322 prebuilts: ["sample_prebuilt_file"], 323 key: "com.android.apex.test_package.key", 324 installable: false, 325 min_sdk_version: "29", // add apex_manifest.json as well 326} 327 328java_genrule { 329 name: "apex.apexd_test_v2_no_pb", 330 srcs: [":apex.apexd_test_v2_legacy"], 331 out: ["apex.apexd_test_v2_no_pb.apex"], 332 tools: ["zip2zip"], 333 cmd: "$(location zip2zip) -i $(in) -x apex_manifest.pb -o $(out)", // remove apex_manifest.pb 334} 335 336apex { 337 name: "apex.apexd_test_v3", 338 manifest: "manifest_v3.json", 339 file_contexts: ":apex.test-file_contexts", 340 prebuilts: ["sample_prebuilt_file"], 341 key: "com.android.apex.test_package.key", 342 installable: false, 343 updatable: false, 344} 345 346apex_key { 347 name: "com.android.apex.test_package.no_inst_key.key", 348 public_key: "com.android.apex.test_package.no_inst_key.avbpubkey", 349 private_key: "com.android.apex.test_package.no_inst_key.pem", 350 installable: true, // set to true to prevent bundling into the APEX 351} 352 353apex { 354 name: "apex.apexd_test_no_inst_key", 355 manifest: "manifest_no_inst_key.json", 356 file_contexts: ":apex.test-file_contexts", 357 prebuilts: ["sample_prebuilt_file"], 358 key: "com.android.apex.test_package.no_inst_key.key", 359 installable: false, 360 updatable: false, 361} 362 363apex { 364 name: "apex.apexd_test_f2fs_no_inst_key", 365 manifest: "manifest_no_inst_key.json", 366 file_contexts: ":apex.test-file_contexts", 367 prebuilts: ["sample_prebuilt_file"], 368 key: "com.android.apex.test_package.no_inst_key.key", 369 installable: false, 370 payload_fs_type: "f2fs", 371 updatable: false, 372} 373 374apex { 375 name: "apex.apexd_test_erofs_no_inst_key", 376 manifest: "manifest_no_inst_key.json", 377 file_contexts: ":apex.test-file_contexts", 378 prebuilts: ["sample_prebuilt_file"], 379 key: "com.android.apex.test_package.no_inst_key.key", 380 installable: false, 381 payload_fs_type: "erofs", 382 updatable: false, 383} 384 385apex_key { 386 name: "com.android.apex.test_package_2.key", 387 public_key: "com.android.apex.test_package_2.avbpubkey", 388 private_key: "com.android.apex.test_package_2.pem", 389 installable: false, 390} 391 392apex { 393 name: "apex.apexd_test_different_app", 394 manifest: "manifest_different_app.json", 395 file_contexts: ":apex.test-file_contexts", 396 prebuilts: ["sample_prebuilt_file"], 397 key: "com.android.apex.test_package_2.key", 398 installable: false, 399 updatable: false, 400} 401 402apex { 403 name: "apex.apexd_test_nocode", 404 manifest: "manifest_nocode.json", 405 file_contexts: ":apex.test-file_contexts", 406 prebuilts: ["sample_prebuilt_file"], 407 key: "com.android.apex.test_package.key", 408 installable: false, 409 updatable: false, 410} 411 412prebuilt_etc { 413 name: "another_prebuilt_file", 414 src: "another_prebuilt_file", 415} 416 417prebuilt_apex { 418 name: "apex.corrupted_b146895998", 419 src: "corrupted_b146895998.apex", 420 filename: "corrupted_b146895998.apex", 421 installable: false, 422} 423 424// APEX for banned name test cannot be generated at build time. 425// This file can be generated manually by creating new apex target 426// with manifest name 'sharedlibs', and modify aapt2 to skip validating 427// package name from aapt::util::IsAndroidPackageName(). 428prebuilt_apex { 429 name: "apex.banned_name", 430 src: "sharedlibs.apex", 431 filename: "sharedlibs.apex", 432 installable: false, 433} 434 435// A compressed apex that also provides shared libs. 436// Should be declined by ApexFile::Open. 437apex { 438 name: "com.android.apex.compressed_sharedlibs", 439 manifest: "manifest_compressed_sharedlibs.json", 440 file_contexts: ":apex.test-file_contexts", 441 prebuilts: ["sample_prebuilt_file"], 442 key: "com.android.apex.compressed.key", 443 installable: false, 444 test_only_force_compression: true, 445 updatable: false, 446} 447 448prebuilt_etc { 449 name: "sample_big_prebuilt_file", 450 // Generated by: 451 // $ head -c 1M /dev/urandom > sample_big_prebuilt_file 452 // NOTE: avoid genrule for deterministc builds. 453 src: "sample_big_prebuilt_file", 454 installable: false, 455} 456 457apex { 458 name: "test.rebootless_apex_v1", 459 manifest: "manifest_rebootless.json", 460 file_contexts: ":apex.test-file_contexts", 461 key: "com.android.apex.test_package.key", 462 installable: false, 463 updatable: false, 464 prebuilts: [ 465 // Add a random file (1M) for corruption to be effective 466 "sample_big_prebuilt_file", 467 ], 468 // TODO(ioffe): we should have a separate field to hashtree presence. 469 min_sdk_version: "29", // test requires hashtree to be present. 470} 471 472apex { 473 name: "test.rebootless_apex_v2", 474 manifest: "manifest_rebootless_v2.json", 475 file_contexts: ":apex.test-file_contexts", 476 key: "com.android.apex.test_package.key", 477 installable: false, 478 updatable: false, 479 // TODO(ioffe): we should have a separate field to hashtree presence. 480 min_sdk_version: "29", // test requires hashtree to be present. 481} 482 483apex { 484 name: "test.rebootless_apex_service_v1", 485 manifest: "manifest_rebootless.json", 486 init_rc: ["test_apex_service.rc"], 487 file_contexts: ":apex.test-file_contexts", 488 key: "com.android.apex.test_package.key", 489 installable: false, 490 updatable: false, 491} 492 493apex { 494 name: "test.rebootless_apex_service_v2", 495 manifest: "manifest_rebootless_v2.json", 496 init_rc: ["test_apex_service.rc"], 497 file_contexts: ":apex.test-file_contexts", 498 key: "com.android.apex.test_package.key", 499 installable: false, 500 updatable: false, 501} 502 503apex { 504 name: "test.rebootless_apex_provides_sharedlibs", 505 manifest: "manifest_rebootless_provides_sharedlibs.json", 506 file_contexts: ":apex.test-file_contexts", 507 key: "com.android.apex.test_package.key", 508 installable: false, 509 updatable: false, 510} 511 512apex { 513 name: "test.rebootless_apex_provides_native_libs", 514 manifest: "manifest_rebootless_provides_native_libs.json", 515 file_contexts: ":apex.test-file_contexts", 516 key: "com.android.apex.test_package.key", 517 installable: false, 518 updatable: false, 519} 520 521apex { 522 name: "test.rebootless_apex_requires_shared_apex_libs", 523 manifest: "manifest_rebootless_requires_shared_apex_libs.json", 524 file_contexts: ":apex.test-file_contexts", 525 key: "com.android.apex.test_package.key", 526 installable: false, 527 updatable: false, 528} 529 530apex { 531 name: "test.rebootless_apex_jni_libs", 532 manifest: "manifest_rebootless_jni_libs.json", 533 file_contexts: ":apex.test-file_contexts", 534 key: "com.android.apex.test_package.key", 535 installable: false, 536 updatable: false, 537} 538 539apex { 540 name: "test.rebootless_apex_add_native_lib", 541 manifest: "manifest_rebootless_add_native_lib.json", 542 file_contexts: ":apex.test-file_contexts", 543 key: "com.android.apex.test_package.key", 544 installable: false, 545 updatable: false, 546} 547 548apex { 549 name: "test.rebootless_apex_remove_native_lib", 550 manifest: "manifest_rebootless_remove_native_lib.json", 551 file_contexts: ":apex.test-file_contexts", 552 key: "com.android.apex.test_package.key", 553 installable: false, 554 updatable: false, 555} 556 557apex { 558 name: "test.rebootless_apex_app_in_apex", 559 manifest: "manifest_rebootless_v2.json", 560 file_contexts: ":apex.test-file_contexts", 561 key: "com.android.apex.test_package.key", 562 installable: false, 563 updatable: false, 564 apps: ["AppInRebootlessApex"], 565 // TODO(ioffe): we should have a separate field to hashtree presence. 566 min_sdk_version: "29", // test requires hashtree to be present. 567} 568 569apex { 570 name: "test.rebootless_apex_priv_app_in_apex", 571 manifest: "manifest_rebootless_v2.json", 572 file_contexts: ":apex.test-file_contexts", 573 key: "com.android.apex.test_package.key", 574 installable: false, 575 updatable: false, 576 apps: ["PrivAppInRebootlessApex"], 577 // TODO(ioffe): we should have a separate field to hashtree presence. 578 min_sdk_version: "29", // test requires hashtree to be present. 579} 580 581android_app { 582 name: "AppInRebootlessApex", 583 sdk_version: "29", 584 manifest: "AppInRebootlessApex_AndroidManifest.xml", 585 apex_available: [ 586 "test.rebootless_apex_app_in_apex", 587 ], 588} 589 590android_app { 591 name: "PrivAppInRebootlessApex", 592 sdk_version: "29", 593 privileged: true, 594 manifest: "AppInRebootlessApex_AndroidManifest.xml", 595 apex_available: [ 596 "test.rebootless_apex_priv_app_in_apex", 597 ], 598} 599 600apex_test { 601 name: "apex.apexd_test_classpath", 602 bootclasspath_fragments: ["apex.apexd_test_bootclasspath-fragment"], 603 systemserverclasspath_fragments: ["apex.apexd_test_systemserverclasspath-fragment"], 604 manifest: "manifest.json", 605 prebuilts: ["sample_prebuilt_file"], 606 key: "com.android.apex.test_package.key", 607 file_contexts: ":apex.test-file_contexts", 608 installable: false, // Should never be installed on the systemimage 609 updatable: false, 610} 611 612bootclasspath_fragment_test { 613 name: "apex.apexd_test_bootclasspath-fragment", 614 contents: ["test_framework-apexd"], 615} 616 617systemserverclasspath_fragment { 618 name: "apex.apexd_test_systemserverclasspath-fragment", 619 contents: ["test_service-apexd"], 620} 621 622java_sdk_library { 623 name: "test_framework-apexd", 624 defaults: ["framework-module-defaults"], 625 srcs: ["src/com/android/apex/test/Test.java"], 626 permitted_packages: ["com.android.apex.test"], 627 min_sdk_version: "30", 628 629 // Test only SDK, don't check against released APIs. 630 unsafe_ignore_missing_latest_api: true, 631 // Output the api files to a special directory that won't trigger an API 632 // review as it is a test only API. 633 api_dir: "apis_for_tests", 634 // Testing only. 635 no_dist: true, 636} 637 638java_sdk_library { 639 name: "test_service-apexd", 640 defaults: ["framework-system-server-module-defaults"], 641 srcs: ["src/com/android/apex/test/Test.java"], 642 permitted_packages: ["com.android.apex.test"], 643 min_sdk_version: "30", 644 645 // Test only SDK, don't check against released APIs. 646 unsafe_ignore_missing_latest_api: true, 647 // Output the api files to a special directory that won't trigger an API 648 // review as it is a test only API. 649 api_dir: "apis_for_tests", 650 // Testing only. 651 no_dist: true, 652} 653