嘿!元智 - 校務系統行動化


圖片

專案動機

元智大學的校務系統(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 開發流程
  • 網頁爬蟲技術與反爬蟲對策
  • 資料加密與安全性考量
  • 開源專案的維護與協作
  • 從使用者回饋中持續改進產品

連結