Eine AVF-kompatible App besteht aus zwei Teilen: dem Teil der App, der auf dem Host-Android-Betriebssystem ausgeführt wird, und dem Teil der App, der auf Microdroid in einer pVM ausgeführt wird.
Der Teil der App, der unter Android ausgeführt wird, implementiert die Benutzeroberfläche, die nicht vertrauliche Geschäftslogik und erstellt und verwaltet den Lebenszyklus einer pVM.
Der Teil der App, der auf Microdroid in einer pVM ausgeführt wird, ist für die Ausführung aller Aufgaben verantwortlich, die sicher ausgeführt werden müssen.
Um den pVM-Teil Ihrer App zu starten und mit ihm zu kommunizieren, erstellt Ihre Hostanwendung eine pVM und führt eine native gemeinsam genutzte Bibliothek in der pVM aus. Diese Bibliothek implementiert einen Binder-Dienst, über den der Hostteil der App mit dem Teil der App in einem pVM kommuniziert. Abbildung 1 zeigt die beiden Teile der Anwendung und den Binder-Kommunikationskanal:
Konfigurationsdatei einrichten
Ihre vm_config.json-Datei sollte einen Eintrag für das Betriebssystem und die gemeinsam genutzte Bibliothek des pVM enthalten. Die folgende assets/vm_config.json-Datei enthält Konfigurationsdateieinträge für Microdroid und eine gemeinsam genutzte native Bibliothek:
{
"os": {
"name": "microdroid"
},
"task": {
"type": "microdroid_launcher",
"command": "MicrodroidTestNativeLib.so"
}
}
Binder-Dienst implementieren
Implementieren Sie in Ihrer geteilten Fotogalerie einen Binder-Dienst. Beispiel:
extern "C"
int android_native_main(int, char**) {
// Implement your binder service here
}
App-Code erstellen
Erstellen Sie im Hostteil Ihrer App Code, der die Konfigurationsdatei vorbereitet, ein Handle für die VM lädt (oder erstellt) und die VM ausführt. Beispiel:
// 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();
Mit dem VM-Teil Ihrer App kommunizieren
Um mit dem VM-Teil Ihrer App zu kommunizieren, registrieren Sie zuerst einen Callback, um benachrichtigt zu werden, wenn der Binder-Dienst auf der VM bereit ist. Wenn Sie benachrichtigt werden, stellen Sie eine Verbindung zum Binder-Server her und kommunizieren dann über die benutzerdefinierte AIDL-Schnittstelle mit dem Server. Beispiel:
// 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();
Wenn Sie den Quellcode für eine Demo-App herunterladen möchten, in der die Schritte in diesem Dokument veranschaulicht werden, sehen Sie sich MicrodroidDemo an.