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