AVF ile uyumlu bir uygulama iki bölümden oluşur: Uygulamanın ana makine Android OS'te çalışan kısmı ve uygulamanın pVM'deki Microdroid'de çalışan kısmı.
Uygulamanın Android'de çalışan kısmı, kullanıcı arayüzünü uygular, gizli olmayan iş mantığını kullanır ve bir pVM'nin yaşam döngüsünü oluşturup yönetir.
pVM'de Microdroid üzerinde çalışan uygulama bölümü, güvenli bir şekilde gerçekleştirilmesi gereken tüm görevleri yerine getirmekten 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çinde yerel bir paylaşılan kitaplık çalıştırır. Bu kitaplık, uygulamanın ana makine bölümünün pVM'deki uygulama bölümüyle 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:
Yapılandırma dosyasını ayarlama
vm_config.json
dosyanızda pVM'nin işletim sistemi ve paylaşılan kitaplığı için 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. Örneğin:
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 makineye bir tutma yeri yükleyen (veya oluşturan) ve sanal makineyi çalıştıran kodu oluşturun. Örneğin:
// 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 VM bölümüyle iletişim kurma
Uygulamanızın VM bölümüyle iletişim kurmak için öncelikle VM'deki bağlayıcı hizmeti hazır olduğunda bildirim almak üzere bir geri çağırma kaydettirirsiniz. Bildirim aldığınızda bağlayıcı sunucuya bağlanır ve özel AIDL arayüzünü kullanarak sunucuyla iletişim kurarsınız. Ö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.