Metadata-Version: 2.1
Name: sma-autoui
Version: 0.1.0
Summary: Smart Mobile Automation UI Framework
Home-page: https://github.com/Fun-Fox
Author: FunFox
Author-email: FunFox@example.com
License: MIT
Requires-Python: >=3.7.16
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: loguru>=0.7.0
Requires-Dist: pytz>=2020.4
Requires-Dist: appium-python-client>=2.1.4
Requires-Dist: pillow>=9.5.0
Requires-Dist: lxml==5.1.0
Requires-Dist: opencv-contrib-python==4.13.0.90
Requires-Dist: ddddocr>=1.5.6
Requires-Dist: requests>=2.27.1
Requires-Dist: jinja2>=3.0.3
Requires-Dist: openai>=1.39.0
Requires-Dist: paramiko>=3.5.1
Requires-Dist: filelock>=3.12.2
Requires-Dist: python-dotenv>=0.21.1
Requires-Dist: pymysql>=1.0.2

# SMA AutoUI

Smart Mobile Automation UI Framework

## 安装

```bash
pip install -r requirements.txt
```

或者从源码安装：

```bash
pip install .
```

## 开发安装

```bash
pip install -e .
```


## 构建

### 删除旧的构建产物
Remove-Item -Recurse -Force build, dist, *.egg-info -ErrorAction SilentlyContinue

### 然后重新打包
python -m build --wheel
python setup.py bdist_wheel



## Appium Session 管理

### 概述

框架支持跨任务复用 Appium 会话，避免反复启动 App 和 UiAutomator2 服务器。通过 `event_mode` 参数控制会话生命周期。

### Session 文件

- **存储路径**：`~/.sma_autoui/sessions/{udid}.json`
- **文件内容**：
  ```json
  {
    "session_id": "abc123...",
    "appium_url": "http://appium-server:4723",
    "systemPort": "8200",
    "udid": "172.25.2.20:5555",
    "saved_at": "2024-07-21 10:30:00"
  }
  ```

### 会话生命周期

| event_mode | keep_app_alive | newCommandTimeout | Session 保存 | 任务结束行为 |
|------------|----------------|-------------------|--------------|---------------|
| `ONE_TIME_TASK` | `False` | 240s (4min) | **不保存** | 删除 session 文件 + App 关闭 |
| `LONG_STAY` | `True` | 2400s (40min) | **保存** | 保留 session 文件 + App 保持运行 |

### Session 复用条件

复用需同时满足以下条件：

1. **存在 session 文件**：上一次任务以 `LONG_STAY` 模式结束
2. **Appium URL 一致**：当前任务的 Appium 服务器地址与文件记录一致
3. **systemPort 一致**：当前 `-s` 参数与文件记录一致
4. **会话仍有效**：Appium 服务器上的会话未超时（`newCommandTimeout` 内）

### 复用流程

```
connect() 调用
    ↓
检查 session 文件是否存在
    ↓
  有文件 → 校验 URL + systemPort 是否一致
    ↓                    ↓
   一致               不一致
    ↓                    ↓
尝试复用会话      创建新会话
    ↓                    ↓
  成功               连接成功
    ↓                    ↓
App 不重启         App 正常启动
（复用现有状态）
```

### Session 删除时机

1. **任务正常结束（ONE_TIME_TASK）**：`disconnect()` 调用 `quit()` 销毁会话后删除文件
2. **复用失败**：会话已超时/失效时，清理旧文件
3. **手动关闭 App**：通过 `close_app.py` 脚本

### 典型场景

**场景 1：连续执行多个 LONG_STAY 任务**
```
任务1 (LONG_STAY) → 进入直播间 → 结束 → App 保持, session 文件保留
                                              ↓
任务2 (LONG_STAY) → 检测 session 文件 → 复用会话 → 直接执行（App 不重启）
```

**场景 2：ONE_TIME_TASK 任务**
```
任务 (ONE_TIME_TASK) → 执行任务 → 结束 → session 文件删除, App 关闭
```

**场景 3：切换设备/端口**
```
任务1 (-s 8200) → 保存 session 文件 (systemPort=8200)
                              ↓
任务2 (-s 8201) → 检测 systemPort 不一致 → 忽略旧 session → 创建新会话
```

---

pip install sma_autoui-0.1.0-py3-none-any.whl

pip install --force-reinstall 
