AVF ऐप्लिकेशन लिखना

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

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

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

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

AVF ऐप्लिकेशन लोड करना और कम्यूनिकेट करना

पहली इमेज. 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(), "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 पर जाएं.