이전 포스팅이 존재합니다.
https://nemomemo.tistory.com/187
이 블로거의 혼란을 야기하므로 용어는 영어로 사용하고자 합니다.
빌드 변형 = build variant
빌드 유형 = build types
제품 버전 = product flavors
버전 차원 = flavor dimension
소스 세트 = source sets
종속 = dependencies
서명 = signing
API 수준 = API level
Source sets
- (정말 의미 그래로) 소스(resource, source code, ...)들의 셋트를 일컫는다.
build variants별 '별도 source sets' 설정하기
1. 공통 source sets
: Android 스튜디오는 기본적으로 main/ 폴더 하위에 소스 세트 및 디렉터리를 생성하고, 이는 모든 build variants 간에 공유 항목이다.
2. 별도 source sets (= 타켓 source sets)
- 왜 필요한가?
=> 특정 build variants 버전(들)에서만 특정 source sets을 사용하도록 설정
(=Gradle이 컴파일하고 패키징하는 파일을 정확히 제어)하기 위해 "별도 source sets"을 사용한다.
- ex1) java소스를 생성하여 src/demoMinApi24/java/ 디렉터리에 추가해 "별도source sets"을 설정하면,
Gradle은 'demo'와 'MinApi24' 이 두 product flavors인 버전을 빌드할 때만 이러한 소스를 사용하게 됨 - ex2) 'product flavors source sets'를 사용하여 product flavor마다 다른 클라이언트를 위해 앱 브랜드를 변경할 때
- ex3) 'debug' build types을 사용하는 build variants버전에만 특별 권한과 로깅 기능을 포함 시
- Gradle은 빌드 시 "별도 source sets"의 구성이 '공통source sets (main/ 소스 세트)'와 유사하다고 예상함.
- ex) 'debug' build types의 "별도 source sets"의 구성은 src/debug/kotlin/ 또는 src/debug/java/ 디렉터리에 있을 것으로 예상함.
- [product flavors source sets의 우선순위]
=> "여러 product flavors 조합에 속한 source sets" > "개별 product flavors에 속한 source sets"
별도 source sets 설정하기
- 1. [(예상되는)'별도source sets' 구성 확인]하고 -> 2. 그대로 ['별도 source sets' 구성 생성]하면 된다.
1. [(예상되는) '별도 source sets' 구성 확인]
- 도구 창 모음에서 Gradle을 클릭
- MyApplication > Tasks > android로 이동하여 sourceSets를 더블클릭
- Tasks 폴더를 보려면 동기화 중에 Gradle이 작업 목록을 빌드하도록 허용해야함.
1) File > Settings > Experimental(macOS는 Android Studio > Preferences > Experimental)을 클릭합니다.
2) Do not build Gradle task list during Gradle sync를 선택 해제합니다. - Gradle에서 작업을 실행하면 Run 창이 열리고 출력 내용 확인
예상 결과 ex)
------------------------------------------------------------
Project :app
------------------------------------------------------------
...
debug
----
Compile configuration: debugCompile
build.gradle name: android.sourceSets.debug
Java sources: [app/src/debug/java]
Kotlin sources: [app/src/debug/kotlin, app/src/debug/java]
Manifest file: app/src/debug/AndroidManifest.xml
Android resources: [app/src/debug/res]
Assets: [app/src/debug/assets]
AIDL sources: [app/src/debug/aidl]
RenderScript sources: [app/src/debug/rs]
JNI sources: [app/src/debug/jni]
JNI libraries: [app/src/debug/jniLibs]
Java-style resources: [app/src/debug/resources]
2. [(예상되는) '별도 source sets' 구성대로 생성하기]
- (Android 스튜디오에서는) 모듈/src/{지정한 별도 (build types,product flavors,build variants)이름}의 디렉터리를 생성한 다음, 그 안에 source sets 을 위치시킨다.
- ex1) ('debug' build types)의 source sets 코드 디렉토리 -> src/debug/java
- ex2) ('demo'product flavors)의 source sets디렉토리 -> src/demo/
- ex3) ('debug'build types이고'demo'product flavors인 build variants)의source sets디렉토리-> src/demoDebug/
- 자동으로 생성되지 않으므로 개발자가 직접해야함
- ex1) 'debug' 빌드 유형에 java/ 디렉터리만 생성하는 경우,
- Project 창을 열고 창 상단의 메뉴에서 Project 보기를 선택합니다.
- MyProject/app/src/로 이동합니다.
- src 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 New > Directory를 선택합니다.
- Gradle Source Sets에 있는 메뉴에서 full/java를 선택합니다.
- Enter를 누릅니다.
- ex2) 'debug' build types에 Values XML 파일을 생성하려면,
- Project 창에서 src 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 New > XML > Values XML File을 선택합니다.
- XML 파일의 이름을 입력하거나 기본 이름을 유지합니다.
- Target Source Set 옆의 메뉴에서 debug를 선택합니다.
- Finish를 클릭합니다.
- 이제 'debug' 빌드 유형이 '별도 source sets'로 지정되었으므로 Android 스튜디오는 XML 파일을 생성할 때 필요한 디렉터리를 자동으로 생성함
'활성화된 source sets'와 'source sets의 접미사'
- 활성화된 source sets는 "아이콘에 녹색 표시"가 있어 활성 상태임을 나타냄
- source sets에 접미사가 붙으면 "접미사인 source sets에 병합된다"
ㄴ> 위 이미지 내 debug source sets에 [main] 접미사가 붙은 것처럼
테스트 source sets
+) 특정 빌드 변형을 타겟팅하는 테스트 source sets를 생성할 수 있다. ex) src/androidTestDemoDebug/
다음 포스팅이 존재합니다.
1편 : https://nemomemo.tistory.com/187
2편 : 현재 포스팅
3편 : https://nemomemo.tistory.com/189
[출처]
- [공식] https://developer.android.com/studio/build/build-variants?hl=ko