출시용 라이브러리 준비

이 페이지에서는 Android Gradle 플러그인(AGP)을 사용하여 게시용 Android 라이브러리 프로젝트를 준비하는 데 필요한 속성과 옵션을 설명합니다. 라이브러리를 만들기 시작할 때 이러한 속성 중 일부를 설정했더라도 다음 안내를 검토하여 설정을 최적화하세요.

네임스페이스 선택

Android 라이브러리는 리소스가 컴파일될 때 고유한 R 클래스를 생성할 수 있도록 네임스페이스를 선언해야 합니다. 이 네임스페이스는 라이브러리의 루트 클래스 패키지와 거의 일치해야 합니다. 그래야 사용자가 라이브러리 및 그 R 클래스에서 일반 클래스를 가져올 때 혼란을 피할 수 있습니다.

AGP 7.0부터는 다음 코드 예와 같이 앱의 build.gradle 파일에서 네임스페이스를 설정할 수 있습니다.

Groovy

android {
  namespace = 'com.example.library'
}

Kotlin

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

네임스페이스는 개발자 대상의 라이브러리 속성입니다. 이는 applicationId 속성을 사용하여 설정되는 애플리케이션 ID와는 관련이 없습니다.

이전 버전의 AGP에서는 applicationId 속성(앱)과 namespace 속성(라이브러리) 모두 매니페스트의 package 속성을 사용하여 설정할 수 있었기 때문에 혼란이 발생했습니다.

minSdkVersion 값 선택

라이브러리의 minSdkVersion을 선택하는 것은 라이브러리 게시에서 중요한 부분입니다. minSdkVersion은 코드에서 지원할 수 있는 Android의 최소 버전을 반영해야 합니다.

minSdkVersion을 선택할 때 다음 고려사항에 유의하세요.

  • 일반적으로 낮은 minSdkVersion을 선택하면 라이브러리를 더 광범위하게 배포할 수 있습니다.

    라이브러리의 코드는 보통 앱이 코드를 명시적으로 호출하지 않는 한 실행되지 않습니다. 라이브러리를 호출하기 전에 런타임 검사를 실행하여 라이브러리 종속 항목에서 요구하는 버전보다 더 낮은 버전의 Android에서 앱을 실행할 수 있습니다(라이브러리가 핵심 앱 기능에 필수가 아닌 경우). 따라서 앱에 삽입할 수 있고 가능한 경우 호출할 수 있을 만큼 라이브러리의 minSdkVersion을 낮게 설정하면 더 많은 사용자에게 도달할 수 있습니다.

  • 높은 minSdkVersion을 선택하면 애플리케이션이 라이브러리를 포함하지 못할 수도 있습니다.

    앱과 종속 항목의 매니페스트 파일을 병합하는 AGP 단계인 매니페스트 병합에서는 앱보다 minSdkVersion이 높은 종속 항목이 없도록 합니다.

  • 높은 minSdkVersion을 선택하면 앱 개발자에게 매니페스트 병합 안전 확인을 사용 중지하라는 메시지가 표시될 수 있으며 이 경우 빌드 프로세스 후반에 문제가 발생합니다.

    매니페스트 병합은 앱 프로젝트가 앱 자체보다 minSdkVersion이 높은 라이브러리를 포함하지 못하도록 하기 때문에 앱 개발자는 빌드 오류를 최소화하기 위해 매니페스트 병합의 안전 확인을 중지할 수 있습니다. 하지만 이 경우 나중에 실제 비호환성 문제가 발생할 위험이 있습니다.

  • 라이브러리의 매니페스트에 broadcast receiver 또는 코드가 자동으로 트리거되는 다른 메커니즘이 포함된 특수한 경우에는 높은 minSdkVersion을 선택해야 할 수 있습니다.

    이러한 경우 minSdkVersion을 높게 선택하면 코드 실행이 보장됩니다. 또는 자동화된 동작을 사용 중지하여 앱이 안전 확인을 마친 후에 라이브러리를 실행하도록 선택할 수 있게 하는 방법도 있습니다.

앱에 삽입을 허용하려면 라이브러리에서 RequiresApi 주석을 사용하여 호출자에 런타임 검사를 해야 한다고 표시합니다. Android 린트는 검사에 RequiresApi 정보를 사용합니다. 주석을 사용하여 API 코드와 API를 개선하는 방법에 관한 자세한 내용은 주석으로 코드 검사 개선을 참고하세요.

AAR 메타데이터 설정

Android 라이브러리는 Android 보관 파일(AAR) 형식으로 패키징됩니다. AAR 메타데이터는 AGP가 라이브러리를 소비하는 데 도움이 되는 속성으로 구성됩니다. 호환되지 않는 구성에서 라이브러리를 소비하고 AAR 메타데이터가 설정된 경우 사용자가 문제를 해결할 수 있도록 오류 메시지가 표시됩니다.

minCompileSdk 값 선택

버전 4.1부터 AGP는 minCompileSdk를 지원합니다. 이 값은 소비하는 프로젝트에서 사용할 수 있는 최소 compileSdk를 나타냅니다. 라이브러리에 최신 플랫폼 속성을 사용하는 매니페스트 항목이나 리소스가 포함되어 있으면 이 값을 설정해야 합니다.

minCompileSdk 값은 모듈 수준 build.gradle 파일의 defaultConfig{}, productFlavors{}, buildTypes{} 블록에서 설정할 수 있습니다.

Groovy

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    foo {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

Kotlin

android {
  defaultConfig {
    aarMetadata {
      minCompileSdk = 29
    }
  }
  productFlavors {
    register("foo") {
      ...
      aarMetadata {
        minCompileSdk = 30
      }
    }
  }
}

여러 위치에서 minCompileSdk를 설정하면 Gradle은 빌드 프로세스 중에 다음과 같이 설정 위치의 우선순위를 지정합니다.

  1. buildTypes{}

  2. productFlavors{}

  3. defaultConfig{}

앞의 예에서는 minCompileSdkdefaultConfig{}productFlavors{}에서 모두 정의되고 productFlavors{}에 우선순위가 지정되며 minCompileSdk는 30으로 설정됩니다.

Gradle이 코드와 리소스를 조합할 때 설정의 우선순위를 정하는 방법을 자세히 알아보려면 소스 세트로 빌드를 참고하세요.

테스트 픽스처 사용 설정

테스트 픽스처는 테스트할 코드를 설정하거나 구성요소 테스트를 원활히 하기 위해 흔히 사용됩니다. 버전 7.1부터 AGP는 애플리케이션 및 동적 기능 프로젝트 외에도 라이브러리 프로젝트용 테스트 픽스처를 만들 수 있습니다.

다른 사용자가 사용할 라이브러리를 게시할 때는 API용 테스트 픽스처를 만드는 것이 좋습니다. 테스트 픽스처는 모듈 수준 build.gradle 파일에서 사용 설정할 수 있습니다.

Groovy

android {
  testFixtures {
    enable = true
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

테스트 픽스처를 사용 설정하면 Gradle은 테스트 픽스처를 작성할 수 있는 src/testFixtures 소스 세트를 자동으로 만듭니다.

자세한 내용은 테스트 픽스처 사용에 관한 Gradle 문서를 참고하세요.