Menulis aplikasi AVF

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 menerapkan antarmuka pengguna, logika bisnis non-rahasia, serta membuat dan mengelola siklus proses pVM.

Bagian dari aplikasi yang berjalan di Microdroid, dalam pVM, bertanggung jawab untuk melakukan tugas apa pun yang perlu dilakukan dengan aman.

Untuk meluncurkan dan berkomunikasi dengan bagian pVM aplikasi, aplikasi host akan 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:

Pemuatan dan komunikasi aplikasi AVF

Gambar 1. Pemuatan dan komunikasi aplikasi AVF

Menyiapkan file konfigurasi

File vm_config.json Anda harus memiliki entri untuk sistem operasi dan library bersama pVM. 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 library bersama, terapkan layanan binder. Contoh:

extern "C"
int android_native_main(int, char**) {
  // Implement your binder service here
}

Membuat 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 dari aplikasi Anda

Untuk berkomunikasi dengan bagian VM aplikasi, Anda harus mendaftarkan callback terlebih dahulu agar diberi tahu saat layanan binder di VM siap. Saat diberi tahu, Anda akan 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.