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