Viết ứng dụng AVF

Ứng dụng tương thích với AVF có hai phần: Phần ứng dụng chạy trên hệ điều hành Android chủ và phần ứng dụng chạy trên Microdroid trong 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.

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

Tải và liên lạc ứng dụng AVF

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

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

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

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

Triển khai dịch vụ binder

Trong thư viện dùng chung của bạn, hãy triển khai 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ủ 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) điều khiển cho VM và chạy VM. Ví dụ:

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

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

Để giao tiếp với phần VM của ứng dụng, trước tiên bạn phải đăng ký lệnh gọi lại để được thông báo khi có dịch vụ liên kết trên VM. Khi được thông báo, bạn kết nối với máy chủ liên kết và sau đó nói chuyện với máy chủ bằng giao diện AIDL tùy 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 xuống mã nguồn cho ứng dụng demo minh họa các bước trong tài liệu này, hãy tham khảo MicrodroidDemo .