본문 바로가기
728x90
반응형

전체 글197

WebView 미디어 인증 중계 11시간 뒤, 화면을 Compose로 갈아엎었다 사내 클라우드 스토리지 앱의 WebView 미디어 요청에 인증 중계를 추가했다. 같은 날 밤 화면을 Jetpack Compose로 바꿨지만, 낮에 만든 중계 코드는 네이티브 영상 경로에서도 재사용됐다. 변경 과정과 검증 범위를 정리했다.토큰을 쿠키로 주지 않는 WebView 앱이었다앱은 웹 파일 화면을 WebView로 표시했다. 로그인 토큰은 WebView의 쿠키, DOM 저장소, URL, JavaScript에 전달하지 않았고 쿠키도 꺼 두었다. JSON API 호출은 JavaScript 브리지를 거쳐 네이티브가 Bearer 토큰을 붙였다.문제는 브리지를 거치지 않는 요청이었다. 썸네일, 사진 뷰어, 영상은 페이지가 주소만 넣으면 WebView가 직접 가져간다. 쿠키도 헤더도 없으니 이런 요청에는 인증을.. 2026. 10. 21.
오목 대각선 테스트가 NPE로 깨졌다, 범인은 규칙이 아니라 테스트였다 DIP 스위치 계산기 앱에 넣은 오목·체스·장기 규칙을 테스트하던 중 오목 대각선 테스트에서 NPE가 났다. 원인은 규칙 엔진이 아니라 같은 칸을 두 번 쓰는 테스트 데이터였다. 첫 테스트부터 CI 수정, 연습 AI 추가까지 약 22분을 정리했다.규칙 엔진에 기본 테스트 여섯 개를 추가했다계산기 앱의 게임센터에는 오목(15×15), 장기(9×10), 체스(8×8)가 있었다. 세 게임의 규칙은 BoardRules가 판정했다.판은 문자열 리스트로 저장하고 칸 번호는 행 × 너비 + 열이다. 체스에서 0번은 a8, 52번은 e2다. play()는 잘못된 수에 null을 반환한다.10월 19일 12시 08분 55초에 첫 테스트 6개를 추가했다. 기본 규칙과 차례 제한을 확인하는 내용이었다.오목: 가로 다섯 개면.. 2026. 10. 21.
API 36 타깃 핫픽스, 재작성 브랜치 대신 main에서 네 줄만 바꿨다 블루투스 메신저 BlooTalk의 대상 API를 35에서 36으로 올리는 핫픽스를 했다. 재작성 브랜치는 병합하지 않고 기존 main에서 두 파일 네 줄만 바꿨다. 첫 커밋에서 병합까지 4분 35초가 걸렸지만 빌드 검사는 끝나지 못했다.앱 업데이트에 API 36이 필요했다Google Play는 2026년 8월 31일부터 새 앱과 앱 업데이트에 Android 16(API 36) 이상을 요구한다. 필요하면 2026년 11월 1일까지 기한 연장을 요청할 수 있다.main의 기준은 2025년 12월 5일의 1.1.5 버전 업 커밋이었다. 당시 targetSdk는 35였다. 기존 앱 제공 기준과 달리 새 업데이트 제출에는 API 36이 필요했다.재작성 브랜치 대신 기존 main을 기준으로10월 20일 낮까지 작업.. 2026. 10. 21.
R8 릴리스 시작 크래시에 WorkManager keep 규칙 두 개를 더했다 Play Console의 이전 WorkDatabase 생성 실패 기록을 보고 R8 keep 규칙 두 개를 추가했다. 빌드와 DEX 검사는 통과했지만 에뮬레이터 실행이 실패해 해결 여부는 확인하지 못했다.전날 제거한 keep 규칙과 시작 크래시 기록10월 19일 Gradle 9.1.0, AGP 9.0.1, JDK 25로 이전하며 넓은 keep 규칙을 제거했다. 이 규칙은 R8의 코드 제거와 이름 변경을 제한한다.다음 날 08시 57분 앱 버전을 1.5.2(versionCode 16)로 올렸다. 작업 문서에는 과거 기기 실험실 로그에서 InitializationProvider의 WorkDatabase 생성 실패가 보였다고 적혔다.그 로그가 1.5.2에서 발생했는지는 확인되지 않는다. 전날 삭제한 규칙에도 a.. 2026. 10. 21.
블루투스 대국 Android 12 권한 방어와 메시지 순서 수정까지 10분 DIP 스위치 계산기에 오목·체스·장기 게임센터와 블루투스 대국을 붙였다. 약 12분 뒤부터 9분 51초간 수정 커밋 7개가 이어졌다. 권한, 전송 순서, 승자 판정을 손봤다.첫 게임 커밋 12분 뒤 시작된 수정10월 19일 12:00:03에 규칙 엔진, 12:01:09에 Bluetooth Classic 전송을 커밋했다. 12시 06~07분에는 게임센터를 연동했다. 대국은 페어링한 기기끼리 직접 연결한다.수정 시각은 12:12:43~12:22:34였다. 변경은 다음과 같다.12:12 isEnabled 예외 방어12:15 cancelDiscovery() 호출 제거12:17~18 장기 한 수 쉬기·무르기·기권·승리 기록 추가12:20 전송 큐 도입·페어링 목록 새로고침·좁은 화면 대응12:22 기권 승자 인.. 2026. 10. 20.
JDK 25 경고에 Gradle을 21로 고정했다가 3분 만에 AGP 9로 올렸다 DIP 스위치 계산기 앱을 Android Studio로 열자 Java 25와 Gradle 8.11.1이 호환되지 않는다는 경고가 나왔다. 처음에는 Gradle 실행 JDK를 21로 고정했지만, 곧 JDK 25·Gradle 9.1.0·AGP 9.0.1로 빌드 환경을 변경했다. 이 과정에서 R8과 Play Console 경고 대응 설정도 정리했다.Java 25 경고에 Gradle 실행 JDK부터 고정했다IDE에 표시된 메시지는 Java 25 and Gradle 8.11.1 are incompatible였다. PC의 JDK가 25라는 점은 이 메시지와 문서로 짐작한 것이다.프로젝트는 Gradle 8.11.1과 AGP 8.10.1을 사용하고 있었다. 공식 호환표에 따르면 Java 25에서 Gradle을 실행하려.. 2026. 10. 20.
728x90
반응형