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