Google Play가 2026-08-31부터 API 36(Android 16) 미만을 타겟하는 앱의 업데이트를 거부한다.
원인은 Bubblewrap 템플릿이었다. targetSdkVersion은 template_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으로 올려 해결했다.
작업 체크리스트
함께 처리한 것
검증 결과 (2026-08-13 빌드)
| 항목 |
값 |
targetSdkVersion |
36 ✅ |
compileSdkVersion |
36 |
minSdkVersion |
21 |
| versionCode/Name |
12 / "12" |
| 패키지명 |
kr.singcode.app |
| TWA 호스트 |
www.singcode.kr |
| aab 서명 |
apk와 동일 인증서로 서명됨 |
남은 검증 항목 (API 36 동작 변경)
실기기 검증은 Play 내부 테스트 트랙에서 해야 한다. 로컬 app-release-signed.apk는 업로드 키로 서명되어 assetlinks.json에 없으므로, adb install로 직접 설치하면 주소창이 뜬다(정상).
Google Play가 2026-08-31부터 API 36(Android 16) 미만을 타겟하는 앱의 업데이트를 거부한다.
원인은 Bubblewrap 템플릿이었다.
targetSdkVersion은template_project/app/build.gradle에 리터럴로 하드코딩되어 있어twa-manifest.json으로 제어할 수 없고,app/build.gradle은.gitignore대상이라 커밋으로 고정할 수도 없다. 즉 CLI 버전이 이 값을 결정한다.@bubblewrap/cli를 1.25.0으로 올려 해결했다.작업 체크리스트
@bubblewrap/cli1.24.1 → 1.25.0 업그레이드bubblewrap update로 Android 프로젝트 재생성 (targetSdk 36 적용)versionCode/versionName12로 상향 및twa-manifest.json동기화scripts/verify-target-sdk.mjs추가pnpm --filter twa run build:android로 aab 생성aapt2로 검증apps/twa/CLAUDE.md에 버전별 targetSdk 표 및 복구 절차 문서화함께 처리한 것
turbo run build가bubblewrap build까지 실행해 키스토어 프롬프트에서 멈추는 문제 →build→build:android로 분리EBUSY)으로 재생성이 실패하고gradlew/settings.gradle이 부분 삭제되는 상황의 복구 절차 문서화CLAUDE.md의 Monorepo Structure에 누락돼 있던apps/twa추가검증 결과 (2026-08-13 빌드)
targetSdkVersioncompileSdkVersionminSdkVersionkr.singcode.appwww.singcode.kr남은 검증 항목 (API 36 동작 변경)
orientation: portrait무시 → 가로 모드 레이아웃