Emulator Setup

Emulator Setup

Android Emulator

32-bit

1// Minimal
2AndroidEmulator emulator = AndroidEmulatorBuilder.for32Bit().build();
3
4// With options
5AndroidEmulator emulator = AndroidEmulatorBuilder.for32Bit()
6    .setProcessName("com.example.app")
7    .setRootDir(new File("target/rootfs"))
8    .addBackendFactory(new DynarmicFactory(true))
9    .build();

64-bit

1AndroidEmulator emulator = AndroidEmulatorBuilder.for64Bit()
2    .setProcessName("com.example.app")
3    .setRootDir(new File("target/rootfs"))
4    .addBackendFactory(new HypervisorFactory(true))   // preferred on macOS
5    .addBackendFactory(new Unicorn2Factory(true))      // fallback
6    .build();

Key classes

ClassPath
AndroidEmulatorBuilderunidbg-android/.../linux/android/AndroidEmulatorBuilder.java
AndroidARMEmulatorunidbg-android/.../linux/android/AndroidARMEmulator.java
AndroidARM64Emulatorunidbg-android/.../linux/android/AndroidARM64Emulator.java

iOS Emulator

1// ARM32
2DarwinEmulator emulator = DarwinEmulatorBuilder.for32Bit().build();
3
4// ARM64
5DarwinEmulator emulator = DarwinEmulatorBuilder.for64Bit().build();

Key class: unidbg-ios/.../ios/DarwinEmulatorBuilder.java

Backend Selection

Backends are tried in order; first available wins.

BackendFactory ClassNotes
DynarmicDynarmicFactoryFastest, JIT-compiled
HypervisorHypervisorFactorymacOS/Linux, requires hardware
Unicorn2Unicorn2FactoryCross-platform, most compatible
KVMKvmFactoryLinux only

Lifecycle

1// Always close when done
2emulator.close();
3
4// Or use try-with-resources (if implements Closeable)
5try (AndroidEmulator emulator = AndroidEmulatorBuilder.for64Bit().build()) {
6    // ...
7}

Memory Access

1Memory memory = emulator.getMemory();
2Backend backend = emulator.getBackend();