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.compressed.key", 31 public_key: "com.android.apex.compressed.avbpubkey", 32 private_key: "com.android.apex.compressed.pem", 33 installable: false, 34} 35 36apex { 37 name: "apex.apexd_test", 38 manifest: "manifest.json", 39 file_contexts: ":apex.test-file_contexts", 40 prebuilts: ["sample_prebuilt_file"], 41 key: "com.android.apex.test_package.key", 42 installable: false, 43 min_sdk_version: "29", // test requires hashtree to be present. 44} 45 46apex { 47 name: "com.android.apex.compressed.v1", 48 manifest: "manifest_compressed.json", 49 file_contexts: ":apex.test-file_contexts", 50 prebuilts: ["sample_prebuilt_file"], 51 key: "com.android.apex.compressed.key", 52 installable: false, 53 test_only_force_compression: true, 54 updatable: false, 55} 56 57apex { 58 name: "com.android.apex.compressed.v1_different_digest", 59 manifest: "manifest_compressed.json", 60 file_contexts: ":apex.test-file_contexts", 61 prebuilts: ["hash_of_dev_null"], 62 key: "com.android.apex.compressed.key", 63 installable: false, 64 test_only_force_compression: true, 65 updatable: false, 66} 67 68genrule { 69 // Generates a compressed apex which doesn't have an original_apex file in it 70 name: "gen_capex_without_apex", 71 out: ["com.android.apex.compressed.v1_without_apex.capex"], 72 srcs: [":com.android.apex.compressed.v1"], 73 tools: ["soong_zip"], 74 cmd: "unzip -q $(in) -d $(genDir) && rm $(genDir)/original_apex && " + 75 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 76 "-o $(genDir)/com.android.apex.compressed.v1_without_apex.capex" 77} 78 79genrule { 80 // Generates a compressed apex which has different version of original_apex in it 81 name: "gen_capex_with_v2_apex", 82 out: ["com.android.apex.compressed.v1_with_v2_apex.capex"], 83 srcs: [":com.android.apex.compressed.v2"], 84 tools: ["soong_zip", "conv_apex_manifest"], 85 cmd: "unzip -q $(in) -d $(genDir) && " + 86 "$(location conv_apex_manifest) setprop version 1 $(genDir)/apex_manifest.pb && " + 87 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 88 "-o $(genDir)/com.android.apex.compressed.v1_with_v2_apex.capex" 89} 90 91genrule { 92 // Generates a compressed apex which can be opened but not decompressed 93 name: "gen_capex_not_decompressible", 94 out: ["com.android.apex.compressed.v1_not_decompressible.capex"], 95 srcs: [":com.android.apex.compressed.v1"], 96 tools: ["soong_zip", "conv_apex_manifest"], 97 cmd: "unzip -q $(in) -d $(genDir) && echo '' > $(genDir)/original_apex && " + 98 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " + 99 "-o $(genDir)/com.android.apex.compressed.v1_not_decompressible.capex" 100} 101 102genrule { 103 // Generates a capex which has same module name as com.android.apex.compressed, but 104 // is contains a different public key. 105 name: "gen_key_mismatch_capex", 106 out: ["com.android.apex.compressed_different_key.capex"], 107 srcs: [":apex.apexd_test_no_inst_key"], 108 tools: ["soong_zip", "zipalign", "conv_apex_manifest", "apex_compression_tool"], 109 cmd: "unzip -q $(in) -d $(genDir) && " + 110 "$(location conv_apex_manifest) setprop name com.android.apex.compressed $(genDir)/apex_manifest.pb && " + 111 "$(location soong_zip) -d -C $(genDir) -D $(genDir) " + 112 "-s apex_manifest.pb -s apex_payload.img -s apex_pubkey " + 113 "-o $(genDir)/unaligned.apex && " + 114 "$(location zipalign) -f 4096 $(genDir)/unaligned.apex " + 115 "$(genDir)/com.android.apex.compressed_different_key.apex && " + 116 "$(location apex_compression_tool) compress " + 117 "--apex_compression_tool_path='out/soong/host/linux-x86/bin:prebuilts/sdk/tools/linux/bin' " + 118 "--input=$(genDir)/com.android.apex.compressed_different_key.apex " + 119 "--output=$(genDir)/com.android.apex.compressed_different_key.capex" 120} 121 122genrule { 123 // Generates a capex which has a different public key than original_apex 124 name: "gen_key_mismatch_with_original_capex", 125 out: ["com.android.apex.compressed_key_mismatch_with_original.capex"], 126 srcs: [":com.android.apex.compressed.v1"], 127 tools: ["soong_zip"], 128 cmd: "unzip -q $(in) -d $(genDir) && " + // unzip input 129 "echo 'different-key' >> $(genDir)/apex_pubkey && " + // modify the public key 130 "$(location soong_zip) -d -C $(genDir) -D $(genDir) -L 9 " +// repack the compressed APEX 131 "-o $(genDir)/com.android.apex.compressed_key_mismatch_with_original.capex", 132} 133 134genrule { 135 // Generates an apex which has a different manifest outside the filesystem 136 // image. 137 name: "gen_manifest_mismatch_compressed_apex_v2", 138 out: ["com.android.apex.compressed.v2_manifest_mismatch.apex"], 139 srcs: [":com.android.apex.compressed.v2_original"], 140 tools: ["soong_zip", "zipalign", "conv_apex_manifest"], 141 cmd: "unzip -q $(in) -d $(genDir) && " + 142 "$(location conv_apex_manifest) setprop version 137 $(genDir)/apex_manifest.pb && " + 143 "$(location soong_zip) -d -C $(genDir) -D $(genDir) " + 144 "-s apex_manifest.pb -s apex_payload.img -s apex_pubkey " + 145 "-o $(genDir)/unaligned.apex && " + 146 "$(location zipalign) -f 4096 $(genDir)/unaligned.apex " + 147 "$(genDir)/com.android.apex.compressed.v2_manifest_mismatch.apex" 148} 149 150apex { 151 name: "com.android.apex.compressed.v1_original", 152 manifest: "manifest_compressed.json", 153 file_contexts: ":apex.test-file_contexts", 154 prebuilts: ["sample_prebuilt_file"], 155 key: "com.android.apex.compressed.key", 156 installable: false, 157 compressible: false, 158 updatable: false, 159} 160 161apex { 162 name: "com.android.apex.compressed.v1_different_digest_original", 163 manifest: "manifest_compressed.json", 164 file_contexts: ":apex.test-file_contexts", 165 prebuilts: ["hash_of_dev_null"], 166 key: "com.android.apex.compressed.key", 167 installable: false, 168 compressible: false, 169 updatable: false, 170} 171 172apex { 173 name: "com.android.apex.compressed.v2", 174 manifest: "manifest_compressed_v2.json", 175 file_contexts: ":apex.test-file_contexts", 176 prebuilts: ["sample_prebuilt_file"], 177 key: "com.android.apex.compressed.key", 178 installable: false, 179 test_only_force_compression: true, 180 updatable: false, 181} 182 183apex { 184 name: "com.android.apex.compressed.v2_original", 185 manifest: "manifest_compressed_v2.json", 186 file_contexts: ":apex.test-file_contexts", 187 prebuilts: ["sample_prebuilt_file"], 188 key: "com.android.apex.compressed.key", 189 installable: false, 190 compressible: false, 191 updatable: false, 192} 193 194apex { 195 name: "apex.apexd_test_f2fs", 196 manifest: "manifest.json", 197 file_contexts: ":apex.test-file_contexts", 198 prebuilts: ["sample_prebuilt_file"], 199 key: "com.android.apex.test_package.key", 200 installable: false, 201 min_sdk_version: "current", 202 payload_fs_type: "f2fs", 203} 204 205apex { 206 name: "apex.apexd_test_no_hashtree", 207 manifest: "manifest.json", 208 file_contexts: ":apex.test-file_contexts", 209 prebuilts: ["sample_prebuilt_file"], 210 key: "com.android.apex.test_package.key", 211 installable: false, 212 generate_hashtree: false, 213 updatable: false, 214} 215 216// This APEX has same name and version as apex.apexd_test_no_hashtree, but has 217// different content. It's used to test that staging a same version of already 218// active APEX without hashtree doesn't impact already active one. 219apex { 220 name: "apex.apexd_test_no_hashtree_2", 221 manifest: "manifest.json", 222 file_contexts: ":apex.test-file_contexts", 223 prebuilts: [ 224 "another_prebuilt_file", 225 "sample_prebuilt_file", 226 ], 227 key: "com.android.apex.test_package.key", 228 installable: false, 229 generate_hashtree: false, 230 updatable: false, 231} 232 233apex { 234 name: "apex.apexd_test_v2", 235 manifest: "manifest_v2.json", 236 file_contexts: ":apex.test-file_contexts", 237 prebuilts: ["sample_prebuilt_file"], 238 key: "com.android.apex.test_package.key", 239 installable: false, 240 updatable: false, 241} 242 243apex { 244 name: "apex.apexd_test_v2_legacy", 245 manifest: "manifest_v2.json", 246 file_contexts: ":apex.test-file_contexts", 247 prebuilts: ["sample_prebuilt_file"], 248 key: "com.android.apex.test_package.key", 249 installable: false, 250 min_sdk_version: "29", // add apex_manifest.json as well 251} 252 253genrule { 254 name: "apex.apexd_test_v2_no_pb", 255 srcs: [":apex.apexd_test_v2_legacy"], 256 out: ["apex.apexd_test_v2_no_pb.apex"], 257 tools: ["zip2zip"], 258 cmd: "$(location zip2zip) -i $(in) -x apex_manifest.pb -o $(out)", // remove apex_manifest.pb 259} 260 261apex { 262 name: "apex.apexd_test_v3", 263 manifest: "manifest_v3.json", 264 file_contexts: ":apex.test-file_contexts", 265 prebuilts: ["sample_prebuilt_file"], 266 key: "com.android.apex.test_package.key", 267 installable: false, 268 updatable: false, 269} 270 271apex_key { 272 name: "com.android.apex.test_package.preinstall.key", 273 public_key: "com.android.apex.test_package.preinstall.avbpubkey", 274 private_key: "com.android.apex.test_package.preinstall.pem", 275 installable: false, 276} 277 278apex { 279 name: "apex.apexd_test_preinstall", 280 manifest: "manifest_preinstall.json", 281 file_contexts: ":apex.test-file_contexts", 282 prebuilts: ["sample_prebuilt_file"], 283 key: "com.android.apex.test_package.preinstall.key", 284 binaries: ["apex_test_preInstallHook"], 285 installable: false, 286 updatable: false, 287} 288 289apex_key { 290 name: "com.android.apex.test_package.postinstall.key", 291 public_key: "com.android.apex.test_package.postinstall.avbpubkey", 292 private_key: "com.android.apex.test_package.postinstall.pem", 293 installable: false, 294} 295 296apex { 297 name: "apex.apexd_test_postinstall", 298 manifest: "manifest_postinstall.json", 299 file_contexts: ":apex.test-file_contexts", 300 prebuilts: ["sample_prebuilt_file"], 301 key: "com.android.apex.test_package.postinstall.key", 302 binaries: ["apex_test_postInstallHook"], 303 installable: false, 304 updatable: false, 305} 306 307apex_key { 308 name: "com.android.apex.test_package.prepostinstall.fail.key", 309 public_key: "com.android.apex.test_package.prepostinstall.fail.avbpubkey", 310 private_key: "com.android.apex.test_package.prepostinstall.fail.pem", 311 installable: false, 312} 313 314apex { 315 name: "apex.apexd_test_prepostinstall.fail", 316 manifest: "manifest_prepostinstall.fail.json", 317 file_contexts: ":apex.test-file_contexts", 318 prebuilts: ["sample_prebuilt_file"], 319 key: "com.android.apex.test_package.prepostinstall.fail.key", 320 binaries: ["apex_test_prePostInstallHookFail"], 321 installable: false, 322 updatable: false, 323} 324 325apex_key { 326 name: "com.android.apex.test_package.no_inst_key.key", 327 public_key: "com.android.apex.test_package.no_inst_key.avbpubkey", 328 private_key: "com.android.apex.test_package.no_inst_key.pem", 329 installable: true, // set to true to prevent bundling into the APEX 330} 331 332apex { 333 name: "apex.apexd_test_no_inst_key", 334 manifest: "manifest_no_inst_key.json", 335 file_contexts: ":apex.test-file_contexts", 336 prebuilts: ["sample_prebuilt_file"], 337 key: "com.android.apex.test_package.no_inst_key.key", 338 installable: false, 339 updatable: false, 340} 341 342apex { 343 name: "apex.apexd_test_f2fs_no_inst_key", 344 manifest: "manifest_no_inst_key.json", 345 file_contexts: ":apex.test-file_contexts", 346 prebuilts: ["sample_prebuilt_file"], 347 key: "com.android.apex.test_package.no_inst_key.key", 348 installable: false, 349 payload_fs_type: "f2fs", 350 updatable: false, 351} 352 353apex_key { 354 name: "com.android.apex.test_package_2.key", 355 public_key: "com.android.apex.test_package_2.avbpubkey", 356 private_key: "com.android.apex.test_package_2.pem", 357 installable: false, 358} 359 360apex { 361 name: "apex.apexd_test_different_app", 362 manifest: "manifest_different_app.json", 363 file_contexts: ":apex.test-file_contexts", 364 prebuilts: ["sample_prebuilt_file"], 365 key: "com.android.apex.test_package_2.key", 366 installable: false, 367 updatable: false, 368} 369 370sh_binary { 371 name: "apex_test_preInstallHook", 372 src: "preInstallHook.sh", 373} 374 375sh_binary { 376 name: "apex_test_postInstallHook", 377 src: "postInstallHook.sh", 378} 379 380sh_binary { 381 name: "apex_test_prePostInstallHookFail", 382 src: "fail.sh", 383} 384 385apex { 386 name: "apex.apexd_test_nocode", 387 manifest: "manifest_nocode.json", 388 file_contexts: ":apex.test-file_contexts", 389 prebuilts: ["sample_prebuilt_file"], 390 key: "com.android.apex.test_package.key", 391 installable: false, 392 updatable: false, 393} 394 395prebuilt_etc { 396 name: "another_prebuilt_file", 397 src: "another_prebuilt_file", 398} 399 400prebuilt_apex { 401 name: "apex.corrupted_b146895998", 402 src: "corrupted_b146895998.apex", 403 filename: "corrupted_b146895998.apex", 404 installable: false, 405} 406 407// APEX for banned name test cannot be generated at build time. 408// This file can be generated manually by creating new apex target 409// with manifest name 'sharedlibs', and modify aapt2 to skip validating 410// package name from aapt::util::IsAndroidPackageName(). 411prebuilt_apex { 412 name: "apex.banned_name", 413 src: "sharedlibs.apex", 414 filename: "sharedlibs.apex", 415 installable: false, 416} 417 418// A compressed apex that also provides shared libs. 419// Should be declined by ApexFile::Open. 420apex { 421 name: "com.android.apex.compressed_sharedlibs", 422 manifest: "manifest_compressed_sharedlibs.json", 423 file_contexts: ":apex.test-file_contexts", 424 prebuilts: ["sample_prebuilt_file"], 425 key: "com.android.apex.compressed.key", 426 installable: false, 427 test_only_force_compression: true, 428 updatable: false, 429} 430 431apex { 432 name: "test.rebootless_apex_v1", 433 manifest: "manifest_rebootless.json", 434 file_contexts: ":apex.test-file_contexts", 435 key: "com.android.apex.test_package.key", 436 installable: false, 437 updatable: false, 438 // TODO(ioffe): we should have a separate field to hashtree presence. 439 min_sdk_version: "29", // test requires hashtree to be present. 440} 441 442apex { 443 name: "test.rebootless_apex_v2", 444 manifest: "manifest_rebootless_v2.json", 445 file_contexts: ":apex.test-file_contexts", 446 key: "com.android.apex.test_package.key", 447 installable: false, 448 updatable: false, 449 // TODO(ioffe): we should have a separate field to hashtree presence. 450 min_sdk_version: "29", // test requires hashtree to be present. 451} 452 453apex { 454 name: "test.rebootless_apex_v2_no_hashtree", 455 manifest: "manifest_rebootless_v2.json", 456 file_contexts: ":apex.test-file_contexts", 457 key: "com.android.apex.test_package.key", 458 installable: false, 459 updatable: false, 460 generate_hashtree: false, 461} 462 463apex { 464 name: "test.rebootless_apex_provides_sharedlibs", 465 manifest: "manifest_rebootless_provides_sharedlibs.json", 466 file_contexts: ":apex.test-file_contexts", 467 key: "com.android.apex.test_package.key", 468 installable: false, 469 updatable: false, 470} 471 472apex { 473 name: "test.rebootless_apex_provides_native_libs", 474 manifest: "manifest_rebootless_provides_native_libs.json", 475 file_contexts: ":apex.test-file_contexts", 476 key: "com.android.apex.test_package.key", 477 installable: false, 478 updatable: false, 479} 480 481apex { 482 name: "test.rebootless_apex_requires_shared_apex_libs", 483 manifest: "manifest_rebootless_requires_shared_apex_libs.json", 484 file_contexts: ":apex.test-file_contexts", 485 key: "com.android.apex.test_package.key", 486 installable: false, 487 updatable: false, 488} 489 490apex { 491 name: "test.rebootless_apex_jni_libs", 492 manifest: "manifest_rebootless_jni_libs.json", 493 file_contexts: ":apex.test-file_contexts", 494 key: "com.android.apex.test_package.key", 495 installable: false, 496 updatable: false, 497} 498 499apex { 500 name: "test.rebootless_apex_add_native_lib", 501 manifest: "manifest_rebootless_add_native_lib.json", 502 file_contexts: ":apex.test-file_contexts", 503 key: "com.android.apex.test_package.key", 504 installable: false, 505 updatable: false, 506} 507 508apex { 509 name: "test.rebootless_apex_remove_native_lib", 510 manifest: "manifest_rebootless_remove_native_lib.json", 511 file_contexts: ":apex.test-file_contexts", 512 key: "com.android.apex.test_package.key", 513 installable: false, 514 updatable: false, 515} 516 517apex { 518 name: "test.rebootless_apex_app_in_apex", 519 manifest: "manifest_rebootless_v2.json", 520 file_contexts: ":apex.test-file_contexts", 521 key: "com.android.apex.test_package.key", 522 installable: false, 523 updatable: false, 524 apps: ["AppInRebootlessApex"], 525 // TODO(ioffe): we should have a separate field to hashtree presence. 526 min_sdk_version: "29", // test requires hashtree to be present. 527} 528 529apex { 530 name: "test.rebootless_apex_priv_app_in_apex", 531 manifest: "manifest_rebootless_v2.json", 532 file_contexts: ":apex.test-file_contexts", 533 key: "com.android.apex.test_package.key", 534 installable: false, 535 updatable: false, 536 apps: ["PrivAppInRebootlessApex"], 537 // TODO(ioffe): we should have a separate field to hashtree presence. 538 min_sdk_version: "29", // test requires hashtree to be present. 539} 540 541android_app { 542 name: "AppInRebootlessApex", 543 sdk_version: "29", 544 manifest: "AppInRebootlessApex_AndroidManifest.xml", 545 apex_available: [ 546 "test.rebootless_apex_app_in_apex", 547 ], 548} 549 550android_app { 551 name: "PrivAppInRebootlessApex", 552 sdk_version: "29", 553 privileged: true, 554 manifest: "AppInRebootlessApex_AndroidManifest.xml", 555 apex_available: [ 556 "test.rebootless_apex_priv_app_in_apex", 557 ], 558} 559