[FIX] Android release 빌드 크래시 및 FCM 알림 미표시 수정(#361, #362) - #363
Merged
Conversation
KakaoJson이 serializer를 리플렉션으로 조회해 R8이 참조를 보지 못하고, 컴파일 시 생성된 $$serializer/Companion을 미사용으로 판단해 제거했다. 저장된 토큰을 역직렬화하는 순간 SerializationException이 발생하고, KakaoSdk.init이 등록한 AppLifecycleObserver가 포그라운드 진입 시 그 토큰을 읽으므로 첫 화면 직후 앱이 종료됐다. 2.23.0 기준 @serializable 클래스는 전부 *.model 패키지에 있어 (auth/common/share/template/user) 한 줄로 43개가 모두 유지된다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
#352에서 .gitignore에 추가되며 git에서 빠졌는데, 이 파일이 없으면 app/build.gradle의 try/catch가 조용히 삼켜 google-services 플러그인이 미적용된 APK가 나온다. 다른 머신·CI 빌드에서 Firebase 리소스 없이 푸시가 에러 없이 죽으므로 다시 추적한다. API 키는 패키지명+SHA-1로 제한되어 비밀정보가 아니며, iOS의 GoogleService-Info.plist는 이미 커밋되어 있어 비대칭이었다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
mipmap-anydpi-v26 의 ic_launcher_foreground.xml / ic_launcher_background.xml 이 각각 @mipmap/ic_launcher_foreground, @mipmap/ic_launcher_background 를 참조한다. API 26+ 에서 이 이름을 해석하면 anydpi-v26 이 다시 선택되어 자기 자신을 가리키는 순환이 되고, 같은 이름의 density PNG 를 가려 리소스 로드가 불가능해진다. manifest 의 default_notification_icon 이 이 리소스를 가리키므로 SystemUI 가 알림 아이콘 생성에 실패하고 알림을 게시 직후 제거한다. FCM 발송이 성공해도 화면에 아무것도 뜨지 않던 원인이다. 런처 아이콘이 기본 아이콘으로 나오던 것도 같은 이유다. 두 파일을 제거하면 density PNG 가 정상적으로 선택된다. inset 여백은 이 순환 없이 다시 잡아야 한다.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Claude 자동 리뷰 검사 범위: 로직 오류 · 엣지 케이스/런타임 · 컨벤션 준수 (
리포지토리 실제 상태로 확인한 항목:
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔀 Pull Request Title
fix: Android release 빌드 크래시 및 FCM 알림 미표시 수정
🎞️ 주요 코드 설명
1. R8이 Kakao SDK serializer를 제거해 첫 화면에서 앱이 종료되던 문제 (#361)
#352에서
minifyEnabled true를 켠 뒤 R8이 Kakao SDK의 kotlinx.serialization 생성 클래스($$serializer/Companion)를 통째로 제거했습니다.KakaoJson이 serializer를 리플렉션으로 조회해서 R8이 참조를 볼 수 없기 때문입니다.KakaoSdk.init이 등록한AppLifecycleObserver가 포그라운드 진입 시 저장된 토큰을 역직렬화하면서SerializationException이 발생 → 첫 화면 직후 종료.수정 전
mapping.txt에OAuthToken$$serializer가 아예 없었고(제거됨), 수정 후$$serializer43개가 모두 유지되는 것을 release 빌드로 확인했습니다. Kakao SDK 2.23.0의@Serializable클래스는 전부*.model패키지(auth/common/share/template/user)에 있어 이 한 줄로 빠짐없이 덮입니다.2. 알림 아이콘 리소스 순환 참조 (#362)
mipmap-anydpi-v26/ic_launcher_foreground.xml이 같은 이름의 리소스를inset으로 감싸고 있었습니다. API 26+에서@mipmap/ic_launcher_foreground를 해석하면anydpi-v26이 다시 선택되어 자기 자신을 가리키는 순환이 됩니다.이 XML이 같은 이름의 density PNG를 가려 리소스를 어떤 경로로도 로드할 수 없게 만들었고, manifest의
default_notification_icon이 이 리소스를 가리키므로 SystemUI가 아이콘 생성에 실패해 알림을 게시 직후 제거했습니다. 런처 아이콘이 기본 안드로이드 아이콘으로 나오던 것도 같은 원인입니다.3.
google-services.json추적 재개 (#361)#352에서
.gitignore에 추가되며 git에서 빠졌는데, 이 파일이 없으면app/build.gradle의 try/catch가 조용히 삼켜 google-services 플러그인이 미적용된 APK가 나옵니다. 다른 머신·CI 빌드에서 Firebase 리소스 없이 푸시가 에러 없이 죽습니다.API 키는 패키지명 + SHA-1로 제한되어 비밀정보가 아니며, iOS의
GoogleService-Info.plist는 이미 커밋되어 있어 비대칭이었습니다.📌 PR 설명
이번 PR에서 어떤 작업을 했는지 요약해주세요.
google-services.json을.gitignore에서 제외하고 커밋 ([FIX] Android release 빌드 첫 화면 진입 직후 종료 (R8이 Kakao SDK serializer 제거) #361)$$serializer43개 유지 검증 (mapping.txt)📷 스크린샷
UI 변경 없음. (알림 표시 동작은 아래 검증 결과 참고)
NOTIFICATION_201,device_token1행successCount: 1/failureCount: 0PHOTO_FEED→/photoFeed💬 참고
ic_stat_*전용 drawable을 만들고 manifest를 그쪽으로 돌려야 합니다. 제거한 XML의 원래 의도(적응형 아이콘 여백)도 순환 없이 다시 잡아야 합니다.