AVF ऐप लिखें

एवीएफ-संगत ऐप के दो भाग होते हैं: होस्ट एंड्रॉइड ओएस पर चलने वाले ऐप का हिस्सा और पीवीएम के भीतर माइक्रोड्रॉइड पर चलने वाले ऐप का हिस्सा।

एंड्रॉइड पर चलने वाले ऐप का हिस्सा यूजर इंटरफेस, गैर-गोपनीय व्यावसायिक तर्क को लागू करता है, और एक पीवीएम के जीवनचक्र को बनाता और प्रबंधित करता है।

पीवीएम के भीतर माइक्रोड्रॉइड पर चलने वाले ऐप का हिस्सा, किसी भी कार्य को करने के लिए जिम्मेदार होता है जिसे सुरक्षित रूप से करने की आवश्यकता होती है।

आपके ऐप के पीवीएम भाग को लॉन्च करने और उसके साथ संचार करने के लिए, आपका होस्ट एप्लिकेशन एक पीवीएम बनाता है और पीवीएम के भीतर आपकी लाइब्रेरी में एक मूल साझा लाइब्रेरी चलाता है। यह लाइब्रेरी एक बाइंडर सेवा लागू करती है जिसका उपयोग ऐप का होस्ट भाग पीवीएम के भीतर ऐप के हिस्से के साथ संचार करने के लिए करता है। चित्र 1 एप्लिकेशन के दो भागों और बाइंडर संचार चैनल को दर्शाता है:

एवीएफ ऐप लोडिंग और संचार

चित्र 1. एवीएफ ऐप लोडिंग और संचार

कॉन्फ़िगरेशन फ़ाइल सेट करें

आपकी vm_config.json फ़ाइल में pVM के ऑपरेटिंग सिस्टम और साझा लाइब्रेरी के लिए एक प्रविष्टि होनी चाहिए। निम्नलिखित assets/vm_config.json फ़ाइल माइक्रोड्रॉइड और एक साझा मूल लाइब्रेरी के लिए कॉन्फ़िगरेशन फ़ाइल प्रविष्टियाँ दिखाती है:

{
  "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 भाग के साथ संचार करें

अपने ऐप के वीएम भाग के साथ संचार करने के लिए, आप सबसे पहले वीएम पर बाइंडर सेवा के समय सूचित होने के लिए एक कॉलबैक पंजीकृत करते हैं। अधिसूचित होने पर, आप बाइंडर सर्वर से कनेक्ट होते हैं और फिर कस्टम एआईडीएल इंटरफ़ेस का उपयोग करके सर्वर से बात करते हैं। उदाहरण के लिए:

// 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 देखें।