Use staged APEXes for compilation

Add a new VM config file to be used when we want staged APEXes.

Add an option to compos_key_cmd to use staged APEXes.

Modify compos_client to allow the VM config to be overridden, and use
it to select staged APEXes in start_pending_instance.

Bug: 205296305
Test: stage an APEX, run composd_cmd staged-apex-compile
Change-Id: I379416b9798856d41492b32f6c0042262123a43b
diff --git a/compos/composd/src/instance_manager.rs b/compos/composd/src/instance_manager.rs
index 767e9f7..24ae576 100644
--- a/compos/composd/src/instance_manager.rs
+++ b/compos/composd/src/instance_manager.rs
@@ -23,7 +23,7 @@
 use compos_aidl_interface::aidl::com::android::compos::ICompOsService::ICompOsService;
 use compos_aidl_interface::binder::Strong;
 use compos_common::compos_client::VmParameters;
-use compos_common::{PENDING_INSTANCE_DIR, TEST_INSTANCE_DIR};
+use compos_common::{PENDING_INSTANCE_DIR, PREFER_STAGED_VM_CONFIG_PATH, TEST_INSTANCE_DIR};
 use std::sync::{Arc, Mutex, Weak};
 use virtualizationservice::IVirtualizationService::IVirtualizationService;
 
@@ -44,11 +44,13 @@
     }
 
     pub fn start_pending_instance(&self) -> Result<Arc<CompOsInstance>> {
-        self.start_instance(PENDING_INSTANCE_DIR, VmParameters::default())
+        let config_path = Some(PREFER_STAGED_VM_CONFIG_PATH.to_owned());
+        let vm_parameters = VmParameters { config_path, ..Default::default() };
+        self.start_instance(PENDING_INSTANCE_DIR, vm_parameters)
     }
 
     pub fn start_test_instance(&self) -> Result<Arc<CompOsInstance>> {
-        let vm_parameters = VmParameters { debug_mode: true };
+        let vm_parameters = VmParameters { debug_mode: true, ..Default::default() };
         self.start_instance(TEST_INSTANCE_DIR, vm_parameters)
     }