尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证自托管的 SaaS 平台,用于在真实、隔离的 Android 模拟器实例上测试 Android 应用,并将其流式传输至浏览器。
AI 翻译
Self-hosted SaaS platform for testing Android apps on real, isolated Android Emulator instances streamed to the browser.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A self-hosted SaaS platform for testing Android applications on real,
fully isolated Android Emulator instances, streamed to the browser. Think
BrowserStack / AWS Device Farm, but running emulators you control.
Every session gets its own emulator process, its own AVD (own userdata,
sdcard, settings), and its own console/adb port pair - two users on the same
device profile never share state. See docs/ARCHITECTURE.md
for the full design.查看完整 README ↗A self-hosted SaaS platform for testing Android applications on real, fully isolated Android Emulator instances, streamed to the browser. Think BrowserStack / AWS Device Farm, but running emulators you control.
Every session gets its own emulator process, its own AVD (own userdata, sdcard, settings), and its own console/adb port pair - two users on the same device profile never share state. See docs/ARCHITECTURE.md for the full design.
Both, on purpose. EMULATOR_PROVIDER=mock (the default everywhere except a
provisioned Linux+KVM host) runs MockEmulatorProvider, a dependency-free
stand-in that renders a synthetic device frame and simulates boot/install/
input, so the entire product - upload, device lab, scheduling, sessions,
streaming, logs, billing, admin - works end-to-end on a laptop with no
Android SDK installed. EMULATOR_PROVIDER=real runs RealAndroidEmulatorProvider,
which spawns the actual emulator/adb/avdmanager binaries from the
Android SDK. The worker refuses to boot with EMULATOR_PROVIDER=mock in
NODE_ENV=production - see services/emulator-worker/src/providers/index.ts.
apps/
web/ Next.js frontend (dashboard, device lab, sessions, admin)
api/ REST API - auth, orgs/projects/apps, sessions, billing, admin
services/
device-orchestrator/ Runs the 12-step "Start Device" workflow as BullMQ jobs
scheduler/ Pure host-selection logic, called in-process by the orchestrator
emulator-worker/ Drives real/mock Android Emulator instances on a compute host
streaming-gateway/ Proxies the browser <-> worker video/control WebSocket
packages/
database/ Prisma schema + client (single source of truth for the DB)
shared/ Cross-service types, zod schemas, queue names, plan definitions
device-types/ Provider-agnostic types (DeviceProfileSpec, EmulatorLaunchSpec, ...)
storage/ S3-compatible object storage client (MinIO locally)
config/ Typed env loader shared by every backend service
infrastructure/
docker/ Per-service Dockerfiles
kubernetes/ Reference manifests (not wired into a real cluster yet)
monitoring/ Prometheus + Grafana provisioning
docs/
ARCHITECTURE.md, SETUP.md, EMULATOR_HOST_SETUP.md, ROADMAP.md
corepack enable
cp .env.example .env # fill in JWT_SECRET at minimum
cp apps/web/.env.example apps/web/.env.local
docker compose up -d postgres redis object-storage
pnpm install
pnpm db:generate
pnpm db:migrate
pnpm db:seed # demo org + user ([email protected] / password123) + device profiles
pnpm dev # runs every app/service in parallel via turbo
Then open http://localhost:3000, sign in with the seeded demo account, upload
an APK, and click Start Device. With EMULATOR_PROVIDER=mock you'll see a
synthetic device frame reacting to taps/swipes/typed text in real time - the
full orchestration pipeline (scheduler, DB state machine, progress events,
streaming socket) is real; only the "device" itself is simulated.
See docs/EMULATOR_HOST_SETUP.md. Short version:
install the Android SDK cmdline-tools + emulator + platform-tools +
system images, confirm /dev/kvm is accessible, set EMULATOR_PROVIDER=real,
and register the host from the Admin Dashboard (or POST /api/admin/compute-hosts).
docker compose updocker-compose.yml builds and runs every service, plus Prometheus+Grafana.
The bundled emulator-worker image still runs in mock mode by default - swap
EMULATOR_PROVIDER: real and add devices: ["/dev/kvm:/dev/kvm"] +
privileged: true only once you're building that image on an actual
Linux+KVM machine.
This is a working MVP foundation, not a finished commercial product. What's real: the full request path from "Start Device" to a running (mock or real) emulator, tenant-isolated multi-org auth, APK upload + metadata extraction, device scheduling, live streaming + input, logs, screenshots, recordings, usage tracking, and an admin dashboard. What's intentionally stubbed with a clear TODO rather than faked: Kubernetes/Cloud compute providers, Stripe billing, email delivery, and WebRTC (the stream transport today is a WebSocket frame-polling channel - see docs/ROADMAP.md).