Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

안드로이드를 위한 Gradle 맛들이기

12.497 Aufrufe

Veröffentlicht am

2016년 2월 20일에 공개 세미나 발표자료
<안드로이드를>(한빛미디어) 집필하기전에 만든 축약판입니다.

Veröffentlicht in: Software
  • Dating direct: ❤❤❤ http://bit.ly/369VOVb ❤❤❤
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Dating for everyone is here: ♥♥♥ http://bit.ly/369VOVb ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

안드로이드를 위한 Gradle 맛들이기

  1. 1. 자바카페 유동환 안드로이드를 위한 GRADLE 빌드 맛들이기 1
  2. 2. 유동환을 소개합니다 • LG전자 선임연구원 • 유동의 브런치 https://brunch.co.kr/@yudong • 유동의 페북 https://www.facebook.com/koreacio • <안드로이드를 위한 Gradle> 집필(2016) • <Professional Java Web Services> 번역(2003) • 10년 500권의 독서 달성 (2006년 ~ 2015년) • 사내 독서습관클럽 운영자 2
  3. 3. 유동환을 소개합니다 #2 • 안드로이드를 위한 Gradle 무료 강의 • “문장쓰기 독서법”  브런치 조회수 10,000 (Daum노출) 3
  4. 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
  5. 5. 목차 1. Gradle이란 무엇인가? 2. Android Gradle 살펴보기 3. Dependency 추가하기 4. 멀티 프로젝트 세팅 5
  6. 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
  7. 7. 2. Android Gradle 살펴보기 1. Android Build System 2. Android Gradle의 구성요소 3. 처음 빌드해보기 4. Build.gradle 5. Settings.gradle 7
  8. 8. 2.1 Android Build System • 결국은 APK를 만드는 방법이다! • 우리가 알아야 할 것 • 컴파일 • Signing (Debug / Release) • 멀티 APK 만들기 8
  9. 9. 2.2 Android Gradle 구성요소 • 이클립스와는 다르다! 복합하다? 9
  10. 10. 2.2 Android Gradle 구성요소 • Project의 Build.gradle • Android Gradle 플러그인 버전 지정 • Allprojects 항목 • 하위 모듈 공통적으로 해당하는 항목들 • App(모듈)의 Build.gradle • AndroidManifest.xml 재정의 하기 • Build tools / minSDK / targetSDK / • applicationId / versionCode / versionName 10
  11. 11. 2.2 Android Gradle 구성요소 • Settings.gradle  멀티 프로젝트에 포함되는 하위 모듈 목록 • Gradle.properties  기타 환경 변수들 • Local.properties  SDK Home 등 11
  12. 12. 2.3 처음 빌드 해보기 • IDE에서 빌드하기 >apk생성: /app/build/output/apk/ • Console에서 빌드하기 12
  13. 13. 2.4 Project Build.gradle • buildscript 블록 • repository? • jcenter?  AAR 저장소 • mavenCentral? • allprojects 블록 • repository • task 선언도 가능 13
  14. 14. 2.4 Project Build.gradle • Jcenter를 따라가보자  https://github.com/koush/AndroidAsync http://jcenter.bintray.com/com/koushikdutta/async/ androidasync/2.1.6/ 14
  15. 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. 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. 17. 2.4 Plugin? • Gradle의 기본 단위는 Task • Plugin은 Tasks의 집합  Android, Web, POJO 등 • apply plugin: 'com.android.application‘  APK 파일 생성 • apply plugin: 'com.android.library‘  AAR 파일 생성 17
  18. 18. 2.4 기타 Plugins 18
  19. 19. 2.5 Settings.gradle • 프로젝트에 포함될 Module 목록 • 개수가 늘어날 수록 빌드 속도가 떨어짐 • 5~6개면 일반 프로젝트는 충분 • 너무 많으면 주석처리 include ':app', ':mylibrary‘  콜론은 모듈을 의미함 19
  20. 20. 3. Dependency 추가하기 • 더 이상 JAR 파일을 로컬에 복사하지 않는다. • 심지어는 gradle도 다운받지 않는다 • Gradle wrapper(gradlew)가 알아서 최신 버전을 다운 받는다 • Group / artifact ID / version만 지정하면 끝! • Transitive Dependency 이해하기 20
  21. 21. 3.1 오픈소스 Library 추가 • Github에 많은 오픈소스 library가 gradle을 지원한다 • AndroidAsync: https://github.com/koush/AndroidAsync • ButterKnife: https://github.com/JakeWharton/butterknife 21
  22. 22. 3.2 실제로 추가해보자 • App 모듈의 Build.gradle을 수정한다. dependencies { … compile 'com.koushikdutta.async:androidasync:2.1.5‘ } • IDE 에서 Sync Now 실행 22
  23. 23. 3.2 실제로 추가해보자 • Console에서 실행해보기 dependencies { … compile 'com.koushikdutta.async:androidasync:2.1.5‘ } 23
  24. 24. 3.2 실제로 추가해보자 • 실제 파일 확인 24
  25. 25. 3.3 왜? 진작 만들지 못했을까? • Dependency 관리의 어려움 • 모든 컴포넌트는 모든 컴포넌트를 참조할 수 있다! gradlew :app:dependencies 실행 25
  26. 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. 27. 3.5 다양한 방식의 Dependency • Gradle은 다양한 Include 방식을 제공함 사례) Omni Notes: https://github.com/federicoiosue/Omni-Notes compile debugCompile androidTestCompile releaseCompile providedCompile 등 27
  28. 28. 3.6 Omni Notes 사례 • androidTestCompile • fileTree • @aar • Android Archive • exclude • group • name • version • debugCompile • 디버그 모드 전용 • releaseCompile • 릴리즈 모드 전용 28
  29. 29. 3.7 주의사항 • Gradle을 의존성의 순서를 지정할 수 없다.  순서가 문제가 되는 경우는? (일단 Gradle을 믿어보자) • 정확한 버전을 명시하자 +를 남발하지는 말자 • 되도록이면 최신 버전을 쓰자 29
  30. 30. 3.8 Gradle dependencies 해보자 • ./gradlew :app:denpendencies 해보면 생각보다 많은 정 보를 얻을 수 있다. 30
  31. 31. 4. Multi Project 구성 • App Module 과 Library Module로 분리 개발 • Library Module 소스 참조 방식 • Library AAR 참조 방식 31
  32. 32. 4.1 Library Project 생성하기 • Module • App Module  APK 생성 • Library Module  AAR 생성 • Android Studio > File > New > New Module • Build.gradle이 생성됨 • Settings.gradle에 추가됨 32
  33. 33. 4.2 App 모듈에서 추가하기 • App의 Build.gradle 변경 • 1) 소스 참조 방식 dependencies { compile project(‘:mylibrary’) } 33
  34. 34. 4.2 App 모듈에서 추가하기 • App의 Build.gradle 변경 • 2) AAR 직접 참조 방식 repositories { jcenter() flatDir { dirs 'libs' } } dependencies { compile 'com.example.mylibrary:mylibrary-debug:1.0@aar' } 34
  35. 35. 4.3 Library 모듈 호출하기 • :mylibrary에는 LibraryMain.java에 Activity존재함 35
  36. 36. 4장 심화학습 여기에서는 다루지 않지만 좀더 알아봐야 할 것들 1. Local Repository 만들기 :생성된 AAR을 libs 폴더가 아닌 jCentral() 같은 저장소 를 로컬에 만들어서 참조하는 방법 2. Build Variants 다루기 : Build type(debug / release) 뿐만 아니라 Full version / Demo version 같은 product flavors 적용 36
  37. 37. 5. 기타 유용한 팁 • Apk 생성할 때 버전명 기입하기 • Console에서 task 이름을 부분 입력하여 실행하기 • Gradle daemon 활용하기 • 생성된 APK를 특정 folder에 복사하기 37
  38. 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. 39. 5.2 Task 축약 이름 실행 • Console에서.. > ./gradlew :app:asD  assembleDebug 실행 > ./gradlew :app:cl  clean 실행 • 축약형이 동일하면 오류 발생 > ./gradlew :app:aD  오류 발생 39
  40. 40. 5.3 Gradle Daemon 활용 • Gradle을 JVM 기반의 빌드 도구이므로 매번 실행하지 않고 그 다음에 daemon 재활용 > ./gradlew --daemon :app:aD  두번째부터.. • 실행시간 • 1st : 58.4 초  2nd: 2.8 초 ※ daemon 메모리 사용량 증가됨 40
  41. 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. 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
  43. 43. 감사합니다^^ 43
  44. 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

×