Android Gradle 플러그인 3.4.0(2019년 4월)

이 버전의 Android 플러그인에는 다음이 필요합니다.

3.4.3(2020년 7월)

이번 소규모 업데이트에서는 Android 11의 패키지 공개 상태와 관련된 새로운 기본 설정 및 기능과의 호환성을 지원합니다.

자세한 내용은 4.0.1 출시 노트를 참고하세요.

3.4.2(2019년 7월)

이번 소규모 업데이트는 Android 스튜디오 3.4.2를 지원하고 다양한 버그 수정 및 성능 개선을 포함합니다. 중요한 버그 수정 목록을 보려면 업데이트 출시 블로그에서 관련 게시물을 읽어보세요.

3.4.1(2019년 5월)

이번 소규모 업데이트는 Android 스튜디오 3.4.1을 지원하고 다양한 버그 수정 및 성능 개선을 포함합니다. 중요한 버그 수정 목록을 보려면 업데이트 출시 블로그에서 관련 게시물을 읽어보세요.

새로운 기능

  • 새로운 린트 검사 종속 항목 구성: lintChecks 동작이 변경되고 새로운 종속 항목 구성인 lintPublish가 도입되어 Android 라이브러리에 어떤 린트 검사가 패키징되는지 더 효과적으로 제어할 수 있습니다.

    • lintChecks: 프로젝트를 로컬로 빌드할 때만 실행하려는 린트 검사에 사용해야 하는 기존 구성입니다. 이전에는 lintChecks 종속 항목 구성을 사용하여 게시된 AAR에 린트 검사를 포함했다면 종속 항목을 이전하여 아래에 설명된 새로운 lintPublish 구성을 대신 사용해야 합니다.
    • lintPublish: 게시된 AAR에 포함하려는 린트 검사를 위해 다음과 같이 라이브러리 프로젝트에서 이 새로운 구성을 사용합니다. 라이브러리를 사용하는 프로젝트도 린트 검사를 적용하게 됩니다.

    다음 코드 샘플은 로컬 Android 라이브러리 프로젝트에서 두 가지 종속 항목 구성을 모두 사용합니다.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • 일반적으로 패키징 및 서명 작업의 전반적인 빌드 속도가 개선됩니다. 이러한 작업과 관련하여 성능 저하를 발견한 경우 버그를 신고하세요.

동작 변경사항

  • Android 인스턴트 앱의 Feature 플러그인 지원 중단 경고: 인스턴트 앱 빌드를 위해 com.android.feature 플러그인을 여전히 사용하고 있다면 Android Gradle 플러그인 3.4.0이 지원 중단 경고를 보냅니다. 이후 버전의 플러그인에서 인스턴트 앱을 계속 빌드할 수 있도록 하려면 단일 Android App Bundle에서 설치된 앱 환경과 인스턴트 앱 환경 두 가지를 모두 게시할 수 있는 동적 기능 플러그인을 사용하여 인스턴트 앱을 이전하세요.

  • 기본적으로 사용 설정되는 R8: R8은 디슈가링, 축소, 난독화, 최적화, 덱싱 등을 모두 한 단계로 통합하여 빌드 성능을 눈에 띄게 개선합니다. R8은 Android Gradle 플러그인 3.3.0에서 도입되었으며 이제 플러그인 3.4.0 이상을 사용하는 앱 및 Android 라이브러리 프로젝트 모두에서 기본적으로 사용 설정됩니다.

아래 이미지는 R8이 도입되기 전의 컴파일 프로세스를 개략적으로 보여줍니다.

R8 이전에는 ProGuard가 덱싱 및 디슈가링과 다른 컴파일 단계였습니다.

이제 R8을 사용하면 아래 그림과 같이 디슈가링, 축소, 난독화, 최적화, 덱싱(D8)이 모두 한 단계로 완료됩니다.

R8에서는 디슈가링, 축소, 난독화, 최적화, 덱싱이 모두 하나의 컴파일 단계에서 실행됩니다.

주의사항: R8은 기존 ProGuard 규칙과 호환하도록 설계되었으므로 별다른 조치를 취하지 않아도 R8을 활용할 수 있습니다. 그러나 R8은 Android 프로젝트용으로 특별히 설계된 ProGuard와는 다른 기술이기 때문에 ProGuard와는 달리 축소 및 최적화로 인해 코드가 삭제될 수 있습니다. 드문 경우이긴 하지만 코드가 삭제되면 코드를 빌드 출력에 유지하기 위해 규칙을 추가해야 할 수도 있습니다.

R8을 사용하는 동안 문제가 발생하면 R8 호환성 FAQ를 읽고 문제 해결 방법이 있는지 확인하세요. 해결 방법이 문서화되어 있지 않으면 버그를 신고하세요. 프로젝트의 gradle.properties 파일에 다음 줄 중 하나를 추가하여 R8을 사용 중지할 수 있습니다.

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

참고: 주어진 빌드 유형의 경우 앱 모듈의 build.gradle 파일에서 useProguardfalse로 설정하면 프로젝트의 gradle.properties 파일에서 R8의 사용 중지 여부와 상관없이 Android Gradle 플러그인이 R8을 사용하여 빌드 유형의 앱 코드를 축소합니다.

  • ndkCompile 지원이 중단됨: 이제 ndkBuild를 사용하여 기본 라이브러리를 컴파일하려고 하면 빌드 오류가 발생합니다. 프로젝트에 C 및 C++ 코드를 추가하려면 대신 CMake 또는 ndk-build를 사용해야 합니다.

알려진 문제

  • 고유한 패키지 이름의 올바른 사용법은 현재 적용되지 않지만 이후 버전의 플러그인에서 엄격하게 적용될 예정입니다. Android Gradle 플러그인 버전 3.4.0에서는 아래 줄을 gradle.properties 파일에 추가하여 프로젝트가 허용되는 패키지 이름을 선언하는지 여부를 검사하도록 선택할 수 있습니다.

              android.uniquePackageNames = true
              
            

    Android Gradle 플러그인을 통한 패키지 이름 설정에 관해 자세히 알아보려면 애플리케이션 ID 설정을 참고하세요.