SlideShare a Scribd company logo
자동으로~	
  

Ant로 안드로이드 앱을 빌드하자!	
  

    안세원 kingori@gmail.com	
  

             2012.5	
  
본 세션은 대단한 하이테크닉을 전혀 포함하지 않으며,	
  
  이런저런 팁과 꼼수를 다수 포함하고 있습니다.	
  
안세원	
  
(kingori@gmail.com)	
  
	
  
•  Datepresso	
  App	
  @	
  SunnyLoft	
  
	
  
•  PmangPlus	
  SDK	
  @	
  Neowiz	
  internet	
  
       •    Tapsonic,	
  워크라이시스, 피망맞고
            등에 탑재	
  


•      그 전엔 서버 만들었어요	
  
앱 하나 당 빌드 몇개씩 만드세요?	
  
•  마켓 별:	
  Google	
  Play,	
  T-­‐Store,	
  올레마켓, 유+ 앱마켓, 삼성앱스, …	
  

•  연동 서버 별: 개발서버,	
  QA서버, 실서버, …	
  

•  잡다구리한 설정 별: 프락시 서버, 디버깅 옵션,	
  …	
  
	
  
                                  	
  
                            이러다보니	
  
           •    일일이 이클립스에서 빌드 명령 내리기 귀찮다!	
  

                       •    가끔씩   실수한다!	
  
                                  	
  
                                  	
  

           è  자동화만이 살 길!	
  
            명령 한 방에 종류별 빌드를 줄줄이 만들고 싶어!	
  
안드로이드 빌드 자동화 도구	
  




                         SBT	
  
                                로고도 없다…	
  


 자바 웹 개발 빌드 도구 + 안드로이드 지원 기능의 형태	
  
왜 나는 Ant를 선택했는가!	
  

1. 안드로이드 프로젝트 자체 제공 빌드 툴	
  
2. 다양한 태스크 제공	
  
3. 다른 것 보다 나한테 익숙하니깐…	
  
      아무 도구나 선택해도 별 차이는 없을 듯?	
  
Ant	
  사용 완전 기초	
  
1.  홈페이지에서 최신 버전 다운받음	
  
  •    반드시 1.8 이후 버전 쓸 것!     	
  	
  
2.  원하는 위치에 압축 풀기	
  
3.  bin	
  디렉터리를 path에 추가	
  
  •    그래야 편하니깐	
  
4.  추가 태스크 설치	
  
  •    다운받아 lib디렉터리에 복사
5.  Xml로 빌드 스크립트 만들기	
  
  •    Eclipse를 쓰면 편해요!	
  
Ant	
  빌드 스크립트 구조	
  
•  Project	
  :	
  루트	
  
•  Target(s)	
  	
  
   : 수행할 업무	
  
   (ex.	
  릴리즈 빌드를 만들어라)	
  
•  Task(s)	
  
   :	
  	
  Target	
  내부의 개별 작업	
  
   (ex.	
  파일 복사, javac,	
  …)	
  

	
  




       Target	
  간 의존관계 설정, 매크로 만들기,	
  다른 ant	
  script 호출하기 등	
  
                    복잡한 내용도 공부해보세요~	
  (무책임하다)	
  
Ant	
  실행하기 	
  
ant를 path에 잡아둔 다음, 커맨드라인에서 ant만 치면 됨
           ant	
  [-­‐f	
  filename]	
  [targetname]	
  
Android	
  SDK기본 제공 기능 실습	
  

       릴리즈 빌드 만들기	
  
       1.  프로젝트 초기화	
  
       2.  릴리즈 키 만들기	
  
       3.  Proguard	
  설정하기	
  
       4.  빌드!	
  
프로젝트 초기화	
  
SDK에 포함된 android 커맨드가 다 해 준다!	
  
android	
  	
  create	
  project	
  	
  -­‐n	
  [프로젝트명]	
  –t	
  [타겟	
  API]	
  –p	
  [프로젝트 경로]	
  	
  
	
  	
  	
  -­‐k	
  [프로젝트 패키지]	
  –a	
  [생성할 액티비티 클래스명]	
  
빌드 관련 주요 파일들	
  
•    ant.properties:	
  	
  Key	
  store	
  관련 속성 지정	
  
•    project.properties:	
  프로젝트 관련 속성 (타겟 API	
  레벨, 의존 라이브러리
     프로젝트,	
  …)	
  
     •    android	
  update	
  project	
  커맨드를 사용하면 수정됨	
  
•    local.properties:	
  로컬 개발환경 속성 (SDK	
  설치 경로 등) 자동생성되므로
     수정하지 말 것.	
  
•    build.xml:	
  기본 제공하는 ant	
  빌드 스크립트. 수정하지 말자.	
  
기본 제공 target	
  
•    clean:	
  생성된 빌드 결과물 삭제	
  
•    debug:	
  디버그 빌드 생성	
  
•    release:	
  릴리즈 빌드 생성	
  
•    install,	
  install[d|r|i|t]:	
  만들어진 빌드 설치	
  
일단 ant	
  release	
  실행해 봅시다!	
  




 빌드에 성공하긴 하는데,	
  proguard와 signing은 이뤄지지 않음	
  
 è 이렇게 배포할 순 없다!	
  
릴리즈 키 적용	
  
Release	
  빌드 용 키를 만든 후,	
  ant.properties	
  에 키 정보를 등록함	
  
•  release	
  빌드 키는 이클립스에서 만들면 편해요	
  
•  보안을 위해 ant.properties	
  파일은 VCS에 넣지 말자!	
  
proguard	
  적용	
  
•  project.properties	
  에 proguard.config	
  추가	
  
•  proguard-­‐project.txt에 proguard 설정 등록	
  
   •  SDK의 기본 proguard	
  설정도 지정해두자	
  
ant	
  release	
  다시 실행	
  
•  proguard와 signing이 잘 이뤄졌다!	
  




   얼른 마켓에 올려서 재벌이 됩시다!	
  
자, 기본은 익혔으니	
  
  이제 본론으로!	
  
여러벌 빌드를 마구 만들어내려면?	
  
1.  서로 다른 설정을 적용한 apk들을 한번에 생성	
  
2.  설정별로 apk에 적절한 이름을 부여함	
  
  •      config	
  이름	
  
  •      버전 번호	
  
         ex)	
  myapp_dev_v1.0.apk	
  /	
  myapp_goog_play_v1.3.apk	
  
3.  기왕이면 서버에 업로드까지 하면 좋겠음	
  
  •      매번 QA팀 기계에 앱 심어주기 귀찮아~!	
  
  	
  
  	
  
설정 적용 방법 #1:	
  resource	
  xml	
  
res/values	
  에 설정정보 xml을 만들고, 앱에서 읽어들임	
  
  •    작성이 쉽고 	
  
  •    빌드를 자동화하기도 쉽지만 (파일만 복사하면 됨)	
  
  •    상속 등의 메커니즘을 사용할 수 없고	
  
  •    혹시나 새로 속성이 추가되면 xml	
  일일이 찾아 고쳐야 하고	
  
  •    xml을 별도의 디렉터리에 관리해야 함	
  
설정 적용 방법 #2:	
  config	
  구현체	
  
설정정보 인터페이스와 구현체 클래스를 만들어서 사용	
  
 •    코드를 작성하는 부담이 있고	
  
 •    빌드 자동화 하기도 쉽지 않지만 (코드를 직접 고쳐야 함)	
  
 •    상속 메커니즘을 사용할 수 있고	
  
 •    새로 속성이 추가되면 compile	
  time	
  error를 인지할 수 있으며
 •    별도의 장소에 class들을 관리할 필요가 없음	
  
설정 적용 방법 #2:	
  config	
  구현체	
  



              빌드 스크립트로 여길 갈아끼우는게 문제임!	
  
xml	
  / config	
  구현체 중 무엇을 택할까!	
  

    전 config	
  구현체를 택했습니다!	
  
•  생각보다 config 종류가 많아졌고	
  
•  버전업 하다보니 config 항목이 추가될 일도 종종 있고	
  
•  별도 디렉터리에 xml	
  관리하기가 너무 싫었습니다!	
  
여러벌 빌드 만들어내기 절차	
  
1.  새로운 build	
  script	
  를 만든다 (dist.xml)	
  
2.  다음 작업을 config 개수 만큼 수행한다	
  
    1.  MyApp	
  의 코드 중 Config	
  인스턴스 생성 코드를 갈아치운다.	
  
   2.  원래 build.xml 의 release	
  타겟을 호출한다.	
  
   3.  만들어진 apk	
  파일의 이름을 바꾸고, 적절한 디렉터리에 복사한다.	
  
       •  config마다 구분을 해야 하고, 후속 빌드의 overwrite 를 방지하며	
  
       •  clean으로 삭제되어 버리지 않도록	
  

      ant	
  만으론 이 작업이 쉽지 않다.	
  sed	
  등의 외부 도구를 적극 사용하자!	
  
여러벌 빌드 만들어내기 xml	
  


             버전마다 빨강 박스만 바뀐다	
  
여러벌 빌드 만들어내기 xml	
  	
  -­‐중복제거	
  
여러벌 빌드 만들어내기 실행	
  
설치해보자!	
  




 야~ 잘 된당~!	
  
여러벌 빌드를 마구 만들어내려면?	
  
1.  서로 다른 설정을 적용한 apk들을 한번에 생성	
  
2.  설정별로 apk에 적절한 이름을 부여함	
  
  •      config	
  이름	
  
  •      버전 번호	
  
         ex)	
  myapp_dev_v1.0.apk	
  /	
  myapp_goog_play_v1.3.apk	
  
3.  기왕이면 서버에 업로드까지 하면 좋겠음	
  
  •      매번 QA팀 기계에 앱 심어주기 귀찮아~!	
  
  	
  
  	
  
우린 이미 버전 번호를 갖고 있다!	
  

             근데 xml	
  중에서 어떻게 뽑아내지?	
  
             à	
  xpath!	
  
우린 이미 버전 번호를 갖고 있다!	
  
 •  Manifest의 versionName을 찾아가는 xpath	
  query:	
  	
  
          /manifest/@*[local-­‐name()='versionName']	
  
 •  Ant에서 xpath	
  를 이용하려면 3rd	
  party	
  library가 필요함.	
  
          ex)	
  XMLTask	
  http://www.oopsconsultancy.com/software/xmltask/	
  
 	
  
 	
  	
  

이제 XMLTask를 이용해 버전 이름을 뽑아낸 다음,	
  	
  
          파일명 뒤에 붙이자!	
  
                	
  
버전 번호 붙은 apk	
  만들기	
  
버전 번호 붙은 apk	
  만들기	
  
여러벌 빌드를 마구 만들어내려면?	
  
1.  서로 다른 설정을 적용한 apk들을 한번에 생성	
  
2.  설정별로 apk에 적절한 이름을 부여함	
  
  •      config	
  이름	
  
  •      버전 번호	
  
         ex)	
  myapp_dev_v1.0.apk	
  /	
  myapp_goog_play_v1.3.apk	
  
3.  기왕이면 서버에 업로드까지 하면 좋겠음	
  
  •      매번 QA팀 기계에 앱 심어주기 귀찮아~!	
  
  	
  
  	
  
apk도 준비됐으니 서버에 올려보자!	
  
안드로이드 웹 브라우저로 접근하면	
  
바로 apk	
  를 설치할 수 있다.	
  
à  QA,	
  기획자 디바이스에 일일이 USB	
  꼽아	
  
    설치해 줄 필요가 없다!	
  

이를 위해선	
  
•  apk를 서버에 업로드하고	
  
•  html 페이지를 생성해야 한다!	
  
작업 시나리오	
  
1.  index.html 파일 생성	
  
  •  ls	
  결과를 이용해 html 생성 (sed이용)	
  
2.  FTP	
  혹은 SFTP로 파일 전송	
  
  •  ant의 ftp나 sshexec	
  task	
  사용	
  
                                             구체적인 	
  
                                            작업 내용은	
  
                                           서버 환경에 따라	
  
                                            case	
  by	
  case!	
  
정리	
  
1.  앱을 만들다 보면 여러 벌의 apk	
  빌드가 필요해진다.	
  
2.  자동화해야 실수도 줄이고, 편하다.	
  
3.  여러 자동화 도구가 있다. 취향에 맞게 선택하자.	
  
4.  ant로 빌드를 자동화 해 봤다.	
  
    1.  기본 제공 ant	
  script로 릴리즈 빌드를 만들었다.	
  
    2.  java	
  interface기반 config를 이용해 환경 별 빌드를 만들었다.	
  
    3.  ant의 macrodef를 이용하면 중복을 제거할 수 있다.	
  
    4.  xpath를 이용해 버전번호를 apk	
  	
  파일명에 적용했다.	
  
    5.  서버로 업로드해서 배포하면 편하다.	
  	
  
    6.  업로드 script는 case	
  by	
  case.	
  
5.  하다보면 여러모로 맥이 편하다. 사장님 맥 사쥬세효!	
  
질문?	
  
고맙습니다!	
  
              샘플 프로젝트 URL:	
  	
  
https://github.com/kingori/android_ant_sample	
  	
  




                                      Datepresso 가입도 해 주셔요~	
  J	
  

More Related Content

PDF
gradle로 안드로이드 앱 빌드하기
PPTX
안드로이드를 위한 Gradle 맛들이기
DOCX
Gradle guide
PDF
20130709 gradle
PDF
그레이들(Gradle)로 만드는 안드로이드 요리법
ODP
무식하게 배우는 gradle
PDF
URQA 삼성 컨퍼런스 발표
PDF
그루비로 안드로이드 앱 개발하기
gradle로 안드로이드 앱 빌드하기
안드로이드를 위한 Gradle 맛들이기
Gradle guide
20130709 gradle
그레이들(Gradle)로 만드는 안드로이드 요리법
무식하게 배우는 gradle
URQA 삼성 컨퍼런스 발표
그루비로 안드로이드 앱 개발하기

What's hot (20)

PPTX
Gradle 사용하기
PDF
그루비 소개 발표자료 - 김연수
PDF
스프링 프로젝트 시작하기
PPTX
Logcat과 함께 하는 모바일 웹 디버깅
PDF
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
PDF
Angular Seminar [한빛미디어 리얼타임 세미나]
PDF
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
PPTX
안드로이드 빌드 with Gradle
PDF
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
PDF
Angular는 사실 어렵지 않습니다.
PPTX
Modern Android App Development
PDF
이클립스 플랫폼
PPTX
Spring Boot + React + Gradle in VSCode
PDF
Flipper 불완전 정복
PDF
Welcome to Android Studio
PDF
[D2 오픈세미나]5.html5 api 테트리스게임_이진권
PPTX
Ionic2로 Type script+Angular2.0 따라하기 1
PDF
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
PDF
Ionic으로 모바일앱 만들기 #5
PDF
Ionic으로 모바일앱 만들기 #1
Gradle 사용하기
그루비 소개 발표자료 - 김연수
스프링 프로젝트 시작하기
Logcat과 함께 하는 모바일 웹 디버깅
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java Project
Angular Seminar [한빛미디어 리얼타임 세미나]
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
안드로이드 빌드 with Gradle
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
Angular는 사실 어렵지 않습니다.
Modern Android App Development
이클립스 플랫폼
Spring Boot + React + Gradle in VSCode
Flipper 불완전 정복
Welcome to Android Studio
[D2 오픈세미나]5.html5 api 테트리스게임_이진권
Ionic2로 Type script+Angular2.0 따라하기 1
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
Ionic으로 모바일앱 만들기 #5
Ionic으로 모바일앱 만들기 #1
Ad

Viewers also liked (20)

PDF
[Jscamp] Titanium - Javascript를 이용한 크로스 플랫폼 앱 개발
PDF
Titanium 소개 - 당신이 알고 있는 타이타늄 rev.201310
PDF
Leadership Guide, 초보팀장을 위한 리더십 가이드
PDF
NVIDIA GRID K2とVDIにおけるCAD利用の評価
PDF
메이븐 기본 이해
PDF
주키퍼
PPTX
하이브리드 앱_개발_개요
PDF
프로젝트에서 Sw아키텍트의 역할 20140717
PDF
젠킨스 설치 및 설정
PDF
[1A5]효율적인안드로이드앱개발
PDF
안드로이드 플랫폼기반의 푸시서버 아키텍처
PDF
모바일 메신저 아키텍쳐 소개
PPTX
Apache ZooKeeper 로
 분산 서버 만들기
PDF
화성에서 온 개발자, 금성에서 온 기획자
PDF
지금 핫한 Real-time In-memory Stream Processing 이야기
PPTX
Facebook's Growth Hacker on how they put Facebook on the Path to 1 Billion Users
PDF
SW 아키텍처 분석방법
PDF
사례로 본 모바일 웹/앱 기획, 제작 과정 및 포인트
PDF
World Best Tips Seo Guide
DOC
спілкуватися з дитиною.як
[Jscamp] Titanium - Javascript를 이용한 크로스 플랫폼 앱 개발
Titanium 소개 - 당신이 알고 있는 타이타늄 rev.201310
Leadership Guide, 초보팀장을 위한 리더십 가이드
NVIDIA GRID K2とVDIにおけるCAD利用の評価
메이븐 기본 이해
주키퍼
하이브리드 앱_개발_개요
프로젝트에서 Sw아키텍트의 역할 20140717
젠킨스 설치 및 설정
[1A5]효율적인안드로이드앱개발
안드로이드 플랫폼기반의 푸시서버 아키텍처
모바일 메신저 아키텍쳐 소개
Apache ZooKeeper 로
 분산 서버 만들기
화성에서 온 개발자, 금성에서 온 기획자
지금 핫한 Real-time In-memory Stream Processing 이야기
Facebook's Growth Hacker on how they put Facebook on the Path to 1 Billion Users
SW 아키텍처 분석방법
사례로 본 모바일 웹/앱 기획, 제작 과정 및 포인트
World Best Tips Seo Guide
спілкуватися з дитиною.як
Ad

Similar to ant로 안드로이드 앱을 자동으로 빌드하자 (20)

PDF
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
PPTX
안드로이드 오픈소스 어플리케이션 블록
PDF
안드로이드 빌드: 설탕없는 세계
PPTX
NHNNEXT 고등학생 창의체험 프로그래밍 실습
PDF
NDC 2015 삼시세끼 빌드만들기
PDF
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
PDF
Sencha touch2-sdk-tools-window
PPT
레가시 프로젝트의 빌드 자동화
PDF
Android Security Internals (Lesson 3)
PDF
Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~
PPTX
CI in the Mobile World (한글번역)
PPT
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
PDF
Firefox OS 앱 개발하기 - 1주차
PPTX
Open Source Engineering V2
PDF
[DroidKnight2019] 구글 플레이 다이나믹 딜리버리
PPTX
2. xamarin.android 2.1 hello android(xamarin.android application) example part.1
PPTX
빠르고 지속적으로 전달하기: Continuous Delivery for Android
PPTX
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
PDF
Sencha touch2-sdk-tools-mac
PDF
[Hello World 천안아산] 안드로이드 입문
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
안드로이드 오픈소스 어플리케이션 블록
안드로이드 빌드: 설탕없는 세계
NHNNEXT 고등학생 창의체험 프로그래밍 실습
NDC 2015 삼시세끼 빌드만들기
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
Sencha touch2-sdk-tools-window
레가시 프로젝트의 빌드 자동화
Android Security Internals (Lesson 3)
Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~
CI in the Mobile World (한글번역)
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
Firefox OS 앱 개발하기 - 1주차
Open Source Engineering V2
[DroidKnight2019] 구글 플레이 다이나믹 딜리버리
2. xamarin.android 2.1 hello android(xamarin.android application) example part.1
빠르고 지속적으로 전달하기: Continuous Delivery for Android
Atlassian JIRA Plugin 및 REST API를 이용한 기능 확장
Sencha touch2-sdk-tools-mac
[Hello World 천안아산] 안드로이드 입문

More from Sewon Ann (8)

PDF
Android studio 디버거 조금 더 잘 쓰기
PDF
지금은 Constraint layout 시대
PDF
안드로이드 개발에 유용한 도구들
PDF
백엔드 서버 구축없이 모바일 앱앱 만들어보기
PDF
Framer js a/s talk
PDF
develop android app using intellij
PDF
Google Hackathon Korea - hangout mafia
PPTX
Spring 3의 jsr 303 지원
Android studio 디버거 조금 더 잘 쓰기
지금은 Constraint layout 시대
안드로이드 개발에 유용한 도구들
백엔드 서버 구축없이 모바일 앱앱 만들어보기
Framer js a/s talk
develop android app using intellij
Google Hackathon Korea - hangout mafia
Spring 3의 jsr 303 지원

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

  • 1. 자동으로~   Ant로 안드로이드 앱을 빌드하자!   안세원 kingori@gmail.com   2012.5  
  • 2. 본 세션은 대단한 하이테크닉을 전혀 포함하지 않으며,   이런저런 팁과 꼼수를 다수 포함하고 있습니다.  
  • 3. 안세원   (kingori@gmail.com)     •  Datepresso  App  @  SunnyLoft     •  PmangPlus  SDK  @  Neowiz  internet   •  Tapsonic,  워크라이시스, 피망맞고 등에 탑재   •  그 전엔 서버 만들었어요  
  • 4. 앱 하나 당 빌드 몇개씩 만드세요?   •  마켓 별:  Google  Play,  T-­‐Store,  올레마켓, 유+ 앱마켓, 삼성앱스, …   •  연동 서버 별: 개발서버,  QA서버, 실서버, …   •  잡다구리한 설정 별: 프락시 서버, 디버깅 옵션,  …       이러다보니   •  일일이 이클립스에서 빌드 명령 내리기 귀찮다!   •  가끔씩 실수한다!       è  자동화만이 살 길!   명령 한 방에 종류별 빌드를 줄줄이 만들고 싶어!  
  • 5. 안드로이드 빌드 자동화 도구   SBT   로고도 없다…   자바 웹 개발 빌드 도구 + 안드로이드 지원 기능의 형태  
  • 6. 왜 나는 Ant를 선택했는가!   1. 안드로이드 프로젝트 자체 제공 빌드 툴   2. 다양한 태스크 제공   3. 다른 것 보다 나한테 익숙하니깐…   아무 도구나 선택해도 별 차이는 없을 듯?  
  • 7. Ant  사용 완전 기초   1.  홈페이지에서 최신 버전 다운받음   •  반드시 1.8 이후 버전 쓸 것!     2.  원하는 위치에 압축 풀기   3.  bin  디렉터리를 path에 추가   •  그래야 편하니깐   4.  추가 태스크 설치   •  다운받아 lib디렉터리에 복사 5.  Xml로 빌드 스크립트 만들기   •  Eclipse를 쓰면 편해요!  
  • 8. Ant  빌드 스크립트 구조   •  Project  :  루트   •  Target(s)     : 수행할 업무   (ex.  릴리즈 빌드를 만들어라)   •  Task(s)   :    Target  내부의 개별 작업   (ex.  파일 복사, javac,  …)     Target  간 의존관계 설정, 매크로 만들기,  다른 ant  script 호출하기 등   복잡한 내용도 공부해보세요~  (무책임하다)  
  • 9. Ant  실행하기   ant를 path에 잡아둔 다음, 커맨드라인에서 ant만 치면 됨 ant  [-­‐f  filename]  [targetname]  
  • 10. Android  SDK기본 제공 기능 실습   릴리즈 빌드 만들기   1.  프로젝트 초기화   2.  릴리즈 키 만들기   3.  Proguard  설정하기   4.  빌드!  
  • 11. 프로젝트 초기화   SDK에 포함된 android 커맨드가 다 해 준다!   android    create  project    -­‐n  [프로젝트명]  –t  [타겟  API]  –p  [프로젝트 경로]          -­‐k  [프로젝트 패키지]  –a  [생성할 액티비티 클래스명]  
  • 12. 빌드 관련 주요 파일들   •  ant.properties:    Key  store  관련 속성 지정   •  project.properties:  프로젝트 관련 속성 (타겟 API  레벨, 의존 라이브러리 프로젝트,  …)   •  android  update  project  커맨드를 사용하면 수정됨   •  local.properties:  로컬 개발환경 속성 (SDK  설치 경로 등) 자동생성되므로 수정하지 말 것.   •  build.xml:  기본 제공하는 ant  빌드 스크립트. 수정하지 말자.  
  • 13. 기본 제공 target   •  clean:  생성된 빌드 결과물 삭제   •  debug:  디버그 빌드 생성   •  release:  릴리즈 빌드 생성   •  install,  install[d|r|i|t]:  만들어진 빌드 설치  
  • 14. 일단 ant  release  실행해 봅시다!   빌드에 성공하긴 하는데,  proguard와 signing은 이뤄지지 않음   è 이렇게 배포할 순 없다!  
  • 15. 릴리즈 키 적용   Release  빌드 용 키를 만든 후,  ant.properties  에 키 정보를 등록함   •  release  빌드 키는 이클립스에서 만들면 편해요   •  보안을 위해 ant.properties  파일은 VCS에 넣지 말자!  
  • 16. proguard  적용   •  project.properties  에 proguard.config  추가   •  proguard-­‐project.txt에 proguard 설정 등록   •  SDK의 기본 proguard  설정도 지정해두자  
  • 17. ant  release  다시 실행   •  proguard와 signing이 잘 이뤄졌다!   얼른 마켓에 올려서 재벌이 됩시다!  
  • 18. 자, 기본은 익혔으니   이제 본론으로!  
  • 19. 여러벌 빌드를 마구 만들어내려면?   1.  서로 다른 설정을 적용한 apk들을 한번에 생성   2.  설정별로 apk에 적절한 이름을 부여함   •  config  이름   •  버전 번호   ex)  myapp_dev_v1.0.apk  /  myapp_goog_play_v1.3.apk   3.  기왕이면 서버에 업로드까지 하면 좋겠음   •  매번 QA팀 기계에 앱 심어주기 귀찮아~!      
  • 20. 설정 적용 방법 #1:  resource  xml   res/values  에 설정정보 xml을 만들고, 앱에서 읽어들임   •  작성이 쉽고   •  빌드를 자동화하기도 쉽지만 (파일만 복사하면 됨)   •  상속 등의 메커니즘을 사용할 수 없고   •  혹시나 새로 속성이 추가되면 xml  일일이 찾아 고쳐야 하고   •  xml을 별도의 디렉터리에 관리해야 함  
  • 21. 설정 적용 방법 #2:  config  구현체   설정정보 인터페이스와 구현체 클래스를 만들어서 사용   •  코드를 작성하는 부담이 있고   •  빌드 자동화 하기도 쉽지 않지만 (코드를 직접 고쳐야 함)   •  상속 메커니즘을 사용할 수 있고   •  새로 속성이 추가되면 compile  time  error를 인지할 수 있으며 •  별도의 장소에 class들을 관리할 필요가 없음  
  • 22. 설정 적용 방법 #2:  config  구현체   빌드 스크립트로 여길 갈아끼우는게 문제임!  
  • 23. xml  / config  구현체 중 무엇을 택할까!   전 config  구현체를 택했습니다!   •  생각보다 config 종류가 많아졌고   •  버전업 하다보니 config 항목이 추가될 일도 종종 있고   •  별도 디렉터리에 xml  관리하기가 너무 싫었습니다!  
  • 24. 여러벌 빌드 만들어내기 절차   1.  새로운 build  script  를 만든다 (dist.xml)   2.  다음 작업을 config 개수 만큼 수행한다   1.  MyApp  의 코드 중 Config  인스턴스 생성 코드를 갈아치운다.   2.  원래 build.xml 의 release  타겟을 호출한다.   3.  만들어진 apk  파일의 이름을 바꾸고, 적절한 디렉터리에 복사한다.   •  config마다 구분을 해야 하고, 후속 빌드의 overwrite 를 방지하며   •  clean으로 삭제되어 버리지 않도록   ant  만으론 이 작업이 쉽지 않다.  sed  등의 외부 도구를 적극 사용하자!  
  • 25. 여러벌 빌드 만들어내기 xml   버전마다 빨강 박스만 바뀐다  
  • 26. 여러벌 빌드 만들어내기 xml    -­‐중복제거  
  • 28. 설치해보자!   야~ 잘 된당~!  
  • 29. 여러벌 빌드를 마구 만들어내려면?   1.  서로 다른 설정을 적용한 apk들을 한번에 생성   2.  설정별로 apk에 적절한 이름을 부여함   •  config  이름   •  버전 번호   ex)  myapp_dev_v1.0.apk  /  myapp_goog_play_v1.3.apk   3.  기왕이면 서버에 업로드까지 하면 좋겠음   •  매번 QA팀 기계에 앱 심어주기 귀찮아~!      
  • 30. 우린 이미 버전 번호를 갖고 있다!   근데 xml  중에서 어떻게 뽑아내지?   à  xpath!  
  • 31. 우린 이미 버전 번호를 갖고 있다!   •  Manifest의 versionName을 찾아가는 xpath  query:     /manifest/@*[local-­‐name()='versionName']   •  Ant에서 xpath  를 이용하려면 3rd  party  library가 필요함.   ex)  XMLTask  http://www.oopsconsultancy.com/software/xmltask/         이제 XMLTask를 이용해 버전 이름을 뽑아낸 다음,     파일명 뒤에 붙이자!    
  • 32. 버전 번호 붙은 apk  만들기  
  • 33. 버전 번호 붙은 apk  만들기  
  • 34. 여러벌 빌드를 마구 만들어내려면?   1.  서로 다른 설정을 적용한 apk들을 한번에 생성   2.  설정별로 apk에 적절한 이름을 부여함   •  config  이름   •  버전 번호   ex)  myapp_dev_v1.0.apk  /  myapp_goog_play_v1.3.apk   3.  기왕이면 서버에 업로드까지 하면 좋겠음   •  매번 QA팀 기계에 앱 심어주기 귀찮아~!      
  • 35. apk도 준비됐으니 서버에 올려보자!   안드로이드 웹 브라우저로 접근하면   바로 apk  를 설치할 수 있다.   à  QA,  기획자 디바이스에 일일이 USB  꼽아   설치해 줄 필요가 없다!   이를 위해선   •  apk를 서버에 업로드하고   •  html 페이지를 생성해야 한다!  
  • 36. 작업 시나리오   1.  index.html 파일 생성   •  ls  결과를 이용해 html 생성 (sed이용)   2.  FTP  혹은 SFTP로 파일 전송   •  ant의 ftp나 sshexec  task  사용   구체적인   작업 내용은   서버 환경에 따라   case  by  case!  
  • 37. 정리   1.  앱을 만들다 보면 여러 벌의 apk  빌드가 필요해진다.   2.  자동화해야 실수도 줄이고, 편하다.   3.  여러 자동화 도구가 있다. 취향에 맞게 선택하자.   4.  ant로 빌드를 자동화 해 봤다.   1.  기본 제공 ant  script로 릴리즈 빌드를 만들었다.   2.  java  interface기반 config를 이용해 환경 별 빌드를 만들었다.   3.  ant의 macrodef를 이용하면 중복을 제거할 수 있다.   4.  xpath를 이용해 버전번호를 apk    파일명에 적용했다.   5.  서버로 업로드해서 배포하면 편하다.     6.  업로드 script는 case  by  case.   5.  하다보면 여러모로 맥이 편하다. 사장님 맥 사쥬세효!  
  • 39. 고맙습니다!   샘플 프로젝트 URL:     https://github.com/kingori/android_ant_sample     Datepresso 가입도 해 주셔요~  J