개인 프로젝트를 배포하기 전, Proguard 와 Shirink 를 통해 난독화 및 앱 성능을 개선하려고 Release 빌드를 시도하였다.
사진과 같이 내가 사용중인 라이브러리나 클래스들을 난독화 대상 목록에서 해제해준 뒤, 앱을 빌드하였으나 아래와 같은 에러가 발생하였다.
Missing classes detected while running R8 after adding package names in proguard-rules.pro
쉽게 말하자면 R8을 실행하는 동안 누락된 클래스가 감지되었다 는 것인데, 아무리 살펴봐도 누락된 것 같은 클래스가 없어보이는데 이걸 어떻게 추가해줘야 하나 고민이 되어 인터넷을 이곳 저곳 찾아봤다. (특히, stackOverflow ..)
아니나 다를까 나와 같은 문제를 겪고 있는 이들이 존재하였는데, 글의 답변으로는 해결방법으로 다음과 같이 시도해보라고 말하였다..
1. RootProject 폴더로 이동
2. app → build → outputs → mapping → app 빌드 폴더로 진입
3. 그곳에 있는 mapping.txt 를 열면 여러 문장들이 나올텐데, 해당 문장들을 그대로 복사하여 proguard rules 에 추가하면 된다.
이후에도 동일한 상황이 발생한다면 똑같이 작업해주면 된다.
번외
위의 사안들을 모두 해결하였다면 앱이 정상적으로 빌드가 되었을 것이다.
단, 이때 난독화되어서는 안되는 클래스나 함수가 난독화되는 경우 에러가 발생할텐데 에러의 발생지를 알고 싶어도 A.B.C 와 같이 난독화 된 상태로 에러가 나와 당황하였을 것이다.
이런 경우 다음과 같이 해결을 시도하면 된다.
에러가 발생하는 난독화 클래스가 (A.B.C) 라고 하자.
이 A.B.C 가 난독화 이전 어떤 클래스 인지를 찾기 위해서는 위에서 확인했던 mappings.txt 파일을 다시 열고 ctrl + F 를 활용하여 A.B.C 를 검색하면, 이전에 어떤 클래스인지 확인이 가능하다.