무식하게 배우는 gradleJi Heon KimGithub repository: https://github.com/ihoneymon/rocking-the-gradle
Youtube 영상: https://www.youtube.com/watch?v=5IAahr4TU5Y
rocking-the-gradle 이라는 디렉토리를 만들고
setupBuil 자바 프로젝트로 초기화 하고
task 를 작성-실행하고
test 를 작성-실행하고
멀티프로젝트(rocking-core + rocking-web)로 나누고
의존관계를 선언하고 필요한 의존성 라이브러리를 추가하는 과정을 설명한다.
스프링 기본설정을 추가하고
젠킨스에 job을 등록해서 배포하는 과정을 추가하면
그럭저럭 쓸만한 gradle tutorial이 될 수 있지 않을까?
그레이들(Gradle)로 만드는 안드로이드 요리법양 한빛✔ 세미나 커리큘럼 확인하기: http://www.hanbit.co.kr/store/education/edu_view.html?p_code=S9897423756
안드로이드 빌드 시스템, 그레이들 실무를 위하여 필요한, 빌드 타입과 제품 특성에 대하여 알아본다.
[주요 내용]
1 빌드 타입 이해하기
2 제품 특성과 빌드 변형
3 제품 특성에 따라 리소스 병합하기
4 자바 소스 코드 병합하기
[목표]
- 빌드 타입과 제품 특성을 구별할 수 있다.
- 내 프로젝트에 제품 변형(빌드 타입 + 제품 특성)을 적용해볼 수 있다.
- 제품 변형을 활용하여 고객 요구 사항에 맞게 이미지 등의 리소스를 다르게 할 수 있다.
- 제품 변형을 활용하여 고객 요구 사항에 맞게 소스 코드의 일부를 다르게 할 수 있다.
그루비 소개 발표자료 - 김연수Yeon Soo Kim사내 세미나 - 그루비 소개 발표자료
(2013. 11. 12)
최근에 파이썬 및 장고 프레임워크를 배워 간단한 웹 사이트를 구축한 이후, 우연히 그루비를 알게 되었고 자바의 모든 라이브러리 및 기능을 그대로 사용 할 수 있고, 자바 개발자의 경우 학습 비용도 거의 들지 않는다고 하여, 그루비에 대해 알아보게 되었다.
(파이썬의 경우 간결하고 깔끔한 코드에 감탄했지만, 새로운 언어를 사용하는 터라 기존의 자바 개발경험을 이용할 수 없었던 문제는 간단한 기능을 구현하는데에도 많이 답답하였다)
그리고 그렇게 알게 된 자료를 토대로 사내 세미나 발표자료를 만들어 보았다.
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java ProjectJi-Woong ChoiThis document explains how to use gradle in Java project. It contains a real sample build file using Spring MVC project which is using education example in OSC.
Jenkins with Unity3d & Android 종국 임Android 기반의 게임 프로젝트를 오픈하면서 구축한 빌드 시스템을 간
략하게 소개합니다.
osx 기반에서 Jenkins를 이용하여 Unity3D와 Android Native
Code와 설정 방법에 대해 다루고 있습니다.
세부적인 코드보다는 전체적인 흐름에 초점을 맞췄으므로
참고용으로 보시기 바랍니다.
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기YoungjikYoon멀티 모듈을 이용한 안드로이드 프로젝트 개발이 늘어나고 있습니다.
하지만 모듈을 만들 때 마다 build.gradle의 중복 코드가 생기고 있다는 사실을 아시나요?
이러한 문제를 해결하기 위해 빌드 로직을 효율적으로 관리하는 Gradle Kotlin 컨벤션 플러그인을 소개합니다.
*페이지 마지막에 코드 링크 첨부되어 있습니다.
[오픈소스컨설팅]Gradle Basic - How to use Gradle in Java ProjectJi-Woong ChoiThis document explains how to use gradle in Java project. It contains a real sample build file using Spring MVC project which is using education example in OSC.
Jenkins with Unity3d & Android 종국 임Android 기반의 게임 프로젝트를 오픈하면서 구축한 빌드 시스템을 간
략하게 소개합니다.
osx 기반에서 Jenkins를 이용하여 Unity3D와 Android Native
Code와 설정 방법에 대해 다루고 있습니다.
세부적인 코드보다는 전체적인 흐름에 초점을 맞췄으므로
참고용으로 보시기 바랍니다.
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기YoungjikYoon멀티 모듈을 이용한 안드로이드 프로젝트 개발이 늘어나고 있습니다.
하지만 모듈을 만들 때 마다 build.gradle의 중복 코드가 생기고 있다는 사실을 아시나요?
이러한 문제를 해결하기 위해 빌드 로직을 효율적으로 관리하는 Gradle Kotlin 컨벤션 플러그인을 소개합니다.
*페이지 마지막에 코드 링크 첨부되어 있습니다.
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk INFCON 2022에서 진행했던 "Rust 크로스 플랫폼 프로그래밍"의 발표 자료입니다. Rust 언어로 크로스 플랫폼 엔진을 어떻게 만드는지, 그리고 만들면서 겪었던 시행착오와 해결 방법을 이야기했습니다. 많으 분들에게 도움이 되었으면 합니다.
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi Docker를 활용하여 Gitlab CI/CD 설치 구성 및 샘플 테스트를 위한 가이드 문서이며, Docker 및 Gitlab에 대한 개요 및 사용법에 대해서는 다루지 않습니다. Docker image를 이용 Gitlab 및 Gitlab CI/CD 설치 및 구성 후 Sample Spring boot web application을 이용하여 소스 변경에 따른 commit이 발생 했을 때 Gitlab CI/CD 기능을 통해 application 테스트, 빌드, 배포까지의 일련의 과정이 자동으로 진행되는지를 테스트 하는 내용입니다.
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
3. 유동환을 소개합니다 #2
• 안드로이드를 위한 Gradle 무료 강의
• “문장쓰기 독서법”
브런치 조회수 10,000 (Daum노출)
3
4. 강의 목표
1. Android Studio를 활용하여 Gradle 빌드할 수 있다.
2. IDE 뿐만 아니라 Console에서도 빌드할 수 있다.
3. Github에 있는 Library를 내 프로젝트에 추가할 수 있다.
4. Module의 개념을 알고 Multi project 를 구성할 수 있다.
5. Android Gradle의 구성 요소 와 신규 용어를 학습한다.
build.gradle / gradle wrapper / module / AAR / assembleDebug
Build variants / settings.gradle / Transitive dependency / task
4
6. 1. Gradle이란 무엇인가?
• 범용 빌드 도구
• Java, Java web projects, C, C++, Android 등
• 폴리글랏 프로그래밍 (Facebook는 20여개의 언어를 동시 빌드)
• Groovy 언어 기반
• Groovy 언어를 몰라도 스크립트 작성 가능
• DSL(Domain Specific Language)
• Ant와 Maven을 계승
• Ant의 유연함 대부분의 Ant task를 gradle에서 실행 가능
• Maven의 체계성을 혼합 폴더 구조가 복잡해집
• 명령창에서도 빌드할 수 있음
• 젠킨스 등 CI와 연동 가능
6
15. 2.4 App Build.gradle
• AndroidManifest.xml을 재정의
1. 단순 덮어쓰기 깔끔하게
2. 동적으로 재정의
• APK 파일명 지정하기
• 의존성 정의
• 동적 다운로드
• Jar 파일을 다운로드 할 필요가 없다(자동으로~)
• AAR?
• Jar + Android Resources
• Jar 파일은 안드로이드 리소스(화면 / strings 등)을 가질 수 없다.
주요 업데이트 항목:
• compileSDK
• Build tools version
• applicationId
• minSDK
• targetSDK
• versionCode
• versionName 등등
15
16. 2.4 AAR = Android Archive
http://tools.android.com/tech-docs/new-build-system/aar-format
• The file extension is .aar, and the maven artifact type
should be aar as well, but the file itself a simple zip file
with the following entries:
• /AndroidManifest.xml (mandatory)
• /classes.jar (mandatory)
• /res/ (mandatory)
• /R.txt (mandatory)
• /assets/ (optional)
• /libs/*.jar (optional)
• /jni/<abi>/*.so (optional)
• /proguard.txt (optional)
• /lint.jar (optional)
apply plugin: 'com.android.library'
16
17. 2.4 Plugin?
• Gradle의 기본 단위는 Task
• Plugin은 Tasks의 집합
Android, Web, POJO 등
• apply plugin: 'com.android.application‘
APK 파일 생성
• apply plugin: 'com.android.library‘
AAR 파일 생성
17
19. 2.5 Settings.gradle
• 프로젝트에 포함될 Module 목록
• 개수가 늘어날 수록 빌드 속도가 떨어짐
• 5~6개면 일반 프로젝트는 충분
• 너무 많으면 주석처리
include ':app', ':mylibrary‘
콜론은 모듈을 의미함
19
20. 3. Dependency 추가하기
• 더 이상 JAR 파일을 로컬에 복사하지 않는다.
• 심지어는 gradle도 다운받지 않는다
• Gradle wrapper(gradlew)가 알아서 최신 버전을 다운 받는다
• Group / artifact ID / version만 지정하면 끝!
• Transitive Dependency 이해하기
20
21. 3.1 오픈소스 Library 추가
• Github에 많은 오픈소스 library가 gradle을 지원한다
• AndroidAsync: https://github.com/koush/AndroidAsync
• ButterKnife: https://github.com/JakeWharton/butterknife
21
22. 3.2 실제로 추가해보자
• App 모듈의 Build.gradle을 수정한다.
dependencies {
…
compile 'com.koushikdutta.async:androidasync:2.1.5‘
}
• IDE 에서 Sync Now 실행
22
25. 3.3 왜? 진작 만들지 못했을까?
• Dependency 관리의 어려움
• 모든 컴포넌트는 모든 컴포넌트를 참조할 수 있다!
gradlew :app:dependencies 실행
25
26. 3.4 Transitive Dependency 해결
• Gradle은 의존성 관리를 자동으로 해줌
Maven, Apache IVY의 후손
• 사례) Hibernate core library
발췌: Gradle In Action, 107page
Hibernate-
core-3.6.3-
final.jar
Hibernate-commons-
annotations-3.2.0-
final.jar
Slf4j-1.5.8.jar
Slf4j-1.6.1.jar
…
Version Conflict
26
27. 3.5 다양한 방식의 Dependency
• Gradle은 다양한 Include 방식을 제공함
사례) Omni Notes: https://github.com/federicoiosue/Omni-Notes
compile
debugCompile
androidTestCompile
releaseCompile
providedCompile 등
27
28. 3.6 Omni Notes 사례
• androidTestCompile
• fileTree
• @aar
• Android Archive
• exclude
• group
• name
• version
• debugCompile
• 디버그 모드 전용
• releaseCompile
• 릴리즈 모드 전용
28
29. 3.7 주의사항
• Gradle을 의존성의 순서를 지정할 수 없다.
순서가 문제가 되는 경우는? (일단 Gradle을 믿어보자)
• 정확한 버전을 명시하자
+를 남발하지는 말자
• 되도록이면 최신 버전을 쓰자
29
36. 4장 심화학습
여기에서는 다루지 않지만 좀더 알아봐야 할 것들
1. Local Repository 만들기
:생성된 AAR을 libs 폴더가 아닌 jCentral() 같은 저장소
를 로컬에 만들어서 참조하는 방법
2. Build Variants 다루기
: Build type(debug / release) 뿐만 아니라
Full version / Demo version 같은 product flavors 적용
36
37. 5. 기타 유용한 팁
• Apk 생성할 때 버전명 기입하기
• Console에서 task 이름을 부분 입력하여 실행하기
• Gradle daemon 활용하기
• 생성된 APK를 특정 folder에 복사하기
37
38. 5.1 APK이름에 버전 추가
• App(Module)의 Build.gradle 수정
• buildTypes {
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk",
"-${variant.versionName}.apk"))
}
}
38
39. 5.2 Task 축약 이름 실행
• Console에서..
> ./gradlew :app:asD assembleDebug 실행
> ./gradlew :app:cl clean 실행
• 축약형이 동일하면 오류 발생
> ./gradlew :app:aD 오류 발생
39
40. 5.3 Gradle Daemon 활용
• Gradle을 JVM 기반의 빌드 도구이므로
매번 실행하지 않고 그 다음에 daemon 재활용
> ./gradlew --daemon :app:aD 두번째부터..
• 실행시간
• 1st : 58.4 초 2nd: 2.8 초
※ daemon 메모리 사용량 증가됨
40
41. 5.4 생성된 APK 복사
• 생성된 APK를 특정 folder로 복사
• Module의 build.gradle 수정
task publish(dependsOn: 'assembleRelease') << {
println '>>>publish APK'
copy {
from ('build/outputs/apk') {
include '*release*.apk'
}
into 'release'
}
println '>>>publish APK(END)'
}
41
42. 결론. Android Gradle 왜 쓰지?
1. Android Studio와 찰떡궁합
2. Module 중심의 개발
• AAR을 통한 다른 부서와 협업 강화 (not JAR / source)
3. One source , Multi APK의 실현
1. Demo version
2. Lite version
3. Full version
4. For x86 , arm, mips 등
42
44. 참고문서
• 엔터프라이즈 빌드 자동화를 위한 Gradle
• Gradle 철저 입문
• Gradle Plugin User Guide – Android Tools Projects
• Gradle in Action
• Building and Testing with Gradle
• Reference a local .aar in your Android project
• Android Studio AAR 파일 만들기
44