메신저 공유 URL 파싱 오류를 난독화 설정으로 해결
목차
v3.1 릴리즈 회고
릴리즈 노트 정리하다가 메신저 공유 URL 파싱이 자꾸 깨졌던 게 떠올라서 한번 정리함.
무엇이 문제였나
기존 추출 로직은 정규식 한 줄로 끝냈었는데, 메신저 쪽에서 공유 포맷을 살짝 바꾸면서 ?p= 뒤에 추가 파라미터가 붙기 시작했음. 사용자 입장에선 같은 링크인데 앱에서만 못 받아내는 상황.
- 원본 URL 끝에
&shareType=...파라미터가 새로 붙음 - 단축 URL은 리다이렉트가 한 단계 더 늘어남
- 릴리즈 빌드에서만 재현되는 케이스가 있었음
세 번째가 제일 짜증났음. 디버그에선 멀쩡한데 스토어에 올린 빌드에서만 깨지니까 리포트 받고도 한참 헤맸음.
proguard 룰 누락
원인은 결국 난독화였음. URL 파싱 헬퍼 일부 메서드를 리플렉션으로 호출하고 있었는데, 코드 축소 옵션이 켜지면서 메서드 시그니처가 다 갈려버렸음. 디버그에선 축소가 꺼져있으니 안 보였던 것.
-keepclassmembers class **.url.parser.* {
public *** extract*(java.lang.String);
public *** resolve*(java.lang.String);
}
-keepattributes Signature, InnerClasses, EnclosingMethod
리플렉션으로 부르는 메서드 패턴을 명시적으로 keep 처리하고, 제네릭 시그니처도 같이 보존하도록 추가함. 사실 처음부터 이렇게 적었어야 했는데 초기에 대충 짜둔 게 1년 넘게 굴러간 거라 손을 못 댔던 부분.
테스트 환경 보강
기존엔 디버그 변형만 자동화 돌리고 있었는데, 이번 일 겪고 나서 릴리즈 변형도 같이 도는 잡을 추가함.
| 항목 | 기존 | 변경 후 |
|---|---|---|
| 디버그 변형 | 매 PR | 매 PR |
| 릴리즈 변형(난독화 ON) | 수동만 | 매 PR |
| 단축 URL 픽스처 | 없음 | 12개 |
특히 단축 URL 픽스처는 실제 리포트 들어왔던 URL 패턴을 모아서 만들어둠. 같은 회귀 두 번 안 맞기 위함.
정리
- 리플렉션 쓰면 proguard 룰부터 점검
- 디버그/릴리즈 차이 무시하면 결국 사용자 리포트로 돌아옴
- 외부 서비스 URL 포맷은 언제든 바뀐다는 가정으로 짜야 함
다음
댓글 0
첫 댓글 달아줘.