ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
DIMA Now는 동아방송예술대학교 학생의 수업, 셔틀, 본관 학생식당·기숙사 식단을 한곳에서 확인하는 개인용 Android 앱입니다. 시간표와 설정, 위치 구역, 셔틀·식단·공지 캐시는 모두 기기에 저장됩니다. 공개 캠퍼스 데이터는 계정 없이 GitHub Pages의 검증 JSON으로 동기화합니다. 사용자가 선택한 경우에만 공식 DIMA LMS 계정을 기기에 암호화해 저장하고 수업 공지·과제·자료를 불러옵니다. 공식 공개 페이지 수집과 식단 OCR은 GitHub Actions에서 수행되며, 기숙사 식단 사진 제출만 무료 Cloudflare Worker를 통과합니다. 이 프로젝트는 개인용으로 개발된 비공식 앱이며 동아방송예술대학교가 배포하거나 보증하는 공식 앱이 아닙니다.README 전문 보기 ↗
DIMA Now는 동아방송예술대학교 학생의 수업, 셔틀, 본관 학생식당·기숙사 식단을 한곳에서 확인하는 비공식 Android 앱입니다. 학생들에게 GitHub Releases로 직접 배포합니다(D-099, Google Play 배포는 하지 않음).
시간표와 설정, 위치 구역, 셔틀·식단·공지 캐시는 모두 기기에 저장됩니다. 공개 캠퍼스 데이터는 계정 없이 GitHub Pages의 검증 JSON으로 동기화합니다. 사용자가 선택한 경우에만 공식 DIMA LMS 계정을 기기에 암호화해 저장하고 수업 공지·과제·자료를 불러옵니다. 공식 공개 페이지 수집과 식단 OCR은 GitHub Actions에서 수행되며, 기숙사 식단 사진 제출만 무료 Cloudflare Worker를 통과합니다.
이 프로젝트는 학생이 개발한 비공식 앱이며 동아방송예술대학교가 배포하거나 보증하는 공식 앱이 아닙니다.
내려받기와 설치 안내: https://winter1l.github.io/DimaNow/ · 개인정보 처리방침: PRIVACY.md (웹: https://winter1l.github.io/DimaNow/privacy.html)
수업 카드: LMS 로그인 시 과목별 남은 미완료 학습 개수와, 전체 과목 중 D-2 이내로 가장 가까운 마감 최대 3개를 D-day와 함께 표시(완료·기한 지난 항목 제외)전체 학습의 공지·과제·콘텐츠·자료 등 전체 목록, 앱 내부 상세 내용, 첨부파일을 Android 문서 저장 화면으로 저장이번 안내만 종료나우바, 일반 알림, 끔으로 설정| 항목 | 값 |
|---|---|
| 언어 | Kotlin |
| UI | Jetpack Compose / Material 3 |
| 로컬 저장소 | Room / DataStore |
| LMS 계정 보호 | Android Keystore AES-256-GCM / 백업 제외 암호문 |
| 최소 Android | Android 12, API 31 |
| compileSdk / targetSdk | API 37 / API 36 |
| 기준 시간대 | Asia/Seoul |
| 주 개발·검증 기기 | Galaxy SM-S918N, Android 17 / One UI 9 |
화면 구성은 Material 3 1.5(베타, 연결형 버튼 그룹 때문)와 Compose 1.12 기준의 M3 Expressive입니다(Expressive 모션·글꼴·모양, 막차 전용 경고색). 모든 주요 화면은 스크롤해도 고정되는 한 줄짜리 상단 앱 바를 쓰고, 설정은 하단 탭 대신 상단 앱 바의 톱니 버튼으로 열며 왼쪽 뒤로 가기로 닫습니다. 하나만 고르는 전환은 M3 연결형 버튼 그룹, 하단 탭 사이 이동은 페이드 스루, 새로고침은 당기기와 상단 버튼 둘 다 됩니다. 시간표 과목 추가는 전체 화면 입력 창(수업이 있을 때는 확장 FAB), 학기 기간은 날짜 선택 창을 사용합니다. 셔틀·4402 출발은 남은 시간을 먼저, 시각을 아래에 표시하며 60분 이내일 때만 분 단위로 셉니다. 색·모양·글꼴·모션 토큰과 화면 규칙은 DESIGN.md를 확인하세요.
앱 본체는 Galaxy 휴대폰 화면을 기준으로 구성되어 있고, 휴대폰에서는 세로 방향으로 고정됩니다. 태블릿과 Galaxy Fold의 펼친 화면처럼 창 폭이 600dp 이상이면 하단 탭 대신 왼쪽 내비게이션 레일을 쓰고, 본문은 최대 840dp 폭으로 가운데에 놓이며, 기기 회전을 따릅니다. 2열 화면과 힌지 회피는 아직 적용되지 않았습니다. 홈 화면 위젯은 크기별 소형/확장형 레이아웃을 별도로 지원합니다.
일반 사용자는 내려받기 페이지의 안내를 따릅니다. 갤럭시에서는 설치하거나 앱 안에서 업데이트할 때 설정 → 보안 및 개인정보 보호 → 자동 차단을 잠시 꺼야 하고, 설치 후 다시 켭니다.
io.github.winter1l.dimanow (v2.0부터, D-099). v1.x(com.example.dimanow)와는 다른 앱이라 위에 덮어 설치되지 않습니다. v1.x에서 옮길 때는 새 앱을 설치한 뒤 시간표를 다시 입력하거나, 새 앱의 설정 → 데이터 관리에서 시간표 파일을 불러옵니다.tools/Sign-Release.ps1이 다시 서명해 dist/DIMA-Now-v<버전>-optimized.apk로 만듭니다. 키는 Git에 없는 .local/release-signing/에만 있으며 오프라인 백업이 필요합니다.개발 중 ADB로 데이터를 유지하며 설치하려면 다음 명령을 사용합니다.
adb -s <device-serial> install -r app\build\outputs\apk\optimized\app-optimized.apk
앱은 실행 시 마지막 확인으로부터 24시간이 지났을 때(실패했다면 6시간 뒤) 새 버전을 확인합니다. 새 버전 안내는 버전마다 한 번만 자동 표시하며, 설정의 앱 업데이트에서 언제든 다시 확인할 수 있습니다. APK는 자동으로 설치되지 않습니다. 다운로드 및 설치를 누른 경우에만 GitHub asset을 내려받아 SHA-256, 패키지명, 더 높은 versionCode, versionName, 설치된 앱의 서명(또는 그 서명을 포함한 교체 이력)을 확인한 뒤 Android 시스템 설치 확인 화면을 엽니다.
최초 실행 안내는 귀가 방향과 선택 권한만 다루며 개발자 옵션은 포함하지 않습니다(D-075). 설정 화면의 나우바 설정 안내에서 다음 두 항목을 확인합니다.
잠긴 상태에서 알림 내용 표시를 항상 표시로 변경합니다.모든 앱의 실시간 정보 보기를 켜면 Samsung Now Bar에 표시될 수 있습니다. 켜지 않아도 일반 진행 알림으로 안내합니다. 일부 금융 앱은 개발자 옵션이 켜져 있으면 실행되지 않을 수 있습니다.앱은 Android 16 이상의 promoted ongoing notification을 요청하고, 사용할 수 없으면 조용한 진행 알림으로 대체합니다. Now Bar 표시 여부와 최종 잠금화면·AOD 배치는 Samsung 시스템이 결정하므로 앱에서 강제로 보장할 수 없습니다. 현재 One UI 9 기기에서는 개발자 옵션 없이 Now Bar에 표시되는 조건이 확인되지 않았습니다.
교내 셔틀 알림은 바로 탈 한 구간만 표시합니다(D-087). 제목은 운동장 → 엔터관처럼 승차 정류장과 목적지, 본문은 5분 후 출발 · 18:55, 상태 칩은 엔터관행 5분처럼 표시하며 다음 차나 환승 문구는 넣지 않습니다. 운동장 정류장에서 출발하는 편은 본관 대신 운동장으로 표시합니다(D-090). 셔틀·4402 안내는 출발 60분 이내에만 나타나고, 그보다 멀면 알림을 숨겼다가 60분 시점에 다시 표시합니다(D-069). 4402 정류장에 있으면 수업·교내 셔틀 알림 대신 4402만 안내하며, 제목은 4402 · 18:10 출발처럼 실제 출발 시각을, 상태 칩은 강남행 10분처럼 남은 시간을 표시합니다(D-068). 남은 시간은 매분 다시 계산하지만, 기기가 깊은 절전(Doze) 상태이면 갱신이 늦어질 수 있습니다. 수업 countdown은 Android 시스템 chronometer를 계속 사용합니다. 알림의 이번 안내만 종료는 해당 날짜의 수업 또는 해당 출발 한 건만 끝내고 이후 안내는 그대로 유지합니다. 4402는 대학 셔틀 정류장(34710)의 안성시 공식 고정 시간표를 사용합니다. 원룸촌 앞(33243)은 공식 기점에서 1분 뒤 도착하는 예정 시각으로 명확히 구분하며, 반대 방향 정류장은 포함하지 않습니다.
4402 위치 안내는 기존 예인관·본관·원룸촌 구역을 바꾸지 않습니다. 각 정류장 120m 원은 저전력 깨움에만 쓰고, 최근 30초 이내·정확도 25m 이내 위치가 정류장 40m 안에서 30초 유지될 때만 4402 안내로 전환합니다. 70m를 벗어나거나 위치를 2분 동안 확인하지 못하면 해제합니다.
일반적인 JDK 17 환경에서는 Gradle Wrapper를 직접 사용합니다.
.\gradlew.bat testDebugUnitTest lintDebug assembleDebug
gradlew-local.bat은 프로젝트 루트의 .tooling\jdk-17.0.20.1+1을 사용하도록 만든 개발 PC 전용 실행기입니다. .tooling은 Git에 포함되지 않으므로 해당 경로를 직접 준비한 환경에서만 사용할 수 있습니다.
Debug APK 위치:
app\build\outputs\apk\debug\app-debug.apk
R8, 리소스 축소, Baseline/Startup Profile을 적용한 개인 설치용 빌드:
.\gradlew.bat assembleOptimized
adb -s <device-serial> install -r app\build\outputs\apk\optimized\app-optimized.apk
Optimized APK는 디버그 빌드와 같은 application ID, 버전, 서명을 사용하므로 동일 서명으로 설치된 개발 빌드 위에 adb install -r로 올리면 Room과 DataStore 데이터를 유지합니다.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗