Skip to content

Most visited

Recently visited

navigation

앱 서명

Android는 모든 APK를 설치하기 전에 인증서로 디지털 서명을 하도록 요구합니다. 이 문서에서는 인증서 생성 및 저장, 각각 다른 인증서를 사용하여 여러 빌드 구성 서명, APK에 자동으로 서명하도록 빌드 프로세스 구성 등을 포함하여 Android Studio를 사용하여 APK에 서명하는 방법에 대해 설명합니다.

인증서 및 키스토어

디지털 인증서 또는 ID 인증서라고도 하는 공개 키 인증서는 공개 키/개인 키 쌍에서 공개 키를 포함할 뿐만 아니라 키 소유자를 식별하는 몇 가지 다른 메타데이터(예: 이름 및 위치)도 포함합니다. 인증서 소유자는 이에 대응되는 개인 키를 보유합니다.

APK에 서명하면 서명 도구가 공개 키 인증서를 APK에 연결합니다. 공개 키 인증서는 APK를 여러분과 여러분이 보유하고 있는 이에 대응되는 개인 키에 고유하게 연결하는 "지문" 역할을 합니다. 이를 통해 Android는 APK에 대한 향후 모든 업데이트가 진짜이고 원래 작성자가 작성한 것임을 확인할 수 있습니다. 이 인증서를 만드는 데 사용되는 키를 앱 서명 키라고 합니다.

키스토어는 하나 이상의 개인 키가 들어 있는 바이너리 파일입니다.

사용자가 앱에 대한 업데이트로 새로운 버전을 설치할 수 있으려면, 모든 앱이 수명 내내 동일한 인증서를 사용해야 합니다. 앱 수명 내내 모든 앱에 동일한 인증서를 사용함으로써 얻을 수 있는 이점에 대한 자세한 내용은 아래의 서명 고려 사항을 참조하세요.

디버그 빌드 서명

IDE에서 프로젝트를 실행하거나 디버그할 때 Android Studio는 Android SDK 도구에서 생성된 디버그 인증서를 사용하여 APK에 자동으로 서명합니다. Android Studio에서 처음으로 프로젝트를 실행하거나 디버그하면 IDE가 자동으로 $HOME/.android/debug.keystore에 디버그 키스토어 및 인증서를 생성하고 키스토어 암호 및 키 암호를 설정합니다.

디버그 인증서는 빌드 도구에서 생성하고 설계상 보안이 유지되지 않으므로 Google Play 스토어를 포함한 대부분의 앱 스토어는 디버그 인증서로 서명된 APK를 게시할 수 있도록 허용하지 않습니다.

Android Studio는 서명 구성에 디버그 서명 정보를 자동으로 저장하므로 디버그할 때마다 서명 정보를 입력할 필요가 없습니다. 서명 구성은 키스토어 위치, 키스토어 암호, 키 이름 및 키 암호를 비롯하여 APK에 서명하는 데 필요한 모든 정보가 들어 있는 객체입니다. 디버그 서명 정보를 직접 편집할 수는 없지만, 릴리스 빌드에 서명하는 방법은 구성할 수 있습니다.

디버그용 앱을 빌드하고 실행하는 방법에 대한 자세한 내용은 앱 빌드 및 실행을 참조하세요.

디버그 인증서 만료

디버그용 APK에 서명하는 데 사용되는 자체 서명된 인증서의 만료 날짜는 생성일로부터 365일입니다. 인증서가 만료되면 빌드 오류가 발생합니다.

이 문제를 해결하려면 debug.keystore 파일을 삭제합니다. 이 파일은 다음 위치에 저장되어 있습니다.

다음에 디버그 빌드 유형을 빌드하고 실행하면 빌드 도구가 새 키스토어와 디버그 키를 다시 생성합니다. 참고로, 앱을 반드시 실행해야 하며, 빌드 작업만 수행하는 경우에는 키스토어와 디버그 키가 다시 생성되지 않습니다.

키 관리

앱 서명 키는 개발자로서 여러분의 신분을 식별하는 데 사용되며 또한 원활하고 안전한 업데이트를 사용자에게 보장하려면, 키를 안전하게 관리하고 보관하는 것이 여러분과 사용자 모두에게 매우 중요합니다. Google Play 앱 서명을 사용하여 Google의 인프라를 통해 앱 서명 키를 안전하게 관리하고 보관하도록 선택하거나 또는 본인의 키스토어와 앱 서명 키를 관리하고 보호하도록 선택할 수 있습니다.

Google Play 앱 서명 사용

Google Play 앱 서명을 사용할 때는 앱 서명 키업로드 키라는 두 가지 키를 사용합니다. Google은 여러분 대신 앱 서명 키를 관리하고 보호해주며, 여러분은 업로드 키를 유지하고 Google Play Store에 앱을 업로드할 때 이 키를 사용하여 앱에 서명합니다.

Google Play 앱 서명을 사용하도록 선택한 경우, Google Play에서 제공하는 Play Encrypt Private Key 도구를 사용하여 앱 서명 키를 내보내고 암호화한 다음, 이 키를 Google의 인프라에 업로드합니다. 그런 다음, 별도의 업로드 키를 만들어 Google에 등록합니다. 게시할 준비가 되면 업로드 키를 사용하여 앱에 서명하고 Google Play에 업로드합니다. 그러면 Google이 업로드 인증서를 사용하여 여러분의 신분을 확인하고, 배포를 위해 앱 서명 키로 APK에 다시 서명합니다(그림 1 참조). (아직 앱 서명 키가 없는 경우, 등록 프로세스 동안 생성할 수 있습니다.)

그림 1. Google Play 앱 서명으로 앱 서명

Google Play 앱 서명 사용 시 업로드 키를 분실하거나 이 키가 손상된 경우, Google에 연락하여 오래된 업로드 키를 취소하고 새 키를 다시 생성할 수 있습니다. 앱 서명 키는 Google에 의해 보호되므로 여러분이 업로드 키를 변경하더라도 원래 앱에 대한 업데이트로 새로운 앱 버전을 계속 업로드할 수 있습니다.

Google Play 앱 서명을 사용하도록 선택하는 자세한 방법은 앱 서명 키 관리를 참조하세요.

본인의 키 및 키스토어 관리

Google Play 앱 서명을 사용하는 대신, 본인의 앱 서명 키와 키스토어를 관리하도록 선택할 수 있습니다. 본인의 앱 서명 키와 키스토어를 관리하도록 선택한 경우에는 이 키와 키스토어를 보호할 책임이 여러분에게 있습니다. 키스토어 자체에 사용할 강력한 암호를 선택하고, 이와 더불어 키스토어에 저장된 개인 키 각각에 대해 별도의 강력한 암호를 선택해야 합니다. 키스토어는 안전하고 보안이 유지되는 장소에 보관해야 합니다. 앱 서명 키를 분실하거나 키가 손상된 경우 Google이 여러분을 대신하여 앱 서명 키를 복원할 수 없으며, 원래 앱에 대한 업데이트로 새로운 앱 버전을 사용자에게 릴리스할 수 없습니다. 자세한 정보는 아래의 키 보호를 참조하세요.

본인의 앱 서명 키와 키스토어를 관리하는 경우, APK에 서명할 때 앱 서명 키를 사용하여 로컬로 서명하고 이 서명된 APK를 Google Play Store에 직접 업로드하여 배포합니다(그림 2 참조).

그림 2. 본인의 앱 서명 키를 관리하는 경우 앱 서명

APK 서명

키와 키스토어를 관리하기 위해 어떤 방법을 선택하든 간에, Android Studio를 사용하여 업로드 키나 앱 서명 키로 APK에 서명할 수 있습니다. 이때 수동으로 APK에 서명할 수도 있고 또는 자동으로 서명하도록 빌드 프로세스를 구성할 수도 있습니다.

본인의 앱 서명 키와 키스토어를 관리하고 보호하도록 선택한 경우에는 앱 서명 키로 APK에 서명합니다. Google Play 앱 서명을 사용하여 앱 서명 키와 키스토어를 관리하고 보호하도록 선택한 경우에는 업로드 키로 APK에 서명합니다.

키 및 키스토어 생성

다음과 같은 두 단계로 Android Studio를 사용하여 앱 서명 키나 업로드 키를 생성할 수 있습니다.

  1. 메뉴 모음에서 Build > Generate Signed APK를 클릭합니다.
  2. 드롭다운에서 모듈을 선택하고 Next를 클릭합니다.
  3. Create new를 클릭하여 새로운 키와 키스토어를 만듭니다.

  4. 그림 3에 표시된 것처럼 New Key Store 창에서 다음과 같은 키스토어 및 키 관련 정보를 제공합니다.

    그림 3. Android Studio에서 새 키스토어 생성.

    Keystore

    • Key store path: 키스토어를 생성할 위치를 선택합니다.
    • Password: 키스토어에 사용할 보안 암호를 생성하고 확인합니다.

    Key

    • Alias: 키를 식별할 수 있는 이름을 입력합니다.
    • Password: 키에 사용할 보안 암호를 생성하고 확인합니다. 이 암호는 키스토어에 사용하도록 선택한 암호와 달라야 합니다.
    • Validity (years): 키가 유효하게 유지되는 기간(년)을 설정합니다. 키는 최소 25년 동안 유효하게 유지되어야만 앱의 수명이 지속되는 동안 같은 키로 앱 업데이트에 서명할 수 있습니다.
    • Certificate: 인증서에 사용할 몇 가지 본인 관련 정보를 입력합니다. 이 정보는 앱에 표시되지 않지만, APK의 일부로 인증서에 포함됩니다.

    양식을 작성하고 나면 OK를 클릭합니다.

  5. 새로운 키로 서명된 APK를 생성하고 싶다면 수동으로 APK에 서명하고, APK에 서명하지 않고 키와 키스토어만 생성하고 싶다면 Cancel을 클릭합니다.
  6. Google Play 앱 서명을 사용하도록 선택하려면, 앱 서명 키 관리로 진행하여 지침에 따라 Google Play 앱 서명을 설정합니다.

수동으로 APK에 서명

Android Studio를 사용하면 여러 빌드 변형 전체에 대해 한꺼번에 또는 한 번에 하나씩 서명된 APK를 수동으로 생성할 수 있습니다. APK를 수동으로 서명하는 대신 빌드 프로세스 중에 자동으로 서명을 처리하도록 Gradle 빌드 설정을 구성할 수 있습니다. 이 섹션에서는 수동 서명 프로세스에 대해 설명합니다. 빌드 프로세스에서 앱 서명에 대한 자세한 내용은 APK에 자동으로 서명하도록 빌드 프로세스 구성을 참조하세요.

Android Studio에서 릴리스용 APK에 수동으로 서명하려면 다음 단계를 따르세요.

  1. Build > Generate Signed APK를 클릭하여 Generate Signed APK 창을 엽니다. (위의 설명에 따라 키와 키스토어를 생성했다면 이 창이 이미 열려 있을 것입니다.)
  2. Generate Signed APK Wizard 창에서 키스토어와 개인 키를 선택하고 키스토어 암호와 개인 키 암호를 입력합니다. (이전 섹션에서 키스토어를 생성했다면 이 필드에 이미 정보가 채워져 있을 것입니다.) 이어서 Next를 클릭합니다.

    참고: Google Play 앱 서명을 사용하는 경우 여기서 업로드 키를 지정해야 합니다. 그렇지 않고 본인의 앱 서명 키와 키스토어를 관리 중인 경우에는 앱 서명 키를 지정해야 합니다. 자세한 정보는 위의 키 관리를 참조하세요.

    그림 4. Android Studio에서 개인 키 선택.

  3. 다음 창에서 서명된 APK의 대상과 빌드 유형을 차례로 선택하고 (해당하는 경우) 제품 버전을 선택한 후 Finish를 클릭합니다.

    그림 5. 선택한 제품 버전에 대한 서명된 APK 생성.

    참고: 프로젝트에서 제품 버전을 사용하는 경우 Control 키(Windows/Linux) 또는 Command 키(Mac OSX)를 누른 상태로 여러 제품 버전을 선택할 수 있습니다. 그러면 선택한 각 제품 버전에 대해 별도의 APK가 생성됩니다.

프로세스가 완료되면 위에서 선택한 대상 폴더에서 서명된 APK를 찾을 수 있습니다. 그러면 이제 Google Play 스토어와 같은 앱 시장을 통해서나 선택한 메커니즘을 사용하여 서명된 APK를 배포할 수 있습니다. 서명된 APK를 Google Play 스토어에 게시하는 방법에 대한 자세한 내용은 게시 시작을 참조하세요. 기타 배포 옵션에 대한 자세한 내용을 알아보려면 대체 배포 옵션을 읽어보세요.

사용자가 앱에 업데이트를 성공적으로 설치할 수 있으려면 앱 수명 내내 같은 인증서로 APK에 서명해야 합니다. 이에 대해서는 물론, 같은 키로 모든 앱에 서명하는 경우 얻을 수 있는 기타 이점에 대한 자세한 내용은 아래에 나와 있는 서명 고려 사항을 참조하세요. 개인 키와 키스토어에 대한 보안을 유지하는 방법에 대한 자세한 내용은 아래의 키 보호를 참조하세요.

APK에 자동으로 서명하도록 빌드 프로세스 구성

Android Studio에서 서명 구성을 생성하고 이를 릴리스 빌드 유형에 할당하여 빌드 프로세스 중에 릴리스 APK에 자동으로 서명하도록 프로젝트를 구성할 수 있습니다. 서명 구성은 키스토어 위치, 키스토어 암호, 키 별칭 및 키 암호로 구성됩니다. Android Studio를 사용하여 서명 구성을 생성하고 이를 릴리스 빌드 유형에 할당하려면 다음 단계를 수행하세요.

  1. Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
  2. Project Structure 창의 왼쪽 패널에 있는 Modules 아래에서 서명할 모듈을 클릭합니다.
  3. Signing 탭을 클릭한 후 Add를 클릭합니다 .
  4. 키스토어 파일을 선택하고 (둘 이상 생성할 수 있으므로) 이 서명 구성의 이름을 입력한 후 필수 정보를 입력합니다.

    그림 6. 새로운 서명 구성을 생성할 수 있는 창.

  5. Build Types 탭을 클릭합니다.
  6. release 빌드를 클릭합니다.
  7. Signing Config에서 방금 생성한 서명 구성을 선택합니다.

    그림 7. Android Studio에서 서명 구성 선택.

  8. OK를 클릭합니다.

이제, Android Studio를 사용하여 릴리스 빌드 유형을 빌드할 때마다 IDE가 지정된 서명 구성을 사용하여 APK에 자동으로 서명합니다. 서명된 APK는 빌드하는 모듈의 프로젝트 디렉토리에 있는 build/outputs/apk/ 폴더에서 찾을 수 있습니다.

서명 구성을 생성하면 서명 정보가 Gradle 빌드 파일에 일반 텍스트로 포함됩니다. 팀으로 작업하거나 코드를 공개적으로 공유하는 경우에는 빌드 파일에서 서명 정보를 제거하고 별도로 저장하여 서명 정보를 안전하게 보호해야 합니다. 빌드 파일에서 서명 정보를 제거하는 방법에 대한 자세한 내용은 빌드 파일에서 서명 정보 제거에서 확인할 수 있습니다. 서명 정보를 안전하게 보호하는 방법에 대한 자세한 내용은 키 보호를 참조하세요.

제품 버전에 각각 별도로 서명

앱이 제품 버전을 사용하고 제품 버전에 각각 별도로 서명하려는 경우 버전별로 추가 서명 구성을 생성하여 할당할 수 있습니다.

  1. Project 창에서 앱을 마우스 오른쪽 버튼으로 클릭하고 Open Module Settings를 클릭합니다.
  2. Project Structure 창의 왼쪽 패널에 있는 Modules 아래에서 서명할 모듈을 클릭합니다.
  3. Signing 탭을 클릭한 후 Add를 클릭합니다 .
  4. 키스토어 파일을 선택하고 (둘 이상 생성할 수 있으므로) 이 서명 구성의 이름을 입력한 후 필수 정보를 입력합니다.

    그림 8. 새로운 서명 구성을 생성할 수 있는 창.

  5. 모든 서명 구성을 생성할 때까지 필요에 따라 3단계와 4단계를 반복합니다.
  6. Flavors 탭을 클릭합니다.
  7. 구성할 버전을 클릭한 후 Signing Config 드롭다운 메뉴에서 적합한 서명 구성을 선택합니다.

    그림 9. 제품 버전별로 서명 설정 구성.

    추가 제품 버전을 구성하려면 이 단계를 반복합니다.

  8. OK를 클릭합니다.

Gradle 구성 파일에서 서명 설정을 지정할 수도 있습니다. 자세한 내용은 서명 설정 구성을 참조하세요.

Android Wear 앱 서명

Android Wear 앱을 빌드 중인 경우에는, 앱 서명 프로세스가 이 페이지에 설명된 프로세스와 다를 수 있습니다. Android Wear 앱 패키징 및 게시에 대한 내용을 참조하세요.

서명 고려 사항

앱의 예상 수명 동안 같은 인증서로 모든 APK에 서명해야 합니다. 그렇게 해야 하는 이유는 여러 가지가 있습니다.

앱 업그레이드를 지원할 계획이라면 앱 서명 키의 유효 기간이 앱의 예상 수명보다 길게 설정되었는지 확인하세요. 유효 기간은 25년 이상으로 설정하는 것이 좋습니다. 키의 유효 기간이 만료되면 사용자가 더 이상 앱의 새 버전으로 원활하게 업그레이드할 수 없습니다.

Google Play에 앱을 게시할 계획이라면 이 APK에 서명하는 데 사용하는 키의 유효 기간이 2033년 10월 22일 이후에 종료되어야 합니다. Google Play가 이 요구사항을 적용하는 이유는 새 버전이 나왔을 때 사용자가 원활하게 앱을 업그레이드할 수 있도록 하기 위해서입니다. Google Play 앱 서명을 사용하는 경우, Google은 앱이 올바로 서명되었는지 그리고 앱 수명 내내 업데이트를 받을 수 있는지 확인합니다.

키 보호

(Google Play 앱 서명을 선택하는 대신) 앱 서명 키와 키스토어를 여러분이 직접 관리하고 보호하도록 선택한 경우, 앱 서명 키를 보호하는 것이 여러분과 사용자 모두를 위해 매우 중요합니다. 누군가 여러분의 키를 사용하게 하거나 키스토어와 암호를 제삼자가 찾아서 사용할 수 있는 보안되지 않은 장소에 보관할 경우, 여러분의 작성자 신분과 사용자의 신뢰가 손상될 수 있습니다.

참고: Google Play 앱 서명을 사용 중인 경우, Google의 인프라를 사용하여 앱 서명 키가 안전하게 보호됩니다. 하지만 업로드 키는 아래 설명에 따라 여러분이 안전하게 보호해야 합니다. 업로드 키가 손상된 경우에는 Google에 연락하여 이 키를 취소하고 새 업로드 키를 받을 수 있습니다.

제삼자가 개발자 모르게 또는 개발자의 허가를 받지 않고 키를 취할 수 있는 경우 그 사람이 진짜 앱을 악의적으로 대체하거나 손상시키는 앱에 서명한 후 이를 배포할 수 있습니다. 또한, 이러한 사람은 개발자의 신분을 사칭하여 다른 앱이나 시스템 자체를 공격하거나 사용자 데이터를 손상시키거나 도난하는 앱에 서명한 후 이를 배포할 수도 있습니다.

이후에 나오는 모든 앱 버전에 서명할 때 개인 키가 필요합니다. 키를 분실하거나 잘못 보관하면 기존 앱에 업데이트를 게시할 수 없게 됩니다. 이전에 생성한 키는 다시 생성할 수 없습니다.

개발자로서 여러분의 평판은 앱 서명 키가 만료될 때까지 항상 해당 키를 제대로 보호하느냐에 달려 있습니다. 다음은 키를 안전하게 지키는 몇 가지 팁입니다.

일반적으로 키를 생성, 사용, 저장할 때 상식적인 주의 사항을 따른다면 키가 안전하게 보호될 것입니다.

빌드 파일에서 서명 정보 제거

서명 구성을 생성하면 Android Studio가 서명 정보를 일반 텍스트로 모듈의 build.gradle 파일에 추가합니다. 팀으로 작업하거나 코드를 오픈 소스로 제공하는 경우 이러한 중요한 정보를 빌드 파일에서 제거하여 다른 사람들이 쉽게 액세스할 수 없도록 해야 합니다. 이렇게 하려면 보안 정보를 저장할 별도의 속성 파일을 생성하고 다음과 같이 빌드 파일에서 이 파일을 참조해야 합니다.

  1. 서명 구성을 생성한 후 하나 이상의 빌드 유형에 할당합니다. 이 지침에서는 위에 나와 있는 APK에 자동으로 서명하도록 빌드 프로세스 구성의 설명에 따라 릴리스 빌드 유형에 대해 하나의 서명 구성을 설정했다고 가정합니다.
  2. 프로젝트의 루트 디렉토리에 keystore.properties라는 이름의 파일을 생성합니다. 이 파일에는 다음과 같이 서명 정보가 포함되어 있어야 합니다.
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. 모듈의 build.gradle 파일에서, keystore.properties 파일을 로드하는 코드를 android {} 블록 앞에 추가합니다.
    ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    
    

    참고: 다른 위치에 keystore.properties 파일을 저장하도록 선택할 수 있습니다(예를 들어, 프로젝트의 루트 폴더 대신 모듈 폴더에 저장하거나 CI(Continuous Integration) 도구를 사용하는 경우 빌드 서버에 저장). 이 경우, 실제 keystorePropertiesFile 파일의 위치를 사용하여 keystore.properties을 올바르게 초기화하도록 위의 코드를 수정해야 합니다.

  4. keystoreProperties['propertyName'] 구문을 사용하여 keystoreProperties에 저장된 속성을 참조할 수 있습니다. 다음 구문을 사용하여 keystoreProperties에 저장된 서명 정보를 참조하도록 모듈의 build.gradle 파일에서 signingConfigs 블록을 수정합니다.
    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }
    
  5. Build Variants 도구 창을 열고 릴리스 빌드 유형이 선택되었는지 확인합니다.
  6. Build > Build APK를 클릭하여 릴리스 빌드를 빌드하고 Android Studio가 모듈의 build/outputs/apk/ 디렉토리에 서명된 APK를 생성했는지 확인합니다.

빌드 파일에 더 이상 중요한 정보가 포함되어 있지 않으므로 이제 중요한 파일을 소스 제어에 포함하거나 공유 코드베이스에 업로드할 수 있습니다. keystore.properties 파일을 안전하게 보호해야 합니다. 그러기 위해서는 소스 제어 시스템에서 중요한 파일을 제거해야 할 수도 있습니다.

명령줄에서 앱 빌드 및 서명

앱에 서명할 때는 Android Studio를 사용하지 않아도 됩니다. apksigner 도구를 사용하여 명령줄에서 앱에 서명할 수 있으며 또는 빌드 중에 앱에 서명하도록 Gradle을 구성할 수 있습니다. 어느 방법이든 간에 keytool을 사용하여 개인 키를 먼저 생성해야 합니다. 예:

keytool -genkey -v -keystore my-release-key.jks
-keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

참고: keytool은 JDK의 bin/ 디렉토리에 있습니다. Android Studio에서 JDK를 찾으려면 File > Project Structure를 선택하고 SDK Location을 클릭하세요. 그러면 JDK location이 나타납니다.

이 예시에서는 키스토어 암호와 키 암호를 입력하고 키의 Distinguished Name 필드를 입력하라는 메시지를 표시합니다. 그런 다음, my-release-key.jks라는 파일로 키스토어를 생성하고 이 키스토어를 현재 디렉토리에 저장합니다(원하는 위치로 키스토어를 이동할 수 있습니다). 키스토어에는 10,000일 동안 유효한 단일 키가 포함되어 있습니다.

이제 서명되지 않은 APK를 빌드하고 수동으로 서명하거나 APK에 서명하도록 Gradle을 구성할 수 있습니다.

서명되지 않은 APK를 빌드하고 수동으로 서명

  1. 명령줄을 열고 프로젝트 디렉토리의 루트로 이동합니다. Android Studio에서 View > Tool Windows > Terminal을 선택합니다. 그런 다음 assembleRelease 작업을 호출합니다.
    gradlew assembleRelease
    

    그러면 project_name/module_name/build/outputs/apk/module_name-unsigned.apk라는 이름의 APK가 생성됩니다. 이 시점에서는 APK가 서명되지 않고 정렬되지 않은 상태이며, 개인 키로 서명되기 전까지 설치할 수 없습니다.

  2. zipalign을 사용하여 서명되지 않은 APK를 정렬합니다.

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    zipalign은 압축되지 않은 모든 데이터가 파일 시작 부분에 맞게 특정 바이트 정렬이 적용된 상태로 시작되도록 합니다. 이를 통해 앱이 소비하는 RAM 크기를 줄일 수 있습니다.

  3. apksigner를 사용하여 개인 키로 APK에 서명합니다.

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    이 예시에서는 개인 키와 인증서로 서명한 후 서명된 APK를 my-app-release.apk에 출력합니다. 이 키와 인증서는 단일 KeyStore 파일 my-release-key.jks에 저장되어 있습니다.

    apksigner 도구는 별도의 개인 키 및 인증서 파일을 사용하는 APK 파일 서명, 여러 서명자를 사용하는 APK 서명 등 다른 서명 옵션을 지원합니다. 자세한 내용은 apksigner를 참조하세요.

    참고: apksigner 도구를 사용하려면 수정 버전 24.0.3 이상의 Android SDK 빌드 도구를 설치해야 합니다. SDK Manager를 사용하여 이 패키지를 업데이트할 수 있습니다.

  4. APK가 서명되었는지 확인합니다.

    apksigner verify my-app-release.apk
    

APK에 서명하도록 Gradle 구성

  1. 모듈 레벨 build.gradle 파일을 열고 storeFile, storePassword, keyAliaskeyPassword의 항목이 있는 signingConfigs {} 블록을 추가한 다음, 해당 객체를 빌드 유형의 signingConfig 속성에 전달합니다. 예:
    android {
        ...
        defaultConfig { ... }
        signingConfigs {
            release {
                storeFile file("my-release-key.jks")
                storePassword "password"
                keyAlias "my-alias"
                keyPassword "password"
            }
        }
        buildTypes {
            release {
                signingConfig signingConfigs.release
                ...
            }
        }
    }
    

    Gradle은 build.gradle에 상대적인 경로를 읽으므로 위의 예시는 my-release-key.jksbuild.gradle 파일과 동일한 디렉토리에 있을 때만 유효합니다.

    참고: 이 경우 키스토어와 키 암호가 build.gradle 파일에 바로 표시됩니다. 보안을 개선하려면 빌드 파일에서 서명 정보를 제거해야 합니다.

  2. 프로젝트 루트 디렉토리에서 명령줄을 열고 assembleRelease 작업을 호출합니다.
    gradlew assembleRelease
    

그러면 project_name/module_name/build/outputs/apk/module_name-release.apk라는 이름의 APK가 생성됩니다. 이 APK 파일은 build.gradle 파일에 지정된 개인 키로 서명되고 zipalign으로 정렬됩니다.

이제 서명 키로 릴리스 빌드를 구성했으므로 해당 빌드 유형에 대해 "설치" 작업을 수행할 수 있습니다. 따라서 installRelease 작업을 통해 에뮬레이터나 기기에서 릴리스 APK를 빌드, 정렬, 서명 및 설치할 수 있습니다.

개인 키로 서명된 APK는 배포할 준비가 되었지만 먼저 앱 게시 방법을 자세히 읽고 Google Play 출시 검사 목록을 검토해야 합니다.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)