This app is a demonstration of how to create a VM and run payload in it, in C++.
This is for VMs that are part of the platform itself. Specifically, this C++ example is for cases like creating and using a VM from a HAL process.
For non-system-level VMs, you must use the Java APIs from an Android app. See the Java demo app.
source build/envsetup.sh choosecombo 1 aosp_arm64 userdebug m MicrodroidTestApp m vm_demo_native
MicrodroidTestApp
is the application what will be running in the VM. Actually, we will run a native shared library MicrodroidTestNativeLib.so
from the APK.
vm_demo_native
runs on the host (i.e. Android). Its job is to start the VM and connect to the native shared lib and do some work using the lib. Specifically, we will call an AIDL method addInteger
which adds two integers and returns the sum. The computation will be done in the VM.
adb push out/target/product/generic_arm64/testcases/MicrodroidTestApp/arm64/MicrodroidTestApp.apk \ /data/local/tmp/ adb push out/target/product/generic_arm64/system/bin/vm_demo_native /data/local/tmp/
adb root adb shell setenforce 0 adb shell /data/local/tmp/vm_demo_native
Rooting and selinux disabling are required just because there's no sepolicy configured for this demo application. For production, you need to set the sepolicy up correctly. You may use system/sepolicy/private/composd.te
(specifically, the macro virtualizationservice_use
) as a reference.
[2023-05-10T23:45:54.904181191+09:00 INFO crosvm] crosvm started. [2023-05-10T23:45:54.906048663+09:00 INFO crosvm] CLI arguments parsed. ... The answer from VM is 30 [ 1.996707][ T57] microdroid_manager[57]: task successfully finished ... [2023-05-10T23:45:58.263614461+09:00 INFO crosvm] exiting with success Done