신규 사용자를 확보하려면 더욱 다양한 Android 플랫폼 버전과 기기 사양을 지원해야 합니다. 사용자 환경을 개선하기 위해 일반적인 RAM 구성과 화면 크기 및 해상도를 최적화하세요.
다양한 화면 크기 지원
앱이 다양한 크기 및 해상도의 화면을 지원한다면 수십억 사용자에게 더 나은 사용자 환경을 제공할 수 있습니다. 이 섹션에서는 이를 달성하는 몇 가지 방법을 설명합니다.
밀도 독립형 픽셀(dp) 사용
- 픽셀로 레이아웃 치수를 정의하면 화면 크기에 따라 픽셀 밀도가 달라져서 동일한 수의 픽셀이라도 서로 다른 기기에서 실제 크기가 달라질 수 있으므로 제대로 작동하지 않습니다.
- Android는 이를 극복하기 위해 밀도 독립형 픽셀(dp)을 지원합니다. 이것은 160dpi(mdpi 밀도)에서 실제 크기 1픽셀에 해당합니다.
- dp로 레이아웃을 정의하면, 기기에 상관없이 사용자 인터페이스의 실제 크기가 일관되게 보장됩니다. 밀도 독립형 픽셀 사용에 관한 권장사항은 다양한 화면 지원에 관한 Android 가이드를 참고하세요.
ldpi 및 mdpi 화면 밀도에서 텍스트 및 그래픽 테스트
- 텍스트 및 그래픽이 저밀도 및 중간 밀도(ldpi 및 mdpi) 화면에서 잘 작동하는지 테스트해야 합니다. 이들은 특히 저가 기기에서 공통 밀도이기 때문입니다. 미세한 부분이 잘 보이지 않는 저밀도 화면에서 분명히 표시되지 않는 텍스트가 있는지 확인하세요.
- 저밀도 화면이 있는 기기는 하드웨어 사양이 더 낮은 경향이 있습니다. 이들 기기에서 앱이 올바로 작동하도록 보장하려면, 애니메이션 및 전환과 같은 큰 그래픽 처리 부하를 줄이거나 없앱니다.
- 다양한 밀도 지원에 관한 자세한 내용은 Android 교육 과정에서 다양한 밀도 지원을 참고하세요.
작은 화면 및 중간 크기 화면에서 레이아웃 테스트
- 더 작은 화면에서 테스트를 실행하여 레이아웃이 축소되는지 확인합니다. 화면 크기가 작아짐에 따라 공간에 제한이 있으므로, 표시되는 UI 요소를 신중히 선택해야 합니다.
- 머티리얼 디자인 가이드라인에서는 화면 밀도에 따라 레이아웃 크기가 변경되도록 하는 측정항목 및 키라인을 설명합니다.
- 다양한 화면 크기 지원에 관한 자세한 내용은 Android 교육 과정에서 다양한 화면 크기 지원을 참고하세요.
이전 버전과의 호환성 제공
사용자 중에는 가장 좋은 최신 버전의 Android 플랫폼으로 구동하는 기기를 사용하지 않는 경우도 있습니다. 여기에서는 이전 버전과의 호환성을 개선하여 가능한 많은 사람들에게 앱을 제공할 수 있도록 하는 데 도움이 되는 방법을 몇 가지 소개합니다.
targetSdkVersion
및 minSdkVersion
을 적절하게 설정
-
광범위한 기기 전반에 최신 동작을 제공할 수 있도록 가장 최신 버전의 Android를 타겟팅하여 앱을 빌드하면서도 이전 버전과의 호환성을 계속 제공해야 합니다.
다음은 적절한 API 수준 타겟팅을 위한 권장사항입니다.
targetSdkVersion
이 최신 버전의 Android여야 합니다. 최신 버전을 타겟팅하면 더 새로운 버전의 Android를 실행할 때 앱이 더 새로운 런타임 동작을 상속합니다. 앱 동작에 영향을 미칠 수 있으므로,targetSdkVersion
을 업데이트할 때 반드시 더 새로운 버전의 Android에서 앱을 테스트하세요.-
minSdkVersion
지원되는 최소 Android 버전을 설정합니다. 또한minSdkVersion
을 설정하면 Android 빌드 도구가 이전 버전의 플랫폼에는 사용할 수 없는 새로운 API의 잘못된 사용을 보고합니다. 이렇게 하면 개발자가 실수로 이전 버전과의 호환성을 어기는 것을 막을 수 있습니다.
- 타겟 사용자에 따라 어떤 버전의 Android를 타겟팅할지 측정하려면 Android 대시보드, 앱의 Google Play Console 그리고 타겟 시장의 산업 리서치를 참조하세요.
Android 지원 라이브러리 사용
-
Android 지원 라이브러리를 사용하여 앱이 여러 OS 버전에 걸쳐 일관된 환경을 제공하도록 합니다.
이 라이브러리는
AppCompatActivity
및 머티리얼 디자인 지원 라이브러리와 같은 라이브러리 API를 통해서만 이용할 수 있는 기능은 물론 이전 버전과 호환되는 Android 프레임워크 API 버전을 제공합니다. - 몇 가지 주요 사항은 다음과 같습니다.
- v4 및 v7 지원 라이브러리:
ViewPager
,ActionBar
,RecyclerView
,Palette
와 같은 이전 버전의 Android를 위한 여러 프레임워크 API입니다. - 머티리얼 디자인 지원 라이브러리: 앱에 머티리얼 디자인 구성요소와 패턴을 추가하는 작업을 지원하는 API입니다.
- 멀티덱스 지원 라이브러리: 65,000개 이상의 메서드가 있는 대형 앱을 지원합니다. 이는 앱이 많은 라이브러리를 사용 중인 경우에 발생할 수 있습니다.
- v4 및 v7 지원 라이브러리:
- 사용 가능한 지원 라이브러리에 관한 자세한 내용은 Android 개발자 사이트의 지원 라이브러리 기능 섹션을 참고하세요.
Google Play 서비스 사용
- Google Play 서비스는 Android 플랫폼 버전과는 독립된 최상의 Google API를 제공합니다. Google Play 서비스의 여러 기능을 사용하여 가장 간소화된 Google 환경을 Android 기기에서 제공합니다.
- Google Play 서비스에는
GcmNetworkManager
와 같은 유용한 API도 포함되어 있습니다. 이 API는 이전 버전의 Android에 Android 5.0의JobScheduler
API 대부분을 제공합니다. - Google Play 서비스 업데이트는 Google Play 스토어를 통해 자동으로 배포되고 새로운 버전의 클라이언트 라이브러리는 Android SDK Manager를 통해 제공됩니다.
효율적인 메모리 사용
메모리는 사용자 환경의 숨은 공신입니다. 메모리 관리를 잘하면 앱을 더욱 안정적이고 성능 기준에 맞게 만들 수 있습니다. 경우에 따라서는 메모리를 효과적으로 사용하는 것만이 앱을 사용 가능하게 만드는 유일한 방법일 수 있습니다. 여기에서는 앱이 메모리를 현명하게 사용하도록 돕는 방법을 소개합니다.
저가 기기에서 메모리 공간 절감
- 메모리 공간을 동적으로 조정하여 서로 다른 RAM 구성을 사용하는 여러 기기 전반에서 호환성을 확보합니다.
isLowRamDevice()
및getMemoryClass()
와 같은 메서드는 런타임 시 메모리 제약 조건을 결정하도록 도와줍니다. 이 정보를 바탕으로 메모리 사용량을 줄일 수 있습니다. 예를 들어, 메모리가 작은 기기에서는 더 낮은 해상도의 이미지를 사용할 수 있습니다.- 앱의 메모리 관리에 관한 자세한 내용은 앱 메모리 관리에 관한 Android 교육 과정을 참고하세요.
장기 실행 프로세스 피하기
- 장기 실행 프로세스는 메모리에 상주하며 기기의 속도를 저하시킬 수 있습니다. 대부분의 경우에 앱은 지정된 이벤트에서 깨어난 후 데이터를 처리하고 종료되어야 합니다. Firebase 클라우드 메시징(FCM) 및
GcmNetworkManager
를 사용하면 장기 실행 백그라운드 서비스를 피하고 사용자 기기에 가해지는 메모리 압력을 줄일 수 있습니다.
메모리 사용량 벤치마킹
Android 스튜디오에서는 메모리 벤치마킹 및 프로파일링 도구를 제공하므로, 런타임 시 메모리 사용량을 측정할 수 있습니다. 앱의 메모리 공간을 벤치마킹하면 앱의 여러 버전에서 메모리 사용량을 모니터링할 수 있습니다. 이를 통해 메모리 공간이 의도치 않게 증가하는 것을 포착할 수 있습니다. 메모리 프로파일러 도구는 다음과 같은 용도로 사용합니다.
- 원치 않는 가비지 컬렉션(GC) 이벤트 패턴으로 인해 성능 문제가 발생하는지 알아냅니다.
- 불필요하거나 예상치 못하게 할당되는 객체 유형을 식별합니다.
- 문제가 있을 수 있는 코드 내의 위치를 식별합니다.
메모리 사용량 벤치마킹에 관한 자세한 내용은 메모리 프로파일러로 힙 및 할당 보기를 참고하세요.
Android(Go 버전)를 실행하는 기기 최적화
Android(Go 버전)는 Android Oreo(Go 버전)부터 1GB 이하의 RAM을 사용하는 보급형 기기에 최적화된 환경입니다. 앱이 Android(Go 버전) 기기에서 잘 실행되도록 보장하려면 다음과 같은 가이드라인을 염두에 두어야 합니다.
- targetSdkVersion이 최신 버전의 Android여야 합니다. Android (Go 버전) 기기는 Android Oreo (API 27 이상)만 실행합니다.
- 앱이 1GB 이하의 RAM을 사용하는 기기에서 원활하게 작동해야 합니다. 위의 효율적인 메모리 사용에 나열된 메모리 최적화 관련 사항을 염두에 두고 Android vitals를 사용하여 느린 렌더링이나 정지된 프레임 등의 악성 동작을 식별하여 수정합니다.
- 기기에서 PIP 모드가 사용 중지될 수 있습니다. 앱에서 PIP 모드를 사용하려면
hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
를 호출하여 PIP 모드를 사용할 수 있는지 확인하세요. - 온디바이스 앱 크기는 40MB보다 작아야 합니다.
- 앱의 RAM 사용량의 PSS (Proportional Set Size)는 90MB를 초과하면 안 됩니다. 게임의 경우, 게임 RAM 사용량의 PSS가 150MB를 초과하면 안 됩니다. PSS에 관한 자세한 내용은 RAM 사용량 조사 가이드를 참고하세요.
- 앱의 시작 시간은 최소한으로, 5초 미만이어야 합니다.
-
앱이 다른 앱 위에 창을 그리도록 허용하는
SYSTEM_ALERT_WINDOW
는 RAM이 부족한 Android Go 기기에서 사용 중지될 수 있습니다. 다른 앱 위에 그리기 전에 Settings.canDrawOverlays()를 호출하여 앱에 이 권한이 있는지 확인합니다. 앱이 권한을 얻을 수 없는 경우 가능한 경우SYSTEM_ALERT_WINDOW
권한이 필요한 기능을 사용 중지하여 사용자가 앱을 계속 사용할 수 있도록 앱의 성능을 단계적으로 저하합니다.
대부분의 개발자에게 기존 앱을 최적화하도록 권장하여 모든 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보다 높은 버전의 코드가 있어야 합니다.
관련 항목
추가 리소스
다양한 기기 지원에 관한 자세한 내용은 다음 리소스를 참고하세요.