본 세션은 대단한 하이테크닉을 전혀 포함하지 않으며, 이런저런 팁과 꼼수를 다수 포함하고 있습니다.
안세원 ([email protected])
• 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 항목이 추가될 일도 종종 있고 • 별도 디렉터리에 xml 관리하기가 너무 싫었습니다!
전 config 구현체를 택했습니다!
여러벌 빌드 만들어내기 절차 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
Top Related