1package {
2    default_applicable_licenses: ["Android-Apache-2.0"],
3}
4
5android_app_certificate {
6    name: "MicrodroidTestAppCert",
7
8    // The default app cert is the same as the default platform cert
9    // (on a test-keys build), which means we end up getting assigned
10    // the permissions via signature and can't reliably disclaim
11    // them. So instead we use our own custom cert. See b/290582742.
12    // Created via: development/tools/make_key microdroid_test_app '/CN=microdroid_test_app'
13    certificate: "microdroid_test_app",
14}
15
16java_defaults {
17    name: "MicrodroidTestAppsDefaults",
18    test_suites: [
19        "cts",
20        "vts",
21        "general-tests",
22    ],
23    static_libs: [
24        "com.android.microdroid.testservice-java",
25        "com.android.microdroid.test.vmshare_service-java",
26        "com.android.virt.vm_attestation.testservice-java",
27    ],
28    certificate: ":MicrodroidTestAppCert",
29    sdk_version: "test_current",
30    jni_uses_platform_apis: true,
31    use_embedded_native_libs: true,
32    // We only support 64-bit ABI, but CTS demands all APKs to be multi-ABI.
33    compile_multilib: "both",
34}
35
36java_defaults {
37    name: "MicrodroidVersionsTestAppDefaults",
38    srcs: ["src/java/**/*.java"],
39    defaults: ["MicrodroidTestAppsDefaults"],
40    static_libs: [
41        "MicrodroidDeviceTestHelper",
42        "VmAttestationTestUtil",
43        "androidx.test.runner",
44        "androidx.test.ext.junit",
45        "authfs_test_apk_assets",
46        "cbor-java",
47        "truth",
48        "compatibility-common-util-devicesidelib",
49        "measure_io_as_jar",
50    ],
51    jni_libs: [
52        "MicrodroidTestNativeLib",
53        "MicrodroidIdleNativeLib",
54        "MicrodroidEmptyNativeLib",
55        "MicrodroidExitNativeLib",
56        "MicrodroidPrivateLinkingNativeLib",
57        "MicrodroidCrashNativeLib",
58        "libmicrodroid_testlib_rust",
59        "libvm_attestation_test_payload",
60
61        // Non-VM payload libraries
62        "libhwtrust_jni",
63    ],
64    min_sdk_version: "33",
65}
66
67android_test {
68    name: "MicrodroidTestApp",
69    defaults: ["MicrodroidVersionsTestAppDefaults"],
70    manifest: "AndroidManifestV5.xml",
71    // Defined in ../vmshareapp/Android.bp
72    data: [
73        ":MicrodroidTestAppUpdated",
74        ":MicrodroidVmShareApp",
75        ":test_microdroid_vendor_image",
76        ":test_microdroid_vendor_image_unsigned",
77    ],
78}
79
80android_test_helper_app {
81    name: "MicrodroidTestAppUpdated",
82    defaults: ["MicrodroidVersionsTestAppDefaults"],
83    manifest: "AndroidManifestV6.xml",
84}
85
86// Defaults shared between MicrodroidTestNativeLib and MicrodroidPayloadInOtherAppNativeLib shared
87// libs. They are expected to share everything apart from the name, so that one app
88// (MicrodroidTestApp) can start a payload defined in the another app (MicrodroidVmShareApp).
89cc_defaults {
90    name: "MicrodroidTestNativeLibDefaults",
91    defaults: ["avf_build_flags_cc"],
92    srcs: ["src/native/testbinary.cpp"],
93    stl: "libc++_static",
94    header_libs: ["vm_payload_restricted_headers"],
95    shared_libs: [
96        "libbinder_ndk",
97        "libcap",
98        "MicrodroidTestNativeLibSub",
99        "libvm_payload#current",
100    ],
101    static_libs: [
102        "com.android.microdroid.testservice-ndk",
103        "libbase",
104        "libfstab",
105        "libfsverity_digests_proto_cc",
106        "liblog",
107        "libprotobuf-cpp-lite-ndk",
108    ],
109}
110
111cc_library_shared {
112    name: "MicrodroidPayloadInOtherAppNativeLib",
113    defaults: ["MicrodroidTestNativeLibDefaults"],
114}
115
116cc_library_shared {
117    name: "MicrodroidTestNativeLib",
118    defaults: ["MicrodroidTestNativeLibDefaults"],
119}
120
121cc_library_shared {
122    name: "MicrodroidTestNativeLibSub",
123    defaults: ["avf_build_flags_cc"],
124    srcs: ["src/native/testlib.cpp"],
125    stl: "libc++_static",
126}
127
128cc_library_shared {
129    name: "MicrodroidIdleNativeLib",
130    defaults: ["avf_build_flags_cc"],
131    srcs: ["src/native/idlebinary.cpp"],
132    header_libs: ["vm_payload_headers"],
133    stl: "libc++_static",
134}
135
136// An empty payload missing AVmPayload_main
137cc_library_shared {
138    name: "MicrodroidEmptyNativeLib",
139    defaults: ["avf_build_flags_cc"],
140    srcs: ["src/native/emptybinary.cpp"],
141    stl: "none",
142}
143
144// A payload that exits immediately on start
145cc_library_shared {
146    name: "MicrodroidExitNativeLib",
147    defaults: ["avf_build_flags_cc"],
148    srcs: ["src/native/exitbinary.cpp"],
149    header_libs: ["vm_payload_headers"],
150    stl: "libc++_static",
151}
152
153// A payload which tries to link against libselinux, one of private libraries
154cc_library_shared {
155    name: "MicrodroidPrivateLinkingNativeLib",
156    defaults: ["avf_build_flags_cc"],
157    srcs: ["src/native/idlebinary.cpp"],
158    header_libs: ["vm_payload_headers"],
159    // HACK: linking against "libselinux" will embed libselinux.so into the apk
160    // link against a stub to prevent libselinux.so from being embedded
161    shared_libs: ["libselinux#latest"],
162    stl: "libc++_static",
163}
164
165// A payload that crashes immediately on start
166cc_library_shared {
167    name: "MicrodroidCrashNativeLib",
168    defaults: ["avf_build_flags_cc"],
169    srcs: ["src/native/crashbinary.cpp"],
170    header_libs: ["vm_payload_headers"],
171    stl: "libc++_static",
172}
173
174// A payload written in Rust, using the Rust wrapper for the VM payload API.
175rust_ffi_shared {
176    name: "libmicrodroid_testlib_rust",
177    crate_name: "microdroid_testlib_rust",
178    defaults: ["avf_build_flags_rust"],
179    prefer_rlib: true,
180    srcs: ["src/native/testbinary.rs"],
181    compile_multilib: "both",
182    rustlibs: [
183        "com.android.microdroid.testservice-rust",
184        "libandroid_logger",
185        "libanyhow",
186        "libavflog",
187        "libcstr",
188        "liblog_rust",
189        "libvm_payload_rs",
190    ],
191}
192
193rust_ffi_shared {
194    name: "libhwtrust_jni",
195    crate_name: "hwtrust_jni",
196    srcs: ["src/native/hwtrust_jni.rs"],
197    prefer_rlib: true,
198    rustlibs: [
199        "libandroid_logger",
200        "libanyhow",
201        "liblog_rust",
202        "libhwtrust",
203        "libjni",
204    ],
205    shared_libs: [
206        "libcrypto",
207    ],
208}
209