✔ 세미나 커리큘럼 확인하기: http://www.hanbit.co.kr/store/education/edu_view.html?p_code=S9897423756
안드로이드 빌드 시스템, 그레이들 실무를 위하여 필요한, 빌드 타입과 제품 특성에 대하여 알아본다.
[주요 내용]
1 빌드 타입 이해하기
2 제품 특성과 빌드 변형
3 제품 특성에 따라 리소스 병합하기
4 자바 소스 코드 병합하기
[목표]
- 빌드 타입과 제품 특성을 구별할 수 있다.
- 내 프로젝트에 제품 변형(빌드 타입 + 제품 특성)을 적용해볼 수 있다.
- 제품 변형을 활용하여 고객 요구 사항에 맞게 이미지 등의 리소스를 다르게 할 수 있다.
- 제품 변형을 활용하여 고객 요구 사항에 맞게 소스 코드의 일부를 다르게 할 수 있다.
2. Page 2
강사 소개
유동환
1.
2.
3.
4.
취미는 글쓰기(브런치) & 책읽기(2주한권독서클럽)5.
“책쓰는 프로그래머 협회” 대표 운영진,
“자바카페” 및 “한국 자바 개발자 협의회(JCO)”에서 활동했음
안드로이드 앱 개발자
<안드로이드를 위한 그레이들>(2016) 집필
<그레이들 레시피>(2016), <Professional Java Web Services>(2002) 번역
6.
주 언어는 자바
3. Page 3
목차
안드로이드 빌드 시스템 그레이들 실무를 위하여
1.
2.
3.
4.
라이브러리 모듈5.
테스트
그레이들 및 안드로이드 스튜디오 소개
저장소와 APK 서명
빌드 타입과 제품 특성
6.
외부 라이브러리 추가
RealTime 세미나 3
세미나 커리큘럼
확인하기 ›››
5. Page 5
4강에서 배우는 내용
4.1 빌드 타입 이해하기
4.2 제품 특성과 빌드 변형
4.3 제품 특성에 따라 리소스 병합하기
4.4 자바 소스 코드 병합하기
6. 4강 학습목표
▶ 빌드 타입과 제품 특성을 구별할 수 있다.
▶ 내 프로젝트에 제품 변형(빌드 타입 + 제품 특성)을 적용해볼 수 있다.
▶ 제품 변형을 활용하여 고객 요구 사항에 맞게 이미지 등의 리소스를 다르게 할 수
있다.
▶ 제품 변형을 활용하여 고객 요구 사항에 맞게 소스 코드의 일부를 다르게 할 수 있
다.
Page 6
7. 4.1 빌드 타입 이해하기
▶ 문제
› 디버그와 릴리즈 빌드 타입을 정의하고 필요한 경우 새로운 타입을 만들고 싶다.
▶ 해결
› 모듈 build.gradle 파일의 android 하위의 buildTypes 블록을 설정한다.
Page 7
8. 4.1 빌드 타입 이해하기
▶ 빌드 타입 기본 값
› release 타입
• Proguard 적용 FALSE
Page 8
예제: ch01/MyAndroidApp
9. 4.1 빌드 타입 이해하기
▶ 모듈 build.gradle 파일의 buildTypes 블록
› debug
• applicationIdSuffix : 패키지 명에 접미사 추가
• versionNameSuffix : 버전 이름에 접미사 추가
Page 9
실습: ch03/MyAndroidApp
10. 4.1 빌드 타입 이해하기
▶ 모듈 build.gradle 파일의 buildTypes 블록
› release
• minifyEnabled : ProGuard(역컴파일방지) 적용
• shrinkResources : 불필요한 리소스 제거 (+minifyEnabled : true 필요)
Page 10
실습: ch03/MyAndroidApp
11. 4.1 빌드 타입 이해하기
▶ 확인하기
› ./gradlew :app:assemble
› ls app/build/outputs/apk
Page 11
실습: ch03/MyAndroidApp
12. 4.1 빌드 타입 이해하기
▶ 확인하기 (aapt 확인)
Page 12
실습: ch03/MyAndroidApp
13. 4.1 빌드 타입 이해하기
▶ 확인하기 (aapt 확인)
› aapt d badging app-debug.apk
› aapt d badging app-release-unsigned.apk
› applicationId가 다르므로 두 APK를 한 기기에 설치 가능
Page 13
실습: ch03/MyAndroidApp
14. 4.2 제품 특성과 빌드 변형
▶ 문제
› 본질적으로 같은 애플리케이션이지만, 상황에 맞게 리소스나 소스 코드를 다르게 하고 싶다.
▶ 해결
› 제품 특성을 활용하여 같은 애플리케이션을 상황에 맞는 다른 버전으로 생성한다.
Page 14
15. 4.2 제품 특성과 빌드 변형
▶ 제품 특성 정의하기
› android > productFlavors 블록
› 오만한 (arrogant)
› 친절한 (friendly)
› 아부하는
(obsequious)
Page 15
실습: ch03/HelloWorld
16. 4.2 제품 특성과 빌드 변형
▶ 제품 특성 정의하기 (빌드속성)
› applicationId : package name
› minSdkVersion
› targetSdkVersion
› versionCode
› versionName
› signingConfig
Page 16
실습: ch03/HelloWorld
17. 4.2 제품 특성과 빌드 변형
▶ 제품 특성별 리소스 정의하기
› arrogant
› friendly
› obsequious
▶ 리소스
› animal.png
› strings.xml
▶ main 이 기본임
Page 17
실습: ch03/HelloWorld
Project View
18. 4.2 제품 특성과 빌드 변형
▶ 제품 특성별 소스 코드 정의하기
› app/src/arrogant/java
› app/src/friendly/java
› app/src/obsequious/java
▶ main 이 기본임
› app/src/main/java
Page 18
실습: ch03/HelloWorld
19. 4.2 제품 특성과 빌드 변형
▶ 사용 가능한 빌드 변형을 모두 출력하는
사용자 정의 태스크
Page 19
실습: ch03/HelloWorld
21. 4.3 제품 특성에 맞는 리소스 병합하기
▶ 문제
› 제품 특성에 맞게 이미지와 텍스트, 다른 리소스를 변경하고 싶다.
▶ 해결
› 제품 특성에 맞는 리소스 디렉터리를 추가하여 필요한 파일을 복사하고 적절한 값으로 변경한다.
Page 21
22. 4.3 제품 특성에 맞는 리소스 병합하기
▶ 제품 특성 정의하기
› applicationId를 다르게 함
Page 22
실습: ch03/HelloWorld
23. 4.3 제품 특성에 맞는 리소스 병합하기
▶ MainActivity 클래스 소스 코드
Page 23
실습: ch03/HelloWorld
24. 4.3 제품 특성에 맞는 리소스 병합하기
▶ activity_main.xml 레이아웃 파일
Page 24
실습: ch03/HelloWorld
25. 4.3 제품 특성에 맞는 리소스 병합하기
▶ arrogant(Stark) 제품특성으로
애플리케이션 실행하기
Page 25
실습: ch03/HelloWorld
26. 4.3 제품 특성에 맞는 리소스 병합하기
▶ WelcomeActivity 클래스
▶ activity_welcome.xml 레이아웃
Page 26
실습: ch03/HelloWorld
27. 4.4 자바 소스 코드 병합하기
▶ 문제
› 제품 특성별로 액티비티나 자바 클래스와 같은 소스 코드를 다르게 하고 싶다.
▶ 해결
› 적절한 소스 디렉터리를 추가하고 main 소스 세트와 병합할 수 있게 구성한다.
Page 27
사용할 때 주의해야 하며 권장사항은 아님!!
28. 4.4 자바 소스 코드 병합하기
▶ main, stark, wayne 제품 특성을 위한
소스 디렉터리
▶ 왜 이렇게 복잡해보일까?
Page 28
실습: ch03/HelloWorld
29. 4.4 자바 소스 코드 병합하기
▶ arrogantStark
▶ friendlyWayne
Page 29
실습: ch03/HelloWorld
30. 4.4 자바 소스 코드 병합하기
▶ Stark > activity_call_for_help.xml
▶ Wayne > activity_call_for_help.xml
실습: ch03/HelloWorld
31. 4.4 자바 소스 코드 병합하기
▶ Stark > CallForHelpActivityFragment.java 실습: ch03/HelloWorld
32. 4.4 자바 소스 코드 병합하기
▶ Wayne > CallForHelpActivityFragment.java실습: ch03/HelloWorld
33. 4.4 자바 소스 코드 병합하기
▶ 생각해보기
1. 만약에 main에 CallForHelpAcitivityFragment.java 파일을 넣으면 어떻게 될까?
2. CallForHelpActivity.java는 Stark와 Wayne이 동일하다
만약 main으로 이동하면 어떻게 될까?
3. 실무에서는 어떻게 활용할 수 있을까?
실습: ch03/HelloWorld