概要
BeikeSchedule(ベイク課表)は北京科技大学(USTB)の時間割アプリです。内蔵 WebView で教務システムにログインして時間割をワンタップでインポートし、週表示で確認、授業前のリマインダーにも対応。リリース APK を公開しており、上書きインストールで更新できます。
Kotlin Compose Room AlarmManager
主な機能
- ワンタップインポート:WebView で統一認証を完了(アプリは学籍番号・パスワードに触れない)、学期時間割の JSON を自動取得し、プレビュー確認後に保存
- 公式教学週カレンダー:インポート時に学事カレンダーを同期し、教学週 ↔ 日付を正確にマッピング。国庆節などの長期休暇は教学週番号を消費せず、休暇中は休暇後の最初の教学週へ自動配置
- 週表示:「大節」単位のレイアウト、スワイプで週移動、週番号のドロップダウンジャンプ、隔週表示、固定時刻のない科目の独立リスト、場所の建物名 / 部屋番号の 2 行表示
- 科目管理:手動での追加・編集・削除が可能で、インポートデータと共存
- 授業リマインダー:各コマの N 分前にシステム通知(デフォルト 15 分、調整可能)。正確なアラームに対応し、再起動後も自動で再スケジュール
- 現在週の検出:プロセスkill後の再起動でも正しく現在の教学週を特定。ダークモード 3 モード切り替え
技術ポイント
- Kotlin + Jetpack Compose(Material 3)、Room(科目 / 時限)+ DataStore(学期設定 / カレンダー / リマインダー)
- 教務アダプター層:WebView に JS を注入してログインセッションを再利用し、教務の構造化 JSON API(32 ビットの週ビットマップ、カレンダー一括マッピング)を直接呼び出し。HTML パースは不要
- パーサーと週ロジックは実 API サンプルをフィクスチャとした単体テストでカバー
プライバシー:学籍番号とパスワードはシステム WebView 内で本人が大学の認証ページに入力するだけで、アプリは読み取り・保存・送信しません。時間割データも端末内にのみ保存されます。
{% btn , ソースコード, fab fa-github %} {% btn , APK をダウンロード, fas fa-download %}