pinkred's mobile program

pinkred mobile programer

Archive for 2월 2017

Android build gradle

leave a comment »

build gradle 환경을 수정해보는 것은 어쩌면 또 다른 경험일수 있다고 생각합니다.

실제 build에 문제가 있지 않지만 조금더 편리하게 라는 단어에 노력해 보기로 했습니다.

목표

  1. debug, release 버전의 서버 구분
  2. 빌드 파일 이름 바꾸기
  3. git 연동
  4. productFlavor을 통한 버전 나누기
  1. debug, release 버전의 서버 구분은 여러가지 방법이 있지만 파일을 나누는 방식을 선택했다. release 버전의 서버는 한개인데 debug 서버가 여러가지 일수 있어서 개발중에 debug서버를 바꾸는 경우가 생겨서 이다. 방법은 간단하다.  아래와 같이 debug, release  폴더를 만들어 주고 패키지 구조를 똑같이 만들어서 서버 구성 파일을 따로따로 넣어주면 된다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-23-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-8-50-22

2. 빌드 파일 이름 바꾸기

이름을 바꾸는 방법은 다양한데 회사 마다 특유의 형식이 있을수 있기 때문에 형식에 간단하게 소개하겠습니다.


android {
....

applicationVariants.all { variant ->
// 날짜 넣기
def simpleDateFormat = new SimpleDateFormat("yyMMdd");
simpleDateFormat.setTimeZone(TimeZone.getDefault());
// debug, release 빌드 구분
if (variant.buildType.name == "release") {

} else {

}

// 버전 넣기
apkName += "-v" + defaultConfig.versionName;
apkName += "-" + simpleDateFormat.format(new Date());
apkName += ".apk";

variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, apkName);
}
}
}

3. git 연동

git 연동은 의외로 어렵지 않다. git 명령어 그대로 넣으면 된다. 예를 들어서 git의 이름을 얻어오고 싶다면

<pre>def getGitName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'config', 'user.name'
        standardOutput = stdout
    }

    return stdout.toString().trim();
}

def gitName = getGitName();</pre>

4. productFlavor을 통한 버전 나누기는 릴리즈시에 어떤 버전을 만들게 될지 결정 할수가 있다.

안드로이드 스튜디오에서 generate signed apk을 하면 아래와 같은 절차에서 Flavor을 선택할수 있다. 자세한 내용은 구글 사이트를 참조하세요.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-23-%e1%84%8b%e1%85%a9%e1%84%8c%e1%85%a5%e1%86%ab-9-03-53

gradle에서는 아래와 같은 방식으로 빌드되는 Flavor의 이름을 얻어올수 있다.

<pre>applicationVariants.all { variant ->
    ...

    def currentFlavor = variant.flavorName;

    ...
    variant.outputs.each { output ->
        output.outputFile = new File(output.outputFile.parent, apkName);
    }
}</pre>

 

Written by pinkredmobile

2017/02/23 at 9:09 am