Move config validation to the builder

And remove it from the constructor. This allows us to fail earlier and
reject invalid values immediately. In some cases throw
IllegalArgumentException etc rather than the checked
VirtualMachineException, following API guidelines.

Don't allow memory or encrypted storage size of 0 to be specified
explicitly.

Use the builder when deserializing, to ensure we validate there too.

Fix one test to match (we throw the exception at a different place).

Bug: 261037705
Test: atest MicrodroidTests
Change-Id: If788a1832f9718fa6713f35cb869517d5d7c8a34
diff --git a/javalib/api/system-current.txt b/javalib/api/system-current.txt
index c98c62e..c214f1f 100644
--- a/javalib/api/system-current.txt
+++ b/javalib/api/system-current.txt
@@ -74,8 +74,8 @@
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig build();
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setApkPath(@NonNull String);
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setDebugLevel(int);
-    method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setEncryptedStorageKib(@IntRange(from=0) long);
-    method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setMemoryMib(@IntRange(from=0) int);
+    method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setEncryptedStorageKib(@IntRange(from=1) long);
+    method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setMemoryMib(@IntRange(from=1) int);
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setNumCpus(@IntRange(from=1) int);
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setPayloadBinaryPath(@NonNull String);
     method @NonNull public android.system.virtualmachine.VirtualMachineConfig.Builder setProtectedVm(boolean);