একটি AVF-উপযোগী অ্যাপের দুটি অংশ থাকে: অ্যাপটির যে অংশটি হোস্ট অ্যান্ড্রয়েড অপারেটিং সিস্টেমে চলে এবং অ্যাপটির যে অংশটি একটি pVM-এর মধ্যে মাইক্রোড্রয়েডে চলে।
অ্যাপটির যে অংশ অ্যান্ড্রয়েডে চলে, তা ইউজার ইন্টারফেস ও অ-গোপনীয় ব্যবসায়িক যুক্তি বাস্তবায়ন করে এবং একটি pVM-এর জীবনচক্র তৈরি ও পরিচালনা করে।
pVM-এর মধ্যে মাইক্রোড্রয়েডে চলমান অ্যাপের অংশটি নিরাপদে সম্পাদনযোগ্য যেকোনো কাজ করার জন্য দায়ী।
আপনার অ্যাপের pVM অংশটি চালু করতে এবং তার সাথে যোগাযোগ করার জন্য, আপনার হোস্ট অ্যাপ্লিকেশন একটি pVM তৈরি করে এবং সেই pVM-এর মধ্যে একটি নেটিভ শেয়ার্ড লাইব্রেরি চালায়। এই লাইব্রেরিটি একটি বাইন্ডার সার্ভিস বাস্তবায়ন করে, যা অ্যাপের হোস্ট অংশটি pVM-এর ভেতরের অংশের সাথে যোগাযোগ করার জন্য ব্যবহার করে। চিত্র ১-এ অ্যাপ্লিকেশনটির দুটি অংশ এবং বাইন্ডার কমিউনিকেশন চ্যানেলটি দেখানো হয়েছে:

কনফিগারেশন ফাইলটি সেট আপ করুন
আপনার 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(), "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) অংশের সাথে যোগাযোগ করার জন্য, প্রথমে আপনাকে একটি কলব্যাক রেজিস্টার করতে হবে, যাতে ভিএম-এর বাইন্ডার সার্ভিসটি প্রস্তুত হলে আপনাকে জানানো হয়। বিজ্ঞপ্তি পেলে, আপনি বাইন্ডার সার্ভারের সাথে সংযোগ স্থাপন করেন এবং তারপর কাস্টম 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 দেখুন।