Upload
manjong-han
View
3.129
Download
3
Embed Size (px)
Citation preview
gradle로 안드로이드 앱 빌드하기2015.01.22
이화앱센터 안드로이드팀장 한만종
안드로이드 앱 빌드?
• 마켓플레이스 별: PlayStore, T-Store, …
• 제품 별: 무료버전, 유료버전, …
• 용도 별: 사내 개발용/시험용, 디버깅용, 배포용,…
안드로이드 앱 빌드?
빌드도구를 이용한 빌드 자동화 필요
Google I/O 2013
Intelli J 기반의 Android Studio와 함께 gradle을 이용한 Android 어플리케이션 프로젝트 빌드 공식 지원
gradle?
Ant의 유연성과 Maven의 의존성 관리를 컨셉으로 한 Groovy 기반의 프로젝트 자동화 도구
gradle?
• 다중 프로젝트 빌드 지원
• Groovy 기반의 DSL(Domain Specific Language)
• Gradle Wrapper를 통해 Gradle이 설치되지 않은 환경도 지원
이클립스 프로젝트 Migration• Android Studio 1.0에서 원클릭으로 제공
• 의존적인 프로젝트까지 자동으로 Migration
이클립스 프로젝트 Migration
이클립스 프로젝트 Android Studio 프로젝트
프로젝트/settings.gradle
빌드하고자 하는 모듈 정의
프로젝트/build.gradle
프로젝트 gradle 설정(repository, plugin, …)
프로젝트/모듈/build.gradle
• ApplicationId: 어플리케이션 패키지명 설정
• minifyEnabled: ProGuard 활성여부 설정
프로젝트/모듈/build.gradle• Android KitKat부터 Java 1.7과 호환
(다이아몬드 연산자, 다중 catch, switch문에서 String형 지원 등) 설정
compileSdkVersion 19
buildToolsVersion “19.0.0”
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
프로젝트/모듈/build.gradle
• compile project(‘:모듈명’) - 같은 프로젝트 내 모듈 의존
• compile ‘저장소명’ - 외부 저장소로부터 의존
• compile files(‘파일명’) - 같은 모듈 내 라이브러리 파일 의존
빌드하기
• gradle을 시스템에 설치 후 수동으로 명령
$ gradle
• gradlew를 이용하여 수동으로 명령
$ gradlew
• Android Studio를 이용하여 내장된 gradle을 이용
빌드하기
• 모든 task(Variant, Build Type, Product Flavor)를 한꺼번에 빌드
$ gradlew assemble
• 특정 task만 빌드
$ gradlew assemble task명
• test를 포함한 모든 task를 빌드
$ gradlew build
Build Variants
• 하나의 앱에 대해 다양한 빌드를 가능케 함.
• Build Variant = Build Type + Product Flavor
Build Variants
Build Type
android { buildTypes { debug { …
} release { …
} }
}
Build Type• debug와 release: 디버깅용과 배포용으로 나누어 빌드할 경우
• 디버깅용에는 개발용 서버 연동, 오류보고 사용안함, 배포용과 중복 설치되도록, …
• 배포용에는 명확한 버전명 표기, Logcat이 출력되지 않도록, 배포용 키로 apk 사인, 배포용 서버 연동, …
• 배포용 빌드 시마다 versionCode 자동 증가
• BuildConfig 필드 추가/수정
Build Type• AndroidManifest.xml에 작성된 versionCode를 증가시키는
Groovy DSL Gradle task
http://stackoverflow.com/a/17525195/2677760
Build Type• signingConfigs
android { signingConfigs { …
} }
Product Flavor
android { productFlavors { tstore { …
} playstore { …
} }
}
Product Flavor
• 사용자 정의가 가능한 빌드 타입
• 티스토어, 플레이스토어 등 마켓플레이스 별 빌드 시에 용이
• 마켓플레이스 별 업데이트 링크 주소 부여, 결제모듈 등 기능 차별화, 버전 이름 구분, …
• git과 연동해서 현재 tag 또는 branch 명으로부터 versionName 명명
Product Flavor• git으로부터 tag명을 가져와 versionName형식을 만들어주는
Groovy DSL 함수
http://stackoverflow.com/a/18021756/2677760
참고할만한 링크들• http://tools.android.com/tech-docs/new-build-system/user-guide
• http://tools.android.com/build/gradleplugin
• http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
• http://developer.android.com/tools/building/configuring-gradle.html
• http://developer.android.com/tools/building/plugin-for-gradle.html
• http://blog.proinlab.com/?p=1412
• http://toastdroid.com/2014/03/28/customizing-your-build-with-gradle/