반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

Gradle 이란? 본문

Android

Gradle 이란?

huiung 2020. 5. 20. 18:25
반응형

Gradle 이란?

 

안드로이드 스튜디오에서 프로젝트를 생성하면 gradle scripts 라는  코끼리 모양(?)의 항목이 있고 그하위에 여러가지 .gradle 파일들이 있는것을 보셨을 것입니다.

 

이녀석은 프로젝트를 컴파일하고 실행시키는 데 필요한 일을 자동으로 해줍니다. 좀더 자세히 말하면 자동화된 빌드 시스템이며 빌드 구성 파일들을 통해 프로젝트 빌드가 구성되고 관리되게 해줍니다. gradle 내부에 프로젝트 빌드 방법이나, 프로젝트 빌드에 필요한 모듈간 dependencies 관계 등이 정의되게 됩니다.

 

gradle은 개발자에게 유연성을 제공한다는 장점을 가지고 있다고 합니다. 플러그인을 사용하여 다른 환경에 통합 될 수 있고 안드로이드의 경우 안드로이드 스튜디오 플러그인을 통해 gradle이 통합되어 있습니다.

 

프로젝트를 빌드하기 위한 구성 규칙들은 Groovy 라고 하는 프로그래밍 언어를 기반으로 각 파일에 선언합니다.

 

Gradle의 여러가지 기능

 

- 기본적으로 gradle은 sensible default 구성설정을 가지고 있습니다. 따라서 개발자가 필요한 부분만 변경하고 나머지는 그냥 default를 사용하면 됩니다.

 

- gradle에서는 dependency 관계가 존재합니다. 이는 프로젝트의 다른모듈간에도 존재 할 수 있고 라이브러리나 JAR 파일과도 존재 할 수 있습니다. 각 기능을 사용하기 위해서는 해당 모듈의 dependency에 관계를 추가해 주어야하고 그렇지 않으면 런타임 시 빌드가 실패하게 됩니다. dependency 관계는 내 컴퓨터의 로컬에 있는 모듈을 참조 할 수 도 있고 다른 원격 repository의 모듈을 참조 할 수 도 있습니다.

 

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.google.android.gms:play-services:12.0.1'
}

예를들어 위의 코드를 보면 가장 윗줄은 lib 디렉터리에 있는 모든 JAR 파일이 빌드에 포함됨을 의미하고

가장 아래 코드를 보면 구글 플레이 서비스 라이브러리를 구글 repository 로부터 추가 함을 알 수 있습니다. 이때 원격에서 모듈을 참조할 때는 Maven 이라는 관리 도구를 사용해서 처리됩니다. 이는 지정 repository 로부터 파일들을 자동으로 다운로드 하여 빌드에 포함 시켜줍니다.

 

- gradle은 또한 build variant 기능을 제공합니다. 제 안드로이드 스튜디오 기준으로 왼쪽 모서리 쪽에 붙어 있습니다. 이 기능은 하나의 프로젝트로 여러 변형된 버전의 애플리케이션을 빌드 할 수 있게 해줍니다. 눌러보면 Active Build Variant라는 항목이 있는데 여기에 개발자가 원하는 버전을 선택하여 각각 빌드를 할 수 있습니다. 예를 들면 전자기기마다 해상도가 다르기 때문에 레이아웃을 각각 적용시켜야 할 때 gradle을 통해 이를 추가하고 build Variant에서 해당 버전을 빌드 하면 됩니다.

 

- Manifest 항목들을 gradle에 지정하면 프로젝트를 빌드 시 Manifest 파일에 자동으로 생성해 줍니다.

 

- ProGuard 기능을 지원합니다. ProGuard는 자바 바이트 코드를 최적화하고 크기를 줄여서 효율적으로 만드는 역할을 해줍니다. Gradle build 파일에서 이 기능을 실행 할 것인지 여부를 제어 할 수 있습니다. 아래의 사진을 보면 Module의 gradle 파일인데 minifyEnabeld false 라는 문장이 있습니다. 이 것을 true로 변경하면 ProGuard를 실행 하는 것입니다. default는 false로 되어 있습니다.

 

 

 

프로젝트 / 모듈별 Gradle 파일 구조

 

- 기본적으로 gradle은 최상위 수준(프로젝트) 의 빌드 파일이 존재합니다. build.gradle(Project: 프로젝트 이름) 과 같은 형식이며 기본 내용은 아래와 같습니다. jcenter, google repository를 사용해서 원격 라이브러리를 얻는 다는 것 등의 내용이 있는데 대부분의 경우 이 파일은 우리가 변경하지 않습니다.

 

 

- 모듈별 Gradle 파일

 

각 모듈은 자신의 Gradle 빌드 파일이 필요합니다. 빈 Activity 로 프로젝트를 생성시 기본적으로 아래와 같은 내용이 있습니다. 가장 윗줄의 apply plugin ~ 부분은 안드로이드 플러그인과 코틀린 플러그인 사용을 선언하는 부분 입니다.

 

그 다음 android 부분은 compileSdkVersion 과 SDK에 포함된 안드로이드 빌드 도구의 버전을 정의합니다. 그 아래에 defaultConfig 섹션은 빌드하는 동안 해당 모듈의 Manifest 파일로 생성되는 요소들을 정의합니다.

 

그 아래 buildTypes 섹션에서는 애플리케이션의 release 버전이 빌드 될때 ProGuard를 실행할 것인지 여부와 실행 방법을 정의하고 있습니다. 디버그 버전은 따로 선언되지는 않았으므로 디폴트 설정이 사용됩니다.

 

 

아까 설명한 build variants 를 이용해 여러 버전을 빌드하기 위해서는 buildTypes 아래에 ProductFlavors 섹션을 추가한 뒤 그안에 이름과 applicationId/versionName을 추가해주면 해당 상태로 빌드가 가능합니다. 그리고 가장 아래에는 dependencies 가 존재하며 필요한 다른 모듈 및 라이브러리들을 추가 해주어야 합니다.

 

반응형