IT_Programming/Dev Tools

custom_rules.xml

JJun ™ 2014. 5. 7. 10:05



 출처: http://sunphiz.me/wp/archives/746



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

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

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

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

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

예를 들면,

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

추후 안드로이드 SDK의 업데이트나 다른 환경과의 호환성을 유지하기위해서는 build.xml을 함부로 고치는 것은 지양할 일이다.
하지만 꼭 수정해야한다면 어떻게 해야할까? 이 때는 custom_rules.xml 을 이용해 보자. 

안드로이드의 build.xml은 clean, debug, release 같은 잘 알려진 타겟 이외에 선언만 되고
내부적으로 작업이 없는 몇가지 타겟들을 가지고 있다.
그리고 그 타겟들을 custom_rules.xml 파일을 통해 재정의하면 빌드시에 실행된다.

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

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

아래는 custom_rules.xml의 전문이다.

위의 내용을 가진 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를 통해 build.xml을 만들 때 local.properties라는 프로퍼티 파일도 자동으로 생성되었을텐데,
아래와 같이 그 파일 안에 위 프로퍼티가 들어있다.

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

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

그 밖에

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

ant로 안드로이드 앱을 자동으로 빌드하자.pdf


참조

  • 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



ant로 안드로이드 앱을 자동으로 빌드하자.pdf
2.75MB