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