• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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