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:
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.