AVF uyumlu bir uygulamanın iki bölümü vardır: Uygulamanın ana makine Android OS'inde çalışan kısmı ve uygulamanın bir pVM içinde Microdroid'de çalışan kısmı.
Android'de çalışan uygulamanın bölümü, kullanıcı arayüzünü ve gizli olmayan iş mantığını uygular, bir sanal makinenin yaşam döngüsünü oluşturur ve yönetir.
Uygulamanın, güvenli bir şekilde yapılması gereken tüm görevleri gerçekleştirmekten sorumlu olan kısmı, pVM içinde Microdroid'de çalışır.
Barındırma uygulamanız, uygulamanızın pVM bölümünü başlatmak ve bu bölümle iletişim kurmak için 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 kısmının pVM içindeki uygulama kısmıyla 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ığıyla ilgili 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. Örnek:
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 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 işlevi kaydedersiniz. 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.