Skip to content

EmuLabZip 0.5.0: crashes and automation

Choose a tag to compare

@github-actions github-actions released this 24 Oct 16:36

Phase 5: crashes and automation.

Added

  • Crashes: crashes, native crashes and ANRs with their stacks, grouped by thread, with the facts the device wrote
    down and hints for symbolication (retrace, ndk-stack, llvm-symbolizer, atos). Android reports come from
    DropBox (no root needed); iOS Simulator reports are the .ips files macOS writes. A toast and a sidebar badge tell
    you when a new one happens.
  • Controls: location (emulators and simulators), light and dark mode, a clean status bar, battery level,
    runtime permissions, notifications (a simulated push on iOS) and links, each with a way back. Every value is checked
    before a device sees it; links that read local files or run script are refused.
  • MCP server (emulabzip mcp): 25 tools that let an AI assistant list devices and apps, read logs, take
    screenshots, measure performance and memory, browse app files, read crashes and traces, record traces, and control
    the device. It speaks on standard input and output only.
  • Plugins: your own collectors as programs that print JSON lines (metrics, tables, text, logs). A plugin runs only
    after the user enables it, tied to its plugin.json, with a timeout and an output limit. emulabzip plugin new,
    install, enable, run; a Plugins view in the app; two examples in examples/plugins.
  • Command line: emulabzip crashes, crash, control, plugin and mcp.
  • tools/crash-app and tools/crash-app-ios: tiny apps that crash, hang and segfault on purpose, and
    tools/live-tests.sh to run every test that needs a device.

Fixed

  • Starting the adb server no longer hangs on Windows. The server it leaves behind kept the output of EmuLabZip open, so
    anything reading that output (a script, a pipe) waited forever.
  • A plugin run ends when its program exits, even if the program left a background process holding its output, and a
    failing program's error output is no longer lost.