The Android Developer Challenge is back! Submit your idea before December 2.

수십억 사용자를 위한 기기 기능

신규 사용자를 확보하려면 더욱 다양한 Android 플랫폼 버전과 기기 사양을 지원해야 합니다. 사용자 환경을 개선하기 위해 기본 RAM 크기, 구성, 화면 크기 및 해상도를 최적화하세요.

다양한 화면 크기 지원

앱이 다양한 크기 및 해상도의 화면을 지원한다면 수십억 사용자에게 더 나은 사용자 환경을 제공할 수 있습니다. 이 섹션에서는 다양한 화면 크기를 지원하는 몇 가지 방법을 설명합니다.

밀도 독립적 픽셀(dp) 사용

  • 픽셀로 레이아웃 치수를 정의하면 화면 크기에 따라 픽셀 밀도가 달라져서 같은 개수의 픽셀이라도 서로 다른 기기에서 실제 크기가 달라질 수 있으므로 제대로 작동하지 않습니다.
  • Android는 이를 극복하기 위해 밀도 독립적 픽셀(dp)을 지원합니다. 이것은 160dpi(mdpi 밀도)에서 실제 크기 1픽셀에 상당합니다.
  • dp로 레이아웃을 정의하면, 기기에 상관없이 사용자 인터페이스의 실제 크기가 일관되게 보장됩니다. 밀도 독립적 픽셀을 사용하는 모범 사례는 Android 가이드의 다양한 화면 지원을 참조하세요.

Ldpi 및 mdpi 화면 밀도에서 텍스트 및 그래픽 테스트

  • 텍스트 및 그래픽이 저밀도 및 중간 밀도(ldpi 및 mdpi) 화면에서 잘 작동하는지 테스트해야 합니다. 이들은 특히 저가 기기에서 공통 밀도이기 때문입니다. 미세한 부분이 잘 보이지 않는 저밀도 화면에서 분명히 표시되지 않는 텍스트가 있는지 확인하세요.
  • 저밀도 화면이 있는 기기는 하드웨어 사양이 더 낮은 경향이 있습니다. 이들 기기에서 앱이 올바로 작동하도록 보장하려면, 애니메이션 및 전환과 같은 큰 그래픽 처리 부하를 줄이거나 없앱니다.
  • 다양한 밀도를 지원하는 자세한 방법은 Android 교육 과정에서 다양한 밀도 지원을 참조하세요.

작은 화면 및 중간 크기 화면에서 레이아웃 테스트

  • 더 작은 화면에서 테스트를 수행하여 레이아웃이 축소되는지 확인합니다. 화면 크기가 작아짐에 따라 공간에 제한이 있으므로, 표시되는 UI 요소를 신중히 선택해야 합니다.
  • 머티리얼 디자인 가이드라인에서는 화면 밀도에 따라 레이아웃 크기 변경을 보장하는메트릭 및 키라인에 대해 설명합니다.
  • 다양한 화면 크기를 지원하는 자세한 방법은 다양한 화면 크기 지원에 관한 Android 교육 과정을 참조하세요.

이전 버전과의 호환성 제공

사용자 중에는 최신의, 가장 좋은 버전의 Android 플랫폼으로 구동하는 기기를 사용하지 않는 경우도 있습니다. 여기에는 이전 버전과의 호환성을 개선하여 가능한 많은 사람들에게 앱을 제공할 수 있도록 하는 데 도움이 되는 방법을 몇 가지 소개하였습니다.

targetSdkVersionminSdkVersion을 적절하게 설정

  • 광범위한 기기 전반에 최신 동작을 제공할 수 있도록 가장 최신 버전의 Android를 대상으로 앱을 빌드하면서도 이전 버전과의 호환성을 계속 제공해야 합니다. 다음은 적절한 API 레벨 타겟팅을 위한 모범 사례입니다.
    • targetSdkVersion이 최신 버전의 Android여야 합니다. 최신 버전을 대상으로 하는 경우, 더 새로운 버전의 Android를 실행할 때 앱이 더 새로운 런타임 동작을 상속합니다. 앱 동작에 영향을 미칠 수 있으므로, targetSdkVersion을 업데이트할 때 반드시 더 새로운 버전의 Android에서 앱을 테스트하세요.
    • minSdkVersion은 지원되는 최소 Android 버전을 설정합니다. Android 4.0(API 레벨 14: Ice Cream Sandwich) 또는 Android 4.1(API 레벨 16: Jelly Bean)을 사용하세요. 이들 버전은 최신 기기에서 최고의 성능을 제공합니다. 또한, minSdkVersion을 설정하면 Android 빌드 도구가 구버전의 플랫폼에는 사용할 수 없는 새로운 API의 잘못된 사용을 보고합니다. 이렇게 하면 개발자가 실수로 이전 버전과의 호환성을 어기는 것을 막을 수 있습니다.
  • 대상 사용자에 따라 어떤 버전의 Android를 대상으로 할지 측정하려면 Android 대시보드, 앱의 Google Play Developer Console 그리고 타겟 시장의 산업 리서치를 참조하세요.

Android 지원 라이브러리 사용

  • Android 지원 라이브러리를 사용하여 앱이 여러 OS 버전에 걸쳐 일관된 환경을 제공하도록 합니다. 이 라이브러리는 AppCompatActivity 및 머티리얼 디자인 지원 라이브러리와 같은 라이브러리 API를 통해서만 이용할 수 있는 특징은 물론 이전 버전과 호환되는 Android 프레임워크 API 버전을 제공합니다.
  • 주목할 만한 몇 가지 사항으로는 다음과 같습니다.
  • 사용 가능한 지원 라이브러리에 대한 자세한 내용은 Android 개발자 사이트의 지원 라이브러리 기능 섹션을 참조하세요.

Google Play 서비스 사용

  • Google Play 서비스는 Android 플랫폼 버전과는 독립된 최상의 Google API를 제공합니다. Google Play 서비스의 여러 기능을 사용하여 가장 간소화된 Google 환경을 Android 기기에서 제공합니다.
  • Google Play 서비스에는 GcmNetworkManager 등과 같은 유용한 API도 포함됩니다. 이 API는 Android 5.0의 상당수 JobScheduler API를 구버전의 Android에 제공합니다.
  • Google Play 서비스 업데이트는 Google Play 스토어를 통해 자동으로 배포되고, 최신 버전의 클라이언트 라이브러리는 Android SDK Manager를 통해 제공됩니다.

효율적인 메모리 사용

메모리는 사용자 환경의 숨은 공신입니다. 메모리 관리를 잘하면 앱을 더욱 안정적이고 성능 기준에 맞게 만들 수 있습니다. 경우에 따라서는 메모리를 효과적으로 사용하는 것만이 앱을 사용 가능하게 만드는 유일한 방법일 수 있습니다. 여기에서는 앱이 메모리를 현명하게 사용하도록 돕는 방법을 소개합니다.

저가 기기에서 메모리 공간 절감

  • 메모리 공간을 동적으로 조정하여 서로 다른 RAM 구성을 사용하는 여러 기기 전반에서 호환성을 확보합니다.
  • isLowRamDevice()getMemoryClass()와 같은 메서드는 런타임 시 메모리 제약 조건을 결정하도록 도와줍니다. 이 정보를 바탕으로 메모리 사용량을 줄일 수 있습니다. 예를 들어, 메모리가 작은 기기에서는 더 낮은 해상도의 이미지를 사용할 수 있습니다.
  • 앱의 메모리 관리에 대한 자세한 내용은 앱 메모리 관리에 대한 Android 교육 과정을 참조하세요.

장기 실행 프로세스 피하기

  • 장기 실행 프로세스는 메모리에 상주하며 기기의 속도를 저하시킬 수 있습니다. 대부분의 경우에 앱은 지정된 이벤트에서 깨어난 후 데이터를 처리하고 종료되어야 합니다. Firebase 클라우드 메시징(FCM)GcmNetworkManager를 사용하면 장기 실행 백그라운드 서비스를 피하고 사용자 기기에 가해지는 메모리 부하를 줄일 수 있습니다.

메모리 사용량 벤치마킹

Android Studio에서는 메모리 벤치마킹 및 프로파일링 도구를 제공하므로, 런타임 시 메모리 사용량을 측정할 수 있습니다. 앱의 메모리 공간을 벤치마킹하면 여러 가지 버전의 앱에서 메모리 사용량을 모니터링할 수 있습니다. 이렇게 하면 메모리 공간이 원치 않게 증가하는 것을 막을 수 있습니다. Memory Profiler 도구는 다음과 같은 용도로 사용합니다.

  • 원치 않는 가비지 컬렉션(GC) 이벤트 패턴으로 인해 성능 문제가 발생하는지 알아냅니다.
  • 불필요하거나 예상치 못하게 할당되는 객체 유형을 식별합니다.
  • 문제가 있을 수 있는 코드 내의 위치를 식별합니다.

메모리 사용량 벤치마킹에 대한 자세한 정보를 알아보려면 Memory Profiler로 힙 및 할당 보기를 참조하세요.

Android(Go 에디션)를 구동하는 기기 최적화

Android(Go 에디션)는 Android Oreo(Go 에디션)부터 1GB 이하의 RAM을 사용하는 보급형 기기에 최적화된 환경입니다. 앱이 Android(Go 에디션) 기기에서 잘 실행되도록 보장하려면 다음과 같은 가이드라인을 염두에 두어야 합니다.

  • targetSdkVersion이 최신 버전의 Android여야 합니다. Android(Go 에디션) 기기는 Android Oreo(API 26 이상)만 실행합니다.
  • 앱이 1GB 이하의 RAM을 사용하는 기기에서 원활하게 작동해야 합니다. 위의 효율적인 메모리 사용에 나열된 메모리 최적화 관련 사항을 염두에 두고 Android Vitals를 사용하여 렌더링이 느리거나 프레임이 멈추는 등의 악성 동작을 식별하여 수정합니다.
  • PIP(Picture in picture)는 RAM 용량이 낮은 기기에서는 중지될 수 있습니다. 앱에서 PIP를 사용하기 전에 이것을 이용할 수 있는지 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)를 호출하여 확인해야 합니다.
  • 온디바이스 앱 크기는 40MB보다 작아야 합니다.
  • 앱의 RAM 사용량의 PSS(Proportional Set Size)가 50MB를 초과하면 안 됩니다. 게임의 경우, 게임 RAM 사용량의 PSS가 150MB를 초과하면 안 됩니다. PSS에 관한 자세한 정보는 RAM 사용량 조사 가이드를 참조하세요.
  • 앱의 시작 시간은 최소한으로, 5초 미만이어야 합니다.

대부분의 개발자에게 기존 앱을 최적화하도록 권장하여 모든 Android(Go 에디션)에서 이용할 수 있게 되도록 하고 있습니다. 앱의 실행 속도를 빠르게 하고 가볍게 할수록 모든 잠재고객에게 유익하기 때문입니다. Play Console의 다양한 APK 기능을 이용하면 Android(Go 에디션) 기기용 특정 APK를 배포할 수 있지만 이것은 환경을 저해하지 않는 한으로 제한해야 합니다(예: 기능을 삭제하면 안 됨). Android(Go 에디션) 기기 대상 APK는 <uses-feature android:name="android.hardware.ram.low" android:required="true">를 선언해야 하고, 최소 API 레벨 26을 대상으로 해야 하며 Go 에디션이 아닌 APK보다 높은 버전의 코드가 있어야 합니다.