Bir AVF uygulaması yazın

AVF uyumlu bir uygulamanın iki bölümü vardır: Uygulamanın ana Android işletim sistemi üzerinde çalışan kısmı ve uygulamanın bir pVM içindeki Microdroid üzerinde çalışan kısmı.

Uygulamanın Android'de çalışan kısmı kullanıcı arayüzünü, gizli olmayan iş mantığını uygular ve bir pVM'nin yaşam döngüsünü oluşturur ve yönetir.

Uygulamanın pVM içerisinde Microdroid üzerinde çalışan kısmı, güvenli bir şekilde gerçekleştirilmesi gereken görevlerin yerine getirilmesinden sorumludur.

Uygulamanızın pVM bölümünü başlatmak ve bu bölümle iletişim kurmak için ana uygulamanız bir pVM oluşturur ve pVM içindeki kitaplığınızda yerel bir paylaşılan kitaplık çalıştırır. Bu kitaplık, uygulamanın ana bilgisayar bölümünün, uygulamanın bir pVM içindeki bölümüyle iletişim kurmak için kullandığı bir bağlayıcı hizmetini uygular. Şekil 1, uygulamanın iki bölümünü ve ciltleyici iletişim kanalını göstermektedir:

AVF uygulaması yükleme ve iletişim

Şekil 1. AVF uygulamasının yüklenmesi ve iletişimi

Yapılandırma dosyasını ayarlayın

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

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

Ciltleyici hizmetini uygulama

Paylaşılan kitaplığınızda bir ciltleyici hizmeti uygulayın. Örneğin:

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

Uygulama kodu oluştur

Uygulamanızın ana bilgisayar bölümünde, yapılandırma dosyasını hazırlayan, VM'ye bir tanıtıcı yükleyen (veya oluşturan) ve VM'yi çalıştıran kod oluşturun. Örneğin:

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

Uygulamanızın VM kısmıyla iletişim kurun

Uygulamanızın VM kısmıyla iletişim kurmak için öncelikle VM'deki ciltleme hizmeti başlatıldığında bilgilendirilmek üzere bir geri arama kaydedersiniz. Bildirildiğinde ciltleme sunucusuna bağlanırsınız ve ardından özel AIDL arayüzünü kullanarak sunucuyla konuşursunuz. Örneğin:

// 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 uygulamasının kaynak kodunu indirmek için MicrodroidDemo'ya bakın.