Android 용 Gradle 마스터 링 : Gradle 작업 및 Kotlin

작가: Lewis Jackson
창조 날짜: 11 할 수있다 2021
업데이트 날짜: 1 칠월 2024
Anonim
Степан Гончаров — Gradle от A до Я
동영상: Степан Гончаров — Gradle от A до Я

콘텐츠


Java, XML 또는 Kotlin 대신 이러한 Gradle 빌드 파일은 Groovy 기반 DSL (Domain-Specific Language)을 사용합니다. Groovy에 익숙하지 않다면, 각 Gradle 빌드 파일을 한 줄씩 살펴볼 것이므로이 기사를 마치면 간단한 Groovy 코드를 읽고 작성하는 것이 편할 것입니다.

Gradle은 최소한의 수동 구성으로 자주 사용할 수있는 기본 설정 세트를 제공하여 삶을 편하게 만드는 것을 목표로합니다. 프로젝트를 빌드 할 준비가되면 Android Studio의 "실행"버튼을 누르면 Gradle이 빌드 프로세스를 시작합니다. 당신을 위해.

Gradle의 "컨벤션 오버 컨벤션 (convention over configuration)"접근 방식에도 불구하고, 기본 설정이 사용자 요구를 충족시키지 못하면 빌드 프로세스를 사용자 정의, 구성 및 확장하고 Gradle 설정을 조정하여 매우 구체적인 작업을 수행 할 수 있습니다.

Gradle 스크립트는 자체 파일에 포함되어 있으므로 애플리케이션의 소스 코드를 건드리지 않고도 언제든지 애플리케이션의 빌드 프로세스를 수정할 수 있습니다. 이 자습서에서는 맛, 빌드 변형 및 사용자 정의 Gradle 작업을 사용하여 빌드 프로세스를 수정합니다. 이제까지 애플리케이션 코드를 터치합니다.

Gradle 빌드 파일 탐색

프로젝트를 만들 때마다 Android Studio는 동일한 Gradle 빌드 파일 모음을 생성합니다. 기존 프로젝트를 Android Studio로 가져 오더라도 아직도 이 동일한 Gradle 파일을 생성하여 프로젝트에 추가하십시오.


Gradle 및 Groovy 구문에 대한 이해를 높이기 위해 각 Android의 Gradle 빌드 파일을 한 줄씩 살펴 보겠습니다.

1. settings.gradle

settings.gradle 파일은“include”키워드를 사용하여 이름으로 모든 애플리케이션 모듈을 정의하는 위치입니다. 예를 들어 "app"및 "secondModule"로 구성된 프로젝트가있는 경우 settings.gradle 파일은 다음과 같습니다.

: app, : secondmodule rootProject.name = MyProject 포함

프로젝트의 크기에 따라이 파일은 상당히 길 수 있습니다.

빌드 프로세스 중에 Gradle은 프로젝트 settings.gradle 파일의 내용을 검사하고 빌드 프로세스에 포함해야하는 모든 모듈을 식별합니다.

2. build.gradle (프로젝트 레벨)

프로젝트 레벨 build.gradle 파일은 프로젝트의 루트 디렉토리에 있으며 적용 할 설정이 포함되어 있습니다. 모든 모듈 (Gradle의 "프로젝트"라고도 함).

이 파일을 사용하여 Android 프로젝트 전체의 모든 모듈에 적용되는 플러그인, 저장소, 종속성 및 구성 옵션을 정의해야합니다. 프로젝트 레벨 build.gradle 파일 내에서 Gradle 작업을 정의한 경우 해당 모듈을 편집하여 개별 모듈에 대해 이러한 작업을 재정의하거나 확장 할 수 있습니다. 모듈 수준 build.gradle 파일.

일반적인 프로젝트 레벨 build.gradle 파일은 다음과 같습니다.

buildscript {리포지토리 {google () jcenter ()} 종속성 {classpath com.android.tools.build:gradle:3.5.0-alpha06 // 참고 : 애플리케이션 종속성을 여기에 두지 마십시오. 그것들은 // 개별 모듈 build.gradle 파일에 속한다}} allprojects {repositories {google () jcenter ()}} task clean (type : Delete) {delete rootProject.buildDir}

이 프로젝트 레벨 build.gradle 파일은 다음 블록으로 나뉩니다.


  • 빌드 스크립트. 여기에는 빌드를 수행하는 데 필요한 설정이 포함됩니다.
  • 리포지토리. Gradle은 프로젝트의 종속성을 찾아 빌드에서 사용할 수 있도록합니다. 그러나 모든 종속성이 동일한 저장소에서 제공되는 것은 아니므로 프로젝트의 종속성을 검색하려면 Gradle에서 검색해야하는 모든 저장소를 정의해야합니다.
  • 의존성. 이 섹션에는 플러그인 종속성이 포함되어 있으며 로컬 캐시에 다운로드되어 저장됩니다. 당신은해야 아니 이 블록 내에서 모듈 종속성을 정의하십시오.
  • 모든 프로젝트. 여기에서 사용할 수있는 리포지토리를 정의합니다. 모든 프로젝트 모듈의

3. build.gradle (모듈 수준)

이 파일은 프로젝트 전체의 모든 모듈에있는 모듈 수준 build.gradle 파일입니다. Android 프로젝트가 여러 개의 모듈로 구성된 경우 여러 개의 모듈 수준 build.gradle 파일로 구성됩니다.

각 모듈 수준 build.gradle 파일에는 프로젝트의 패키지 이름, 버전 이름 및 버전 코드와이 특정 모듈의 최소 및 대상 SDK가 포함되어 있습니다.

모듈 수준 build.gradle 파일에는 고유 한 빌드 지침 및 종속성 세트가있을 수도 있습니다. 예를 들어 Wear OS 구성 요소를 사용하여 애플리케이션을 만드는 경우 Android Studio 프로젝트는 별도의 스마트 폰 / 태블릿 모듈과 Wear 모듈로 구성됩니다. 완전히 다른 기기를 대상으로하기 때문에이 모듈은 크게 다릅니다. 의존성!

기본 모듈 수준 build.gradle 파일은 일반적으로 다음과 같습니다.

플러그인 적용 : com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.speechtotext"minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"} buildTypes {release {minifyEnabled false proguardFiles getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} 종속성 {구현 fileTree (dir : libs, include :) 구현 androidx.appcompat : appcompat : 1.0.2 구현 androidx.constraintlayout : constraintlayout : 1.1. 3 테스트 구현 junit : junit : 4.12 androidTestImplementation androidx.test.ext : junit : 1.1.0 androidTestImplementation androidx.test.espresso : espresso-core : 3.1.1}

각 섹션을 자세히 살펴 보겠습니다.

  • 플러그인을 적용하십시오. 이 모듈을 빌드하는 데 필요한 플러그인 목록입니다. com.android.application 플러그인은 Android 특정 빌드 프로세스를 설정하는 데 필요하므로 자동으로 추가됩니다.
  • 기계적 인조 인간. 여기에서 모든 모듈의 플랫폼 별 옵션을 배치해야합니다.
  • compileSdkVersion. 이것이이 모듈이 컴파일되는 API 레벨입니다. 이 값보다 높은 API의 기능은 사용할 수 없습니다.
  • buildToolsVersion. 컴파일러 버전을 나타냅니다. Gradle 3.0.0 이상에서 buildToolsVersion은 선택 사항입니다. buildToolsVersion 값을 지정하지 않으면 Android Studio는 기본적으로 최신 버전의 빌드 도구를 사용합니다.
  • defaultConfig. 여기에는 디버그 및 릴리스 빌드와 같은 앱의 모든 빌드 버전에 적용되는 옵션이 포함되어 있습니다.
  • applicationId. 애플리케이션의 고유 식별자입니다.
  • minSdkVersion. 이 매개 변수는이 모듈이 지원하는 최저 API 레벨을 정의합니다.
  • targetSdkVersion. 애플리케이션이 테스트 된 최대 API 레벨입니다. 이상적으로는 최신 API를 사용하여 애플리케이션을 테스트해야합니다. 즉 targetSdkVersion 값은 항상 compileSdkVersion 값과 같습니다.
  • versionCode. 애플리케이션 버전의 숫자 값입니다.
  • versionName. 사용자 친화적 인 문자열로 응용 프로그램 버전을 나타냅니다.
  • buildTypes. 기본적으로 Android는 디버그 및 릴리스의 두 가지 빌드 유형을 지원합니다. “debug”및“release”블록을 사용하여 응용 프로그램의 유형별 설정을 지정할 수 있습니다.
  • 의존성. 여기에서이 모듈이 의존하는 라이브러리를 정의합니다.

프로젝트의 의존성 선언 : 로컬 라이브러리

하나 이상의 프로젝트 종속성을 추가하여 Android 프로젝트에서 추가 기능을 사용할 수 있습니다. 이러한 종속성은 로컬이거나 원격 저장소에 저장 될 수 있습니다.

로컬 JAR 파일에 대한 종속성을 선언하려면 해당 JAR을 프로젝트의 "libs"디렉토리에 추가해야합니다.

그런 다음 모듈 수준 build.gradle 파일을 수정하여이 파일에 대한 종속성을 선언 할 수 있습니다. 예를 들어, 여기에서는 "mylibrary"JAR에 대한 종속성을 선언합니다.

구현 파일 (libs / mylibrary.jar)

또는 "libs"폴더에 여러 개의 JAR이 포함 된 경우 프로젝트가 "libs"폴더 내에있는 모든 파일에 의존한다고 간단히 말하는 것이 더 쉬울 수 있습니다. 예를 들면 다음과 같습니다.

구현 fileTree (dir : libs, include :)

빌드 종속성 추가 : 원격 저장소

라이브러리가 원격 저장소에있는 경우 다음 단계를 완료해야합니다.

  • 이 종속성이있는 저장소를 정의하십시오.
  • 개별 의존성을 선언하십시오.

원격 저장소에 연결

첫 번째 단계는 Gradle에게 프로젝트의 모든 종속성을 검색하기 위해 확인해야 할 저장소 (또는 저장소)를 알려주는 것입니다. 예를 들면 다음과 같습니다.

리포지토리 {google () jcenter ()}}

여기서 "jcenter ()"줄은 Gradle이 bintray에서 호스팅되는 무료 공개 저장소 인 JCenter 저장소를 확인하도록합니다.

또는 귀하 또는 귀하의 조직이 개인 저장소를 유지 관리하는 경우이 저장소의 URL을 종속성 선언에 추가해야합니다. 저장소가 비밀번호로 보호 된 경우 다음과 같이 로그인 정보도 제공해야합니다.

저장소 {mavenCentral () maven {// 목표 URL 구성 // url "http://repo.mycompany.com/myprivaterepo"} maven {신임 정보 {username myUsername password myPassword} url "http://repo.mycompany.com / myprivaterepo "}

종속성이 여러 리포지토리에있는 경우 Gradle은 각 리포지토리의 기간 및 정적 버전과 같은 요소를 기반으로이 종속성의 "최상의"버전을 선택합니다.

원격 의존성 선언

다음 단계는 모듈 수준 build.gradle 파일에서 종속성을 선언하는 것입니다. 다음 중 하나를 사용하여이 정보를 "종속성"블록에 추가합니다.

  • 이행. 이것은 프로젝트를 빌드 할 때마다 필요한 일반적인 종속성입니다. "구현"의존성은 모든 당신의 빌드.
  • 테스트 구현. 이는 애플리케이션의 테스트 소스를 컴파일하고 JVM 기반 테스트를 실행하는 데 필요한 종속성입니다. 종속성을 "Testimplementation"으로 표시하면 Gradle은 일반 빌드 중에이 종속성에 대한 작업을 실행할 필요가 없으므로 빌드 시간을 단축 할 수 있습니다.
  • 안드로이드 테스트 구현. 이는 기기에서 테스트를 실행할 때 필요한 종속성입니다. 예를 들어 Espresso 프레임 워크는 일반적인 "Androidtestimplementation"입니다.

위의 키워드 중 하나를 사용하여 종속성의 그룹, 이름 및 버전 속성을 사용하여 원격 종속성을 정의합니다.

종속성 {구현 fileTree (dir : libs, include :) 구현 androidx.appcompat : appcompat : 1.0.2 구현 androidx.constraintlayout : constraintlayout : 1.1.3 testImplementation junit : junit : 4.12 androidTestImplementation androidx.test.ext : junit : 1.1.0 androidTestImplementation androidx.test.espresso : espresso-core : 3.1.1}

여러 개의 APK 생성 : 빌드 변형을 생성하는 방법

때로는 여러 버전의 응용 프로그램을 만들어야 할 수도 있습니다. 예를 들어, 추가 기능이 포함 된 무료 버전과 유료 버전을 릴리스 할 수 있습니다.

이는 Gradle이 도와 줄 수있는 빌드 작업이므로 단일 프로젝트에서 여러 개의 APK를 생성하기 위해 빌드 프로세스를 수정하는 방법을 살펴 보겠습니다.

  • strings.xml 파일을 열고 원래 애플리케이션 이름 문자열을 삭제하십시오.
  • 다음으로 작성하려는 각 제품 플레이버의 이름을 정의하십시오. 이 경우에는 다음을 사용합니다.

내 무료 앱 내 유료 앱

  • AndroidManifest.xml 파일을 열고 android : label =”@ string / app_name”을 다음으로 바꾸십시오.

android : label = "$ {appName}"

  • 모듈 수준 build.gradle 파일을 열고“android”블록에 다음을 추가하십시오.

flavorDimensions "모드"productFlavors {무료 {차원 "모드"applicationIdSuffix ".free"manifestPlaceholders =} 유료 {차원 "mode"applicationIdSuffix ".paid"manifestPlaceholders =}}}}

여기에서 무슨 일이 일어나고 있는지 봅시다 :

  • 풍미. Android 플러그인은 다양한 차원의 맛을 결합하여 빌드 변형을 만듭니다. 여기서는 앱의 '무료'및 '유료'버전으로 구성된 맛 측정 기준을 만들고 있습니다. 위 코드를 기반으로 Gradle은 paidDebug, paidRelease, freeDebug 및 freeRelease의 네 가지 빌드 변형을 생성합니다.
  • 제품 이것은 위의 코드에서“유료”및“무료”맛 목록 및 해당 설정을 지정합니다.
  • 무료 / 유료 이들은 우리의 두 제품 맛의 이름입니다.
  • 치수. "dimension"매개 변수 값을 지정해야합니다. 이 예에서는 '모드'를 사용하고 있습니다.
  • applicationIdSuffix. 여러 버전의 앱을 만들려면 각 APK에 고유 한 앱 식별자를 지정해야합니다.
  • manifestPlaceholders. 각 프로젝트에는 프로젝트 구성에 대한 중요한 정보가 포함 된 단일 매니페스트 파일이 있습니다. 여러 빌드 변형을 만들 때 일반적으로 빌드시 이러한 매니페스트 속성 중 일부를 수정하려고합니다. Gradle 빌드 파일을 사용하여 각 빌드 변형에 대해 고유 한 매니페스트 항목을 지정하면 빌드시 매니페스트에 삽입됩니다. 위 코드에서 Gradle이 무료 또는 유료 버전의 앱을 빌드하는지에 따라 "appName"값을 수정합니다.

사용자 정의 Gradle 작업 생성

때로는 Gradle을 사용하여 빌드 프로세스를 사용자 정의해야 할 수도 있습니다 업무.

작업은 Javadoc 생성과 같이 빌드를 수행 할 때 Gradle이 실행할 명명 된 작업 모음입니다. Gradle은 기본적으로 많은 작업을 지원하지만 사용자 지정 작업을 만들 수도 있습니다.이 작업은 매우 구체적인 빌드 지침을 염두에두면 유용 할 수 있습니다.

이 섹션에서는 프로젝트의 모든 빌드 변형 (paidDebug, paidRelease, freeDebug 및 freeRelease)을 반복하고 날짜 및 시간 스탬프를 만든 다음 생성 된 각 APK에이 정보를 추가하는 사용자 정의 Gradle 작업을 작성합니다.

모듈 레벨 build.gradle 파일을 열고 다음을 추가하십시오.

task addDateAndTime () {// 모든 출력 빌드 변형을 반복합니다 .// android.applicationVariants.all {variant-> // 모든 APK 파일을 반복합니다 ./ variant.outputs.all {output-> // 인스턴스 만들기 지정된 형식의 현재 날짜 및 시간 // def dateAndTime = new Date (). format ( "yyyy-MM-dd : HH-mm") //이 정보를 APK의 파일 이름에 추가합니다 .// def fileName = variant name + "_"+ dateAndTime + ".apk"output.outputFileName = fileName}}}

다음으로 Gradle에 알려야합니다 언제 이 작업을 실행해야합니다. 빌드하는 동안 Gradle은 다운로드하는 데 필요한 모든 것과 실행해야하는 모든 작업을 식별하고 DAG (Directed Acyclic Graph)로 정렬합니다. 그런 다음 Gradle은 DAG에 정의 된 순서에 따라 이러한 모든 작업을 실행합니다.

내 앱에는 DAG가 채워지고 Gradle이 작업을 시작할 준비가되었을 때 작업이 호출되도록하는 "whenReady"방법을 사용하겠습니다.

모듈 레벨 build.gradle 파일에 다음을 추가하십시오.

//이 작업을 실행합니다 .// gradle.taskGraph.whenReady {addDateAndTime}

맞춤 작업을 시작하겠습니다 Gradle 명령을 사용하여이 프로젝트를 빌드하여 테스트 용 빌드 변형 코드를 테스트하십시오.

Gradle 래퍼로 프로젝트 빌드

Gradle 래퍼 ( "gradlew")를 사용하여 Gradle 명령을 실행합니다. 이 스크립트는 Gradle 빌드를 시작하기 위해 선호되는 방법입니다. Gradle 버전과 독립적으로 빌드를 실행하기 때문입니다. 이 분리는 반드시 동일한 버전의 Gradle이 설치되어 있지 않을 수도있는 다른 사람들과 공동 작업하는 경우 유용 할 수 있습니다.

Gradle 래퍼 명령을 실행할 때 macOS 및 Windows의 경우 "gradlew.bat"를 포함하여 Unix와 유사한 운영 체제의 경우 "gradlew"를 사용합니다. Mac이 있으므로“gradlew”명령을 사용합니다.

Android Studio 내에서 Gradle 명령을 실행할 수 있습니다.

  • Android Studio 도구 모음에서 "보기> 도구 창> 터미널"을 선택하십시오. 그러면 IDE 창의 맨 아래에 터미널 패널이 열립니다.
  • 터미널에 다음 명령을 입력하십시오.

./gradlew 빌드

Android Studio는 다음과 같아야합니다.

  • 키보드에서 "Enter"키를 누릅니다. Gradle은 이제 프로젝트를 빌드합니다.

Gradle은 생성 된 모든 APK를 프로젝트의 app / build / outputs / apk 디렉토리에 저장하므로이 디렉토리로 이동하십시오. “APK”폴더에는 여러 개의 폴더와 하위 폴더가 있어야합니다. Gradle이 각 빌드 변형에 대해 APK를 생성했는지, 정확한 날짜 및 시간 정보가 각 파일에 추가되었는지 확인하십시오.

다른 Gradle 작업이 있습니까?

Gradle은 사용자가 생성 할 수있는 사용자 지정 작업 외에도 사전 정의 된 작업 목록을 기본적으로 지원합니다. 어떤 작업이 가능한지 궁금한 경우 :

  • Android Studio의 터미널 창이 열려 있지 않은 경우 엽니 다 (Android Studio 도구 모음에서 "보기> 도구 창> 터미널"선택).
  • 터미널에 다음을 입력하십시오.

./gradlew -q 작업

  • 키보드에서 "Enter"키를 누릅니다.

이제이 "작업"작업이 실행되고 잠시 후 터미널에이 프로젝트에 사용 가능한 모든 작업 목록이 표시되고 각 작업에 대한 간단한 설명이 표시됩니다.

Gradle 활용하기 : 플러그인 추가

Gradle에는 여러 개의 플러그인이 사전 설치되어 제공되지만 새 플러그인을 추가하여 Gradle을 추가로 확장 할 수 있습니다. 이 플러그인은 Android 프로젝트에서 새 작업을 사용할 수 있도록합니다. 예를 들어 Java 플러그인에는 Java 소스 코드를 컴파일하고 단위 테스트를 실행하며 "compileJava", "compileText", "jar"와 같은 JAR 파일을 생성 할 수있는 작업이 포함되어 있습니다. “javadoc”및“clean.”

플러그인을 적용하려면 "apply plugin"선언을 모듈 레벨 build.gradle 파일에 추가 한 다음 플러그인 이름을 추가하십시오. 예를 들어 다음은 Java 플러그인을 적용하는 것입니다.

플러그인 적용 : java

사용 가능한 플러그인이 궁금한 경우 Gradle 플러그인의 포괄적 인 레지스트리를 제공하는 Gradle 플러그인 검색을 확인하십시오.

Gradle Kotlin DSL

기본적으로 Groovy DSL을 사용하여 Gradle 빌드 스크립트를 작성하지만 Android 개발을 위해 Kotlin을 채택한 많은 개발자 중 하나 인 경우 Kotlin에서 빌드 스크립트를 작성하는 것이 좋습니다.

Groovy와 달리 Kotlin은 정적으로 유형이 지정된 프로그래밍 언어이므로 전환하면 빌드 파일이 Android Studio의 자동 완성 및 소스 코드 탐색 기능과 호환됩니다. 또한 Groovy에서 Kotlin으로 이전하면 프로젝트 전체에서 동일한 프로그래밍 언어를 사용하게되므로 특히 Groovy에 익숙하지 않은 경우 더욱 간단하게 개발할 수 있습니다.

Kotlin에서 빌드 로직 작성을 시작하려면 Gradle Kotlin DSL을 설정하고 마이그레이션 안내서의 지시 사항을 따라야합니다.

마무리

이 기사에서는 Android Studio의 빌드 자동화 및 종속성 관리 도구를 살펴 보았습니다. Gradle은 기본적으로 빌드 프로세스를 즉시 자동화하는 방법과 사용자 정의 Gradle 태스크 생성 및 단일 프로젝트에서 여러 빌드 변형 생성을 포함하여 프로젝트의 Gradle 빌드 파일을 편집하여 빌드 프로세스를 수정하는 방법을 조사했습니다.

Android 빌드 프로세스의 다른 부분을 자동화하도록 Gradle을 확장 했습니까? 아래 의견에 알려주십시오!

재무 정보를 쓰레기통에 버릴 수는 없습니다. 쉽게 검색디지털 파일과 동일한 이유는 무엇입니까?중요한 파일을 사랑하는 휴지통으로 보내면 데스크탑에서만 제거됩니다. 휴지통을 비우면 내용물이 영원히 사라 졌다고 생각할 수 있습니다. 그렇지 않습니다....

정보에 입각 한 결정을 내릴 수있는 능력은 사업의 초석. 거시 경제 원리 게임 이론을 잘 이해하면 도움이 될 수 있습니다. 이 번들은 단 20 달러에 6 시간의 게임 이론 교육을 제공합니다.당신은 하품을했고 그것이 당신이 잤던 Econ 101의 한 부분 일 뿐이라고 생각할 수도 있습니다. 아마 그럴 수도 있지만, 또한 관리 능력. 이 충돌 코스는 오전 8시...

우리는 권장합니다