Initial: DroidFleet Visor — Android Cloud Hypervisor
This commit is contained in:
91
README.md
91
README.md
@@ -1,20 +1,85 @@
|
|||||||
<div align="center">
|
# DroidFleet Visor 🤖
|
||||||
<img width="1200" height="475" alt="GHBanner" src="https://ai.google.dev/static/site-assets/images/share-ais-513315318.png" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
# Run and deploy your AI Studio app
|
Cloud virtualization platform for deploying, managing, and renting Android virtual devices with custom bootloaders, root access, and interactive ADB screen streaming.
|
||||||
|
|
||||||
This contains everything you need to run your app locally.
|
## Features
|
||||||
|
|
||||||
View your app in AI Studio: https://ai.studio/apps/4a310be8-e39a-4b78-b317-f2fffa484015
|
- **VM Fleet Management** — Deploy, start, stop, and monitor Android VMs
|
||||||
|
- **Custom Bootloaders** — Unlock bootloaders, root with Magisk, custom recovery, SELinux control
|
||||||
|
- **Screen Streaming** — Real-time VNC/ADB screen viewer with touch interaction
|
||||||
|
- **Proxy Management** — Per-VM proxy configuration with rotation support
|
||||||
|
- **App Automation** — Instagram, Gmail, Facebook app views with programmatic control
|
||||||
|
- **MCP API Studio** — REST API for external tool integration
|
||||||
|
- **ADB Console** — Direct ADB shell access from the browser
|
||||||
|
- **Device Profiles** — Pre-configured Pixel, Samsung, OnePlus device templates
|
||||||
|
|
||||||
## Run Locally
|
## Tech Stack
|
||||||
|
|
||||||
**Prerequisites:** Node.js
|
- **Frontend**: React 19 + TypeScript + TailwindCSS 4 + Vite
|
||||||
|
- **Backend**: Express + TypeScript
|
||||||
|
- **Icons**: Lucide React
|
||||||
|
- **Animations**: Motion (Framer Motion)
|
||||||
|
- **AI**: Google Generative AI integration
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
1. Install dependencies:
|
```bash
|
||||||
`npm install`
|
# Install dependencies
|
||||||
2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
|
npm install
|
||||||
3. Run the app:
|
|
||||||
`npm run dev`
|
# Development (with HMR)
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# Production build
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Start production server
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
Server runs on `http://localhost:3000`.
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
| Method | Path | Description |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| `GET` | `/api/vms` | List all Android VMs |
|
||||||
|
| `POST` | `/api/vms` | Deploy a new VM |
|
||||||
|
| `GET` | `/api/vms/:id` | Get VM details |
|
||||||
|
| `POST` | `/api/vms/:id/start` | Start a VM |
|
||||||
|
| `POST` | `/api/vms/:id/stop` | Stop a VM |
|
||||||
|
| `DELETE` | `/api/vms/:id` | Destroy a VM |
|
||||||
|
| `GET` | `/api/vms/:id/screen` | Screen stream (WebRTC) |
|
||||||
|
| `POST` | `/api/vms/:id/adb` | Execute ADB command |
|
||||||
|
| `GET` | `/api/subscription` | Get subscription status |
|
||||||
|
| `POST` | `/api/subscription` | Update subscription |
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────┐
|
||||||
|
│ React Frontend (Vite + Tailwind) │
|
||||||
|
│ HypervisorConsole · ScreenViewer │
|
||||||
|
│ ProxyManager · McpApi · ADB │
|
||||||
|
└──────────────┬──────────────────────┘
|
||||||
|
│ REST API
|
||||||
|
┌──────────────┴──────────────────────┐
|
||||||
|
│ Express Server (TypeScript) │
|
||||||
|
│ In-Memory VM Database │
|
||||||
|
│ Subscription Management │
|
||||||
|
└──────────────┬──────────────────────┘
|
||||||
|
│
|
||||||
|
┌──────────────┴──────────────────────┐
|
||||||
|
│ Android VMs (QEMU/KVM) │
|
||||||
|
│ Custom bootloaders · Root access │
|
||||||
|
│ ADB · VNC · WebRTC streaming │
|
||||||
|
└─────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
☕ [Buy me a coffee](https://buymeacoffee.com/r26xrthzttg)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>DroidFleet Visor</title>
|
<title>DroidFleet Visor</title>
|
||||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🤖</text></svg>" />
|
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🤖</text></svg>" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
12
vite.config.ts
Normal file
12
vite.config.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import react from '@vitejs/plugin-react'
|
||||||
|
import tailwindcss from '@tailwindcss/vite'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [react(), tailwindcss()],
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
'/api': 'http://localhost:3000'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user