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