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

Bagian 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 Anda, aplikasi host Anda membuat pVM dan menjalankan pustaka bersama asli di pustaka Anda dalam pVM. Pustaka ini mengimplementasikan layanan pengikat yang digunakan bagian host aplikasi untuk berkomunikasi dengan bagian aplikasi dalam pVM. Gambar 1 menunjukkan dua bagian aplikasi dan saluran komunikasi pengikat:

Pemuatan dan komunikasi aplikasi AVF

Gambar 1. Pemuatan dan komunikasi aplikasi AVF

Siapkan file konfigurasi

File vm_config.json Anda harus memiliki entri untuk sistem operasi pVM dan perpustakaan bersama. File assets/vm_config.json berikut menunjukkan entri file konfigurasi untuk Microdroid dan perpustakaan asli bersama:

{
  "os": {
    "name": "microdroid"
  },
  "task": {
    "type": "microdroid_launcher",
    "command": MicrodroidTestNativeLib.so",
  }
}

Menerapkan layanan pengikat

Dalam perpustakaan bersama Anda, terapkan layanan pengikat. Misalnya:

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) pegangan ke VM, dan menjalankan VM. Misalnya:

// Prepare the configuration file
VirtualMachineConfig config = new VirtualMachineConfig
  .Builder(getApplication(), "asssets/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, pertama-tama Anda mendaftarkan callback agar diberi tahu saat layanan pengikat di VM. Saat diberi tahu, Anda terhubung ke server pengikat dan kemudian berbicara dengan server menggunakan antarmuka AIDL khusus. Misalnya:

// 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 mengunduh kode sumber aplikasi demo yang menunjukkan langkah-langkah dalam dokumen ini, lihat MicrodroidDemo .