blob: 975bafedbd33d7a0685f7298b02d3f7ee780592d [file] [log] [blame]
Jiyong Park9b8253b2021-06-28 18:37:26 +09001// Signature format: 2.0
Alan Stokesca0d27e2022-10-03 11:26:13 +01002package android.system.virtualmachine {
3
4 public class VirtualMachine implements java.lang.AutoCloseable {
Steven Moreland89089232025-02-24 22:27:33 +00005 method @NonNull @WorkerThread public static android.os.IBinder binderFromPreconnectedClient(@NonNull android.system.virtualmachine.VirtualMachine.VsockConnectionProvider) throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +01006 method public void clearCallback();
Alan Stokes3afd9f92023-01-04 17:28:59 +00007 method @WorkerThread public void close();
8 method @NonNull @WorkerThread public android.os.IBinder connectToVsockServer(@IntRange(from=android.system.virtualmachine.VirtualMachine.MIN_VSOCK_PORT, to=android.system.virtualmachine.VirtualMachine.MAX_VSOCK_PORT) long) throws android.system.virtualmachine.VirtualMachineException;
9 method @NonNull @WorkerThread public android.os.ParcelFileDescriptor connectVsock(@IntRange(from=android.system.virtualmachine.VirtualMachine.MIN_VSOCK_PORT, to=android.system.virtualmachine.VirtualMachine.MAX_VSOCK_PORT) long) throws android.system.virtualmachine.VirtualMachineException;
10 method @NonNull @WorkerThread public android.system.virtualmachine.VirtualMachineConfig getConfig();
11 method @NonNull @WorkerThread public java.io.InputStream getConsoleOutput() throws android.system.virtualmachine.VirtualMachineException;
12 method @NonNull @WorkerThread public java.io.InputStream getLogOutput() throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +010013 method @NonNull public String getName();
Alan Stokes3afd9f92023-01-04 17:28:59 +000014 method @WorkerThread public int getStatus();
15 method @RequiresPermission(android.system.virtualmachine.VirtualMachine.MANAGE_VIRTUAL_MACHINE_PERMISSION) @WorkerThread public void run() throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +010016 method public void setCallback(@NonNull java.util.concurrent.Executor, @NonNull android.system.virtualmachine.VirtualMachineCallback);
Alan Stokes3afd9f92023-01-04 17:28:59 +000017 method @NonNull @WorkerThread public android.system.virtualmachine.VirtualMachineConfig setConfig(@NonNull android.system.virtualmachine.VirtualMachineConfig) throws android.system.virtualmachine.VirtualMachineException;
18 method @WorkerThread public void stop() throws android.system.virtualmachine.VirtualMachineException;
19 method @NonNull @WorkerThread public android.system.virtualmachine.VirtualMachineDescriptor toDescriptor() throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +010020 field public static final String MANAGE_VIRTUAL_MACHINE_PERMISSION = "android.permission.MANAGE_VIRTUAL_MACHINE";
Alan Stokes10c47672022-12-13 17:17:08 +000021 field public static final long MAX_VSOCK_PORT = 4294967295L; // 0xffffffffL
22 field public static final long MIN_VSOCK_PORT = 1024L; // 0x400L
Alan Stokesca0d27e2022-10-03 11:26:13 +010023 field public static final int STATUS_DELETED = 2; // 0x2
24 field public static final int STATUS_RUNNING = 1; // 0x1
25 field public static final int STATUS_STOPPED = 0; // 0x0
26 field public static final String USE_CUSTOM_VIRTUAL_MACHINE_PERMISSION = "android.permission.USE_CUSTOM_VIRTUAL_MACHINE";
27 }
28
Steven Moreland89089232025-02-24 22:27:33 +000029 public static interface VirtualMachine.VsockConnectionProvider {
30 method @NonNull public android.os.ParcelFileDescriptor addConnection() throws android.system.virtualmachine.VirtualMachineException;
31 }
32
Alan Stokesca0d27e2022-10-03 11:26:13 +010033 public interface VirtualMachineCallback {
34 method public void onError(@NonNull android.system.virtualmachine.VirtualMachine, int, @NonNull String);
35 method public void onPayloadFinished(@NonNull android.system.virtualmachine.VirtualMachine, int);
36 method public void onPayloadReady(@NonNull android.system.virtualmachine.VirtualMachine);
37 method public void onPayloadStarted(@NonNull android.system.virtualmachine.VirtualMachine);
Alan Stokesca0d27e2022-10-03 11:26:13 +010038 method public void onStopped(@NonNull android.system.virtualmachine.VirtualMachine, int);
39 field public static final int ERROR_PAYLOAD_CHANGED = 2; // 0x2
40 field public static final int ERROR_PAYLOAD_INVALID_CONFIG = 3; // 0x3
41 field public static final int ERROR_PAYLOAD_VERIFICATION_FAILED = 1; // 0x1
42 field public static final int ERROR_UNKNOWN = 0; // 0x0
43 field public static final int STOP_REASON_BOOTLOADER_INSTANCE_IMAGE_CHANGED = 10; // 0xa
44 field public static final int STOP_REASON_BOOTLOADER_PUBLIC_KEY_MISMATCH = 9; // 0x9
45 field public static final int STOP_REASON_CRASH = 6; // 0x6
Alan Stokesca0d27e2022-10-03 11:26:13 +010046 field public static final int STOP_REASON_HANGUP = 16; // 0x10
47 field public static final int STOP_REASON_INFRASTRUCTURE_ERROR = 0; // 0x0
48 field public static final int STOP_REASON_KILLED = 1; // 0x1
49 field public static final int STOP_REASON_MICRODROID_FAILED_TO_CONNECT_TO_VIRTUALIZATION_SERVICE = 11; // 0xb
50 field public static final int STOP_REASON_MICRODROID_INVALID_PAYLOAD_CONFIG = 14; // 0xe
51 field public static final int STOP_REASON_MICRODROID_PAYLOAD_HAS_CHANGED = 12; // 0xc
52 field public static final int STOP_REASON_MICRODROID_PAYLOAD_VERIFICATION_FAILED = 13; // 0xd
53 field public static final int STOP_REASON_MICRODROID_UNKNOWN_RUNTIME_ERROR = 15; // 0xf
54 field public static final int STOP_REASON_PVM_FIRMWARE_INSTANCE_IMAGE_CHANGED = 8; // 0x8
55 field public static final int STOP_REASON_PVM_FIRMWARE_PUBLIC_KEY_MISMATCH = 7; // 0x7
56 field public static final int STOP_REASON_REBOOT = 5; // 0x5
57 field public static final int STOP_REASON_SHUTDOWN = 3; // 0x3
Alan Stokes7c459e82022-12-06 12:21:49 +000058 field public static final int STOP_REASON_START_FAILED = 4; // 0x4
Alan Stokesca0d27e2022-10-03 11:26:13 +010059 field public static final int STOP_REASON_UNKNOWN = 2; // 0x2
60 field public static final int STOP_REASON_VIRTUALIZATION_SERVICE_DIED = -1; // 0xffffffff
61 }
62
63 public final class VirtualMachineConfig {
Alan Stokes9bffc3b2023-01-25 09:45:54 +000064 method @Nullable public String getApkPath();
David Brazdil7d1e5ec2023-02-06 17:56:29 +000065 method public int getCpuTopology();
66 method public int getDebugLevel();
Alan Stokesff0005f2023-01-30 09:53:00 +000067 method @IntRange(from=0) public long getEncryptedStorageBytes();
Alan Stokes9a411dc2023-01-30 17:54:07 +000068 method @IntRange(from=0) public long getMemoryBytes();
Alan Stokes8f12f2b2023-01-09 09:19:20 +000069 method @Nullable public String getPayloadBinaryName();
Alan Stokesca0d27e2022-10-03 11:26:13 +010070 method public boolean isCompatibleWith(@NonNull android.system.virtualmachine.VirtualMachineConfig);
Shikha Panwara2ff8c52022-11-30 19:25:46 +000071 method public boolean isEncryptedStorageEnabled();
Alan Stokesca0d27e2022-10-03 11:26:13 +010072 method public boolean isProtectedVm();
Inseob Kim8961f102022-12-22 15:29:55 +090073 method public boolean isVmOutputCaptured();
Nikita Ioffe82a40132024-12-11 16:20:36 +000074 method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") public boolean shouldUseHugepages();
David Brazdil7d1e5ec2023-02-06 17:56:29 +000075 field public static final int CPU_TOPOLOGY_MATCH_HOST = 1; // 0x1
76 field public static final int CPU_TOPOLOGY_ONE_CPU = 0; // 0x0
Seungjae Yoofa22bb02022-12-08 16:38:42 +090077 field public static final int DEBUG_LEVEL_FULL = 1; // 0x1
Alan Stokesca0d27e2022-10-03 11:26:13 +010078 field public static final int DEBUG_LEVEL_NONE = 0; // 0x0
79 }
80
81 public static final class VirtualMachineConfig.Builder {
82 ctor public VirtualMachineConfig.Builder(@NonNull android.content.Context);
83 method @NonNull public android.system.virtualmachine.VirtualMachineConfig build();
84 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setApkPath(@NonNull String);
David Brazdil7d1e5ec2023-02-06 17:56:29 +000085 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setCpuTopology(int);
Alan Stokesca0d27e2022-10-03 11:26:13 +010086 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setDebugLevel(int);
Alan Stokesff0005f2023-01-30 09:53:00 +000087 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setEncryptedStorageBytes(@IntRange(from=1) long);
Alan Stokes9a411dc2023-01-30 17:54:07 +000088 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setMemoryBytes(@IntRange(from=1) long);
Alan Stokes8f12f2b2023-01-09 09:19:20 +000089 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setPayloadBinaryName(@NonNull String);
Alan Stokesca0d27e2022-10-03 11:26:13 +010090 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setProtectedVm(boolean);
Nikita Ioffe82a40132024-12-11 16:20:36 +000091 method @FlaggedApi("com.android.system.virtualmachine.flags.promote_set_should_use_hugepages_to_system_api") @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setShouldUseHugepages(boolean);
Inseob Kim8961f102022-12-22 15:29:55 +090092 method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setVmOutputCaptured(boolean);
Alan Stokesca0d27e2022-10-03 11:26:13 +010093 }
94
Alan Stokesa270d692023-02-15 14:07:21 +000095 public final class VirtualMachineDescriptor implements java.lang.AutoCloseable android.os.Parcelable {
96 method public void close();
Alan Stokesca0d27e2022-10-03 11:26:13 +010097 method public int describeContents();
98 method public void writeToParcel(@NonNull android.os.Parcel, int);
99 field @NonNull public static final android.os.Parcelable.Creator<android.system.virtualmachine.VirtualMachineDescriptor> CREATOR;
100 }
101
102 public class VirtualMachineException extends java.lang.Exception {
Alan Stokesca0d27e2022-10-03 11:26:13 +0100103 }
104
105 public class VirtualMachineManager {
Alan Stokes3afd9f92023-01-04 17:28:59 +0000106 method @NonNull @RequiresPermission(android.system.virtualmachine.VirtualMachine.MANAGE_VIRTUAL_MACHINE_PERMISSION) @WorkerThread public android.system.virtualmachine.VirtualMachine create(@NonNull String, @NonNull android.system.virtualmachine.VirtualMachineConfig) throws android.system.virtualmachine.VirtualMachineException;
107 method @WorkerThread public void delete(@NonNull String) throws android.system.virtualmachine.VirtualMachineException;
108 method @Nullable @WorkerThread public android.system.virtualmachine.VirtualMachine get(@NonNull String) throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +0100109 method public int getCapabilities();
Alan Stokes3afd9f92023-01-04 17:28:59 +0000110 method @NonNull @WorkerThread public android.system.virtualmachine.VirtualMachine getOrCreate(@NonNull String, @NonNull android.system.virtualmachine.VirtualMachineConfig) throws android.system.virtualmachine.VirtualMachineException;
111 method @NonNull @WorkerThread public android.system.virtualmachine.VirtualMachine importFromDescriptor(@NonNull String, @NonNull android.system.virtualmachine.VirtualMachineDescriptor) throws android.system.virtualmachine.VirtualMachineException;
Alan Stokesca0d27e2022-10-03 11:26:13 +0100112 field public static final int CAPABILITY_NON_PROTECTED_VM = 2; // 0x2
113 field public static final int CAPABILITY_PROTECTED_VM = 1; // 0x1
114 }
115
116}
117