Gradle 빌드 개요

Android 애플리케이션은 일반적으로 Gradle 빌드를 사용하여 빌드됩니다. 있습니다. 빌드를 구성하는 방법을 자세히 살펴보기 전에 먼저 빌드 이면의 개념을 살펴보고 시스템 전체를 볼 수 있도록 합니다.

빌드란 무엇인가요?

빌드 시스템은 소스 코드를 실행 가능한 애플리케이션으로 변환합니다. 빌드에는 대개 개발된 API를 분석, 컴파일, 연결 및 패키징하기 위해 실행할 수 있습니다 Gradle은 작업 기반 접근 방식을 사용하여 살펴보겠습니다

태스크는 입력을 출력됩니다. 플러그인은 태스크와 해당 구성을 정의합니다. 적용 중 빌드에 대한 플러그인은 작업을 등록하고 학습합니다. 예를 들어 Android Gradle 플러그인 (AGP)을 적용합니다. APK를 빌드하는 데 필요한 모든 작업을 등록하거나 Android 라이브러리. java-library 플러그인을 사용하면 Java 소스에서 jar을 빌드할 수 있습니다. 생성합니다. Kotlin 및 다른 언어에도 유사한 플러그인이 있지만 다른 플러그인입니다. 플러그인을 확장하기 위한 것입니다. 예를 들어 protobuf 플러그인은 AGP 또는 java-library와 같은 기존 플러그인에 대한 protobuf 지원

Gradle은 구성보다 규칙을 선호하므로 플러그인이 적합합니다. 기본값을 제공하지만, 선언적 도메인별 언어 (DSL) DSL은 빌드하는 방법이 아닌 빌드할 대상을 지정할 수 있습니다. 인코더-디코더 아키텍처를 플러그인이 '방법'을 관리합니다. 이 구성은 프로젝트 (및 하위 프로젝트)에서 빌드 파일

작업 입력은 파일과 디렉터리는 물론 Java 유형 (정수, 문자열, 커스텀 클래스) 출력은 디렉터리만 될 수 있습니다. 디스크에 기록되어야 하기 때문입니다. 작업 출력을 다른 작업을 서로 연결하여 한 작업을 다른 작업보다 먼저 실행해야 합니다.

Gradle은 빌드에서 임의의 코드 및 작업 선언 작성을 지원하지만 이렇게 하면 도구가 빌드를 이해하고 몇 가지 리소스를 제공합니다 예를 들어 플러그인 내에서 코드 테스트를 작성할 수 있습니다. 빌드 파일에서는 그렇지 않습니다 대신, 빌드 로직과 작업을 제한해야 합니다. (본인 또는 타인이 정의하는) 플러그인에 대한 선언과 빌드 파일에서 해당 로직을 사용하려는 것입니다.

Gradle 빌드가 실행되면 어떻게 되나요?

Gradle 빌드는 3단계로 실행됩니다. 이러한 각 단계는 서로 다른 부분을 실행합니다. 빌드 파일에 정의된 코드의 구성요소를 포함합니다.

  • 초기화는 빌드 파일을 포함하는 클래스 경로를 설정하고 사용합니다. 이 단계에서는 프로젝트를 선언하는 설정 파일에 중점을 둡니다. 플러그인과 라이브러리를 가져올 위치를 지정할 수 있습니다.
  • 구성은 각 프로젝트의 작업을 등록하고 빌드를 실행합니다. 파일을 사용하여 사용자의 빌드 사양을 적용합니다. 중요한 점은 구성 코드가 생성된 데이터나 파일에 실행할 수 있습니다
  • 실행은 실제 '빌드'를 실행합니다. 애플리케이션의 성능을 극대화할 수 있습니다 출력 태스크의 방향성 비순환 그래프 (DAG)입니다. 사용자가 요청한 모든 필수 빌드 단계( 작업(30주)에 도달할 수 있습니다. 이 그래프는 태스크 간의 관계를 나타냅니다. 태스크 간의 관계를 나타냅니다. 선언적 또는 입력과 출력에 따라 달라집니다. 태스크에 다른 작업의 출력인 경우 다른 작업 이후에 실행되어야 합니다. 이 단계는 그래프에 정의된 순서대로 오래된 작업을 실행합니다. 태스크가 마지막 실행 이후 입력이 변경되지 않은 경우 Gradle은 이를 건너뜁니다.

자세한 내용은 Gradle 빌드 수명 주기를 참고하세요.

구성 DSL

Gradle은 도메인별 언어 (DSL)를 사용하여 살펴보겠습니다 이러한 선언적 접근 방식은 데이터 할당보다는 데이터를 지정하는 데 중점을 둡니다 단계별 (명령형) 지침을 작성하는 법을 배우게 됩니다.

DSL은 모든 사람, 도메인 전문가 및 프로그래머가 간단한 언어를 정의하여 프로젝트에 기여할 수 있고, 방법을 찾게 될 것입니다. Gradle 플러그인은 DSL을 확장하여 리소스를 제공합니다

예를 들어 빌드의 Android 부분을 구성하는 방법은 다음과 같습니다.

Kotlin

android {
    namespace = "com.example.app"
    compileSdk = 34
    // ...

    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 34
        // ...
    }
}

Groovy

android {
    namespace 'com.example.myapplication'
    compileSdk 34
    // ...

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdk 24
        // ...
    }
}

내부적으로 DSL 코드는 다음과 유사합니다.

fun Project.android(configure: ApplicationExtension.() -> Unit) {
    ...
}

interface ApplicationExtension {
    var compileSdk: Int
    var namespace: String?

    val defaultConfig: DefaultConfig

    fun defaultConfig(configure: DefaultConfig.() -> Unit) {
        ...
    }
}

DSL의 각 블록은 람다를 사용하여 구성하고 액세스할 수 있는 동일한 이름의 속성이 있어야 합니다. 이렇게 하면 코드가 데이터 사양처럼 느껴집니다.

외부 종속 항목

Maven 빌드 시스템에는 종속 항목 사양이 도입되었습니다. 스토리지 및 관리 시스템입니다. 라이브러리는 저장소 (서버 또는 디렉터리): 다른 라이브러리에 있는 이들의 버전 및 종속 항목을 확인할 수 있습니다 원하는 사용할 종속 항목 버전, 빌드 시스템은 빌드 중에 이를 다운로드합니다.

Maven 아티팩트는 그룹 이름 (회사, 개발자 등), 아티팩트로 식별됨 아티팩트의 이름 (라이브러리의 이름)과 버전 이는 일반적으로 group:artifact:version로 표시됩니다.

이 접근 방식은 빌드 관리를 크게 개선합니다. 여러분은 종종 "Maven 저장소"라고 하는 저장소가 있지만 이 모든 것이 이 모든 것이 패키징 및 게시됩니다 이러한 저장소와 메타데이터는 여러 빌드 시스템에서 재사용할 수 있으며, Gradle은 확인할 수 있습니다. 공개 저장소를 사용하면 모든 사람이 공유할 수 있습니다. 사내에 내부 종속 항목을 유지합니다.

프로젝트를 하위 프로젝트모듈화할 수도 있습니다. (Android 스튜디오에서는 '모듈'이라고도 함) 종속 항목이 포함됩니다 각 하위 프로젝트는 하위 프로젝트 또는 최상위 프로젝트에서 사용하는 하위 프로젝트입니다. 이렇게 하면 빌드 시간을 개선할 수 있습니다. 재건해야 할 부분을 격리시키고, 재조립해야 할 부분을 책임을 다해야 합니다

종속 항목을 지정하는 방법은 빌드 추가 종속 항목에 대해 자세히 알아보세요.

빌드 변형

Android 애플리케이션을 만들 때는 일반적으로 변형입니다. 변형은 다른 코드를 포함하거나, 다른 스크립트로 빌드됩니다. 빌드 유형과 제품 버전으로 구성됩니다.

빌드 유형은 선언된 빌드 옵션에 따라 다릅니다. 기본적으로 AGP는 '출시'를 설정합니다. 'debug'를 선택하겠습니다. 빌드 유형이지만 조정하고 더 추가할 수 있습니다 (예: 스테이징 또는 내부 테스트)에 사용합니다.

디버그 빌드는 애플리케이션을 축소하거나 난독화하지 않으므로 모든 기호를 있는 그대로 빌드하고 보존합니다. 또한 애플리케이션이 일반 디버그 키로 서명하고 애플리케이션 파일을 찾습니다. 이렇게 하면 파일 및 데이터베이스에 저장된 데이터.

출시 빌드는 애플리케이션을 최적화하고 릴리스 키로 애플리케이션에 서명합니다. 설치된 애플리케이션 파일을 보호하는 역할을 합니다

제품 버전을 사용하면 포함된 소스와 종속 항목을 변경할 수 있습니다. 변형입니다. 예를 들어 'demo'라는 단어를 및 'full' 'free' 다양한 맛을 '유료' 있습니다. 'main'에 공통 소스를 작성합니다. source set 디렉터리 맛에 따라 이름이 지정된 소스 세트에 소스를 재정의하거나 추가합니다.

AGP는 빌드 유형과 제품 버전의 각 조합에 맞는 변형을 생성합니다. 만약 버전을 정의하지 않는 경우 변형은 빌드 유형에 따라 이름이 지정됩니다. 만약 둘 다 정의하면 변형의 이름은 <flavor><Buildtype>로 지정됩니다. 예를 들어 빌드가 releasedebug 유형, 버전 demofull, AGP가 대안:

  • demoRelease
  • demoDebug
  • fullRelease
  • fullDebug

다음 단계

빌드 개념을 살펴봤으니 이제 Android 빌드 구조를 구성합니다.