← Back
dumixthestpd

dumixthestpd/sustech-mobile

A clean Android app for SUSTech campus services — printing, courses, library, campus shuttle

View on GitHub ↗
androidcampuskotlinstudent-toolssustech
Stars
4
Forks
0
Watchers
4
Open issues
0
Contributors
1
Language
Kotlin
License
Other
Default branch
main
Created Oct 1, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

SUSTech Mobile

A clean Android app for SUSTech campus services. Anywhere, anytime.

Features

  • Printing (pms) — 联创 cloud print: upload with all five options, queue + delete, scans, usage report, stations
  • Courses & grades (tis) — this week's timetable on its real period grid, enrolled courses, grades + GPA, exams
  • Blackboard (bb) — enrolled courses and the assignments coming due
  • Library — how many people are inside each library right now, and where a book is (floor, shelf, availability)
  • Transit — the campus shuttle: every stop as a place, nearest first; pick a direction and see the buses on the way, live
  • Today — week number, next class, campus weather, AQI, next exam
  • Widget — the next class or the next bus, on the home screen
  • Account — stored school account, per-service session state, network state (campus / off campus / offline)

The Services tab also lists what is not built yet — venue booking, course reviews, faculty, exchange, Wi-Fi. That list is the backlog shared with the Python and TypeScript clients below, not a marketing one.

Course selection, bidding and evaluation are intentionally not in the app.

Install

Grab the APK from Releases (Android 8.0+), open it, allow "install unknown apps" once, sign in with your school account.

The published APK is a debug-signed sideload build — fine for personal use, not a Play Store artifact.

Sign-in

Your CAS credentials are stored on your device. Sessions renew themselves silently.

Forget account on the Account tab clears credentials and sessions.

Printing needs the campus network (or a VPN back to campus) — PMS answers 403 from outside. You can check your account state in the Account tab.

Build

JDK 17+ and Android SDK (platform 34):

export JAVA_HOME=/opt/homebrew/opt/openjdk@21
export ANDROID_HOME=$HOME/Library/Android/sdk
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk

Testing

No campus network needed — print flows run against a local mock that speaks the same wire format (including the RSA login):

python3 tools/mock_pms.py --port 8080
python3 tools/inject_session.py --base-url http://10.0.2.2:8080 --creds
python3 tools/drive_ui.py --scenario pms-smoke    # also: shell, pms-upload, tis-live, theme

tis-live runs against the real TIS with your stored account.

iOS

We will consider iOS releases in the future.

Related projects

  • sustech_survival — the Python client this app's TIS wire semantics come from
  • sustech-cli — the TypeScript client the print wire semantics come from

Data & credits

The app is a client. These are the services and datasets it talks to, and the terms they come with:

  • Campus shuttle — sustech.online (buseta.sustcra.com), CC BY-SA 4.0. API only; none of its data is redistributed in this repo.
  • Library occupancy and catalogue — lib.sustech.edu.cn and SUSTech's Ex Libris Primo.
  • Academic calendar — mirrored from dumixthestpd/sustech-calendar at a pinned commit and bundled in the APK, so the app can tell a holiday from a teaching day with no network. See app/src/main/assets/calendar/README.md for the pin.
  • Weather — api.sustech.online/weather. Air quality — Open-Meteo (CC BY 4.0).

Your courses, grades, print jobs and Blackboard data are your own: fetched with your own credentials and sent nowhere else.

About the dev

I am dumixthestpd, same maintainer as sustech_survival — a non-CS undergrad at SUSTech. This repo is also Agent-written code, known and accepted. Issues and PRs welcome.

License & funding

PolyForm Noncommercial License 1.0.0, inherited from sustech_survival. Non-commercial use only.

The Android app is free and stays free.

Note for contributors: the license may change in the future since we are trying to solve the budget problems for iOS publishing — see CONTRIBUTING.md.