일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Python
- Gradle
- boj
- Coroutine
- Kotlin
- Codeforces
- Rxjava
- livedata
- textfield
- GitHub
- 백준
- Compose
- architecture
- relay
- 암호학
- Coroutines
- AWS
- 프로그래머스
- 코드포스
- TEST
- MyVoca
- 쿠링
- 코루틴
- MiTweet
- android
- androidStudio
- Hilt
- ProGuard
- pandas
- activity
- Today
- Total
이동식 저장소
[Android] Proguard가 사람 잡는다 본문
Disclamer
이 글에서 제시하는 버그의 원인은 잘못되었습니다. 아래 글을 참고해 주세요.
초보 개발자가 버그를 잡아가는 과정이라고 주시면 감사하겠습니다. ^^
이미 Proguard와 관련된 디버깅 글을 여러 번 쓴 바 있다.
그런데 오늘 또 하나의 이상한 에러가 발생했다.
식단이 보이지 않는다
최근 업데이트한 한빛 캘린더 1.1 버전을 폰에서 사용해 봤는데, 그런데 뭔가 이상하다. Android Studio에서 설치했을 때는 모든 날짜의 식단이 잘 보였는데, Google Play에서 업데이트한 앱에서는 특정 날짜의 식단이 보이지 않는 것이다.
다른 달의 식단도 참고해 본 결과, 10일 이후의 식단이 보이지 않는다는 결론을 내렸다. 이상하게도 학사일정은 잘 보인다.
머선일이고
이번에도 데이터의 흐름을 따라가 보기로 했다.
일단 나이스 API에서 데이터를 제대로 가져오긴 한다. 그렇다면 또 파싱이 문제인가? Json을 나이스 객체로 파싱하고, 다시 Room 객체로 변환하는 부분에 로그 코드를 추가해 보았다. 정확히는 날짜 문자열(``20221001``)이 ``2022``, ``10``, ``1``로 올바르게 파싱되는지 확인해 보았다.
로그 확인 결과, 데이터가 제대로 파싱 및 변환되고 있었다. 그런데 모든 날짜의 식단이 잘 보인다? 해결책이 로그 찍는 것입니까? 여기가 정녕 관측이 결과를 바꾸는 미시 세계란 말인가?
...바꿀 수 있지 않을까?
또 Proguard냐?
로그 찍는 코드만 추가했는데 문제가 해결됐다. 여기서 내가 생각한 가설은 다음과 같다.
- 로그 찍는 코드가 없었을 때에는, 날짜 변수가 사용되지 않는 것으로 인식됐다.
- 따라서 Proguard가 날짜 변수를 축소했다.
- 로그 찍는 코드를 추가했다. 이제 날짜 변수가 ``Log.d`` 함수에서 사용되므로, 더 이상 Proguard에 의해 축소되지 않는다.
- 날짜 변수가 최종 빌드에서 살아남았다.
하지만 Proguard의 매핑 파일을 확인해 보니 Room 객체의 모든 변수가 정상적으로 난독화되었다. 따라서 가설을 기각한다.
그럼에도 불구하고 Proguard를 의심할 수밖에 없다. 이미 전과가 많아서.. 그래서 내가 작성한 모든 클래스를 축소되지 않게 keep한 후 빌드해 보았다. 여기서 keep이란 Proguard의 핵심 기능인 축소와 난독화 모두 적용하지 않는 옵션을 말한다.
결과
모든 식단이 잘 보인다.
로직은 그대로 놔둔 상태에서 Proguard 규칙만 바꾸었더니 문제가 해결됐다. 따라서 이번 버그도 Proguard 때문인 것으로 판명할 수 있다.
아니면 뭣도 모르고 쓴 내 잘못인가.. 앞으로 Proguard 쓸 때는 일단 내 클래스를 전부 keep해야 할 듯.
'Primary > Android' 카테고리의 다른 글
[Android] AAB 더 알아보기 (0) | 2022.10.14 |
---|---|
[Android] APK와 AAB (0) | 2022.10.13 |
Gson에서 null이 반환될 때 with ProGuard (0) | 2022.09.27 |
[Android] 디버깅할 때 앱이 느리다면 (0) | 2022.09.25 |
[Hilt] Entry Points (0) | 2022.09.10 |