이 가이드에서는 게임 크기를 줄이는 방법을 설명합니다. 설치할 때 게임 크기가 작으면 다운로드 시간도 짧아지고 데이터도 적게 소모됩니다. 따라서 설치 전환율이 높아지는 결과를 낳습니다. Google 연구에 따르면 제공되는 APK 크기가 6MB 증가하면 설치율이 1% 감소합니다. 많은 개발자가 애셋을 APK에서 콘텐츠 전송 네트워크(CDN)로 이전하지만 CDN 호스팅과 애셋 관리 시스템 개발 및 유지에서 모두 비용이 발생합니다.
게임 크기를 줄이려면 다음 단계를 따르세요.
- App Bundle 및 Play Asset Delivery와 같은 최적화된 전송 방법을 사용합니다.
- 게임의 기준 크기를 확인하고 게임의 구조를 파악합니다.
- 크기를 줄일 수 있는 애셋과 기타 파일을 검색합니다.
- 그래픽 텍스처를 검사하고 최적화 기회를 식별합니다.
- 애셋 일반 권장사항을 준수합니다.
Android App Bundle 및 Play Asset Delivery와 같은 최적화된 전송 방법 사용
다음 전송 방법을 고려하세요.
기존 프로젝트는 일반적으로 게시를 위해 APK를 출력하지만 Google Play에서 게임을 게시할 때는 Android App Bundle을 사용해야 합니다. App Bundle은 각 사용자의 기기 설정에 맞는 최적화된 APK를 제공합니다. 평균적으로 App Bundle은 앱 크기를 20% 줄입니다.
Google Play를 통해 게임 애셋을 제공하고 App Bundle의 200MB 다운로드 크기 제한을 몇 GB까지 초과하려면 Play Asset Delivery(PAD)를 사용합니다. 외부 CDN은 필요하지 않습니다. PAD는 세 가지 전송 방법을 지원하고, 각 방법은 단일 게임에서 사용할 수 있습니다.
- 설치 시: 설치 시 애셋을 다운로드합니다. 애셋은 Opaque Binary Blob(OBB) 파일을 대체하는 애셋 팩에 패키징됩니다.
- 빠른 추적: 설치 후 애셋을 다운로드합니다.
- 주문형: 필요에 따라 게임에서 애셋 다운로드를 시작합니다.
PAD를 사용하려면 App Bundle 형식을 사용하여 게임을 패키징해야 합니다. PAD는 개발자의 CDN에서 사용하는 데이터의 양을 줄일 수도 있습니다(여전히 필요한 경우).
Google Play에서는 Android App Bundle을 사용하여 각 사용자의 기기 설정에 최적화된 APK를 생성하고 제공합니다. 이러한 최적화된 APK에는 기기에 최적화된 압축 형식으로 포맷된 단일 텍스처 애셋 세트가 포함됩니다. 다양한 텍스처 압축 형식을 지원하도록 App Bundle을 구성하여 광범위한 기기를 지원하세요.
게임의 기준 크기 확인 및 게임 구조 파악
게임에 익숙해지고 주어진 최적화에 필요한 작업량을 결정하며 게임에서 추가 애셋을 다운로드하는지 확인하려면 다음 단계를 따르세요.
- 개발자 또는 게시된 APK의 프로덕션 빌드(디버그 빌드 아님)를 사용합니다.
- 개발자가 제공하는 바이너리 파일의 크기를 기록하거나 게임이 게시된 경우 게임의 Play 스토어 페이지에 있는 바이너리 파일의 크기를 기록합니다. APK 크기에서 가장 중요한 요소는 사용자가 실제 게임을 실행하기 위해 다운로드해야 하는 데이터의 양입니다.
- 기기에 게임을 설치하고 초기 게임 메뉴를 실행합니다. 이 시점에서 Android가 보고하는 게임의 설치 크기를 확인합니다(설정 > 저장용량 아래). 일부 게임은 최적화에 핵심 요소이므로 초기 설치 크기가 작지만 설치 후에 추가 데이터를 다운로드합니다. 설치 후 데이터를 몇 GB 다운로드하는 게임도 있습니다.
- 일부 게임은 게임 플레이를 시작한 후에만 데이터를 다운로드합니다. 게임을 조금 해 보고 처음 게임을 플레이하는 일반적인 사용자의 경우 게임에서 다운로드하는 추가 데이터가 얼마나 되는지 확인해야 합니다.
크기를 줄일 수 있는 애셋 및 기타 파일 검색
이 섹션에서는 APK의 파일 크기를 줄이는 방법을 설명합니다. App Bundle 탐색기를 사용하여 기기별 APK를 다운로드할 수 있습니다.
APK에 직접 패키징된 파일의 크기를 줄이려면 다음 단계를 따르세요.
- Android 스튜디오의 APK Analyzer를 사용합니다. Android 스튜디오에서 File > Profile or debug APK를 선택하고 APK를 선택합니다.
- Assets 폴더를 선택합니다. 각 파일에서 원시 파일 크기와 총 다운로드 크기 비율이 나열됩니다.
Assets 폴더를 검토하고 게임 데이터의 대부분이 있는 위치를 확인합니다. 공간을 과도하게 차지하는 애셋(즉, 총 공간의 1% 이상)이 있는지 확인합니다. 특히 다음을 확인하세요.
- 큰 이미지 및 동영상 파일(예: PNG, JPEG, mp4 파일): 이러한 파일은 일반적으로 스플래시 화면, 배경, 로고에 사용됩니다. 이러한 파일은 대다수 게임에서 거의 사용하지 않으며, 사용자 환경에 영향을 미치지 않으면서 추가로 압축할 수 있습니다. 무손실 PNG 파일은 특히 크기가 커서 압축에 적합합니다.
- 큰 글꼴 파일(예: TTF 파일): 그림 이모티콘 지원을 추가하면 글꼴 파일의 크기가 많이 늘어날 수 있습니다. 글꼴 파일이 수백 KB보다 크면 크기를 줄이는 방법을 고려하세요.
- 조합할 수 있는 오디오 파일 형식 또는 버전을 복제합니다.
여러 Application Binary Interface(ABI)가 APK에 포함되어 있다면 App Bundle로 이동하거나 여러 APK를 빌드합니다.
바이너리 공유 객체(.so) 파일의 크기를 확인합니다. 바이너리 파일을 검사하여 포함하지 않아도 되는 항목(예: 로그 파일)이 있는지 확인하려면 Bloaty McBloatface 도구를 사용하면 됩니다. 바이너리 파일 최적화 방법에 관한 자세한 내용은 컴파일 플래그 및 옵션을 참고하세요.
Android 매니페스트 파일에서 지원되는 그래픽 형식을 검토합니다. APK에
<supports-gl-texture>
태그가 여러 개 있는지 확인합니다. 게임이 하나의 APK에서 여러 GPU 형식을 지원하면 Binomial의 Basis Universal을 사용하는 것이 좋습니다. 이 GPU 텍스처 압축 시스템은 GPU로 빠르게 트랜스코딩할 수 있는 중간 형식의 텍스처 파일을 만듭니다.
그래픽 텍스처 검사 및 최적화 기회 식별
이 섹션에서는 게임에서 사용되는 그래픽 텍스처를 최적화할 수 있는지 확인하는 데 필요한 도구와 방법을 설명합니다.
게임에서 텍스처를 검사하려면 Android GPU 검사기(AGI)나 RenderDoc, Snapdragon Profiler(Qualcomm Snapdragon GPU의 경우에만)를 사용합니다.
다음을 확인하세요.
- 게임에서 작은 크기로만 렌더링되는 항목의 큰 텍스처와 같이 낮은 해상도로 크기를 조절할 수 있는 텍스처. 다운샘플링 텍스처는 계산 비용이 많이 듭니다.
- 단일 텍스처 맵으로 결합할 수 있는 여러 개의 작은 텍스처 사용
- 색상 채널에서 비트를 더 적게 사용할 수 있는 텍스처. 텍스처가 소수이고 단색인 텍스처가 적합합니다. 색상의 그라데이션과 음영은 더 많은 비트의 해상도가 필요하므로 적합하지 않습니다.
- ETC1부터 ETC2, ASTC까지 더 나은 텍스처 압축 알고리즘을 탐색합니다.
메모리 절약을 위해 저성능 기기에 텍스처를 로드할 때 최상위 밉맵 수준을 삭제합니다. Unity의 텍스처 스트리밍 시스템을 사용하면 됩니다.
아직 검토하지 않았다면 Android 매니페스트 파일에서 지원되는 그래픽 형식을 검토합니다. APK에
<supports-gl-texture>
태그가 여러 개 있는지 확인합니다. 게임이 하나의 APK에서 여러 GPU 형식을 지원하면 Binomial의 Basis Universal을 사용하는 것이 좋습니다. 이 GPU 텍스처 압축 시스템은 GPU로 빠르게 트랜스코딩할 수 있는 중간 형식의 텍스처 파일을 만듭니다.
애셋 일반 권장사항
APK 애셋의 다음 권장사항을 따르세요.
- 이미지, 오디오, 동영상 애셋(GPU 텍스처 제외): 애셋의 크기를 조절할 수 있는지 또는 애셋을 추가로 압축할 수 있는지 확인합니다. 게임에는 일반적으로 더 높은 압축률이 허용됩니다. 무손실 PNG 파일은 특히 크기가 커서 압축에 적합합니다.
- 이미지 애셋(GPU 텍스처 제외): 손실(lossy) 압축과 무손실 압축에 모두 이미지 압축 형식인 WEBP를 사용하는 것이 좋습니다. 손실(lossy) WEBP는 이미지를 JPG보다 25%~34% 더 많이 압축합니다.
- 텍스처 해상도 줄이기: 최종적으로 화면에 렌더링되는 픽셀 수보다 훨씬 큰 텍스처는 공간과 GPU 리소스를 비효율적으로 사용합니다. 게임을 다시 빌드할 필요 없이 텍스처를 변경하고 프레임에서 어떻게 표시되는지 확인하려면 AGI를 사용하세요.
- 그래픽의 텍스처 형식 변경: 채널당 비트를 더 적게 사용하는 텍스처 형식을 사용합니다. 예를 들어 ARGB와 같은 32비트 텍스처 형식이 아닌 RGB565와 같은 16비트 텍스처 형식을 사용합니다. 자세한 내용은 다음을 참고하세요.
추가 리소스
- Android App Bundle 최신 개선사항 및 Google Play 신규 앱 관련 일정
- Android 인스턴트 게임에서 APK 크기 줄이기
- GPU에서 디코딩 가능한 초압축 텍스처(연구 논문)