कोई AVF ऐप्लिकेशन लिखें

AVF के साथ काम करने वाले ऐप्लिकेशन के दो हिस्से होते हैं: होस्ट Android OS पर चलने वाला ऐप्लिकेशन का हिस्सा और pVM में Microdroid पर चलने वाला ऐप्लिकेशन का हिस्सा.

Android पर चलने वाले ऐप्लिकेशन का वह हिस्सा, यूज़र इंटरफ़ेस और गोपनीय न होने वाले कारोबारी लॉजिक को लागू करता है. साथ ही, pVM का लाइफ़साइकल बनाता और मैनेज करता है.

pVM में Microdroid पर चलने वाले ऐप्लिकेशन का वह हिस्सा, सुरक्षित तरीके से किए जाने वाले सभी टास्क के लिए ज़िम्मेदार होता है.

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

एवीएफ़ ऐप्लिकेशन लोडिंग ऐंड कम्यूनिकेशन

पहली इमेज. AVF ऐप्लिकेशन लोड करना और उससे कम्यूनिकेट करना

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

आपकी vm_config.json फ़ाइल में, पीवीएम के ऑपरेटिंग सिस्टम और शेयर की गई लाइब्रेरी की एंट्री होनी चाहिए. नीचे दी गई 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(), "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 पर बाइंडर सेवा के तैयार होने पर आपको सूचना मिल सके. सूचना मिलने पर, बाइंडर सर्वर से कनेक्ट करें. इसके बाद, कस्टम एआईडीएल इंटरफ़ेस का इस्तेमाल करके सर्वर से बातचीत करें. उदाहरण के लिए:

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