Android Studio 빌드 관련

안드로이드 스튜디오에서 라이브러리 추가해서 빌드한다고 삽질 좀 하다가.. 이건 제대로 알아야 할 것 같아서 레퍼런스 해석을 했다.

Overview

안드로이드 스튜디오 빌드 시스템은 Gradle 안드로이드 플러그인으로 되어있는데, Gradle은 안드로이드 스튜디오와 독립적이다.

– 커맨드 라인으로 빌드를 할 수 있다. (안드로이드 스튜디오 설치와 무관함)
– 같은 프로젝트로 다른 기능을 가진 여러개의 APK를 만들 수 있다.

Gradle 빌드는 Groovy 문법이다.

– 자바 VM을 위한 동적 언어
http://groovy.codehaus.org/

Project and modules

안드로이드 스튜디오에서 프로젝트는 완전한 안드로이드 앱을 대표한다. 프로젝트는 하나 혹은 그 이상의 모듈로 구성되어 있다. 모듈은 독립적으로 빌드, 테스트, 디버그 할 수 있는 앱의 요소로써, 소스코드와 리소스를 포함하고 있다.

안드로이드 스튜디오 프로젝트에서 모듈은 세가지

– 자바 라이브러리 모듈
재사용 가능한 코드를 포함한다. 빌드 시스템이 자바 라이브러리 모듈을 위해서 JAR 패키지를 만든다.

– 안드로이드 라이브러리모듈
재사용 가능한 안드로이드 코드와 리소스를 포함한다. 빌드 시스템은 AAR (Android ARchive) 패키지를 만듬

– 안드로이드 어플리케이션 모듈
라이브러리 모듈에 의존적인 어플리케이션 코드를 포함한다. (대부분 안드로이드 앱은 하나의 어플리케이션 모듈로 구성되어 있음.) 빌드 시스템은 APK 패키지를 만든다.

안드로이드 스튜디오 프로젝트는 top-level Gradle 빌드 파일이 모든 모듈의 정보를 가지고 있고, 각자 모듈도 Gradle 빌드 파일을 가지고 있다.

Dependencies

Module Dependencies
– 다른 모듈을 포함할 수 있다.

Local Dependencies
– 바이너리 아카이브, JAR파일 같은 거

Remote Dependencies
– Maven
– 형식은 group:name:version
http://search.maven.org/

Gradle console

빌드 task와 subtask를 보여준다. 빌드가 실패하면 자세한 내용을 여기서 찾을 수 있음

Command line으로 빌드하기

맥 명령어

$ chmod +x gradlew   - Gradle wrapper스크립트에 권한 줌, 이 명령어는 처음에만 필요  
$ ./gradlew assembleDebug

APK 빌드는 app/build/apk/ 에 있고, AAR은 lib/build/libs/ 에 있다.

프로젝트의 가능한 빌드 task리스트를 보려면

$ ./gradlew tasks

릴리즈버전 빌드하기

커맨드 라인으로 빌드

gradlew assembleRelease

안드로이드 스튜디오에서 빌드

1. Gradle 클릭
2. 어플리케이션 이름 밑의 All task

all_task

3. app을 확장하면 보이는 assembleRelease를 더블 클릭

app

빌드 파일 기본

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), \
            'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(":lib") // Module dependency
    compile 'com.android.support:appcompat-v7:19.0.1'  // Remote binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar']) // Local binary dependency
}

apply plugin: ‘android’ 빌드를 위해 Gradle 플러그인을 적용한다.

android {…} 안드로이드 쪽 빌드 옵션을 설정한다.

defaultconfig : 동적으로 AndroidManifest.xml에 있는 요소를 설정한다. defaultConfig에 있는 값들은 manifest파일에 있는 걸 덮어쓰기(override)한다.

Local binary dependency

jar 파일 같은 것은 프로젝트의 <moduleName>/libs 에 복사를 한다.
compile fileTree(dir: ‘libs’, include: [‘*.jar’]) 은 app/libs에 JAR파일이 있다고 빌드시스템에 알려준다.

빌드 설정시 환경변수 이용하기

storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")

빌드 시 입력창으로 받기

storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLIne("\nKey password: ")

Source directories

여러 버전의 앱을 만들기 위해서는 아래처럼 소스코드와 리소스가 되어야 한다.

– src/main/ – 메인 소스 디렉토리
– src/<buildType>/ – 빌드 타입 소스 디렉토리
– src/<flavorName>/ – flavor 소스 디렉토리

 

다른 버전의 앱을 만들기 위해서
1. product flavor를 빌드 파일에 정의
2. 각 flavor의 추가 소스 디렉토리를 만든다.
3. 프로젝트에 flavor에 포함되는 소스를 추가한다.

configuration 예

...
android {
    ...
    defaultConfig { ... }
    signingConfigs { ... }
    buildTypes { ... }
    productFlavors {
        demo {
            packageName "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            packageName "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }
}
..

flavor 디렉토리 추가 예

flavor

레퍼런스 : http://developer.android.com/sdk/installing/studio-build.html

Android Studio 빌드 관련”에 대한 답글 1개

댓글 남기기