개발자 가이드

모듈 구조

Android 진입점과 UI·저장·수집 경계를 살펴봅니다.

기준일
이 페이지에서

Android 실행 경로

CODE
:app
  M9App
    MainActivity
      AppNavHost
        UiJsonApp
          JSON loader → binding/action → renderer

앱 초기화와 권한·플러그인 연결은 앱 계층에 있으며, UI JSON 런타임은 자산을 화면과 동작으로 연결합니다.

주요 모듈

모듈책임
:app진입점, 내비게이션, UI JSON 런타임, 권한, 제출·알림·동기화 연결
:core:plugin-apiPlugin, 공통 이벤트와 확장 계약
:core:registry플러그인 설정 파싱과 우선순위
:core:repo저장·조회 use case와 repository
:core:dbRoom 엔티티, DAO, migration
:core:store설정 보조 저장, 시간 처리, 원격 데이터 소스·동기화
:plugins:*설문, 센서, Samsung Health, Health Connect, 인지게임
:ui공통 테마
Android에서 사용하는 shared 모듈공통 규격과 Compose 렌더러 재사용

UI 상태 흐름

화면은 렌더링과 이벤트 전달에 집중하고, 지속되는 화면 상태는 ViewModel 중심으로 처리하는 구조를 따릅니다. 저장·원격 동기화는 repository와 data source 경계를 사용합니다. 새 기능을 위해 Composable에 DB 쓰기나 서버 전송 책임을 추가하지 않습니다.

데이터 흐름

CODE
Provider / participant input
  → plugin / submission / ingestion
  → repository and Room
  → existing remote data source / worker
  → configured study backend

모든 플러그인이 pull() 반환만으로 동일한 저장 동작을 하는 것은 아닙니다. 센서는 이미 저장한 배치를 읽고, 일부 건강 플러그인은 pull 과정에서 저장·조정을 수행합니다. 설문은 별도의 제출 계약을 사용합니다.

확장할 위치

문구·배치 변경은 JSON과 기존 노드를 우선합니다. 새로운 데이터 제공 경로는 플러그인과 저장 계층에서, 새로운 원격 저장 방식은 원격 데이터 소스 경계에서 검토합니다. 기존 호환 경로는 실제 사용 여부를 확인하기 전 제거하지 않습니다.

문서 근거

현재 작업 트리 기준 · 소스 경로 · HEAD 8213e6b7

  • app/src/main/java/com/hdil/datacollection/M9App.kt
  • app/src/main/java/com/hdil/datacollection/MainActivity.kt
  • app/src/main/java/com/hdil/datacollection/AppNavHost.kt
  • app/src/main/java/com/hdil/datacollection/uijson/v1/UiJsonApp.kt
  • settings.gradle.kts
  • AGENTS.md
DTRAC Android연세대학교 · 이봉신 연구팀