AVF uygulaması yazma

AVF uyumlu bir uygulamanın iki bölümü vardır: Uygulamanın ana makine Android OS'inde çalışan kısmı ve uygulamanın bir pVM içinde Microdroid'de çalışan kısmı.

Android'de çalışan uygulamanın bölümü, kullanıcı arayüzünü ve gizli olmayan iş mantığını uygular, bir sanal makinenin yaşam döngüsünü oluşturur ve yönetir.

Uygulamanın, güvenli bir şekilde yapılması gereken tüm görevleri gerçekleştirmekten sorumlu olan kısmı, pVM içinde Microdroid'de çalışır.

Barındırma uygulamanız, uygulamanızın pVM bölümünü başlatmak ve bu bölümle iletişim kurmak için bir pVM oluşturur ve pVM içinde yerel bir paylaşılan kitaplık çalıştırır. Bu kitaplık, uygulamanın ana makine kısmının pVM içindeki uygulama kısmıyla iletişim kurmak için kullandığı bir bağlayıcı hizmeti uygular. Şekil 1'de, uygulamanın iki bölümü ve bağlayıcı iletişim kanalı gösterilmektedir:

AVF uygulamasının yüklenmesi ve iletişimi

Şekil 1. AVF uygulama yükleme ve iletişimi

Yapılandırma dosyasını ayarlama

vm_config.json dosyanızda pVM'nin işletim sistemi ve paylaşılan kitaplığıyla ilgili bir giriş olmalıdır. Aşağıdaki assets/vm_config.json dosyasında, Microdroid ve paylaşılan bir yerel kitaplık için yapılandırma dosyası girişleri gösterilmektedir:

{
  "os": {
    "name": "microdroid"
  },
  "task": {
    "type": "microdroid_launcher",
    "command": MicrodroidTestNativeLib.so",
  }
}

Bağlayıcı hizmetini uygulama

Paylaşılan kitaplığınızda bir ciltleme hizmeti uygulayın. Örnek:

extern "C"
int android_native_main(int, char**) {
  // Implement your binder service here
}

Uygulama kodu oluşturma

Uygulamanızın ana makine bölümünde, yapılandırma dosyasını hazırlayan, sanal makinenin bir adını yükleyen (veya oluşturan) ve sanal makineyi çalıştıran kod oluşturun. Örnek:

// 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();

Uygulamanızın sanal makine kısmıyla iletişim kurma

Uygulamanızın sanal makine kısmıyla iletişim kurmak için önce sanal makinedeki bağlayıcı hizmeti hazır olduğunda bilgilendirilmek üzere bir geri çağırma işlevi kaydedersiniz. Bildirim aldığınızda bağlayıcı sunucuya bağlanır ve ardından özel AIDL arayüzünü kullanarak sunucuyla iletişim kurarsınız. Örnek:

// 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();

Bu belgedeki adımları gösteren bir demo uygulamanın kaynak kodunu indirmek için MicrodroidDemo'ya bakın.