Skip to content

Most visited

Recently visited

navigation

애플리케이션 ID 설정

모든 Android 앱은 저마다 com.example.myapp과 같이 자바 패키지 이름처럼 보이는 고유한 애플리케이션 ID가 있습니다. 이 ID 덕분에 기기와 Google Play Store에서 각각의 앱을 고유하게 식별할 수 있는 것입니다. 앱의 새로운 버전을 업로드하려면 애플리케이션 ID와 로그인할 때 사용할 인증서가 원래의 APK와 같아야 합니다. 애플리케이션 ID를 변경할 경우 Google Play Store에서는 APK를 완전히 다른 앱으로 취급하게 됩니다. 따라서 일단 앱을 게시한 후에는 절대로 애플리케이션 ID를 변경하지 마세요.

아래에 나오는 것처럼, 애플리케이션 ID는 모듈의 build.gradle 파일에서 applicationId 속성으로 정의됩니다.

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

Android Studio에서 새 프로젝트를 생성하면 applicationId는 설치 과정 중에 선택한 자바 스타일 패키지 이름과 정확히 일치합니다. 하지만 애플리케이션 ID와 패키지 이름은 이 시점 이후로는 서로 상관없습니다. 코드의 패키지 이름(코드 네임스페이스)을 변경할 수 있으며 이름을 변경하더라도 애플리케이션 ID에 영향을 주지 않고 그 반대도 마찬가지입니다. 단, 이때도 일단 앱을 게시한 후에는 애플리케이션 ID를 변경하면 안 됩니다. 하지만 패키지 이름을 변경하면 다른 결과로 이어지는데, 이 점은 분명히 알고 있어야 합니다. 패키지 이름 수정에 관한 섹션을 참조하세요.

애플리케이션 ID는 기존의 자바 패키지 이름과 같은 형태이지만, 애플리케이션 ID에 대한 명명 규칙은 다음과 같이 좀 더 제한적입니다.

참고: 애플리케이션 ID는 코드의 패키지 이름에 직접 연결되곤 했습니다. 그래서 메서드 이름과 매개변수 이름에 "패키지 이름"이라는 용어를 사용하는 Android API가 있지만, 이는 실제로는 애플리케이션 ID입니다. 예를 들어, Context.getPackageName() 메서드는 애플리케이션 ID를 반환합니다. 앱 코드 외부에서 코드의 실제 패키지 이름을 공유할 필요조차 없습니다.

주의: WebView를 사용할 경우에는 애플리케이션 ID에서 패키지 이름을 접두사로 사용하는 것이 좋습니다. 그렇지 않으면 문제 211768에서 설명하는 것과 같은 문제에 봉착할 수도 있기 때문입니다.

빌드 변형에 대한 애플리케이션 ID 변경

앱에 대한 APK를 빌드할 때, 아래에 나오는 것처럼 빌드 도구는 build.gradle 파일에서 defaultConfig 블록에 정의된 애플리케이션 ID로 APK에 태그 지정합니다. 하지만 앱의 여러 가지 버전(예: "free" 및 "pro" 버전)이 Google Play Store에서 별개의 목록으로 나타나도록 생성하려면 각각 다른 애플리케이션 ID를 가진 별개의 빌드 변형을 생성해야 합니다.

이 경우에는 각 빌드 변형을 별개의 제품 버전으로 정의해야 합니다. productFlavors {} 블록 내부의 각 버전에 대해 applicationId 속성을 재정의하거나, 아래와 같이 applicationIdSuffix를 사용하여 기본 애플리케이션 ID에 세그먼트를 대신 추가할 수 있습니다.

android {
    defaultConfig {
        applicationId "com.example.myapp"
    }
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

이러한 방식으로 "free" 제품 버전의 애플리케이션 ID는 "com.example.myapp.free"가 됩니다.

아래와 같이 빌드 유형을 기반으로 applicationIdSuffix를 사용하여 세그먼트를 추가할 수도 있습니다.

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

Gradle은 제품 버전 뒤에 빌드 유형 구성을 적용하기 때문에, "free debug" 빌드 변형의 애플리케이션 ID가 "com.example.myapp.free.debug"입니다. 이는 디버그와 릴리스 빌드를 모두 같은 기기에 두려고 할 때 유용합니다. 두 APK의 애플리케이션 ID가 같을 수는 없기 때문입니다.

Google Play Store에서는 애플리케이션 ID가 서로 다른 APK는 다른 앱으로 취급됩니다. 그래서 대신에 같은 앱 목록을 사용해 각각 다른 기기 구성(예: API 레벨)을 목표로 하는 여러 API를 배포하려는 경우에는 각 빌드 변형에 대해 같은 애플리케이션 ID를 사용하되, 각 APK에 다른 versionCode를 부여해야 합니다. 자세한 정보는 다중 APK 지원에 대해 읽어보세요.

주의: 이전 SDK 도구와의 호환성에 대해서는, build.gradle 파일에 applicationId 속성을 정의하지 않으면 빌드 도구가 AndroidManifest.xml 파일에서 패키지 이름을 애플리케이션 ID로 사용합니다. 이때는 패키지 이름을 리팩터링하면 애플리케이션 ID도 바뀝니다.

팁: 매니페스트 파일에서 애플리케이션 ID를 참조해야 할 경우 어떤 매니페스트 특성에든 ${applicationId} 자리표시자를 사용할 수 있습니다. 빌드 중에 Gradle은 이 태그를 실제 애플리케이션 ID로 바꿉니다. 자세한 정보는 매니페스트에 빌드 변수 삽입을 참조하세요.

테스트를 위한 애플리케이션 ID 변경

기본적으로, 빌드 도구는 .test가 추가된 상태로 주어진 빌드 변형의 애플리케이션 ID를 사용하여 기기 테스트 APK에 애플리케이션 ID를 적용합니다. 예를 들어, com.example.myapp.free 빌드 변형을 위한 테스트 APK의 애플리케이션 ID는 com.example.myapp.free.test입니다.

그럴 필요는 없지만 defaultConfig 또는 productFlavor 블록에서 testApplicationId 속성을 정의하여 애플리케이션 ID를 변경할 수 있습니다.

참고: 테스트 중인 앱과의 이름 충돌을 피하기 위해, 빌드 도구는 매니페스트 파일에 정의된 패키지 이름 대신 테스트 애플리케이션 ID를 기반으로 하는 네임스페이스를 가진 테스트 APK를 위한 R 클래스를 생성합니다.

패키지 이름 변경

프로젝트의 패키지 이름이 기본적으로 애플리케이션 ID와 일치할지라도 이를 변경할 수 있습니다. 하지만 패키지 이름을 변경하려는 경우에는 아래와 같이 (프로젝트 디렉토리 구조로 정의된 대로) 패키지 이름이 AndroidManifest.xml 파일의 package 특성과 항상 일치해야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:versionCode="1"
    android:versionName="1.0" >

Android 빌드 도구는 다음 두 가지 이유로 package 특성을 사용합니다.

이와 같이, package 특성에 있는 이름은 액티비티와 기타 앱 코드를 유지하는 프로젝트의 기본 패키지 이름과 항상 일치해야 합니다. 물론 프로젝트에 하위 패키지가 있을 수 있지만 그에 포함된 파일은 package 특성에서 네임스페이스를 사용하여 R.java 클래스를 가져와야 하고, 매니페스트에 선언된 모든 앱 구성 요소는 누락된 하위 패키지 이름을 추가하거나 정규화된 패키지 이름을 사용해야 합니다.

패키지 이름을 완전히 리팩터링하려면 package 특성도 업데이트해야 합니다. Android Studio의 도구를 사용하여 패키지 이름을 바꾸고 리팩터링하는 한, 패키지는 자동으로 동기화된 상태로 유지됩니다. (동기화된 상태로 유지되지 않으면 R 클래스가 더 이상 같은 패키지에 있지 않으므로 앱 코드가 이 클래스를 확인할 수 없고, 매니페스트가 액티비티나 다른 구성 요소를 식별하지 못합니다.)

프로젝트의 기본 AndroidManifest.xml 파일에 package 특성을 항상 지정해야 합니다. 예를 들어, 제품 버전이나 빌드 유형에 대해 추가적인 매니페스트 파일이 있는 경우에는 우선순위가 가장 높은 매니페스트 파일을 통해 제공되는 패키지 이름을 최종적으로 병합된 매니페스트에 항상 사용한다는 점에 유의하세요. 자세한 정보는 여러 매니페스트 파일 병합을 참조하세요.

한 가지 더 알아둘 점: 매니페스트 package와 Gradle applicationId의 이름이 다를 수 있지만, 빌드 도구는 빌드 종료 시 애플리케이션 ID를 APK의 최종 매니페스트 파일로 복사합니다. 따라서 빌드 후에 AndroidManifest.xml 파일을 검사할 때 package 특성이 변경되었다는 점에 놀라지 마세요. package 특성은 Google Play Store와 Android 플랫폼이 앱을 식별하기 위해 실제로 살펴보는 대상이므로, 빌드에서 원래 값을 사용하여 R 클래스에 네임스페이스를 지정하고 매니페스트 클래스 이름을 확인하고 나면 원래 값을 버리고 애플리케이션 ID로 대체합니다.

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)