move docs to docs/ folder, merge architecture files, update references
This commit is contained in:
99
docs/APP-MANAGEMENT.md
Normal file
99
docs/APP-MANAGEMENT.md
Normal file
@@ -0,0 +1,99 @@
|
||||
# App Management System
|
||||
|
||||
The device-side app management system handles installation, updates, and launching of third-party apps.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ AppManager │
|
||||
│ - Install/Uninstall apps from .mosis packages │
|
||||
│ - Track installed apps in JSON registry │
|
||||
│ - Manage app data/cache directories │
|
||||
└─────────────────────────┬───────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ LuaSandboxManager │
|
||||
│ - StartApp/StopApp lifecycle │
|
||||
│ - Per-app isolated Lua environments │
|
||||
│ - Resource limits (memory, CPU, timers) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## App Package Format (.mosis)
|
||||
|
||||
Apps are distributed as ZIP files with `.mosis` extension:
|
||||
|
||||
```
|
||||
myapp.mosis
|
||||
├── manifest.json # Required: app metadata
|
||||
├── main.rml # Entry point (RmlUi document)
|
||||
├── styles.rcss # Stylesheets
|
||||
├── scripts/ # Lua scripts
|
||||
│ └── app.lua
|
||||
└── assets/ # Icons, images, etc.
|
||||
```
|
||||
|
||||
## Manifest Format
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "com.example.myapp",
|
||||
"name": "My App",
|
||||
"version": "1.0.0",
|
||||
"version_code": 1,
|
||||
"entry": "main.rml",
|
||||
"icon": "icon.tga",
|
||||
"description": "App description",
|
||||
"developer": {
|
||||
"name": "Developer Name",
|
||||
"email": "dev@example.com"
|
||||
},
|
||||
"permissions": [
|
||||
"network",
|
||||
"storage",
|
||||
"camera"
|
||||
],
|
||||
"min_api_version": 1
|
||||
}
|
||||
```
|
||||
|
||||
## App Lifecycle
|
||||
|
||||
```cpp
|
||||
// Install from local file
|
||||
app_manager->InstallFromFile("/path/to/app.mosis", [](auto progress) {
|
||||
LOG_INFO("Install progress: %s %.0f%%",
|
||||
InstallProgress::StageName(progress.stage),
|
||||
progress.progress * 100);
|
||||
});
|
||||
|
||||
// Launch app (starts sandbox)
|
||||
app_manager->LaunchApp("com.example.myapp");
|
||||
|
||||
// Check if running
|
||||
bool running = app_manager->IsAppRunning("com.example.myapp");
|
||||
|
||||
// Stop app (cleanup sandbox)
|
||||
app_manager->StopApp("com.example.myapp");
|
||||
|
||||
// Uninstall (stops if running, removes files)
|
||||
app_manager->Uninstall("com.example.myapp", false); // keep_data=false
|
||||
```
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
/data/data/com.omixlab.mosis/files/
|
||||
├── apps/
|
||||
│ └── com.example.myapp/
|
||||
│ ├── package/ # Extracted app files
|
||||
│ ├── data/ # App persistent data (VirtualFS)
|
||||
│ ├── cache/ # App cache (clearable)
|
||||
│ └── db/ # SQLite databases
|
||||
├── downloads/ # Temporary download location
|
||||
├── backups/ # App data backups
|
||||
└── config/
|
||||
└── apps.json # Installed apps registry
|
||||
```
|
||||
Reference in New Issue
Block a user