README.md
Rama main · réplica de lectura del repositorio original.
# 呆呆面板 Android 本机版
[](https://github.com/tall-1997/daidai-panel-native/actions/workflows/ci.yml)
[](https://github.com/tall-1997/daidai-panel-native/actions/workflows/android-release.yml)
[](https://github.com/tall-1997/daidai-panel-native/actions/workflows/android-device-smoke.yml)
[](https://github.com/tall-1997/daidai-panel-native/releases/latest)
[](LICENSE)
呆呆面板 Android 本机版在非 Root Android 上提供任务、脚本、日志、环境变量、订阅、依赖、通知、Open API、安全、备份和监控,并可以连接远程面板。内置 NDK 自编译 PRoot 与 Ubuntu 用户空间,可在本机使用终端、脚本和包管理,无需 Termux。安装包只从本仓库 Release 发布。
当前版本:**v2.0.6**(正式版)
Android versionCode:**2000060**
默认分支:**main**
## 下载
- 当前正式版:[GitHub Releases v2.0.6](https://github.com/tall-1997/daidai-panel-native/releases/tag/v2.0.6)
- ARM64 完整版:`daidai-panel-native-2.0.6-stable-arm64.apk`
- x86_64 版(模拟器/云手机):`daidai-panel-native-2.0.6-stable-x86_64.apk`
- Release 只提供安装包。应用内更新使用同版本的 `android-update.json`,不再附带 `.sha256` 文件。
## 首次登录
- 默认账号:**`admin`**
- 默认密码:**`admin123`**
首次登录后请及时在「我的 → 个人中心」修改密码,避免安全隐患。
## 核心能力
- Flutter UI 统一管理 Android 本地实例和远程呆呆面板。
- 本地 Kotlin fallback 运行于 Android `:panel` 独立进程,并监听动态 `127.0.0.1` 端口。
- **内置 Linux 终端**:NDK 自编译 PRoot + Ubuntu 24.04 用户空间,无需 Root,也不需要 Termux。
- 支持任务、Cron、脚本、日志、环境变量、订阅、通知、用户、安全、SSH、Open API、平台令牌和备份恢复。
- 包管理:Ubuntu 使用 apt,默认阿里云镜像源,支持按需安装 node、git、python3 等开发工具。
- 支持 pip/npm 依赖安装、指定版本、安装去重、共享目录、镜像配置和缓存限制;镜像源在「我的 → 依赖管理」页右上角切换。
- 支持实时增量日志、持久日志回读、任务停止、进程树回收和 Android 本地通知。
- 支持中文脚本路径、空格、引号、显式空参数和多账号变量。
- 支持 App 内安全打开本机浏览器面板(一次性票据),也支持局域网浏览器通过账号密码 + JWT 登录访问。
- 内置 Open API 应用管理:App Key / App Secret 换 token,业务 API 支持 token 鉴权、scopes 权限、速率限制与调用日志。
- 本地接口校验安装级 Token、精确 Host、Origin、JWT、角色和权限。
- 业务 API 由本仓库的 Kotlin 本机面板实现,合同见 `contracts/`。
## 架构与能力
| 安装包 | ABI | 本地业务 API | 本地终端环境 | 推荐场景 |
| --- | --- | --- | --- | --- |
| ARM64 完整版 | `arm64-v8a` | Kotlin 本机面板 | PRoot + Ubuntu,apt 包管理,Python/Node/Shell/Git/SSH | ARM64 手机、平板、云手机 |
| x86_64 版 | `x86_64` | Kotlin 本机面板 | PRoot + Ubuntu,apt 包管理,Python/Node/Shell/Git/SSH | x86_64 模拟器、云手机 |
本地 Kotlin 面板已覆盖 Git SSH 私钥拉取、订阅刷新和停止、恢复进度、脚本短时 token、TypeScript、检查更新。Node.js 和 Python 通过 apt 在 Linux 用户空间内按需安装。
## 平台边界
- 正式 Release 提供 ARM64 APK,另附 x86_64 APK 供模拟器/云手机使用。
- 本地服务监听 `0.0.0.0`,支持本机与局域网浏览器访问;App 内请求走 local-token,浏览器请求强制账号密码 + JWT。
- Linux 终端使用本仓库 NDK 自编译的 PRoot,不依赖外部终端应用。
- Ubuntu 内置在 APK 中。
- 默认 Linux 包管理器镜像源为华为云/阿里云/npmmirror,可在「我的 → 依赖管理」页右上角切换。
- 依赖 glibc、桌面 Linux API 或不兼容 ARM64 的原生扩展可能无法使用。
- APK 内置 runtime 随 App 更新,本地实例不提供后端自更新或 runtime 卸载。
- 持续调度开启时使用可见 Foreground Service;普通后台模式会暂停 Flutter 连接轮询并降低 fallback 调度唤醒频率。
- GitHub 云 runner 支持 x86_64 Android 模拟器矩阵,随正式发布门禁执行;不支持 ARM64 模拟器,ARM64 真机矩阵以 blocked evidence 如实记录,真机证据可通过 self-hosted runner 补充。
## 仓库与分支
仓库地址:[tall-1997/daidai-panel-native](https://github.com/tall-1997/daidai-panel-native)
| 项目 | 当前状态 |
| --- | --- |
| 默认分支 | `main` |
| 远程开发分支 | `main` |
| 当前正式版标签 | `v2.0.3` |
| 单一版本源 | `VERSION.json` |
| Android 应用 ID | `com.daidai.daidai_app` |
| 最低 Android API | 24 |
| 目标 Android API | 35 |
| 编译 Android API | 36 |
| 支持 ABI | `arm64-v8a`、`x86_64` |
### 分支策略
- `main` 保存已通过 CI 的集成代码,也是 GitHub Actions snapshot 构建来源。
- 功能开发使用短生命周期分支,完成评审与门禁后快进或合并到 `main`。
- 稳定版本使用 `vMAJOR.MINOR.PATCH` 标签和 GitHub Stable Release。
- `VERSION.json` 中的版本必须与 App、Go Core 和 Panel Web 派生版本一致。
- 提交签名前确认工作区仅包含目标修改,并保持密钥、JKS 和密码位于 GitHub Secrets。
### 当前发布链路
`main` 推送自动触发:
1. `PR and Main Quality`
2. `Android Build and Release` snapshot
3. `Android Device Runtime Smoke`
正式版由 `v*` tag 触发。tag 必须等于 `VERSION.json` 中的 `v{VERSION}`。工作流验证版本、签名证书、Flutter、Kotlin、APK 摘要,并使用同一次构建通过的 x86_64 模拟器运行时证据创建正式 Release。当前没有自托管 ARM64 真机 runner,正式说明不会把 ARM64 真机写成已验证。
## 目录结构
| 路径 | 用途 |
| --- | --- |
| `app/` | Flutter App、Android Host、Kotlin fallback 和移动端测试 |
| `app/android/app/src/main/jniLibs/` | NDK 自编译原生二进制(PRoot、BusyBox、Talloc、libandroid-shmem) |
| `app/android/app/src/main/assets/android-runtime/` | 嵌入式 Linux 运行时资产(Ubuntu rootfs、Manifest) |
| `panel/server/` | 本仓库保留的服务端参考实现,不编译进 Android 安装包 |
| `panel/web/` | 本机浏览器面板 Web 前端 |
| `runtime/` | 运行时清单、兼容矩阵和 smoke evidence |
| `contracts/` | 移动端 API 路由契约 |
| `scripts/` | 版本、运行时、路由和发行证据工具 |
| `.github/workflows/` | Quality、Android Build 和 Device Smoke 工作流 |
| `docs/` | 项目架构与开发文档 |
| `specs/` | 需求、设计和实施任务 |
## 构建环境
CI 使用以下工具链:
| 工具 | 版本 |
| --- | --- |
| Flutter | 3.44.9 stable |
| Dart | Flutter 3.44.9 内置版本 |
| Go | 1.25.0 |
| Java | Temurin 17 |
| Gradle | 9.1.0 |
| Node.js | 20,Panel Web 构建工具 |
| Android compileSdk | 36 |
| Android targetSdk | 35 |
| Android minSdk | 24 |
本地构建还需要 Android SDK、NDK、CMake、Linux shell 工具和可访问运行时资产源的网络环境。
## 开发构建
### 1. 校验版本
```bash
python3 scripts/version.py check
python3 scripts/version.py show
```
版本升级时先修改 `VERSION.json`,再同步派生文件:
```bash
python3 scripts/version.py sync
python3 scripts/version.py check
```
### 2. 测试 Go Core
```bash
go -C panel/server test ./...
go -C panel/server vet ./...
```
关键并发包可执行 race 检查:
```bash
go -C panel/server test -race ./mobilecore ./router ./handler ./service ./database
```
### 3. 测试 Flutter
```bash
cd app
flutter pub get
flutter analyze
flutter test
```
### 4. 准备 Android runtime
```bash
cd app
bash scripts/prepare-android-python-runtime.sh
bash scripts/prepare-android-ubuntu-rootfs.sh
bash scripts/prepare-android-yaegi-runtime.sh
```
### 5. 运行 Kotlin 单元测试
```bash
gradle -p app/android :app:testReleaseUnitTest --no-daemon --stacktrace
```
### 6. 构建 ARM64 release APK
```bash
cd app
flutter build apk --release --target-platform android-arm64
```
Flutter APK 输出:
```text
app/build/app/outputs/flutter-apk/app-release.apk
```
### 7. 构建本机 Panel Web
```bash
cd panel/web
npm ci
VITE_LOCAL_WEB_BUILD=true npm run build
```
Android Gradle 构建会自动将本机 Web 资源打包到 APK 的 `/local-ui/` 路径。
## CI 构建
### Quality
工作流:`.github/workflows/ci.yml`
Quality 根据改动路径执行:
- Go test、vet 和 race
- Flutter analyze 与 tests
- Kotlin unit tests
- 路由契约检查
- Panel Web build
- 发行与运行时脚本测试
### Android Build
工作流:`.github/workflows/android-release.yml`
支持三种通道:
| 通道 | 用途 | GitHub Release |
| --- | --- | --- |
| `snapshot` | main 日常验证 | 仅 Actions artifact |
| `prerelease` | 可安装预发行 APK | 手动更新 `VERSION.json` 对应的固定版本 Release;当前为 `v2.0.2` |
| `stable` | 正式签名稳定版 | 自动创建 Stable Release |
重复运行 `prerelease` 会更新固定版本标签到本次提交,并仅覆盖本轮同名 APK、校验文件、更新清单和证据包;其他 Release 资产保持原样。未来升版只需先明确更新 `VERSION.json`。
手动触发 snapshot:
```bash
gh workflow run android-release.yml \
--repo tall-1997/daidai-panel-native \
--ref main \
-f release_channel=snapshot
```
### Device Smoke
工作流:`.github/workflows/android-device-smoke.yml`
默认执行 ARM64 debug APK 构建、smoke driver 测试和 ARM64 blocked evidence。连接 self-hosted ARM64 Android runner 后,可通过 `run_physical_device` 输入执行真机矩阵。
## 正式签名与发布
### GitHub Secrets
仓库需要配置以下 Secrets:
| Secret | 内容 |
| --- | --- |
| `KEYSTORE_BASE64` | JKS 文件的 Base64 内容 |
| `KEYSTORE_PASSWORD` | JKS store password |
| `KEYSTORE_ALIAS` | 签名 alias |
| `KEYSTORE_KEY_PASSWORD` | 私钥密码 |
| `KEYSTORE_CERT_SHA256` | 签名证书 SHA-256 |
密钥、密码和 JKS 文件禁止提交到仓库。`app/.gitignore` 与 `app/android/.gitignore` 已忽略常见 keystore 文件。
### 发布步骤
1. 修改 `VERSION.json`。
2. 执行 `python3 scripts/version.py sync`。
3. 执行 `python3 scripts/version.py check`。
4. 提交并推送 `main`。
5. 等待 Quality、snapshot Build 和 Device Smoke 成功。
6. 触发 `prerelease` 工作流(无自托管真机 runner 路径)。
7. 核验 Release、APK、SHA-256、更新清单和 evidence 包。
8. 将 Release 编辑为 Latest 且非预发布,完成正式态。
触发正式版发布:
```bash
gh workflow run android-release.yml \
--repo tall-1997/daidai-panel-native \
--ref main \
-f release_channel=prerelease
```
`workflow_dispatch` 仅接受 `snapshot` 和 `prerelease`;`stable` 通道由版本 tag 推送触发(`workflow_dispatch` 不支持该通道名)。
工作流对正式 APK 执行:
- JKS 可用性、alias 和密码校验
- JKS 证书 SHA-256 校验
- APK 签名结构校验
- APK 证书指纹与 JKS 证书匹配
- 运行时清单、兼容矩阵和内嵌 metadata 比对
- APK SHA-256 与 `android-update.json` 生成
- release evidence、SBOM 和第三方许可证打包
## 验证清单
发布前重点验证:
- 冷启动、本地 Core 恢复和动态 endpoint 更新
- 远程实例切换回本地实例
- Python、JavaScript、TypeScript、Shell 和 Go 任务
- 中文路径、空参数、环境变量和多账号变量
- 精确版本 pip/npm 依赖安装和导入
- Cron、Hooks、任务日志、SSE 和本地通知
- 后台与前台切换、持续调度和 WorkManager 恢复
- 用户、安全、SSH、平台令牌、Open API 和订阅
- 备份创建、导出、导入和事务恢复
- 本机浏览器面板的一次性票据、Cookie、JWT 和权限边界
## 项目文档
- 架构:`docs/ARCHITECTURE.md`
- 发布证据:`docs/RELEASE_EVIDENCE.md`
- 项目索引:`docs/INDEX.md`
- 完整需求与设计:`specs/android-modern-full-panel/`
## 许可证
- 本仓库新增代码使用根目录 `LICENSE` 中的 MIT License。
- `app/` 与 `panel/` 中的第三方代码和资源遵循各自许可证及版权声明。
- 第三方依赖许可证归对应作者所有,完整清单以锁文件和 Release evidence 为准。
问题与建议请提交到 [GitHub Issues](https://github.com/tall-1997/daidai-panel-native/issues)。