嘿!元智 - 校務系統行動化
專案動機
元智大學的校務系統(Portal)介面較為老舊,且未針對行動裝置最佳化,學生需要在手機上放大縮小才能操作。身為學生的我,決定開發一個更友善的行動 App 來解決這個問題。
核心功能
1. 課表查詢系統
- 視覺化呈現每週課表
- 支援課表匯出至行事曆
- 顯示教室位置與教師資訊
- 課程提醒通知功能
2. 成績查詢
- 即時查詢當學期成績
- 歷年成績總覽
- GPA 計算與統計圖表
- 學分數統計
3. 校園資訊整合
- 圖書館藏查詢
- 校園公告推播
- 學校行事曆
- 常用連結快速訪問
4. 個人化設定
- 自訂主題色彩
- 課表顯示模式切換
- 通知時間設定
技術架構
Android 原生開發
- Java - 主要開發語言
- Material Design - 遵循 Google 設計規範
- SQLite - 本地資料庫儲存
- Retrofit - 網路請求框架
資料擷取技術
由於學校未提供官方 API,需要透過網頁爬蟲技術取得資料:
- 使用 Jsoup 解析 HTML 頁面
- 模擬登入校務系統
- Session 管理與 Cookie 處理
- 定期資料同步機制
架構設計
採用 MVP (Model-View-Presenter) 架構模式:
View (Activity/Fragment)
↓
Presenter (業務邏輯處理)
↓
Model (資料層)
↓
Repository (資料來源管理)
├── Remote (網路爬蟲)
└── Local (SQLite)
技術挑戰
1. 校務系統爬蟲
學校的校務系統有以下挑戰:
- 驗證機制複雜 - 需要模擬完整的登入流程
- Session 過期處理 - 實作自動重新登入機制
- HTML 結構不穩定 - 學校更新系統時,爬蟲容易失效
解決方案:
- 使用正則表達式配合 CSS Selector,提高解析的穩定性
- 實作錯誤檢測與自動重試機制
- 將爬蟲邏輯模組化,便於維護更新
2. 離線資料快取
考量到校務系統的穩定性不佳,設計了完整的離線快取策略:
- 首次登入後自動下載所有資料
- 實作 LRU 快取淘汰演算法
- 提供手動重新整理功能
3. 帳號安全性
使用者的校務系統帳號密碼相當敏感:
- 使用 Android KeyStore 加密儲存
- 實作 Fingerprint API 生物辨識登入
- 定期清除快取資料
效能最佳化
記憶體最佳化
- 使用 ViewHolder 模式最佳化 ListView
- 圖片使用 Glide 載入與快取
- 避免 Memory Leak (記憶體洩漏)
網路請求最佳化
- 實作請求佇列管理
- 壓縮傳輸資料
- 合併多個小請求
開源貢獻
畢業後,我將專案開源在 GitHub 上,讓學弟妹可以繼續維護和改進。這個決定帶來了:
- 超過 200+ Stars
- 多位學弟妹加入貢獻
- 持續更新適配新版 Android 系統
- 成為元智大學非官方的校務 App
使用者回饋
- 超過 1,000 位學生下載使用
- 在 PTT YZU 板獲得熱烈討論
- 學生會邀請合作推廣
- 使用者評價 4.5/5.0
學習收穫
這是我第一個獨立開發並完整上線的專案,學到了:
- 完整的 Android App 開發流程
- 網頁爬蟲技術與反爬蟲對策
- 資料加密與安全性考量
- 開源專案的維護與協作
- 從使用者回饋中持續改進產品
