안드로이드 앱을 앤트로 빌드하기

안드로이드 스투디오나 인텔리제이에서는 자동 빌드를 위해 Gradle을 권하고 있지만, 아직까지 많이 사용되는 빌드 스크립트는 단연 Ant다.

안드로이드 SDK의 tools\android.bat를 이용하면 Ant용 빌드 파일을 만들 수 있다. 보통은 IDE에서 안드로이드 프로젝트를 만들다가 Ant 빌드 파일을 만들 것이다.  프로젝트의 최상위 폴더에 들어간 후에, 아래와 같이 입력하면 쉽게 build.xml이 만들어 진다.

>android update project --path .

폴더를 확인해보면 build.xml이 생겼다. 이 파일에는 기본적으로 몇가지 타겟(target)이 만들어져 있다. 대표적으로 clean, debug, release 같은 것이다.  이 타겟들은 아래와 같이 실행해볼 수 있다.

>ant release

여러개의 타겟을 실행할 수도 있다.

>ant clean release

release 타겟의 경우는 키스토어를 이용해 사인까지 할 수 있는데, 빌드스크립트가 참조할 수 있도록 키스토어의 위치와 alias, alias password, keystore password를 알려주어야 한다. 이는 ant.properties 라는 프로퍼티 파일을 만들고 build.xml과 같은 폴더에 넣어두는 방법으로 쉽게 전달할 수 있다. ant.properties 파일에 보통 넣는 값은 아래와 같다.

key.store=[키스토어의 파일 위치와 이름]
key.alias=[alias 이름]
key.store.password=[스토어 비밀번호]
key.alias.password=[alias 비밀번호]

예를 들면,

key.store=/keystore/my-keystore.keystore
key.alias=my-alias
key.store.password=store-password
key.alias.password=alias-password

와 같이 저장할 수 있다. 미리 키스토어를 만들었다면 이것만으로 release용 apk를 자동으로 만들 수 있다.

추후 안드로이드 SDK의 업데이트나 다른 환경과의 호환성을 유지하기위해서는 build.xml을 함부로 고치는 것은 지양할 일이다. 하지만 꼭 수정해야한다면 어떻게 해야할까? 이 때는 custom_rules.xml 을 이용해 보자. 안드로이드의 build.xml은 clean, debug, release 같은 잘 알려진 타겟 이외에 선언만 되고 내부적으로 작업이 없는 몇가지 타겟들을 가지고 있다. 그리고 그 타겟들을 custom_rules.xml 파일을 통해 재정의하면 빌드시에 실행된다.

예를 들어 -pre-build 라는 타겟은 앱을 빌드되기에 앞서 실행이 되는 타겟으로 이 타겟을 재정의 하면, 모든 빌드 작업 전에 공통 작업을 처리할 수 있다.  내 경우는 아래 그림 처럼 사인된 앱들의 파일 이름에 버전이 포함된다면 좋겠다고 생각했다.

version_with_file_name

그래서 -pre-build 타겟 단계에 AndroidManifest.xml 에서 version을 추출한 후에, -set-release-mode 타겟을 오버라이드 해 사용자가 release 타겟을 실행한 경우에만, 앱의 이름에 버전이 포함되도록 수정했다. 아래는 custom_rules.xml의 전문이다.

<?xml version="1.0" encoding="UTF-8"?>
<project>

<target name="-pre-build">
<copy file="AndroidManifest.xml" todir="." overwrite="true"
encoding="utf-8">
<filterset>
<filter token="CONFIG.APP_VERSION" value="${app.version}"/>
<filter token="CONFIG.APP_VERSION_CODE"
value="${app.versioncode}"/>
</filterset>
</copy>
</target>

<target name="rename-release-with-version-number">
<xmlproperty file="AndroidManifest.xml"
prefix="themanifest"
collapseAttributes="true"/>

<!-- see ${sdk.dir}/tools/ant/build.xml -set-release-mode -->
<property name="out.packaged.file"
location="${out.absolute.dir}/${ant.project.name}-${themanifest.manifest.android:versionName}-release-unsigned.apk"/>
<property name="out.final.file"
location="${out.absolute.dir}/${ant.project.name}-${themanifest.manifest.android:versionName}-release.apk"/>
<property name="out.unaligned.file"
location="${out.absolute.dir}/${ant.project.name}-${themanifest.manifest.android:versionName}-release-unaligned.apk"/>
</target>
<target name="-set-release-mode"
depends="rename-release-with-version-number,android_rules.-set-release-mode">
<echo message="target: ${build.target}"></echo>
</target>

</project>

위의 내용을 가진 custom_rules.xml 파일을 build.xml과 같은 폴더에 넣어두면 build.xml 파일을 수정하지 않고도 추가작업을 처리할 수 있다.

마지막으로, 어떤 프로퍼티나 타겟이 있는지 보고 싶다면, 위에서 android.bat 명령어를 통해 생성한 로컬의 build.xml이 아닌 [안드로이드 SDK 폴더]/tools/ant/build.xml 를 살펴보아야 한다. 왜냐하면, 방금 생성된 build.xml 파일이 위의 파일을 그대로 상속 후에 일부 값만 로컬에 맞게 변경하여 실행되기 때문이다. 아마도, 추후 새로운 타겟을 추가하거나 빌드 스크립트에 문제가 발생되었을 때 사용자가 안드로이드 SDK만 업데이트하면 경우 변경된 사항이 반영될 수 있도록 한 조치가 아닌가 싶다. 참고로, 위에 언급된 custom_rules.xml은 SDK의 초기버전에서는 지원되지 않는 기능이었다.

잘 빌드가 되려면 sdk의 위치를 빌드 스크립트에게 알려주어야 하는데, sdk.dir 프로퍼터를 통해 빌드스크립트가 참조한다. 예는 아래와 같다.

sdk.dir=c:\\Java\\android-sdk

처음에 안드로이드 SDK를 통해 build.xml을 만들 때 local.properties라는 프로퍼티 파일도 자동으로 생성되었을텐데, 아래와 같이 그 파일 안에 위 프로퍼티가 들어있다.

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=c:\\Java\\android-sdk

이 프로퍼티는 키스토어 정보를 담아두는 ant.properties에 함께 넣어두어도 된다.

스택오버플로우나 안드로이드 사이트에 잘 정리된 내용이 많은데, 이상하게 한글 자료는 적절한게 없어 필요한 사항 위주로 정리해보았다. 더 자세하고 친절한 좋은 글들은 아래의 참조에서 확인하자.

그 밖에

좋은 글은 시간이 지나도 영원한 것 같다. 킹오리님의 무심한 것 같지만 사실은 따뜻한 Ant 빌드 자료도 참고하자.

참조

  • http://developer.android.com/tools/projects/projects-cmdline.html#UpdatingAProject
  • http://stackoverflow.com/questions/5572304/building-android-sample-project-using-ant
  • http://developer.android.com/tools/publishing/app-signing.html

“안드로이드 앱을 앤트로 빌드하기”에 대한 1개의 생각

  1. 핑백: Android 참고 사이트 | 피노키오

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.