يتألّف التطبيق المتوافق مع AVF من جزأين: جزء من التطبيق يعمل على نظام التشغيل Android المضيف وجزء من التطبيق يعمل على Microdroid ضمن جهاز افتراضي شخصي.
ينفِّذ الجزء من التطبيق الذي يعمل على Android واجهة المستخدم، ومنطق النشاط التجاري غير السري، وينشئ دورة حياة وحدة افتراضية مخصّصة للمؤسسات ويديرها.
إنّ الجزء من التطبيق الذي يعمل على Microdroid ضمن جهاز افتراضي شخصي مسؤول عن تنفيذ أي مهام يجب تنفيذها بأمان.
لتشغيل جزء "الآلة الافتراضية للتطبيقات" من تطبيقك والتواصل معه، ينشئ تطبيقك المضيف "آلة افتراضية للتطبيقات" ويعمل على تشغيل مكتبة مشترَكة أصلية داخل "آلة افتراضية للتطبيقات". تنفِّذ هذه المكتبة خدمة ربط يستخدمها الجزء المضيف من التطبيق للتواصل مع الجزء من التطبيق ضمن جهاز افتراضي شخصي. يعرض الشكل 1 الجزءَين من التطبيق وقناة التواصل مع الموسّع:
إعداد ملف الضبط
يجب أن يتضمّن ملف vm_config.json
إدخالًا لنظام التشغيل في جهاز افتراضي شخصي
والمكتبة المشتركة. يعرض ملف 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
}
إنشاء رمز التطبيق
في جزء المضيف من تطبيقك، أنشئ رمزًا برمجيًا يُعدّ ملف الإعدادات ويحمِّل (أو ينشئ) معرّفًا للجهاز الظاهري ويشغّله. مثلاً:
// 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();
التواصل مع جزء الجهاز الافتراضي من تطبيقك
للتواصل مع جزء الجهاز الظاهري من تطبيقك، عليك أولاً تسجيل طلب استدعاء للحصول على إشعار عندما تكون خدمة الربط على الجهاز الظاهري جاهزة. عند تلقّي إشعار، يتم الاتصال بخادم Binder ثم التواصل مع الخادم باستخدام واجهة 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.