앱 모듈 구성

이 페이지에서는 모듈 수준 build.gradle.kts 파일의 유용한 앱 설정을 설명합니다. build.gradle.kts 파일에 설정된 중요한 속성의 개요 외에도 다음을 수행하는 방법을 알아보세요.

  • 여러 빌드 구성을 위해 애플리케이션 ID 변경
  • 애플리케이션 ID와 관계없이 안전하게 네임스페이스 조정

애플리케이션 ID 설정

모든 Android 앱에는 com.example.myapp과 같이 자바 또는 Kotlin 패키지 이름처럼 보이는 고유한 애플리케이션 ID가 있습니다. 이 ID로 기기와 Google Play 스토어에서 앱을 고유하게 식별할 수 있습니다.

아래에 나오는 것처럼 애플리케이션 ID는 모듈의 build.gradle.kts 파일에 applicationId 속성으로 정의됩니다. com.example.myapp를 앱 ID로 바꿔 applicationId 값을 업데이트합니다.

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Groovy

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

애플리케이션 ID가 기존의 Kotlin 또는 Java 패키지 이름과 같아 보여도 애플리케이션 ID의 명명 규칙은 다음과 같이 좀 더 제한적입니다.

  • 애플리케이션 ID는 두 개 이상의 세그먼트(한 개 이상의 점)로 구성해야 합니다.
  • 각 세그먼트는 문자로 시작해야 합니다.
  • 모든 문자는 영숫자나 밑줄[a~z, A~Z, 0~9 또는 _]이어야 합니다.

Android 스튜디오에서 새 프로젝트를 생성하면 applicationId에는 설정 과정 중에 선택한 패키지 이름이 자동으로 할당됩니다. 그 이후 두 가지 속성을 독립적으로 전환할 수는 있지만 이는 권장되지 않습니다.

애플리케이션 ID를 설정할 때는 다음을 실행하는 것이 좋습니다.

  • 애플리케이션 ID를 네임스페이스와 동일하게 유지합니다. 두 속성의 차이가 약간 혼란스러울 수 있지만 동일하게 유지한다면 아무것도 걱정할 필요가 없습니다.
  • 앱을 게시한 후에는 애플리케이션 ID를 변경하지 마세요. 변경하면 Google Play 스토어에서 후속 업로드를 새 앱으로 간주합니다.
  • 애플리케이션 ID를 명시적으로 정의합니다. applicationId 속성을 사용하여 애플리케이션 ID가 명시적으로 정의되지 않으면 자동으로 네임스페이스와 동일한 값이 사용됩니다. 즉, 네임스페이스를 변경하면 애플리케이션 ID가 변경되는데 이는 일반적으로 바람직하지 않습니다.

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

기본적으로 빌드 도구에서는 지정된 빌드 변형의 애플리케이션 ID에 .test를 추가하여 계측 테스트 APK에 애플리케이션 ID를 적용합니다. 예를 들어 com.example.myapp.free 빌드 변형의 테스트 APK는 애플리케이션 ID가 com.example.myapp.free.test입니다.

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

네임스페이스 설정

모든 Android 모듈에는 생성된 RBuildConfig 클래스의 Kotlin 또는 Java 패키지 이름으로 사용되는 네임스페이스가 있습니다.

다음 코드 스니펫에 나오는 것처럼 네임스페이스는 모듈의 build.gradle.kts 파일에 namespace 속성으로 정의됩니다. 처음에는 namespace프로젝트를 생성할 때 선택한 패키지 이름으로 설정됩니다.

Kotlin

android {
    namespace = "com.example.myapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    ...
}

앱을 최종 애플리케이션 패키지(APK)로 빌드하는 동안 Android 빌드 도구는 네임스페이스를 앱에서 생성된 R 클래스(앱 리소스에 액세스하는 데 사용됨)의 네임스페이스로 사용합니다. 예를 들어 위의 빌드 파일에서 R 클래스는 com.example.myapp.R에 생성됩니다.

build.gradle.kts 파일의 namespace 속성에 설정한 이름은 활동 및 기타 앱 코드를 유지하는 프로젝트의 기본 패키지 이름과 항상 일치해야 합니다. 프로젝트에 다른 하위 패키지가 있을 수도 있지만, 해당 파일들은 namespace 속성의 네임스페이스를 사용하여 R 클래스를 가져와야 합니다.

더 간단한 워크플로를 위해 네임스페이스를 애플리케이션 ID와 기본적으로 동일하게 유지합니다.

네임스페이스 변경

대부분의 경우 네임스페이스와 애플리케이션 ID는 기본적으로 동일하게 유지해야 합니다. 그러나 코드를 재구성하거나 네임스페이스 충돌을 방지하기 위해 특정 시점에 네임스페이스를 변경해야 할 수도 있습니다.

이러한 경우에는 애플리케이션 ID와 관계없이 모듈의 build.gradle.kts 파일에서 namespace 속성을 업데이트하여 네임스페이스를 변경합니다. 이렇게 하려면 애플리케이션 ID가 명시적으로 정의되어 있어야 합니다. 그래야 네임스페이스를 변경해도 애플리케이션 ID가 똑같이 변경되지 않습니다. 네임스페이스가 애플리케이션 ID에 미치는 영향에 관한 자세한 내용은 애플리케이션 ID 설정을 참고하세요.

namespace와 Gradle applicationId의 이름이 서로 다른 경우 빌드 도구는 빌드가 종료될 때 앱의 최종 매니페스트 파일에 애플리케이션 ID를 복사합니다. 따라서 빌드 후 AndroidManifest.xml 파일을 검사하면 package 속성이 애플리케이션 ID로 설정됩니다. 병합된 매니페스트의 package 속성은 Google Play 스토어와 Android 플랫폼이 실제로 앱을 식별하기 위한 것입니다.

테스트를 위한 네임스페이스 변경

androidTesttest 소스 세트의 기본 네임스페이스는 끝에 .test가 추가된 기본 네임스페이스입니다. 예를 들어 build.gradle 파일의 namespace 속성이 com.example.myapp이면 테스트 네임스페이스는 기본적으로 com.example.myapp.test로 설정됩니다. 테스트를 위해 네임스페이스를 변경하려면 다음 코드 스니펫과 같이 testNamespace 속성을 사용하세요.

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

주의: testNamespacenamespace를 동일한 값으로 설정하지 마세요. 동일한 값으로 설정하면 네임스페이스 충돌이 발생합니다.

테스트에 관한 자세한 내용은 Android에서 앱 테스트를 참고하세요.