একটি AVF অ্যাপ লিখুন

একটি AVF- সামঞ্জস্যপূর্ণ অ্যাপের দুটি অংশ রয়েছে: অ্যাপটির অংশ হোস্ট অ্যান্ড্রয়েড ওএসে চলছে এবং অ্যাপের অংশটি একটি পিভিএম-এর মধ্যে মাইক্রোড্রয়েডে চলছে।

অ্যান্ড্রয়েডে চলমান অ্যাপের অংশটি ব্যবহারকারীর ইন্টারফেস, অ-গোপনীয় ব্যবসায়িক যুক্তি প্রয়োগ করে এবং একটি পিভিএমের জীবনচক্র তৈরি ও পরিচালনা করে।

মাইক্রোড্রয়েডে চলমান অ্যাপের অংশ, একটি পিভিএম-এর মধ্যে, নিরাপদে সম্পাদন করা প্রয়োজন এমন যেকোনো কাজ সম্পাদনের জন্য দায়ী।

আপনার অ্যাপের pVM অংশ লঞ্চ করতে এবং যোগাযোগ করতে, আপনার হোস্ট অ্যাপ্লিকেশন একটি pVM তৈরি করে এবং pVM-এর মধ্যে আপনার লাইব্রেরিতে একটি নেটিভ শেয়ার করা লাইব্রেরি চালায়। এই লাইব্রেরিটি একটি বাইন্ডার পরিষেবা প্রয়োগ করে যা অ্যাপের হোস্ট অংশটি একটি pVM-এর মধ্যে অ্যাপের অংশের সাথে যোগাযোগ করতে ব্যবহার করে। চিত্র 1 অ্যাপ্লিকেশনের দুটি অংশ এবং বাইন্ডার যোগাযোগ চ্যানেল দেখায়:

AVF অ্যাপ লোডিং এবং যোগাযোগ

চিত্র 1. 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
}

অ্যাপ কোড তৈরি করুন

আপনার অ্যাপের হোস্ট অংশে, এমন কোড তৈরি করুন যা কনফিগারেশন ফাইল প্রস্তুত করে, VM-এ একটি হ্যান্ডেল লোড করে (বা তৈরি করে) এবং VM চালায়। উদাহরণ স্বরূপ:

// Prepare the configuration file
VirtualMachineConfig config = new VirtualMachineConfig
  .Builder(getApplication(), "asssets/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 পড়ুন।