앱 출시 준비

앱 출시를 준비하려면 앱의 출시 버전을 구성하고 빌드하고 테스트해야 합니다. 구성 작업에는 앱 최적화에 도움이 되는 기본적인 코드 정리 작업과 코드 수정 작업이 포함됩니다. 빌드 프로세스는 디버그 빌드 프로세스와 비슷하며 JDK 및 Android SDK 도구를 사용하여 실행할 수 있습니다.

테스트 작업은 최종 검사의 역할을 하며 앱이 실제 조건에서 예상대로 작동하는지 확인하는 데 도움이 됩니다. Firebase는 앱 품질을 향상하는 데 사용할 수 있는 Firebase Test Lab을 통해 다양한 실제 테스트 기기와 가상 테스트 기기를 모두 제공합니다.

앱 출시 준비를 마치면 서명된 APK 파일이 결과물로 나오며, 이 파일을 직접 사용자에게 배포하거나 Google Play와 같은 앱 마켓을 통해 배포할 수 있습니다.

이 문서에서는 앱 출시를 준비하는 데 필요한 기본 작업을 요약합니다. 이 페이지에 설명된 작업은 사용자에게 출시 또는 배포되는 방법과 상관없이 모든 Android 앱에 적용됩니다. Google Play를 통해 앱을 출시하는 경우 안정적인 출시를 참고하세요.

참고: 이 페이지에 설명된 작업을 실행하기 전에 앱이 기능, 성능, 안정성 면에서 모든 출시 기준을 충족하는지 확인하는 것이 좋습니다.

준비 프로세스가 개발 프로세스에 어떻게 적합한지 보여줍니다.

그림 1. 필수 개발 작업이며 게시 프로세스의 첫 단계인 출시 준비

출시 준비 작업

앱을 사용자에게 출시하려면 사용자가 Android 지원 기기에서 설치하고 실행할 수 있는 출시용 패키지를 만들어야 합니다. 출시용 패키지는 디버그 APK 파일과 동일한 구성요소, 즉 컴파일된 소스 코드, 리소스, 매니페스트 파일 등을 포함하며 동일한 빌드 도구를 사용하여 빌드됩니다. 그러나 디버그 APK 파일과는 달리 출시용 APK 파일은 고유 인증서로 서명되며 zipalign 도구로 최적화됩니다.

앱 출시 준비를 위해 실행하는 5가지 작업을 보여줍니다.

그림 2. 앱 출시 준비를 위한 5가지 기본 작업

Android 스튜디오로 앱을 빌드하는 경우 서명 및 최적화 작업이 일반적으로 원활하게 진행됩니다. 예를 들어 Android 스튜디오에서 Gradle 빌드 파일을 사용하면 앱의 컴파일, 서명 및 최적화 작업을 한 번에 실행할 수 있습니다. 또한 명령줄에서 빌드할 때도 Gradle 빌드 파일을 구성하여 똑같은 작업을 실행할 수 있습니다. Gradle 빌드 파일 사용에 관한 자세한 내용은 빌드 구성을 참고하세요.

앱 출시를 준비하려면 일반적으로 5가지 기본 작업을 실행합니다(그림 2 참고). 앱을 출시하는 방법에 따라 각 기본 작업에는 하나 이상의 소규모 작업이 포함될 수 있습니다. 예를 들어 Google Play를 통해 앱을 출시하는 경우 출시를 위해 앱을 구성하는 동안 특수 필터링 규칙을 매니페스트에 추가해야 할 수 있습니다. 마찬가지로 Google Play 게시 가이드라인을 충족하려면 출시를 위해 자료를 수집하는 과정에서 스크린샷을 준비하고 홍보 문구를 작성해야 할 수도 있습니다.

일반적으로 앱을 철저히 디버그하고 테스트한 후 그림 2에 나온 작업을 실행합니다. Android SDK에는 Android 앱을 테스트하고 디버그하는 데 도움이 되는 여러 도구가 포함되어 있습니다. 자세한 내용은 앱 디버그앱 테스트를 참고하세요.

자료 및 리소스 수집

앱 출시를 준비하려면 몇 가지 보조 항목을 수집해야 합니다. 최소한 여기에는 앱 서명을 위한 암호화 키와 앱 아이콘이 포함되어야 합니다. 또한 최종 사용자 라이선스 계약을 수집할 수도 있습니다.

암호화 키

Android에서는 인증서를 사용해 디지털 방식으로 서명된 APK만 기기에 설치하거나 업데이트할 수 있습니다. Google Play 스토어의 경우 2021년 8월 후에 만들어진 모든 앱은 Play 앱 서명을 사용해야 합니다. 그러나 AAB를 Play Console에 업로드하려면 여전히 개발자 인증서로 서명해야 합니다. 이전 앱은 계속 자체 서명이 가능하지만 Play 앱 서명을 사용하든 자체 서명하든 관계없이 앱에 서명해야 업로드할 수 있습니다.

인증서 요구사항에 관한 자세한 내용은 앱 서명을 참고하세요.

중요: 유효 기간이 2033년 10월 22일이 지난 후 종료되는 암호화 키를 사용하여 앱에 서명해야 합니다.

앱에서 서비스에 액세스하거나 비공개 키를 기반으로 하는 키를 사용해야 하는 서드 파티 라이브러리를 사용하는 경우에는 다른 출시 키를 획득해야 할 수도 있습니다.

앱 아이콘

앱 아이콘을 통해 사용자는 기기의 홈 화면과 런처 창에서 앱을 식별할 수 있습니다. 앱 아이콘은 애플리케이션 관리, 내 다운로드 및 다른 위치에도 나타납니다. 또한 Google Play와 같은 게시 서비스도 사용자에게 아이콘을 표시합니다. 권장되는 아이콘 가이드라인을 준수하여 앱 아이콘을 만들어야 합니다.

참고: Google Play에서 앱을 출시하는 경우 고해상도 버전의 아이콘을 만들어야 합니다. 자세한 내용은 미리보기 애셋을 추가하여 앱 홍보를 참고하세요.

최종 사용자 라이선스 계약

앱의 최종 사용자 라이선스 계약(EULA)을 준비하는 것이 좋습니다. 최종 사용자 라이선스 계약은 개인, 조직, 지적 재산을 보호하는 데 도움이 될 수 있으므로 앱에서 제공하는 것이 좋습니다.

기타 자료

앱을 홍보하려면 프로모션 및 마케팅 자료를 준비해야 할 수도 있습니다. 예를 들어 Google Play에서 앱을 출시하는 경우 홍보 문구를 준비하고 앱의 스크린샷을 만들어야 합니다. 자세한 내용은 미리보기 애셋을 추가하여 앱 홍보를 참고하세요.

출시를 위한 앱 구성

모든 보조 자료를 수집한 후에는 출시를 위한 앱 구성을 시작할 수 있습니다. 이 섹션에서는 앱을 출시하기 전에 소스 코드, 리소스 파일, 앱 매니페스트에 관해 권장되는 구성 변경을 요약하여 설명합니다.

이 섹션에 나온 구성 변경은 대부분이 선택사항이지만 좋은 코딩 사례로 간주되므로 구현하는 것이 좋습니다. 경우에 따라 이미 개발 프로세스의 일부로 이러한 구성을 변경했을 수 있습니다.

적합한 애플리케이션 ID 선택

앱의 전체 수명 주기 동안 적합한 애플리케이션 ID를 선택해야 합니다. 사용자에게 앱을 배포한 후에는 애플리케이션 ID를 변경할 수 없습니다. 설정하려면 모듈 수준 build.gradle 또는 build.gradle.kts 파일에서 applicationId 속성을 사용합니다. 자세한 내용은 애플리케이션 ID 설정을 참고하세요.

디버깅 사용 중지

APK의 디버그 가능 여부를 구성하려면 Groovy의 경우 debuggable 플래그를, Kotlin 스크립트의 경우 isDebuggable 플래그를 사용합니다.

Kotlin

  android {
    ...
    buildTypes {
      release {
        isDebuggable = false
        ...
      }
      debug {
        isDebuggable = true
        ...
      }
    }
    ...
  }
  

Groovy

  android {
    ...
    buildTypes {
      release {
        debuggable false
        ...
      }
      debug {
        debuggable true
        ...
      }
    }
    ...
  }

앱 축소 사용 설정 및 구성

출시 빌드에 축소를 사용 설정하여 다음 최적화 중 대부분을 자동화할 수 있습니다. 예를 들어 ProGuard 규칙을 추가하여 로그 구문을 삭제하면 축소기가 사용되지 않는 코드와 리소스를 식별하여 삭제합니다. 축소기는 또한 클래스 이름과 변수 이름을 더 짧은 이름으로 대체하여 DEX 크기를 더 줄일 수 있습니다.

로깅 사용 중지

출시용 앱을 빌드하기 전에 로깅을 비활성화합니다. 로깅은 소스 파일에서 Log 메서드 호출을 삭제하여 비활성화할 수 있습니다. 또한 프로젝트에서 생성된 로그 파일이나 정적 테스트 파일을 모두 제거해야 합니다.

코드에 추가한 모든 Debug 추적 호출(예: startMethodTracing()stopMethodTracing() 메서드 호출)도 삭제합니다.

중요: WebView를 사용하여 유료 콘텐츠를 표시하거나 자바스크립트 인터페이스를 사용하는 경우 앱의 디버깅을 사용 중지해야 합니다. 디버깅을 통해 사용자가 Chrome DevTools를 사용하여 스크립트를 삽입하고 콘텐츠를 추출할 수 있기 때문입니다. 디버깅을 사용 중지하려면 WebView.setWebContentsDebuggingEnabled() 메서드를 사용하세요.

프로젝트 디렉터리 정리

프로젝트를 정리하고 프로젝트가 프로젝트 개요에 설명된 디렉터리 구조를 준수하는지 확인합니다. 이탈한 파일이나 분리된 파일을 프로젝트에 그대로 두면 앱이 컴파일되지 않으며 예기치 않은 앱 동작이 발생할 수 있습니다. 최소한 다음 정리 작업을 실행하세요.

  • cpp/, lib/, src/ 디렉터리의 콘텐츠를 검토합니다. cpp/ 디렉터리에는 C 또는 C++ 소스 파일이나 헤더 파일, makefile과 같은 Android NDK와 연결된 소스 파일만 포함되어야 합니다. lib/ 디렉터리에는 사전 빌드된 공유 라이브러리 및 정적 라이브러리 등 서드 파티 라이브러리 파일이나 비공개 라이브러리 파일만 포함되어야 합니다. src/ 디렉터리에는 앱의 소스 파일(자바, Kotlin, AIDL 파일)만 포함되어야 합니다. src/ 디렉터리에는 JAR 파일이 포함되어서는 안 됩니다.
  • 프로젝트에 앱에서 사용하지 않는 비공개 데이터 파일이나 독점 데이터 파일이 있는지 확인하고 삭제합니다. 예를 들어 프로젝트의 res/ 디렉터리에 더 이상 사용하지 않는 오래된 드로어블 파일, 레이아웃 파일, 값 파일이 있는지 확인하고 있으면 삭제합니다.
  • lib/ 디렉터리에서 테스트 라이브러리를 확인한 후 앱에서 더 이상 사용하지 않는 테스트 라이브러리는 삭제합니다.
  • assets/ 디렉터리와 res/raw/ 디렉터리의 콘텐츠에 출시 전 업데이트나 삭제가 필요한 원본 저작물 파일 및 정적 파일이 있는지 검토합니다.

매니페스트와 Gradle 빌드 설정 검토 및 업데이트

다음 매니페스트와 빌드 파일 항목이 올바르게 설정되어 있는지 확인합니다.

  • <uses-permission> 요소

    앱에 관련 있고 필요한 권한만 지정합니다.

  • android:iconandroid:label 속성

    <application> 요소에 위치한 이러한 속성 값을 지정해야 합니다.

  • versionCodeversionName 속성

    앱 모듈 수준 build.gradle 또는 build.gradle.kts 파일에 있는 이러한 속성의 값을 지정하는 것이 좋습니다. 자세한 내용은 앱 버전 지정을 참고하세요.

Google Play에서 앱을 출시하는 경우 설정할 수 있는 몇 가지 추가 빌드 파일 요소가 있습니다. 예를 들어 minSdktargetSdk 속성은 앱 모듈 수준 build.gradle 또는 build.gradle.kts 파일에 있습니다. 이러한 설정 및 다른 Google Play 설정에 관한 자세한 내용은 Google Play 필터를 참고하세요.

호환성 문제 해결

Android는 앱이 다양한 기기와 호환될 수 있도록 설정하는 몇 가지 도구와 기법을 제공합니다. 앱을 최대한 많은 사용자가 사용할 수 있도록 하려면 다음을 고려해 보세요.

여러 화면 구성 지원 추가
여러 화면 지원 권장사항을 준수해야 합니다. 여러 화면 구성을 지원하면 Android에서 지원하는 모든 화면 크기에서 올바르게 작동하고 제대로 표시되는 앱을 만들 수 있습니다.
큰 화면에 맞게 앱 최적화
태블릿, 폴더블과 같이 화면이 큰 기기에서 잘 작동하도록 앱을 최적화할 수 있습니다. 예를 들어 목록-세부정보 레이아웃은 큰 화면에서의 사용성을 개선할 수 있습니다.
Jetpack 라이브러리 사용
Jetpack은 개발자가 권장사항을 따르고 상용구 코드를 줄이며 여러 Android 버전과 기기에서 일관되게 작동하는 코드를 작성하도록 지원하는 라이브러리 모음입니다.

서버 및 서비스의 URL 업데이트

앱이 원격 서버나 서비스에 액세스하는 경우 테스트 URL이나 경로가 아니라 서버나 서비스의 프로덕션 URL 또는 경로를 사용하는지 확인해야 합니다.

Google Play 라이선스 구현

Google Play를 통해 유료 앱을 출시하는 경우 Google Play 라이선스 지원을 추가합니다. 라이선스를 사용하면 현재 사용자가 앱을 구매했는지 여부에 따라 앱 액세스를 제어할 수 있습니다. Google Play 라이선스를 사용하는 것은 Google Play를 통해 앱을 출시하는 경우에도 선택사항입니다.

Google Play 라이선스 서비스와 앱에서 이를 사용하는 방법에 관한 자세한 내용은 앱 라이선스를 참고하세요.

출시를 위한 앱 빌드

앱 구성을 마친 후에는 서명되고 최적화된 출시용 APK 파일로 빌드할 수 있습니다. JDK에는 APK 파일 서명용 도구(Keytool 및 Jarsigner)가 있습니다. Android SDK에는 APK 파일 컴파일 및 최적화용 도구가 있습니다. Android 스튜디오를 사용하거나 명령줄에서 Gradle 빌드 시스템을 사용하고 있다면 빌드 프로세스 전체를 자동화할 수 있습니다. Gradle 빌드 구성에 관한 자세한 내용은 빌드 변형 구성을 참고하세요.

지속적 통합 시스템을 사용하는 경우 출시 프로세스를 자동화하는 작업을 구성할 수 있습니다. 이는 출시 APK 또는 AAB를 빌드하는 데 국한되지 않습니다. 빌드 아티팩트를 Play Console에 자동으로 업로드하도록 구성할 수도 있습니다.

Android 스튜디오로 빌드

Android 스튜디오에 통합된 Gradle 빌드 시스템을 사용하여 개발자의 비공개 키로 서명되고 최적화된 출시용 APK 파일을 빌드할 수 있습니다. Android 스튜디오에서 빌드를 설정하고 실행하는 방법에 관한 자세한 내용은 앱 빌드 및 실행을 참고하세요.

빌드 프로세스에서는 앱에 서명하는 데 적합한 인증서와 비공개 키가 개발자에게 있다고 가정합니다. 적합한 인증서와 비공개 키가 없다면 Android 스튜디오를 통해 생성할 수 있습니다. 서명 프로세스에 관한 자세한 내용은 앱 서명을 참고하세요.

외부 서버 및 리소스 준비

앱이 원격 서버를 이용하는 경우 서버의 보안이 보장되어야 하며 서버가 프로덕션 용도로 구성되어야 합니다. 앱에 인앱 결제를 구현하며 원격 서버에서 서명 인증 단계를 실행하는 경우 특히 중요합니다.

앱이 원격 서버 또는 실시간 서비스(예: 콘텐츠 피드)에서 콘텐츠를 가져오는 경우 제공하는 콘텐츠가 최신이며 프로덕션에 바로 사용할 수 있는지 확인합니다.

출시를 위한 앱 테스트

출시 버전의 앱을 테스트하면 앱이 실제 기기 및 네트워크 환경에서 제대로 실행되는지 확인할 수 있습니다. 적어도 핸드셋 크기의 기기 한 대와 태블릿 크기의 기기 한 대에서 앱을 테스트하여 사용자 인터페이스 요소의 크기가 올바르고 앱 성능과 배터리 효율이 허용 수준인지 확인하는 것이 좋습니다. Firebase Test Lab은 다양한 기기와 Android OS 버전을 대상으로 테스트하는 데도 유용합니다.

테스트를 시작할 때 핵심 앱 품질을 참고하세요. 테스트를 완료하고 출시 버전의 앱이 제대로 작동하는 것을 확인했다면 사용자에게 앱을 출시할 수 있습니다. 자세한 내용은 사용자에게 앱 출시를 참고하세요.