اكتب تطبيق AVF

يتكون التطبيق المتوافق مع AVF من جزأين: جزء التطبيق الذي يعمل على نظام التشغيل Android المضيف وجزء التطبيق الذي يعمل على Microdroid داخل pVM.

يقوم جزء التطبيق الذي يعمل على Android بتنفيذ واجهة المستخدم ومنطق الأعمال غير السري وإنشاء دورة حياة pVM وإدارتها.

يكون جزء التطبيق الذي يعمل على Microdroid، داخل pVM، مسؤولاً عن أداء أي مهام يلزم تنفيذها بشكل آمن.

لتشغيل جزء pVM من تطبيقك والتواصل معه، يقوم تطبيقك المضيف بإنشاء pVM وتشغيل مكتبة مشتركة أصلية في مكتبتك داخل pVM. تنفذ هذه المكتبة خدمة الموثق التي يستخدمها الجزء المضيف من التطبيق للتواصل مع جزء التطبيق داخل pVM. يوضح الشكل 1 جزأين التطبيق وقناة اتصال الموثق:

تحميل تطبيق AVF والتواصل

الشكل 1. تحميل تطبيق AVF والاتصال به

قم بإعداد ملف التكوين

يجب أن يحتوي ملف 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
}

إنشاء رمز التطبيق

في الجزء المضيف من التطبيق الخاص بك، قم بإنشاء تعليمات برمجية تقوم بإعداد ملف التكوين، وتحميل (أو إنشاء) مؤشر إلى الجهاز الافتراضي، وتشغيل الجهاز الافتراضي. على سبيل المثال:

// 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();

تواصل مع جزء VM من تطبيقك

للتواصل مع جزء VM من تطبيقك، عليك أولاً تسجيل رد اتصال ليتم إعلامك عند خدمة الموثق على 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 .