校园网 ePortal 自动认证守护 · Android 客户端
Rust 内核 + Jetpack Compose + Material 3
从 campus-auth-guardian Windows 版移植而来,核心 Rust 业务逻辑复用率 ~85%,Android 壳全新编写。
- ePortal 自动认证 — 检测校园网 Portal 并自动完成 JSONP 认证
- 守护模式 — 后台常驻轮询(3 秒间隔),断线自动重连,指数退避避障
- 非校园网识别 — 通过 Portal 服务器可达性探测区分校园网与普通网络,避免误操作
- 多运营商 — 支持校园网 / 中国移动 / 中国联通 / 中国电信
- 持久通知 — 状态栏常驻通知实时显示认证状态
- 开机自启 — BootReceiver + 前台 Service,系统重启后自动恢复
- OEM 自启引导 — 检测小米 / 华为 / OPPO / vivo / 三星等品牌,给出专属后台保活指引
- 首次使用向导 — 4 步完成学号、密码、运营商配置
- Material 3 — 动态取色(Android 12+)、深浅色主题、Edge-to-edge
campus-auth-guardian-android/
├── rust/core/ # Rust 认证内核
│ ├── Cargo.toml # guardian-core-android (cdylib)
│ └── src/
│ ├── auth.rs # ePortal JSONP 认证协议
│ ├── netcheck.rs # 连通性 / captive portal / 非校园网检测
│ ├── config.rs # INI 配置读写
│ ├── guardian.rs # 守护循环状态机(自适应轮询间隔)
│ ├── logger.rs # 内存环形缓冲日志
│ ├── ipdetect.rs # IP 检测(Android 适配:UDP 探测 + ConnectivityManager)
│ ├── uniffi_api.rs # UniFFI 导出层
│ └── guardian.udl # UniFFI 接口定义
├── app/src/main/java/com/campusauth/
│ ├── MainActivity.kt # 主 Activity(电池优化弹窗)
│ ├── CampusAuthApp.kt # Application(通知渠道注册)
│ ├── ffi/
│ │ └── GuardianBridge.kt # Kotlin↔Rust FFI 桥接(UniFFI 生成绑定的上层封装)
│ ├── service/
│ │ ├── GuardianService.kt # 前台 Service(WakeLock + WifiLock 保活)
│ │ ├── EventPoller.kt # 事件分发单例(SharedFlow 广播 Rust 事件)
│ │ └── BootReceiver.kt # 开机自启广播接收器
│ ├── viewmodel/
│ │ └── StatusViewModel.kt # 状态页 ViewModel(单一状态源)
│ ├── util/
│ │ └── OemAutoStart.kt # OEM 品牌检测与自启引导
│ └── ui/
│ ├── theme/ # Material 3 主题(动态取色)
│ ├── navigation/
│ │ └── AppNavigation.kt # NavigationCompose 路由 + 底部导航栏
│ ├── screen/
│ │ ├── StatusScreen.kt # 首页:双状态卡 + 守护模式开关
│ │ ├── SettingsScreen.kt # 设置:运营商 / 服务器 / 账号参数
│ │ ├── LogsScreen.kt # 运行日志
│ │ ├── WizardScreen.kt # 首次使用 4 步配置向导
│ │ └── AboutScreen.kt # 关于页(版本 / 构建信息 / 设备信息)
│ └── component/
│ └── StatusCard.kt # 状态指示卡片组件
└── gradle.properties # VERSION_CODE / VERSION_NAME(版本管理)
| 项目 | 要求 |
|---|---|
| Android 版本 | 8.0+(API 26) |
| 目标 SDK | 35(Android 15) |
| 材质动态取色 | Android 12+ |
| CPU 架构 | arm64-v8a、x86_64 |
# Android Studio Ladybug+(或纯 CLI 环境)
# Android NDK
sdkmanager "ndk;30.0.16248370"
# Rust Android 交叉编译目标
rustup target add aarch64-linux-android x86_64-linux-android
# UniFFI CLI(生成 Kotlin 绑定)
cargo install uniffi-bindgen# 直接 Android Studio 打开项目,Gradle 会自动执行 buildRust task
# 或命令行:
./gradlew assembleDebug
# APK 产出:
# app/build/outputs/apk/debug/app-debug.apkbuildRust task 会自动:
- 交叉编译 Rust 为
.so(arm64 + x86_64) - 生成 UniFFI Kotlin 绑定
- 将
.so复制到jniLibs/
版本号在 gradle.properties 中维护:
VERSION_CODE=1 # 每次发版单调递增
VERSION_NAME=0.1.0 # 语义化版本构建时自动注入的信息(About 页可查看):
- Git commit hash(短)
- 提交时间
- 当前分支
- APK 构建时间
MIT License