일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안드로이드 Gradle
- 안드로이드 UI 스레드
- ViewModel
- 안드로이드 빌드
- UI Thread
- 안드로이드 스레드
- 라이브데이터
- 뷰모델
- worker thread
- Android
- 안드로이드 아키텍처 컴포넌트
- 안드로이드 메인 스레드
- 아키텍처 컴포넌트
- google io 2017
- 안드로이드 뷰모델
- 작업 스레드
- LiveData
- android arhitecture componets
- android studio
- ui 스레드
- android ViewModel
- 안드로이드 네트워크 통신
- 메인 스레드
- 안드로이드 그래들
- 안드로이드 스튜디오
- 안드로이드
- Architecture Components
- 아키텍쳐 컴포넌트
- Today
- Total
현치비
안드로이드 빌드 구성 본문
안드로이드 빌드 시스템은 어떻게 돌아가는지 궁금하다면?
https://developer.android.com/studio/build/
setings.gradle : 이 파일은 앱을 빌드할 때 어떤 모듈을 포함할지 Gradle에 알려주는 파일
프로젝트를 만들면,
include ‘:app’
라는 짧은 한 줄만 설정이 되어있는데, 최근 인스턴트 앱에서도 강조하는 모듈화! 를 한다면
include ‘:app’, ‘:common’, ‘:somethingModule’
처럼 추가가 될 수 있을 것이다 :)
build.gradle(root project directory) : 이 파일은 프로젝트의 모든 모듈에 적용되는 비들 구성을 정의함
/**
* 이 buildscript {} 블록에는 Gradle 자체에 대한 레포지토리 및 종속성을 구성하는 곳이므로,* 각 모듈에 대한 종송석을 포함하면 안됩니다.
*/
buildscript {
/**
* 이 repositories {} 블록은 Gradle이 의존성을 검색하거나 다운로드하는 데 사용하는 저장소를 구성합니다.
* JCenter, Maven Central, Ivy와 같은 원격 저장소를 사전 구성합니다.
* 로컬 레포지토리를 사용하거나 자체 원격 레포지토리를 정의도 가능합니다.
*/
repositories {
jcenter()
}
/**
* 이 dependencies {} 블록은 프로젝트 빌드에 필요한 의존성을 구성하는 곳입니다.
*/
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0'
}
}
/**
* 이 allprojects {} 블록은 이 프로젝트의 모든 모듈에서 타사 플러그인이나 라이브러리를 포함한
* 모든 모듈에 사용되는 저장소 및 종속성을 구성하는 곳입니다.
*/
allprojects {
repositories {
jcenter()
}
}
build.gradle(module) : 이 파일은 project/module 디렉토리에 있으며, 특정 모듈 빌드 설정한다.
/**
* 이 빌드에 그래들을 위한 안드로이드 플러그인 적용 및 이 모듈의 전용 빌드 옵션을 지정할 수 있습니다.
*/
apply plugin: 'com.android.application'
android {
/**
* compileSdkVersion은 당신의 앱을 컴파일하기 위해 사용되는 안드로이드 API 레벨입니다.* 설정한 API 레벨이하 기능들을 사용할 수 있습니다.
*
* buildToolsVersion은 SDK build tools, command-line, utilities, complier를 지정합니다.* SDK Manager를 이용해 빌드 도구를 다운로드해야 합니다.
*/
compileSdkVersion 26
buildToolsVersion "27.0.3"
/**
* 이 defaultConfig 블록은 빌드 변형에 대한 기본 설정 및 항목을 캡슐화합니다.
* main/AndroidManifest.xml 의 일부 속성 빌드를 동적으로 재정의할 수 있습니다.
* product flavors 도 설정하여 debug/qa/release 버전등을 설정할 수도 있습니다.
*/
defaultConfig {
/**
* applicationId 업로드할 패키지의 고유한 id입니다.
* main/AndroidManifest.xml 파일에 정의된 패키지 명을 따라야 합니다.
*/
applicationId 'com.example.myapp'
// 최소한의 API 레벨입니다.
minSdkVersion 15
// 앱에 권장되는 API 레벨입니다.
targetSdkVersion 26
// 앱의 버전 코드입니다.
versionCode 1
// 앱의 친숙한 버전 이름을 정의합니다.
versionName "1.0"
}
/**
* 이 buildTypes 블록은 빌드 타입을 구성할 수 있는 곳 입니다.
* 기본적으로 디버그와 릴리즈를 정의합니다. (추가적으로 QA, RC를 정의할 때도 있습니다.)
* 디버그 빌드 유형은 디버깅 툴과 디버깅 키를 서명합니다.
* 릴리즈 빌드 유형은 Proguard 설정을 적용하며 디폴트로 서명되지 않습니다.
*/
buildTypes {
/**
* 기본적으로 minifyEnaled 를 사용하여 코드를 축소하고,
* Proguard settings file을 지정합니다.
*/
release {
minifyEnabled true // 코드의 축소화를 설정합
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* 이 productFlavors {} 블록은 제품의 flavor을 구성할 수 있는 곳입니다.
* defaultConfig {} 블록을 오버라이딩하여 설정할 수 있습니다. 필수는 아니고 옵션입니다.
* 예제에서는 free와 paid 2가지를 만들었습니다.
* 각 제품들은 application ID를 지정하므로 플레이스토어, 안드로이드 기기에 동시에 존재할 수 있습니다.
*/
productFlavors {
free {
applicationId 'com.example.myapp.free'
}
paid {
applicationId 'com.example.myapp.paid'
}
}
/**
* 이 splits {} 블록은 화면 밀도나 ABI 에 대한 코드 및 리소스만 포함하는 다른 APK 빌드를
* 구성할 수 있는 곳입니다.
* 각 APK가 다른 versionCode를 갖도록 빌드를 구성해야 합니다.
*/
splits {
// 화면 밀도 설정
density {
// 밀도 분리 메커니즘 활성화 or 비활성화
enable false
// 이 밀도를 스플릿에서 제외합니다.
exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"
}
}
}
/**
* 이 dependencies {} 블록은 모듈 자체를 빌드하는데 필요한 종속성만 지정합니다.
*/
dependencies {
compile project(":lib")
compile 'com.android.support:appcompat-v7:27.1.1'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
Gradle 속성 파일 : Gradle에는 두 개의 속성 파일이 루트 프로젝트에 포함이 되어있다.
gradle.properties
위 파일은 프로젝트 범위의 Gradle 설정을 구성할 수 있습니다. (Gradle 데몬의 최대 Heap 크기) 등 자세한 사항
local.properties