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