Viết ứng dụng AVF

Một ứng dụng tương thích với AVF có 2 phần: Phần ứng dụng chạy trên hệ điều hành Android của máy chủ và phần ứng dụng chạy trên Microdroid trong một pVM.

Phần ứng dụng chạy trên Android triển khai giao diện người dùng, logic nghiệp vụ không bí mật, đồng thời tạo và quản lý vòng đời của pVM.

Phần ứng dụng chạy trên Microdroid, trong pVM, chịu trách nhiệm thực hiện mọi tác vụ cần được thực hiện một cách an toàn.

Để chạy và giao tiếp với phần pVM của ứng dụng, ứng dụng lưu trữ sẽ tạo một pVM và chạy một thư viện dùng chung gốc trong pVM. Thư viện này triển khai một dịch vụ liên kết mà phần lưu trữ của ứng dụng dùng để giao tiếp với phần ứng dụng trong pVM. Hình 1 cho thấy 2 phần của ứng dụng và kênh giao tiếp liên kết:

Quá trình tải và giao tiếp của ứng dụng AVF

Hình 1. Ứng dụng AVF tải và giao tiếp

Thiết lập tệp cấu hình

Tệp vm_config.json của bạn phải có một mục cho hệ điều hành và thư viện dùng chung của pVM. Tệp assets/vm_config.json sau đây cho thấy các mục trong tệp cấu hình cho Microdroid và một thư viện gốc dùng chung:

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

Triển khai dịch vụ liên kết

Trong thư viện dùng chung, hãy triển khai một dịch vụ liên kết. Ví dụ:

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

Tạo mã ứng dụng

Trong phần máy chủ lưu trữ của ứng dụng, hãy tạo mã chuẩn bị tệp cấu hình, tải (hoặc tạo) một hàm xử lý cho VM và chạy VM. Ví dụ:

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

Giao tiếp với phần VM của ứng dụng

Để giao tiếp với phần VM của ứng dụng, trước tiên, bạn phải đăng ký một lệnh gọi lại để được thông báo khi dịch vụ liên kết trên VM đã sẵn sàng. Khi nhận được thông báo, bạn sẽ kết nối với máy chủ liên kết rồi trò chuyện với máy chủ bằng giao diện AIDL tuỳ chỉnh. Ví dụ:

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

Để tải mã nguồn cho một ứng dụng minh hoạ các bước trong tài liệu này, hãy tham khảo MicrodroidDemo.