[안드로이드] kakao sample gradle 분석 1.settings.gradle

프로그래밍/Android 관련2017. 12. 4. 22:53

안녕하세요. 개발자 드리머즈입니다.


안드로이드를 본격적으로 개발하기 전에.. Gradle에 대해 개념을 좀 공부해야 할 것 같습니다.

카카오 디벨로퍼 사이트의 Android용 [카카오 계정으로 로그인하기]에는 매우 많은 Gradle 파일과 문법이 등장합니다. 조금조금씩 분석해보려고 합니다.




위의 사진처럼.. Gradle Scripts에 관련된 파일이 상당히 많습니다.

먼저 사진의 아래쪽에 보이는 프로젝트의 루트 경로에 위치한 settings.gradle 파일을 보겠습니다.

(gradle이 실행되면.. 이 파일이 제일 먼저 실행된다고 하네요)


 settings.gradle (Project Settings)

// Include SDK modulees
include ':libraries:auth'
include ':libraries:friends'
include ':libraries:kakaolink'
include ':libraries:kakaonavi'
include ':libraries:kakaostory'
include ':libraries:kakaotalk'
include ':libraries:network'
include ':libraries:push'
include ':libraries:s2'
include ':libraries:test-common'
include ':libraries:usermgmt'
include ':libraries:util'
include ':libraries:message-template'

// Include sample apps
include ':applications:kakao-open-android-sdk-sample'
include ':applications:kakao-open-android-link-sample'
include ':applications:kakao-open-android-s2-sample'
include ':applications:kakao-open-android-navi-sample'

rootProject.children.each { project ->
project.buildFileName = "${project.name}.gradle"
}

project(':applications').children.each { project ->
project.buildFileName = "${project.name}.gradle"
}

project(':libraries').children.each { project ->
project.buildFileName = "${project.name}.gradle"


다행히.. 그나마 코드가 길지 않습니다.

안드로이드 디벨로퍼 사이트에 아래의 설명이 있습니다.


Gradle 설정 파일

루트 프로젝트 디렉토리에 있는 settings.gradle 파일은 앱을 빌드할 때 어떤 모듈을 포함할지를 Gradle에 알려줍니다. 대부분의 프로젝트에서 이 파일은 간단하며 다음 코드만을 포함합니다.

include ‘:app

그러나, 다중 모듈 프로젝트에서는 최종 빌드에 들어가야 하는 각 모듈을 지정해야 합니다. 


카카오 sdk 예제의 경우, 하나의 프로젝트에 여러 개의.. 모듈?이 있습니다. 이 모듈마다 gradle이 존재하는데 지금 보고 있는 settings.gradle에 위와 같이 include 되어야 빌드 시 포함됩니다.

(마치.. mk파일에서 하위 mk파일을 표시하기 위한 코드와 비슷한 것 같네요)


include ':libraries:auth'

include ':applications:kakao-open-android-sdk-sample'


include 구문을 보면 libraries와 applications 가 보입니다.

이게 뭔지 했는데, 단순히 모듈의 경로에 따라 붙은거네요.



카카오에서.. 사용되는 여러 모듈들은 성격에 따라, applications라는 폴더와 libraries라는 폴더에 나눠져 있습니다.

프로젝트 루트의 입장에서 봤을 때 상대경로로 :application과 :libraries가 추가된 것입니다.

빌드 시 include된 경로에 있는 gradle 파일이 실행될 것입니다.


그 다음 남은 코드는,


rootProject.children.each { project ->
    project.buildFileName = "${project.name}.gradle"
}

project(':applications').children.each { project ->
    project.buildFileName = "${project.name}.gradle"
}

project(':libraries').children.each { project ->
    project.buildFileName = "${project.name}.gradle"
}  


위와 같습니다.

이 코드가 쓰인 이유는 하위 프로젝트의 gradle 파일의 이름(buildFileName)이 기본 이름인 build.gradle이 아니기 때문에, gradle이 변경된 파일 이름을 가진 gradle을 인식하도록 하기 위함입니다.

실제 파일을 보면

루트에서 가장 먼저 보이는 /applications 경로에 위치한 gradle 파일의 이름은, applications.gradle이고,

/libraries 경로에 위치한 gradle 파일의 이름은, libraries.gradle입니다. 이처럼 파일의 이름이 build.gradle이 아니기 때문에 이 변경된 이름을 올바르게 인식하려면 위의 코드가 필요합니다.






*참고

권남님 위키? : http://kwonnam.pe.kr/wiki/gradle/buildlifecycle

gradle 공식 사이트?(영어) : https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:subprojects(groovy.lang.Closure)

안드로이드 디벨로퍼 사이트- 빌드 구성 : https://developer.android.com/studio/build/index.html?hl=ko)%3E

작성자

Posted by 드리머즈

관련 글

댓글 영역