Emulator Solutions
Null Autos provides a comprehensive suite of emulator solutions beyond Cuttlefish, including custom Android builds, specialized configurations, and third-party emulator support.
Overview
Our emulator platform supports:
- Multiple Emulator Types: Cuttlefish, custom AOSP, and third-party emulators
- Device Categories: Phone, tablet, automotive, TV, wearables, IoT
- Android Versions: Android 11 through latest Android 14+
- Custom Builds: Support for custom Android builds and forks
Emulator Types
Cuttlefish (Primary)
Google's reference virtual device implementation.
Custom AOSP Builds
Run your own Android Open Source Project builds:
- Custom System Images: Upload and use your AOSP builds
- Modified Frameworks: Test framework modifications
- Custom HALs: Hardware abstraction layer customization
- Kernel Modules: Custom kernel support
Android Automotive OS
Specialized automotive configurations:
- IVI Systems: In-vehicle infotainment
- Instrument Clusters: Digital gauge clusters
- HUD: Head-up display emulation
- Vehicle HAL: Complete vehicle hardware abstraction layer
Android TV
Television and set-top box emulation:
- TV Launcher: Android TV home screen
- Leanback UI: TV-optimized interfaces
- HDMI CEC: Consumer electronics control
- Voice Input: Remote control simulation
Wear OS
Smartwatch and wearable device emulation:
- Circular Displays: Round watch faces
- Health Sensors: Heart rate, step counter
- Companion App: Phone pairing simulation
- Watch Faces: Customizable watch displays
Configuration Options
Display Settings
{
"display": {
"width": 1920,
"height": 1080,
"dpi": 160,
"orientation": "landscape",
"touchscreen": true,
"multitouch": true
}
}
Hardware Configuration
{
"hardware": {
"cpus": 4,
"memory": 4096,
"storage": 16384,
"gpu": {
"enabled": true,
"model": "virtio-gpu",
"vram": 512
}
}
}
Sensor Configuration
{
"sensors": {
"accelerometer": true,
"gyroscope": true,
"magnetometer": true,
"gps": {
"enabled": true,
"latitude": 37.7749,
"longitude": -122.4194
},
"temperature": true,
"pressure": true
}
}
Network Configuration
{
"network": {
"wifi": {
"enabled": true,
"ssid": "TestNetwork",
"quality": "excellent"
},
"cellular": {
"enabled": true,
"type": "5G",
"carrier": "Test Carrier"
},
"bluetooth": {
"enabled": true,
"version": "5.2"
}
}
}
Automotive Configurations
IVI System (In-Vehicle Infotainment)
const iviDevice = await ctrl.devices.create({
type: 'automotive',
profile: 'ivi',
display: {
width: 1920,
height: 1080,
dpi: 160,
},
vehicle: {
make: 'Example',
model: 'Sedan',
year: 2024,
features: ['hvac', 'radio', 'navigation', 'climate'],
},
});
Instrument Cluster
const clusterDevice = await ctrl.devices.create({
type: 'automotive',
profile: 'cluster',
display: {
width: 1280,
height: 480,
dpi: 240,
orientation: 'landscape',
},
vehicle: {
speed: 0,
rpm: 0,
fuelLevel: 100,
engineTemp: 90,
},
});
Custom Image Support
Uploading Custom Images
# Upload system image
ctrl images upload \
--name "my-custom-android" \
--version "14.0-custom" \
--file ./system.img \
--type "system"
# Upload kernel
ctrl images upload \
--name "my-custom-android" \
--version "14.0-custom" \
--file ./kernel \
--type "kernel"
Using Custom Images
const device = await ctrl.devices.create({
type: 'custom',
image: {
name: 'my-custom-android',
version: '14.0-custom',
},
hardware: {
cpus: 4,
memory: 4096,
},
});
Performance Profiles
Balanced (Default)
Standard configuration for most workloads:
- CPU: 2 vCPUs
- Memory: 2 GB
- GPU: Enabled
- Boot Time: ~30 seconds
High Performance
Optimized for demanding applications:
- CPU: 4 vCPUs with dedicated cores
- Memory: 4-8 GB
- GPU: Dedicated GPU with passthrough
- Boot Time: ~20 seconds
Resource Efficient
Minimal resources for simple testing:
- CPU: 1 vCPU
- Memory: 1 GB
- GPU: Disabled
- Boot Time: ~45 seconds
Integration Examples
CI/CD Pipeline
# GitLab CI
test:automotive:
stage: test
script:
- ctrl devices create --profile automotive --wait
- adb install app.apk
- adb shell am instrument -w com.example.test
after_script:
- ctrl devices delete --all
Automated Testing
import ctrl
# Test across multiple configurations
configs = [
{'type': 'phone', 'android': '13'},
{'type': 'phone', 'android': '14'},
{'type': 'automotive', 'profile': 'ivi'},
]
for config in configs:
device = ctrl.devices.create(**config)
device.adb.install('app.apk')
results = device.run_tests()
device.delete()
assert results['passed'] > 0, f"Tests failed on {config}"
Load Testing
// Spin up 100 devices for load testing
const devices = await Promise.all(
Array.from({ length: 100 }, (_, i) =>
ctrl.devices.create({
type: 'phone',
name: `load-test-${i}`,
})
)
);
// Run load test
await runLoadTest(devices);
// Cleanup
await Promise.all(devices.map(d => d.delete()));
Advanced Features
Device Snapshots
Save and restore device state:
// Create snapshot
const snapshot = await device.snapshots.create({
name: 'app-installed',
description: 'Device with app installed and configured',
});
// Restore from snapshot
const newDevice = await ctrl.devices.create({
snapshot: snapshot.id,
});
Device Cloning
Clone existing device configuration:
const clonedDevice = await device.clone({
count: 5, // Create 5 clones
prefix: 'test-device',
});
Custom Scripts
Run custom initialization scripts:
const device = await ctrl.devices.create({
type: 'automotive',
postBoot: {
script: `
adb install /apps/my-app.apk
adb shell settings put global auto_time 0
adb shell input keyevent KEYCODE_HOME
`,
},
});
Monitoring & Metrics
Device Metrics
Real-time metrics for each device:
- CPU Usage: Per-core utilization
- Memory: Used, free, cached
- Disk I/O: Read/write throughput
- Network: Bandwidth and latency
- GPU: GPU utilization (if enabled)
Performance Profiling
// Start profiling
await device.profiler.start({
duration: 60, // seconds
metrics: ['cpu', 'memory', 'gpu', 'network'],
});
// Get profile results
const profile = await device.profiler.getResults();
console.log(profile.averageCpu); // Average CPU usage
Pricing
Emulator pricing is based on:
| Factor | Pricing |
|---|---|
| CPU | $0.10 per vCPU hour |
| Memory | $0.01 per GB hour |
| Storage | $0.10 per GB/month |
| GPU | $0.25 per GPU hour |
| Data Transfer | $0.09 per GB |
Example: A 2 vCPU, 2 GB RAM device with GPU costs ~$0.45/hour.
Best Practices
Resource Management
- Right-size Your Devices: Choose appropriate resources for your workload
- Use Snapshots: Save common states for faster setup
- Auto-cleanup: Set timeouts to prevent forgotten devices
- Pool Management: Reuse devices when possible
Performance Optimization
- Enable GPU: For graphical applications
- Use SSD Storage: Faster I/O performance
- Network Optimization: Co-locate with your services
- Pre-warm Devices: Keep a pool of ready devices
Cost Optimization
- Schedule Usage: Run tests during off-peak hours
- Batch Operations: Test multiple apps on same device
- Efficient Cleanup: Delete devices immediately after use
- Reserved Capacity: Pre-purchase for discounts
Troubleshooting
Boot Issues
- Verify image compatibility
- Check resource allocation
- Review boot logs
- Try different Android version
Performance Issues
- Increase CPU/memory allocation
- Enable GPU acceleration
- Check host node capacity
- Monitor resource metrics
Network Issues
- Verify network configuration
- Check firewall rules
- Test connectivity
- Review DNS settings
Support
For emulator-specific questions:
- Documentation: docs.null.autos
- Email: support@null.autos
- Status: status.null.autos
- Community: community.null.autos