앱 크기 축소

작은 앱 크기는 다운로드 성공과 직접적인 관련이 있습니다. 네트워크 기기 연결 상태가 좋지 않거나 네트워크 속도가 느린 신흥 시장에서 특히 그렇습니다. 이런 경우 앱 사용률이 줄어들 수 있으며 잠재고객의 범위와 도달범위가 낮아집니다. 하지만 여러 방법으로 앱 크기를 줄일 수 있습니다.

권장사항

앱을 Android App Bundle로 업로드

Google Play에 게시할 때 앱 크기를 즉시 줄일 수 있는 가장 쉬운 방법은 앱을 Android App Bundle로 업로드하는 것입니다. Android App Bundle은 앱의 컴파일된 코드와 리소스가 모두 포함되어 있지만 APK 생성 및 Google Play 서명은 보류하는 새로운 게시 형식입니다.

런타임 코드 크기 줄이기

대형 클래스 또는 자동 생성된 코드와 같이 런타임 시 앱에서 사용되지 않는 코드를 확인합니다. R8 같은 코드 옵티마이저는 코드 크기를 최적화 및 축소하는 데 도움이 될 수 있지만 런타임 상수로 보호되는 코드를 처리할 수는 없습니다. 다양한 최적화 도구를 최대한 활용하려면 확인 플래그를 컴파일 시간 상수로 바꿉니다. Gradle 구성 파일에서 코드 및 리소스 축소를 사용 설정할 수 있습니다.

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
        }
    }
}

불필요한 레이아웃 삭제

사용하지 않는 레이아웃을 소규모 UI 변경사항과 병합하고 불필요한 레이아웃을 삭제하여 전반적인 앱 코드 크기를 줄입니다. 또한 가능한 경우 레이아웃과 뷰를 동적으로 렌더링할 수 있습니다. 이렇게 하면 정적 템플릿을 그리지 않고 기술 오버헤드 없이 대체 레이아웃을 적용할 수 있습니다.

자주 사용되지 않는 기능 재평가

특히 일일 활성 사용자(DAU) 측정항목이 낮은 기능을 사용 중지하여 Android(Go 버전)에 맞게 최적화합니다. 예를 들면 복잡한 애니메이션, 대용량 GIF 파일 또는 앱 성공에 불필요한 기타 미학적 추가사항을 제거할 수 있습니다.

Dynamic Delivery 활용

Play Feature Delivery는 App Bundle의 고급 기능을 사용하여 앱의 특정 기능을 조건부로 전송하거나 주문형으로 다운로드할 수 있도록 합니다. 맞춤 전송에 기능 모듈을 사용할 수 있습니다. 기능 모듈의 고유한 이점은 Android 5.0(API 수준 21) 이상을 실행하는 기기에 앱의 다양한 기능을 다운로드하는 방법 및 시기를 맞춤설정할 수 있다는 점입니다.

변환 가능한 문자열 크기 줄이기

Android Gradle resConfigs 속성을 사용하여 앱에 필요하지 않은 대체 리소스 파일을 삭제할 수 있습니다. 언어 리소스가 포함된 라이브러리(예: AppCompat 또는 Google Play 서비스)를 사용 중인 경우, 앱은 앱 번역과 관계없이 라이브러리 메시지의 모든 번역된 언어 문자열을 포함합니다. 앱에서 공식적으로 지원하는 언어만 유지하려면 resConfig 속성을 사용하여 언어를 지정할 수 있습니다. 지정되지 않은 언어의 리소스는 모두 삭제됩니다.

언어 리소스를 영어와 프랑스어로 제한하려면 아래와 같이 defaultConfig를 수정하면 됩니다.


android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

선택적 번역 사용

앱 UI에 표시되지 않는 특정 문자열은 번역할 필요가 없습니다. 디버깅용 문자열, 예외 메시지 또는 URL은 리소스가 아닌 코드의 문자열 리터럴이어야 합니다.

예를 들어 URL은 번역할 필요가 없습니다.

<string name="car_frx_device_incompatible_sol_message">
  This device doesn\'t support Android Auto.\n
  &lt;a href="https://support.google.com/androidauto/answer/6395843"&gt;Learn more&lt;/a&gt;
</string>

&lt;&gt<>의 이스케이프 문자이므로 인식할 수도 있습니다. 이 태그가 필요한 이유는 <a> 태그를 <string> 태그 안에 배치하려고 할 때 Android 리소스 컴파일러에서 태그가 인식되지 못해 태그가 삭제되기 때문입니다. 하지만 이는 HTML 태그와 URL을 78개 언어로 번역한다는 의미입니다. 대신 다음과 같이 HTML을 삭제할 수 있습니다.

<string name="car_frx_device_incompatible_sol_message">
         This device doesn\'t support Android Auto.
</string>

네이티브 바이너리와 공통 종속 항목 결합

앱에 공통 기본 종속 항목이 있는 여러 자바 네이티브 인터페이스(JNI) 구현이 있는 경우 다양한 바이너리가 중복 구성요소로 APK 크기를 늘리고 있습니다. 여러 JNI 바이너리를 하나의 JNI 바이너리 파일로 결합하는 동시에 자바 파일과 JNI 파일을 분리할 수 있습니다. 이를 통해 APK 크기를 크게 줄일 수 있습니다.