AVF-এর সাথে মানানসই অ্যাপের দুটি অংশ থাকে: হোস্ট Android OS-এ চলা অ্যাপের অংশ এবং pVM-এর মধ্যে Microdroid-এ চলা অ্যাপের অংশ।
Android-এ অ্যাপের যে অংশটি চলছে সেটি ইউজার ইন্টারফেস, গোপনীয় নয় এমন ব্যবসায়িক লজিক প্রয়োগ করে এবং pVM-এর লাইফসাইকেল তৈরি ও ম্যানেজ করে।
pVM-এর মধ্যে Microdroid-এ রান করা অ্যাপের অংশটি নিরাপদে করতে হবে এমন যেকোনও টাস্ক পারফর্ম করার জন্য দায়ী।
আপনার অ্যাপের pVM অংশের সাথে যোগাযোগ করতে এবং সেটি লঞ্চ করতে, আপনার হোস্ট অ্যাপ্লিকেশন একটি pVM তৈরি করে এবং pVM-এর মধ্যে একটি নেটিভ শেয়ার করা লাইব্রেরি চালায়। এই লাইব্রেরি একটি বাইন্ডার পরিষেবা প্রয়োগ করে যা অ্যাপের হোস্ট অংশ pVM-এর মধ্যে অ্যাপের অংশের সাথে যোগাযোগ করতে ব্যবহার করে। ছবি ১-এ অ্যাপ্লিকেশন ও বাইন্ডার কমিউনিকেশন চ্যানেলের দুটি অংশ দেখানো হয়েছে:
কনফিগারেশন ফাইল সেট-আপ করা
আপনার 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
}
অ্যাপ কোড তৈরি করা
আপনার অ্যাপের হোস্ট অংশে, এমন কোড তৈরি করুন যা কনফিগারেশন ফাইল প্রস্তুত করে, VM-এর জন্য একটি হ্যান্ডেল লোড (বা তৈরি) করে এবং VM রান করে। যেমন:
// 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 অংশের সাথে যোগাযোগ করতে, 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 দেখুন।