xref: /aosp_15_r20/system/apex/apexd/apexd_testdata/Android.bp (revision 33f3758387333dbd2962d7edbd98681940d895da)
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