Aplikasi yang kompatibel dengan AVF memiliki dua bagian: Bagian aplikasi yang berjalan di OS Android host dan bagian aplikasi yang berjalan di Microdroid dalam pVM.
Bagian aplikasi yang berjalan di Android mengimplementasikan antarmuka pengguna, logika bisnis yang tidak rahasia, serta membuat dan mengelola siklus proses pVM.
Bagian aplikasi yang berjalan di Microdroid, dalam pVM, bertanggung jawab untuk melakukan tugas apa pun yang perlu dilakukan secara aman.
Untuk meluncurkan dan berkomunikasi dengan bagian pVM aplikasi Anda, aplikasi host Anda membuat pVM dan menjalankan library bersama native dalam pVM. Library ini mengimplementasikan layanan binder yang digunakan bagian host aplikasi untuk berkomunikasi dengan bagian aplikasi dalam pVM. Gambar 1 menunjukkan dua bagian aplikasi dan saluran komunikasi binder:
Menyiapkan file konfigurasi
File vm_config.json Anda harus memiliki entri untuk sistem operasi pVM
dan library bersama. File assets/vm_config.json berikut menunjukkan entri file konfigurasi untuk Microdroid dan library native bersama:
{
  "os": {
    "name": "microdroid"
  },
  "task": {
    "type": "microdroid_launcher",
    "command": "MicrodroidTestNativeLib.so"
  }
}
Mengimplementasikan layanan binder
Dalam galeri foto bersama, terapkan layanan binder. Contoh:
extern "C"
int android_native_main(int, char**) {
  // Implement your binder service here
}
Buat kode aplikasi
Di bagian host aplikasi Anda, buat kode yang menyiapkan file konfigurasi, memuat (atau membuat) handle ke VM, dan menjalankan VM. Contoh:
// Prepare the configuration file
VirtualMachineConfig config = new VirtualMachineConfig
  .Builder(getApplication(), "assets/vm_config.json")
  .build();
// Load (or create) the handle to a VM
VirtualMachine vm = VirtualMachineManager
  .getInstance(getApplication())
  .getOrCreate("my_vm", config);
// Run the VM
vm.run();
Berkomunikasi dengan bagian VM aplikasi Anda
Untuk berkomunikasi dengan bagian VM aplikasi Anda, Anda harus mendaftarkan callback terlebih dahulu untuk mendapatkan notifikasi saat layanan binder di VM siap. Saat diberi tahu, Anda terhubung ke server binder, lalu berkomunikasi dengan server menggunakan antarmuka AIDL kustom. Contoh:
// Register the callback
vm.setCallback(Executors.newSingleThreadExecutor(),
  new VirtualmachineCallback() {
  @Override
  public void onPayloadReady(VirtualMachine vm) {
    // Connect to the binder server
    IBinder binder = vm.connectToVsockServer(PORT).get();
    IMyService svc = IMyService.Stub.asInterface(binder);
    // Talk with server using custom AIDL interface
    Result res = svc.doSomething();
  }
}); //exception handling & proper threading omitted
vm.run();
Untuk mendownload kode sumber aplikasi demo yang menunjukkan langkah-langkah dalam dokumen ini, lihat MicrodroidDemo.