Skip to content

About

非 Root Android 上的呆呆面板本机版:任务、脚本、订阅、依赖、通知和终端都在手机里运行。安装包只从本仓库 Release 发布。

Topics

Resources

Stars

18 stars

Watchers

0 watching

Forks

Repository files navigation

呆呆面板 Android 本机版

Quality Android Build Device Smoke Release License

呆呆面板 Android 本机版在非 Root Android 上提供任务、脚本、日志、环境变量、订阅、依赖、通知、Open API、安全、备份和监控,并可以连接远程面板。内置 NDK 自编译 PRoot 与 Ubuntu 用户空间,可在本机使用终端、脚本和包管理,无需 Termux。安装包只从本仓库 Release 发布。

当前版本:v2.0.6(正式版)

Android versionCode:2000060

默认分支:main

下载

  • 当前正式版:GitHub Releases 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

项目 当前状态
默认分支 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. 校验版本

python3 scripts/version.py check
python3 scripts/version.py show

版本升级时先修改 VERSION.json,再同步派生文件:

python3 scripts/version.py sync
python3 scripts/version.py check

2. 测试 Go Core

go -C panel/server test ./...
go -C panel/server vet ./...

关键并发包可执行 race 检查:

go -C panel/server test -race ./mobilecore ./router ./handler ./service ./database

3. 测试 Flutter

cd app
flutter pub get
flutter analyze
flutter test

4. 准备 Android runtime

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 单元测试

gradle -p app/android :app:testReleaseUnitTest --no-daemon --stacktrace

6. 构建 ARM64 release APK

cd app
flutter build apk --release --target-platform android-arm64

Flutter APK 输出:

app/build/app/outputs/flutter-apk/app-release.apk

7. 构建本机 Panel Web

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:

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 且非预发布,完成正式态。

触发正式版发布:

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。

About

非 Root Android 上的呆呆面板本机版:任务、脚本、订阅、依赖、通知和终端都在手机里运行。安装包只从本仓库 Release 发布。

Topics

Resources

Stars

18 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages