시작하기 앞서

드디어 첫 gradle 프로젝트 생성 실습입니다. 차근차근 진행 해봅시다.


- Hello World 안드로이드 스튜디오 프로젝트 생성

안드로이드 스튜디오를 실행합니다. 그리고 File -> new -> New Project를 누릅니다. 음 API24 정도로 선택합니다. Activity 는 Blank Activity로 선택하겠습니다. 저흰 액티비티가 중요한게 아니니깐요.

 그리고 프로젝트 표시는 Android View로 하도록 하겠습니다. 왜냐하면 안드로이드 앱의 Gradle 스크립트를 잘표현해주기 때문입니다.



- Gradle 구성요소 소개

 

(1) app모듈

 안드로이드 스튜디오는 멀티프로젝트를 생성하게 됩니다. Gradle 프로젝트 하위에는 적어도 1개 이상의 모듈을 포합합니다. 최초 생성되는 모듈 이름은 app입니다. 새로운 모듈을 추가할때는 File -> New -> New Module 을 선택하면됩니다.


(2) manifest 폴더

AndroidManifest.xml 파일을 표시합니다. 앱이름과 권한 과 같은 프로젝트 메타정보를 담고 있습니다. 모듈별로 AndroidManifest.xml 파일을 포함하게 됩니다.


(3) java 폴더

소스코드와 테스트 코드가 있습니다.


(4) Gradle Scripts

안드로이드 스튜디오에서의 gradle sciprt을 포함하고있습니다.



- 프로젝트 build.gradle (여기선 Project: HelloWorld)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir

} 

 직접 까서 보겠습니다.

프로젝트 build gradle은 다수의 모듈이 존재할떄 전체 모듈에 공통적으로 적용하는 부분을 기술하는 부분입니다.


크게 두부분으로 구성되어있습니다. 

buildscirpt은 빌드 스크립트를 구동하는 부분입니다. 외부저장소와 의존성 부분을 지정합니다. 외부저장소로 jcenter, mavenCentral 이 있습니다.

요즘은 jcenter를 많이 사용한다고 합니다. 또한 dependencies(의존성부분) 에는 안드로이드 gradle의 플로그인 버전을 기술합니다.


그외에는 전체 프로젝트 공통으로 사용할수 있는 task 를 정의합니다. 기본적으로 clean 태스크가 추가되며, 단순히 build 폴저를 제거하는 역할을 하고있습니다. app과 같은 하위 Module의 build 폴더도 모두 제거한답니다. 모듈이 다수이면 다수모듈의 build 폴더가 제거되겠지요?



- 모듈 build.gradle (여기선 Module:app)

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.example.pjh.helloworld"
minSdkVersion 24
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'

} 

 크게 네 부분으로 구분됩니다. 


첫번째는 모듈의 plugin 부분입니다.

안드로이드 App module 은 com.android.application을 지정합니다.

안드로이드 library module은 com.android.library를 지정합니다.

동시에 플러그인을 2개 지정할수는 당연히 없습니다.


두번째는 android로 AndroidManifest.xml을 재설정 한다고 생각하시면 됩니다.

gradle에서 설정한게 manifest보다 우선시 됩니다. 


세번째는 buildTypes에는 빌드 타입에 따라 다른 동작을 지정할 수 있습니다.

빌드타입에 따라 다른 동작을 지정할 수 있습니다. debug와 release가 있습니다. debug는 개발단계에서 사용되며, release는 마켓이나 외부에 배포할때 사용합니다. 


네번째는 의존성부분(dependencies) 입니다.

libs폴더에있는 모든 jar파일 의존성에 추가합니다.

또한 compile은 module을 빌드 할 때 포함하는 외부라이브러리입니다. 로컬에 존재하지 않는 경우, 앞서 지정한 저장소였던 jcenter(프로젝트 gradle에서) appcompat 지원 라이브러리를 다운로드합니다.




Gradle은 저장소위치와 라이브러리 버전등을 지정하면 빌드 시 자동으로 해당 버전또는 최신버전을 포함하므로 개발자는 신경 쓰지 않아도 되는 엄청난 강점을 가지고 있습니다. 계속해서 Gradle 포스팅을 하도록 하겠습니다.


'개발 Support > Gradle' 카테고리의 다른 글

안드로이드 Gradle Test  (0) 2017.07.12
안드로이드 Gradle 멀티 프로젝트 사용  (0) 2017.07.10
Android Gradle 외부 라이브러리 추가  (0) 2017.07.10
Gradle Task와 생명주기  (0) 2017.07.10
Gradle 개요  (0) 2017.07.08

+ Recent posts