یک برنامه سازگار با AVF دارای دو بخش است: بخشی از برنامه که روی سیستم عامل اندروید میزبان اجرا می شود و بخشی از برنامه که روی Microdroid در یک pVM اجرا می شود.
بخشی از برنامه در حال اجرا در اندروید، رابط کاربری، منطق تجاری غیر محرمانه را پیاده سازی می کند و چرخه حیات یک pVM را ایجاد و مدیریت می کند.
بخشی از برنامه در حال اجرا در Microdroid، در داخل یک pVM، مسئول انجام هر کاری است که باید به صورت ایمن انجام شود.
برای راهاندازی و برقراری ارتباط با بخش pVM برنامه، برنامه میزبان شما یک pVM ایجاد میکند و یک کتابخانه مشترک بومی در pVM اجرا میکند. این کتابخانه یک سرویس binder را پیاده سازی می کند که بخش میزبان برنامه از آن برای برقراری ارتباط با بخشی از برنامه در یک pVM استفاده می کند. شکل 1 دو بخش برنامه و کانال ارتباطی بایندر را نشان می دهد:
فایل پیکربندی را تنظیم کنید
فایل vm_config.json
شما باید ورودی برای سیستم عامل pVM و کتابخانه مشترک داشته باشد. فایل assets/vm_config.json
زیر ورودیهای فایل پیکربندی را برای Microdroid و یک کتابخانه بومی مشترک نشان میدهد:
{
"os": {
"name": "microdroid"
},
"task": {
"type": "microdroid_launcher",
"command": MicrodroidTestNativeLib.so",
}
}
سرویس کلاسور را اجرا کنید
در کتابخانه مشترک خود، یک سرویس کلاسور اجرا کنید. به عنوان مثال:
extern "C"
int android_native_main(int, char**) {
// Implement your binder service here
}
کد برنامه ایجاد کنید
در بخش میزبان برنامه خود، کدی ایجاد کنید که فایل پیکربندی را آماده میکند، یک دسته را در VM بارگیری میکند (یا ایجاد میکند) و VM را اجرا میکند. به عنوان مثال:
// 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();
با بخش VM برنامه خود ارتباط برقرار کنید
برای برقراری ارتباط با بخش VM برنامه خود، ابتدا یک تماس برگشتی ثبت می کنید تا زمانی که سرویس binder در VM آماده شد، مطلع شوید. هنگامی که به شما اطلاع داده می شود، به سرور بایندر متصل می شوید و سپس با استفاده از رابط سفارشی AIDL با سرور صحبت می کنید. به عنوان مثال:
// 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();
برای دانلود کد منبع یک برنامه آزمایشی که مراحل این سند را نشان میدهد، به MicrodroidDemo مراجعه کنید.