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