본문 바로가기

OS/Android

Android Bundle(.aab) release crash 삽질

반응형

구글에서 8월부터는 신규 앱을 출시할 때 apk가 아닌 bundle로 업로드 하라고 한다.

11월 부터는 신규 앱 뿐만 아니라 기존 앱을 업데이트 할 때도 bundle만 받는다고 하니 bundle로 출시하는 것이 이젠 필수가 되었다.

초창기에 구글에서 bundle을 소개했을 때 확인했던 기억으로는 res 파일과 abi 파일들을 유저들의 단말기에 필요한 것들만 골라서 다운로드함으로써 설치 파일의 사이즈와 설치 했을 때의 앱 사이즈를 줄인다는 점만 체크했었다.

(여기서는 bundle의 내부 구조를 설명할 것은 아니기 때문에 자세하게 살펴보고 싶은 사람들은 아래 링크를 확인하면 될 것이다.)

https://medium.com/daangn/%EB%8D%94-%EC%9E%91%EC%9D%80-apk%EB%A5%BC-%EC%9C%84%ED%95%9C-android-app-bundle%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-345a656eee85

 

더 작은 APK를 위한 Android App Bundle에 대해서 🐷

2018년 구글 IO The future of apps on Android and Google Play 세션에서 앱 사이즈와 설치율에 대한 상관관계가 눈길을 끌었습니다.

medium.com

 

bundle은 기존 universal apk(기존 apk)에서 단말기에 최적화된 리소스들만 뽑아서 apk로 만드는 것이기 때문에 기존 앱을 bundle로 출시했을 때 발생할 이슈는 딱히 없을 것이라 생각했다.

그래도 혹시 몰라 bundle로 product에 출시하기 전에 내부테스트에 업데이트를 해보았지만 문제가 발생하지 않았고 큰 고민 없이 product에 출시를 하였다.

하루 뒤에 정상적으로 업데이트가 되었다는 이메일을 보고 확인차 앱을 다운로드 해보았는데 스플래쉬 화면에서 바로 비정상종료가 뜨더라..

바이탈에서 로그를 확인해보았더니 Class Not Found Exception이 발생하는 것을 확인하였고 바로 트러블 슈팅을 시작하였다.

 

가장 먼저 의심한 것은 proguard였다.

설정을 확인해보았지만 잘못된 점을 찾을 수 없었고 기존 옵션 그대로 proguard에 적용 시켜 release apk를 만들어 실행시켜 보았지만 같은 증상이 발생하지 않았다.

 

아무래도 bundle 관련 문제가 맞는 것 같아서 이때부터 관련 자료를 찾아보기 시작했다.

안드로이드 공식 문서 gradle plugin release에서 native library 압축과 관련된 내용을 확인하면서 실마리를 잡을 수 있었다.

기존 앱에서는 플레이어 코덱 때문에 native 라이브러리를 사용하고 있었는데 bundle을 사용하면서 so파일들이 압축이 되어 런타임때 native library의 경로를 찾을 수 없어 Class Not Found Exception 이 발생했던 것이다.

해결 방법은 의외로 간단했다.

gradle properties에서 android.bundle.enableUncompressedNativeLibs = false 옵션을 추가하여 native library를 압축하지 않게 설정하면 된다.

 

 

 

 

 

 

 

 

 

 

 

반응형