본문 바로가기
카테고리 없음

possible to change application ID in android

by 테크한스 2018. 6. 8.
반응형


https://developer.android.com/studio/build/application-id?hl=ko



애플리케이션 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에 대한 명명 규칙은 다음과 같이 좀 더 제한적입니다.

  • 이름은 두 개 이상의 부분(한 개 이상의 점)으로 구성해야 합니다.
  • 각 부분은 문자로 시작해야 합니다.
  • 모든 문자는 영숫자나 밑줄[a~z, A~Z, 0~9 또는 _]이어야 합니다.

참고: 애플리케이션 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 클래스를 생성합니다.


반응형