AVF uyumlu bir uygulamanın iki bölümü vardır: Ana Android işletim sisteminde çalışan uygulamanın bölümü ve pVM içinde Microdroid üzerinde çalışan uygulama kısmıdır.
Uygulamanın Android'de çalışan kısmı kullanıcı arayüzünü ve gizli olmayan iş mantığını uygular, ayrıca pVM'nin yaşam döngüsünü oluşturup yönetir.
Uygulamanın pVM içinde Microdroid'de çalışan kısmı, güvenli bir şekilde gerçekleştirilmesi gereken görevlerin yerine getirilmesinden sorumludur.
Uygulamanızın pVM kısmını başlatmak ve iletişim kurmak için ana makine uygulamanız bir pVM oluşturur ve pVM içinde paylaşılan yerel bir kitaplık çalıştırır. Bu kitaplık, uygulamanın ana makine bölümünün, pVM içindeki uygulama bölümüyle iletişim kurmak için kullandığı bir bağlayıcı hizmeti uygular. Şekil 1'de uygulamanın ve bağlayıcı iletişim kanalının iki bölümü gösterilmektedir:
Yapılandırma dosyasını ayarlama
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ı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 bağlayıcı hizmeti uygulayın. Örnek:
extern "C"
int android_native_main(int, char**) {
// Implement your binder service here
}
Uygulama kodu oluştur
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 kaydetmeniz gerekir. 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.