Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

수십억 사용자를 위한 데이터 비용 절감

일부 국가에서는 데이터 요금제가 일반적인 사용자의 매달 수입의 10%를 상회할 수 있습니다. 이는 다시 말해 앱의 다운로드 크기를 최소화하고 사용자가 앱의 데이터 사용 방식을 제어할 수 있게 하면 많은 사용자에게 커다란 실질적 이점을 제공할 수 있다는 뜻입니다. 다운로드 크기를 최소화하면 내부 저장소에 공간을 보전하는 데에도 도움이 됩니다. 이는 몇몇 기기의 경우 귀한 리소스입니다.

여기에서는 네트워크 및 내부 저장소에서 앱이 사용하는 데이터의 양을 최적화하는 데 유용한 몇 가지 전략을 소개합니다.

앱 크기 축소

앱 크기 축소는 사용자가 네트워크 데이터 및 내부 저장소 둘 모두에서 적은 양의 데이터를 소비하도록 돕는 기본적인 방식 중 하나입니다. 이 섹션에서는 앱 크기를 줄이는 몇 가지 방법을 설명합니다.

APK 그래픽 자산의 크기 축소

  • 대개 그래픽 자산은 APK 크기의 가장 큰 부분을 차지합니다. 이러한 자산을 최적화하면 다운로드가 더 작아지고 따라서 사용자의 설치 시간이 더 빨라집니다.
  • 아이콘과 같은 그래픽 자산의 경우, SVG(Scalable Vector Graphic) 형식을 사용하세요. SVG 이미지는 비트맵 그래픽에 비해 크기가 매우 작고 런타임 시 어떤 해상도로도 렌더링될 수 있습니다. Android 지원 라이브러리는 이전 버전과 호환되는 벡터 리소스 구현을 Android 2.1(API 레벨 7)에 제공합니다. 이 미디어 게시물에서 벡터를 시작해 보세요.
  • 벡터 외의 이미지(예: 사진)의 경우, WebP를 사용하면 이미지 로드 시간을 단축하고 네트워크 대역폭을 절약할 수 있습니다. WebP는 같은 이미지 화질의 PNG 및 JPG 형식에 비해 파일 크기가 작은 것으로 검증되었습니다. 심지어 손실 설정에서도 WebP는 원본과 거의 동일한 이미지를 생성할 수 있습니다. Android는 Android 4.0(API 레벨 14: Ice Cream Sandwich) 이상에서 손실 WebP를 지원하고 Android 4.2(API 레벨 17: Jelly Bean) 이상에서 무손실/투명 WebP를 지원합니다.
  • 여러 밀도의 대형 이미지가 많이 있는 경우, 다중 APK 지원을 사용하여 APK를 밀도별로 분할해 보세요. 이 경우 특정 밀도를 대상으로 빌드되므로, 저밀도 기기를 가진 사용자는 사용하지 않는 고밀도 자산의 다운로드에 대해 페널티를 받지 않습니다.
  • APK 크기를 줄이는 방법에 대한 자세한 내용은, APK 크기 축소코드 및 리소스 축소를 참조하세요. 또한, APK 크기를 줄이는 방법에 대한 자세한 내용을 이 미디어 게시물들에서 살펴볼 수 있습니다.

코드 크기 축소

  • Android 프로젝트의 모든 라이브러리는 미사용될 가능성이 있는 코드를 APK에 추가합니다. 외부 라이브러리를 사용할 때 특히 주의해야 합니다. 모바일 앱에 사용하기 적합하지 않은 라이브러리도 있기 때문입니다. 앱이 사용 중인 라이브러리가 모바일 사용에 최적화되었는지 확인합니다.
  • ProGuard와 같은 도구를 사용하여 컴파일한 코드를 최적화해 보세요. ProGuard는 사용하지 않는 코드를 식별하고 APK에서 제거합니다. 또한, build.gradle에서 minifyEnabled=trueshrinkResources=true를 설정하여 빌드 시에 리소스 축소를 사용 설정합니다. 이 경우 미사용 리소스가 APK에서 자동으로 제거됩니다.
  • Google Play 서비스를 사용 중인 경우에는, 필요한 API만 APK에 선택적으로 포함해야 합니다.
  • APK에서 코드 크기를 축소하는 자세한 방법은 Android 교육 과정에서 종속성 주입 프레임워크 피하기를 참조하세요.

외부(SD) 저장소로 앱을 이동하도록 허용

  • 대개 저비용 기기에는 온디바이스 저장소가 거의 없습니다. 사용자가 SD 카드로 이러한 기기의 저장소를 확장할 수 있지만, 이 경우 사용자가 앱을 이동할 수 있으려면 외부 저장소에 앱 설치를 지원함을 명시적으로 선언해야 합니다.
  • 앱을 외부 저장소에 설치할 수 있도록 허용하려면 AndroidManifest.xml에서 android:installLocation 플래그를 사용합니다. 앱을 외부 저장소로 이동할 수 있게 하는 자세한 방법은, Android 가이드의 앱 설치 위치를 참조하세요.

설치 후 앱 디스크 사용량 축소

  • 앱 디스크 사용량을 낮게 유지한다는 것은 기기의 빈 공간이 부족할 때 사용자가 여러분의 앱을 제거할 가능성이 적다는 것을 의미합니다. 중요한 점은 캐시 주변에 경계를 적용하는 것입니다. 이렇게 하면 앱 디스크 사용량이 무한히 늘어나지 않게 방지해줍니다. 캐시된 데이터를 반드시 getCacheDir()에 넣으세요. 필요한 경우에 시스템이 여기에 넣은 파일을 삭제하기 때문에, 앱이 차지하는 저장용량으로 나타나지 않습니다.

구성 가능한 네트워크 사용량 제공

Android 플랫폼에는 사용자가 앱의 네트워크 사용을 제어하도록 권한을 부여하여 각자의 필요에 맞게 최적화할 수 있도록 하는 방법이 많습니다. 예를 들어 앱을 처음 사용할 때 사용자에게 다양한 네트워크 관련 설정을 안내할 수 있습니다. 앱 외부에서 네트워크 기본 설정 화면을 제공할 수도 있습니다.

사용자의 네트워크 선택을 위한 온보딩 환경 제공

  • 사용자가 데이터 사용량을 줄일 수 있도록 허용하는 앱은 데이터 요구사항이 높더라도 사용자가 잘 받아들입니다. 여러분의 앱이 상당한 크기의 대역폭을 사용하는 경우(예: 동영상 스트리밍 앱), 사용자가 네트워크 사용량을 구성하도록 온보딩 환경을 제공할 수 있습니다. 예를 들어, 사용자가 셀룰러 네트워크에서 비트 전송률이 낮은 동영상 스트림을 적용하도록 허용할 수 있습니다.
  • 또한, 데이터 동기화, 프리페치 및 네트워크 사용 동작(예: 중요 표시된 모든 뉴스 범주를 Wi-Fi에서만 프리페치)을 사용자가 제어할 수 있도록 하는 추가적인 설정을 통해서도 사용자가 자신의 필요에 맞게 앱의 동작을 지정할 수 있습니다.
  • 네트워크 사용량 관리에 대한 자세한 내용은 Android 교육 과정에서 네트워크 사용량 관리를 참조하세요.

네트워크 기본 설정 화면 제공

  • 네트워크 기본 설정 화면을 통해 앱 외부에서 앱의 네트워크 설정을 탐색할 수 있습니다. 시스템 설정 화면이나 시스템 데이터 사용량 화면에서 이 화면을 호출할 수 있습니다.
  • 사용자가 여러분의 앱 내에서 또는 시스템 설정에서 액세스할 수 있는 네트워크 기본 설정 화면을 제공하려면, ACTION_MANAGE_NETWORK_USAGE 동작을 지원하는 액티비티를 여러분의 앱에 포함하세요.
  • 네트워크 기본 설정 화면의 추가에 대한 자세한 내용은 Android 교육 과정에서 기본 설정 액티비티 구현을 참조하세요.