Skip to content

chore : TWA targetSdkVersion 36 대응 (Google Play API 36 요구사항) #297

Description

@GulSam00

Google Play가 2026-08-31부터 API 36(Android 16) 미만을 타겟하는 앱의 업데이트를 거부한다.

원인은 Bubblewrap 템플릿이었다. targetSdkVersiontemplate_project/app/build.gradle리터럴로 하드코딩되어 있어 twa-manifest.json으로 제어할 수 없고, app/build.gradle.gitignore 대상이라 커밋으로 고정할 수도 없다. 즉 CLI 버전이 이 값을 결정한다.

버전 템플릿의 targetSdkVersion
~1.24.1 35 ❌
1.25.0~ 36 ✅

@bubblewrap/cli를 1.25.0으로 올려 해결했다.

작업 체크리스트

  • @bubblewrap/cli 1.24.1 → 1.25.0 업그레이드
  • bubblewrap update로 Android 프로젝트 재생성 (targetSdk 36 적용)
  • versionCode / versionName 12로 상향 및 twa-manifest.json 동기화
  • 빌드 산출물의 targetSdk / versionCode를 검사하는 scripts/verify-target-sdk.mjs 추가
  • pnpm --filter twa run build:android 로 aab 생성
  • 생성된 apk가 실제로 targetSdk 36으로 빌드됐는지 aapt2로 검증
  • apps/twa/CLAUDE.md에 버전별 targetSdk 표 및 복구 절차 문서화
  • Play Console 업로드 후 API 수준 경고 해제 확인

함께 처리한 것

  • turbo run buildbubblewrap build까지 실행해 키스토어 프롬프트에서 멈추는 문제 → buildbuild:android 로 분리
  • Gradle 데몬 파일 잠금(EBUSY)으로 재생성이 실패하고 gradlew/settings.gradle이 부분 삭제되는 상황의 복구 절차 문서화
  • 루트 CLAUDE.md의 Monorepo Structure에 누락돼 있던 apps/twa 추가

검증 결과 (2026-08-13 빌드)

항목
targetSdkVersion 36
compileSdkVersion 36
minSdkVersion 21
versionCode/Name 12 / "12"
패키지명 kr.singcode.app
TWA 호스트 www.singcode.kr
aab 서명 apk와 동일 인증서로 서명됨

남은 검증 항목 (API 36 동작 변경)

  • Edge-to-edge 강제: 상태바 / 제스처 내비게이션 영역에 콘텐츠가 가리지 않는지
  • 대화면(sw ≥ 600dp)에서 orientation: portrait 무시 → 가로 모드 레이아웃

실기기 검증은 Play 내부 테스트 트랙에서 해야 한다. 로컬 app-release-signed.apk는 업로드 키로 서명되어 assetlinks.json에 없으므로, adb install로 직접 설치하면 주소창이 뜬다(정상).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions