diff --git a/javalib/src/android/system/virtualmachine/VirtualMachine.java b/javalib/src/android/system/virtualmachine/VirtualMachine.java
index bdec164..61c41a7 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachine.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachine.java
@@ -129,7 +129,7 @@
      * @hide
      */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({
+    @IntDef(prefix = "STATUS_", value = {
             STATUS_STOPPED,
             STATUS_RUNNING,
             STATUS_DELETED
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineCallback.java b/javalib/src/android/system/virtualmachine/VirtualMachineCallback.java
index c89b8bb..bb6b2b8 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineCallback.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineCallback.java
@@ -35,7 +35,7 @@
 public interface VirtualMachineCallback {
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({
+    @IntDef(prefix = "ERROR_", value = {
         ERROR_UNKNOWN,
         ERROR_PAYLOAD_VERIFICATION_FAILED,
         ERROR_PAYLOAD_CHANGED,
@@ -57,7 +57,7 @@
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({
+    @IntDef(prefix = "STOP_REASON_", value = {
         STOP_REASON_VIRTUALIZATION_SERVICE_DIED,
         STOP_REASON_INFRASTRUCTURE_ERROR,
         STOP_REASON_KILLED,
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java b/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
index 08f1bb8..9f62579 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -61,7 +61,7 @@
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({
+    @IntDef(prefix = "DEBUG_LEVEL_", value = {
             DEBUG_LEVEL_NONE,
             DEBUG_LEVEL_APP_ONLY,
             DEBUG_LEVEL_FULL
@@ -409,6 +409,7 @@
          * Sets whether to protect the VM memory from the host. No default is provided, this
          * must be set explicitly.
          *
+         * @see VirtualMachineManager#getCapabilities
          * @hide
          */
         @NonNull
diff --git a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
index ad5864e..86fd91f 100644
--- a/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
+++ b/javalib/src/android/system/virtualmachine/VirtualMachineManager.java
@@ -18,12 +18,16 @@
 
 import static java.util.Objects.requireNonNull;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.sysprop.HypervisorProperties;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
 import java.util.Map;
 import java.util.WeakHashMap;
@@ -44,6 +48,28 @@
             new WeakHashMap<>();
 
     /**
+     * Capabilities of the virtual machine implementation.
+     *
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "CAPABILITY_", flag = true, value = {
+            CAPABILITY_PROTECTED_VM,
+            CAPABILITY_NON_PROTECTED_VM
+    })
+    public @interface Capability {}
+
+    /* The implementation supports creating protected VMs, whose memory is inaccessible to the
+     * host OS.
+     */
+    public static final int CAPABILITY_PROTECTED_VM = 1;
+
+    /* The implementation supports creating non-protected VMs, whose memory is accessible to the
+     * host OS.
+     */
+    public static final int CAPABILITY_NON_PROTECTED_VM = 2;
+
+    /**
      * Returns the per-context instance.
      *
      * @hide
@@ -67,6 +93,25 @@
     private static final Object sCreateLock = new Object();
 
     /**
+     * Returns a set of flags indicating what this implementation of virtualization is capable of.
+     *
+     * @see #CAPABILITY_PROTECTED_VM
+     * @see #CAPABILITY_NON_PROTECTED_VM
+     * @hide
+     */
+    @Capability
+    public int getCapabilities() {
+        @Capability int result = 0;
+        if (HypervisorProperties.hypervisor_protected_vm_supported().orElse(false)) {
+            result |= CAPABILITY_PROTECTED_VM;
+        }
+        if (HypervisorProperties.hypervisor_vm_supported().orElse(false)) {
+            result |= CAPABILITY_NON_PROTECTED_VM;
+        }
+        return result;
+    }
+
+    /**
      * Creates a new {@link VirtualMachine} with the given name and config. Creating a virtual
      * machine with the same name as an existing virtual machine is an error. The existing virtual
      * machine has to be deleted before its name can be reused.
diff --git a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
index 3052c85..07705ba 100644
--- a/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
+++ b/tests/helper/src/java/com/android/microdroid/test/device/MicrodroidDeviceTestBase.java
@@ -116,28 +116,19 @@
             assumeNoException(e);
             return;
         }
-        if (protectedVm) {
-            assume().withMessage("Skip where protected VMs aren't supported")
-                    .that(hypervisor_protected_vm_supported())
-                    .isTrue();
-        } else {
-            assume().withMessage("Skip where VMs aren't supported")
-                    .that(hypervisor_vm_supported())
-                    .isTrue();
-        }
         Context context = ApplicationProvider.getApplicationContext();
         mInner = new Inner(context, protectedVm, VirtualMachineManager.getInstance(context));
-    }
 
-    // These are inlined from android.sysprop.HypervisorProperties which isn't @SystemApi.
-    // TODO(b/243642678): Move to using a proper Java API for this.
-
-    private boolean hypervisor_vm_supported() {
-        return SystemProperties.getBoolean("ro.boot.hypervisor.vm.supported", false);
-    }
-
-    private boolean hypervisor_protected_vm_supported() {
-        return SystemProperties.getBoolean("ro.boot.hypervisor.protected_vm.supported", false);
+        int capabilities = mInner.getVirtualMachineManager().getCapabilities();
+        if (protectedVm) {
+            assume().withMessage("Skip where protected VMs aren't supported")
+                    .that(capabilities & VirtualMachineManager.CAPABILITY_PROTECTED_VM)
+                    .isNotEqualTo(0);
+        } else {
+            assume().withMessage("Skip where VMs aren't supported")
+                    .that(capabilities & VirtualMachineManager.CAPABILITY_NON_PROTECTED_VM)
+                    .isNotEqualTo(0);
+        }
     }
 
     public abstract static class VmEventListener implements VirtualMachineCallback {
