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

핵심 앱 품질

Android 사용자는 고품질 앱을 기대합니다. 앱 품질은 설치, 사용자 평점 및 리뷰, 사용자 확보 및 유지 측면에서 앱의 장기적 성공에 직접적인 영향을 미칩니다.

이 페이지에서는 단순한 사용자 인터페이스 품질 기준 및 관련 테스트를 통해 앱의 핵심적인 품질을 평가하도록 도와줍니다. 모든 Android 앱은 이 기준을 충족해야 합니다.

앱을 게시하기 전에 이 기준에 대한 테스트를 거쳐 다양한 기기에서 잘 작동하는지, 탐색 및 디자인에 대한 Android 표준을 충족하는지 확인하고 Google Play 스토어에서 홍보 기회를 잡으세요. 여기에서 설명하는 범위 이상으로 테스트를 수행할 수 있습니다. 이 문서의 목적은 테스트 계획에 모든 앱이 표시해야 하는 필수 품질 특성을 포함할 수 있도록 이러한 항목을 명시하는 것입니다.

태블릿이나 TV와 같은 기타 Android 기기용 앱을 제작하는 경우 고려해야 하는 추가 품질 가이드라인이 있습니다.

시각적 디자인 및 사용자 상호작용

이 기준은 앱이 일관되고 직관적인 사용자 환경을 위해 필요한 경우 표준 Android 시각적 디자인 및 상호작용 패턴을 제공하도록 보장합니다.

영역 ID 설명 테스트
표준 디자인 UX-B1

앱이 Android 디자인 가이드라인을 따르고 공통 UI 패턴 및 아이콘을 사용합니다.

  1. 앱이 시스템 아이콘의 예상되는 기능(예: '뒤로' 버튼)을 재정의하지 않습니다.
  2. 앱이 표준 UI 동작을 트리거하는 경우 시스템 아이콘을 완전히 다른 아이콘으로 대체하지 않습니다.
  3. 앱이 표준 시스템 아이콘의 사용자 지정 버전을 제공하는 경우 해당 아이콘은 시스템 아이콘과 유사하고 표준 시스템 동작을 트리거합니다.
  4. 앱이 아이콘이나 동작이 사용자를 잘못 안내하거나 혼란스럽게 하지 않도록 Android UI 패턴을 재정의하거나 오용하지 않습니다.
CR-all
탐색 UX-N1

앱이 표준 시스템의 뒤로 버튼 탐색을 지원하고 화면에 표시되는 사용자 지정 "뒤로 버튼" 프롬프트를 사용하지 않습니다.

CR-3
UX-N2

뒤로 버튼을 사용하여 모든 대화상자를 취소할 수 있습니다.

CR-3
UX-N3 어디서든지 홈 버튼을 누르면 기기의 홈 화면으로 이동합니다. CR-1
알림 UX-S1

알림이 Android 디자인 가이드라인을 따릅니다. 구체적인 내용은 다음과 같습니다.

  1. 다중 알림은 단일 알림 객체로 스택됩니다(가능한 경우).
  2. 알림이 진행 중인 이벤트(예: 음악 재생 또는 통화)와 관련된 경우에만 지속됩니다.
  3. 알림이 사용자가 명시적으로 동의한 경우를 제외하고 앱의 핵심 기능과 관련되지 않은 광고나 콘텐츠를 포함하지 않습니다.
CR-11
UX-S2

앱이 다음과 같은 경우에만 알림을 사용합니다.

  1. 사용자와 개인적으로 관련된 컨텍스트의 변경사항(예: 수신 메시지)을 나타냅니다.
  2. 진행 중인 이벤트(예: 음악 재생 또는 통화)와 관련된 정보/컨트롤을 표시합니다.
CR-11

기능

이 기준은 앱이 적절한 권한 수준으로 예상되는 기능 동작을 제공하도록 보장합니다.

영역 ID 설명 테스트
권한 FN-P1 앱이 핵심 기능을 지원하는 데 필요한 절대적으로 최소한의 권한만 요청합니다. SC-4
FN-P2

앱이 핵심 기능과 관련되지 않은 경우 사용자에게 비용을 발생시킬 수 있는 서비스(예: 다이얼러 또는 SMS) 또는 민감한 데이터(예: 연락처 또는 시스템 로그)에 대한 액세스 권한을 요청하지 않습니다.

설치 위치 FN-L1

앱이 SD 카드에 설치된 경우 정상적으로 작동합니다(앱에서 지원하는 경우).

SD 카드에 설치 지원은 대부분의 대형 앱(10MB 이상)에서 권장됩니다. SD 카드에 설치를 지원해야 하는 앱 유형에 대한 자세한 내용은 앱 설치 위치 개발자 가이드를 참조하세요.

SD-1
오디오 FN-A1 핵심 기능이 아닌 경우 화면이 꺼지면 오디오가 재생되지 않습니다(예: 앱이 뮤직 플레이어인 경우). CR-7
FN-A2 핵심 기능이 아닌 경우 오디오가 잠금 화면 상태에서 재생되지 않습니다. CR-8
FN-A3 핵심 기능이 아닌 경우 오디오가 메인 스크린이나 다른 앱에서 재생되지 않습니다. CR-1, CR-2
FN-A4 앱이 포그라운드로 돌아오면 오디오가 다시 시작되거나 사용자에게 재생이 일시 중지된 상태임을 알립니다. CR-1, CR-8
UI 및 그래픽 FN-U1

앱이 가로 모드와 세로 모드를 모두 지원합니다(가능한 경우).

방향은 대체로 동일한 기능과 동작을 표시하고 기능 패리티를 보존합니다. 콘텐츠 또는 뷰의 사소한 변경은 허용됩니다.

CR-5
FN-U2

앱이 두 방향 모두에서 전체 화면을 사용하고, 방향 변경을 나타내기 위한 레터박스는 사용하지 않습니다.

화면 구성의 미세한 차이를 보정하기 위한 사소한 레터박스는 허용됩니다.

CR-5
FN-U3

앱이 렌더링 문제 없이 표시 방향 전환을 신속하고 정확하게 처리합니다.

CR-5
사용자/앱 상태 FN-S1

앱의 핵심 기능과 관련되지 않은 한, 앱이 백그라운드 상태일 때 실행 중인 서비스가 있어서는 안 됩니다.

예를 들어, 앱이 알림을 위해 네트워크 연결을 유지하거나 블루투스 연결을 유지하거나 GPS를 켜진 상태로 유지하는 서비스를 실행 상태로 두어서는 안 됩니다.

CR-6
FN-S2

앱이 사용자 또는 앱 상태를 정확히 보존하고 복원합니다.

앱이 포그라운드 상태를 벗어날 때 사용자 또는 앱 상태를 보존하고 뒤로가기 및 기타 상태 변경으로 인해 우발적으로 데이터를 잃는 것을 방지합니다. 앱이 포그라운드 상태로 돌아올 때 앱 또는 게임의 편집 가능한 필드, 게임 진행 상황, 메뉴, 동영상, 기타 섹션의 변경 내용 등 보류 중인 중요한 상태 저장 트랜잭션과 보존된 상태를 복원해야 합니다.

  1. 앱이 최근 앱 전환기에서 다시 시작한 경우 마지막으로 사용된 상태 그대로 돌아갑니다.
  2. 기기가 절전(잠금) 모드에서 해제된 후에 앱이 다시 시작하는 경우 앱이 마지막으로 사용된 상태 그대로 돌아갑니다.
  3. 앱이 홈 또는 모든 앱에서 다시 시작하는 경우 이전 상태에 최대한 가깝게 앱 상태를 복원합니다.
  4. 뒤로 키를 누를 때 앱이 뒤로가기로 잃을 수 있는 앱이나 사용자 상태를 저장하는 옵션을 제공합니다.
CR-1, CR-3, CR-5

호환성, 성능 및 안정성

이 기준은 앱이 사용자가 기대하는 호환성, 성능, 안정성 및 응답성을 제공하도록 보장합니다.

영역 ID 설명 테스트
안정성 PS-S1 앱이 대상 기기에서 비정상 종료되거나 강제로 닫히거나 멈추거나 비정상적으로 작동합니다. CR-all, SD-1, HA-1
성능 PS-P1 앱이 빨리 로드되거나, 로드하는 데 3초 이상 걸리는 경우 화면에 피드백을 표시합니다(진행률 표시기 또는 유사 기능). CR-all, SD-1
PS-P2 StrictMode가 활성화된 상태에서(아래 StrictMode 테스트 참조) 앱의 게임 실행, 애니메이션 및 UI 전환, 기타 부분 실행 등 앱을 실행할 때 빨간색 깜박임(StrictMode의 성능 경고)이 표시되지 않습니다. PM-1
SDK PS-T1 앱이 핵심 기능의 비정상 종료나 손실 없이 Android 플랫폼의 최신 공개 버전에서 실행됩니다. CR-0
PS-T2 앱이 최신 SDK를 대상으로 하도록 targetSdk 값을 설정해 플랫폼에서 제공되는 각종 포환성 폴백 사용을 최소화합니다. SP-1
PS-T3 compileSdk 값을 설정해 앱을 최신 SDK로 빌드합니다. SD-1
배터리 PS-B1 앱이 Android 6.0+(잠자기 및 앱 대기 모드) 이상에서 전원 관리를 적절히 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 면제를 요청할 수 있습니다. BA-1
미디어 PS-M1 정상적인 앱 사용 및 로드 시 음악 및 동영상 재생이 매끄럽고 잡음이나 끊김 또는 기타 아티팩트가 없습니다. CR-all, SD-1, HA-1
시각적 품질 PS-V1

앱이 현저한 왜곡, 흐림 또는 모자이크 현상 없이 그래픽, 텍스트, 이미지 및 기타 UI 요소를 표시합니다.

  1. 앱이 모든 대상 화면 크기 및 폼 팩터에 고품질 그래픽을 제공합니다.
  2. 메뉴, 버튼 및 기타 UI 요소의 가장자리에 앨리어싱이 표시되지 않습니다.
CR-all
PS-V2

앱이 허용되는 방식으로 텍스트 및 텍스트 블록을 표시합니다.

  1. 지원되는 모든 폼팩터에서 컴퍼지션이 허용됩니다.
  2. 잘린 문자나 단어가 표시되지 않습니다.
  3. 버튼 또는 아이콘 내에서 부적합한 자동 줄바꿈이 표시되지 않습니다.
  4. 텍스트와 주변 요소 사이에 충분한 간격이 있습니다.

보안

이들 기준은 앱이 사용자 데이터와 개인정보를 안전하게 처리하도록 합니다.

Google Play 스토어에 게시된 애플리케이션은 이 체크리스트 외에 사용자 데이터 정책도 따라 사용자의 개인정보를 보호해야 합니다.

영역 ID 설명 테스트
데이터 SC-D1 모든 비공개 데이터는 앱의 내부 저장소에 저장됩니다. SC-1
SC-D2 외부 저장소의 모든 데이터는 확인을 거친 후에 액세스합니다. SC-2
SC-D3

모든 인텐트 및 브로드캐스트가 보안 모범 사례를 따릅니다.

  1. 대상 애플리케이션이 알려져 있는 경우, 인텐트가 명시적입니다.
  2. 인텐트가 적절한 권한을 적용하고 사용합니다.
  3. 데이터 및 페이로드를 포함한 인텐트는 확인을 거친 후에 사용합니다.
SC-D4 개인정보 또는 민감한 사용자 데이터를 시스템 또는 앱 특정 로그에 기록하지 않습니다. SC-10
앱 구성 요소 SC-P1

애플리케이션 구성요소 중 다른 앱과 데이터를 공유하는 것 또는 다른 앱이 호출해야 하는 구성요소만 내보냅니다.

여기에는 액티비티, 서비스, broadcast receiver 및 특히 콘텐츠 제공자가 포함됩니다.

항상 android:exported 속성을 명시적으로 설정하며, 이는 애플리케이션의 구성요소를(종류 불문) 내보냈는지 여부와 무관합니다.

SC-5
SC-P2 다른 앱과 콘텐츠를 공유하는 모든 애플리케이션 구성요소가 적절한 권한을 정의(및 적용)합니다. 여기에는 액티비티, 서비스, broadcast receiver 및 특히 콘텐츠 제공자가 포함됩니다. SC-4
SC-P3 앱 간에 콘텐츠를 공유하는 모든 콘텐츠 제공자가 android:protectionLevel="signature"를 사용합니다. SC-3
네트워킹 SC-N1 모든 네트워크 트래픽이 SSL을 거쳐 전송됩니다. SC-9
SC-N2 애플리케이션이 네트워크 보안 구성을 선언합니다.
SC-N3 애플리케이션이 Google Play services를 사용하면 애플리케이션 시작 시 보안 제공자가 초기화됩니다.
라이브러리 SC-U1 모든 라이브러리, SDK, 종속성이 최신 상태입니다.
WebViews SC-W1 모든 WebView에서 JavaScript가 중지됩니다(필요한 경우는 예외). SC-6
SC-W2 WebView가 허용 목록 콘텐츠만 로드합니다(가능한 경우). SC-8
SC-W3

WebView가 신뢰할 수 없는 콘텐츠에 addJavaScriptInterface()를 사용하지 않습니다.

Android M 이상에서 HTML 메시지 채널을 대신 사용할 수 있습니다.

SC-7
실행 SC-E1 앱이 앱의 APK 외부에서 동적으로 코드를 로드하지 않습니다.
암호화 SC-C1 앱이 강력한 플랫폼 제공 암호화 알고리즘을 사용하며, 사용자설정 알고리즘을 구현하지 않습니다.
SC-C2 앱이 안전한 난수 생성기를 사용하여 암호화 키를 초기화합니다.

Google Play

이 기준은 앱을 Google Play에 게시할 수 있도록 보장합니다.

영역 ID 설명 테스트
정책 GP-P1 앱이 Google Play 개발자 콘텐츠 정책의 약관을 철저히 준수하고, 부적절한 콘텐츠를 제공하지 않으며 다른 사람의 지적 재산권이나 브랜드 등을 사용하지 않습니다. GP-all
GP-P2

앱 콘텐츠 수위가 콘텐츠 등급 가이드라인에 따라 적절히 설정되었습니다.

GP-1
GP-P3

앱이 Android 6.0+(잠자기 및 앱 대기 모드) 이상에서 전원 관리를 적절히 지원합니다. 전원 관리가 핵심 기능을 방해하는 경우 자격이 있는 앱만 면제를 요청할 수 있습니다. 잠자기 및 앱 대기 모드의 다른 사용 사례 지원을 참조하세요.

GP-4
앱 세부정보 페이지 GP-D1

앱 피처 그래픽이 이 블로그 게시물에 나오는 가이드라인을 따릅니다. 다음 사항을 확인하세요.

  1. 앱 등록정보에 고품질 피처 그래픽을 포함합니다.
  2. 앱이 대상으로 하는 가장 작은 화면에서 배율을 축소하여 표시할 때 피처 그래픽에 식별할 수 없는 기기 이미지, 스크린샷 또는 작은 텍스트를 포함하지 않습니다.
  3. 피처 그래픽이 광고와 비슷하지 않습니다.
GP-1, GP-2
GP-D2 앱 스크린샷 및 동영상이 비 Android 기기를 표시하거나 참조하지 않습니다. GP-1
GP-D3 앱 스크린샷 또는 동영상이 앱의 콘텐츠와 환경을 잘못된 방식으로 나타내지 않습니다.
사용자 지원 GP-X1 Google Play 페이지의 Reviews 탭에서 일반 사용자가 보고하는 버그가 재현될 수 있고 많은 다른 기기에서 발생하는 경우 처리됩니다. 일부 기기에서만 버그가 발생하는 경우라도 해당 기기가 매우 인기 있거나 신기종인 경우에는 버그를 해결해야 합니다. GP-1

테스트 환경 설정

앱의 품질을 평가하려면 테스트용으로 적합한 하드웨어 또는 에뮬레이터 환경을 설정해야 합니다.

이상적인 테스트 환경으로는 현재 소비자가 이용할 수 있는 핵심 폼 팩터와 하드웨어/소프트웨어 조합을 대표하는 몇 가지의 실제 하드웨어 기기가 있습니다. 시장에 출시된 모든 기기에서 테스트할 필요는 없습니다. 오히려 폼 팩터당 한두 대의 기기를 사용하더라도 소수의 대표 기기에 초점을 맞춰야 합니다.

테스트용 실제 하드웨어 기기를 구할 수 없는 경우 가장 일반적인 폼 팩터와 하드웨어/소프트웨어 조합을 나타내는 에뮬레이트된 기기(AVD)를 구성해야 합니다.

기본 테스트 이상을 수행하려면 더 많은 기기, 폼 팩터 또는 새 하드웨어/소프트웨어 조합을 테스트 환경에 추가하면 됩니다. 테스트 개수나 테스트의 복잡성 및 품질 기준을 높일 수도 있습니다.

테스트 절차

이 테스트 절차를 통해 앱에서 다양한 유형의 품질 문제를 찾아낼 수 있습니다. 테스트를 조합하거나 테스트 그룹을 본인의 테스트 계획에 통합할 수 있습니다. 이러한 테스트 절차와 기준을 연결하는 참조 자료는 위의 섹션을 참조하세요.

유형 테스트 설명
핵심 테스트 도구 모음 CR-0

앱의 모든 부분(모든 화면, 대화상자, 설정 및 모든 사용자 플로우)을 탐색합니다.

  1. 애플리케이션이 편집, 콘텐츠 만들기, 게임 실행 또는 미디어 재생을 허용하는 경우, 콘텐츠를 만들거나 수정하기 위해 해당 흐름으로 진입하도록 합니다.
  2. 앱을 실행하는 동안 네트워크 연결, 배터리 기능, GPS 또는 위치 사용 가능성, 시스템 로드 등의 일시적인 변경 내용을 가져옵니다.
CR-1 각 앱 화면에서 기기의 홈 키를 누른 다음 모든 앱 화면에서 앱을 다시 시작합니다.
CR-2 각 앱 화면에서 실행 중인 다른 앱으로 전환한 다음 최근 앱 전환기를 사용하여 테스트 중인 앱으로 돌아갑니다.
CR-3 각 앱 화면(및 대화 상자)에서 Back 버튼을 누릅니다.
CR-5 각 앱 화면에서 가로 모드와 세로 모드가 바뀌도록 기기를 세 번 이상 회전합니다.
CR-6 다른 앱으로 전환하여 테스트 앱을 백그라운드로 보냅니다. 설정으로 이동하여 테스트 앱에 백그라운드로 실행 중인 서비스가 있는지 확인합니다. Android 4.0 이상에서는 앱 화면으로 이동하여 "실행 중" 탭에서 앱을 찾습니다.
CR-7 전원 버튼을 눌러 기기를 절전 모드로 전환한 다음 전원 버튼을 다시 눌러 화면의 절전 모드를 해제합니다.
CR-8 전원 버튼을 누르면 기기를 잠금 설정합니다. 전원 버튼을 눌러 기기를 절전 모드로 전환한 다음, 전원 버튼을 다시 눌러 화면의 절전 모드를 해제하고 기기의 잠금을 해제합니다.
CR-9 기기에 슬라이드아웃 키보드가 있는 경우 키보드를 한 번 이상 슬라이드인 또는 슬라이드아웃합니다. 기기에 키보드 도크가 있는 경우 기기를 키보드 도크에 장착합니다.
CR-10 기기에 외부 디스플레이 포트가 있는 경우 외부 디스플레이를 연결합니다.
CR-11 알림 창에서 앱이 표시할 수 있는 모든 유형의 알림을 트리거하고 관찰합니다. 적용 가능한 경우(Android 4.1 이상) 알림을 확장하고 제공된 모든 작업을 탭합니다.
SD 카드에 설치 SD-1

기기 SD 카드에 앱이 설치된 상태에서 핵심 테스트 도구 모음을 반복합니다(앱에서 지원하는 경우).

앱을 SD 카드로 이동하려면 설정 > 앱 정보 > SD 카드로 이동을 사용하면 됩니다.

하드웨어 가속 HA-1

하드웨어 가속이 활성화된 상태에서 핵심 테스트 도구 모음을 반복합니다.

하드웨어 가속을 강제로 활성화하려면(기기에서 지원하는 경우) hardware-accelerated="true"를 앱 매니페스트의 <application>에 추가하고 다시 컴파일합니다.

성능 및 안정성 SP-1 Android 매니페스트 파일을 검토하고 구성을 빌드하여 애플리케이션이 이용할 수 있는 최신 SDK(targetSdkcompileSdk)에 대해 빌드되었는지 확인합니다.
성능 모니터링 PM-1

아래 설명처럼 StrictMode 프로파일링이 활성화된 상태에서 핵심 테스트 도구 모음을 반복합니다.

가비지 컬렉션 및 사용자 환경에 미치는 영향에 세심한 주의를 기울이세요.

배터리 BA-1

잠자기 및 앱 대기 모드에서 핵심 테스트 도구 모음을 반복합니다.

알람, 타이머, 알림, 동기화 등에 세심한 주의를 기울이세요. 요구사항 및 가이드라인에 대해서는 잠자기 및 앱 대기 모드로 테스트를 참조하세요.

보안 SC-1 외부 저장소에 저장된 모든 데이터를 검토합니다.
SC-2 외부 저장소에서 로드된 데이터의 처리 및 프로세스 방식을 검토합니다.
SC-3 적절한 protectionLevel에 대해 Android 매니페스트 파일에 정의된 모든 콘텐츠 제공자를 검토합니다.
SC-4 앱에 필요한 모든 권한을 매니페스트 파일, 런타임, 기기의 앱 설정(설정 > 앱 정보)에서 검토합니다.
SC-5 적절한 내보내기 상태에 대해 Android 매니페스트 파일에 정의된 모든 애플리케이션 구성요소를 검토합니다. 내보내기 속성은 모든 구성요소에 대해 명시적으로 설정되어야 합니다.
SC-6 앱의 네트워크 보안 구성을 검토하여 구성의 린트 점검이 실패하지 않도록 합니다.
SC-7 각 WebView에 대해 JavaScript가 필요한 페이지로 이동합니다.
SC-8 각 WebView에 대해 제어할 수 없는 영역의 사이트 및 콘텐츠로의 이동을 시도합니다.
SC-9 일반 텍스트 트래픽을 중지한 후 앱을 실행하는 네트워크 보안 구성을 선언합니다.
SC-10 기기 로그를 관찰하면서 애플리케이션을 실행하고 모든 핵심 기능을 작동시킵니다. 사용자 개인정보는 로그되지 말아야 합니다.
Google Play GP-1 Google Play Developer Console에 로그인하여 개발자 프로필, 앱 설명, 스크린샷, 피처 그래픽, 콘텐츠 등급 및 사용자 피드백을 검토합니다.
GP-2 대표 그래픽과 스크린샷을 다운로드하고 대상으로 하는 기기 및 폼 팩터의 디스플레이 크기에 맞게 배율을 축소합니다.
GP-3 앱 또는 확장 파일 다운로드에 패키징된 모든 그래픽 자산, 미디어, 텍스트, 코드 라이브러리 및 기타 콘텐츠를 검토합니다.
GP-4 잠자기 및 앱 대기 모드의 다른 사용 사례 지원을 검토하세요.
결제 GP-4 앱의 모든 화면을 탐색하고 모든 인앱 구매 흐름으로 진입합니다.

StrictMode로 테스트

성능을 테스트하려면 앱에서 StrictMode를 활성화하고 이를 사용하여 성능, 네트워크 액세스, 파일 읽기/쓰기 등에 영향을 줄 수 있는 기본 스레드 및 기타 스레드에서 작업을 캐치하는 것이 좋습니다.

StrictMode.ThreadPolicy.Builder를 사용하여 스레드별 모니터링 정책을 수립하고 detectAll()을 사용하여 ThreadPolicy에서 지원되는 모든 모니터링을 활성화할 수 있습니다.

penaltyFlashScreen()을 사용하여 ThreadPolicy 정책 위반의 시각적 알림을 활성화합니다.