현치비

안드로이드 빌드 구성 본문

Android/Android Build

안드로이드 빌드 구성

현CHIBI 2018. 4. 29. 22:32

안드로이드 빌드 시스템은 어떻게 돌아가는지 궁금하다면?


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
위 파일은 빌드 시스템의 로컬 환경 속성을 구성합니다. (SDK 설치의 경로등), 로컬 개발자 환경에만 해당하므로, 이 파일을 직접 수정하거나
Github와 같은 버전 제어 시스템에 체크인해서는 안됩니다.




Comments