Nuke Olaf - Log Store
[Android] 안드로이드 프로젝트에 DFM 모듈 추가하기 (feat. 멀티모듈, Dynamic Feature Module) 본문
[Android] 안드로이드 프로젝트에 DFM 모듈 추가하기 (feat. 멀티모듈, Dynamic Feature Module)
NukeOlaf 2020. 8. 3. 22:09현재 진행하고 있는 아재트 프로젝트는 멀티모듈 형태로 구성되어있다.
아재트 프로젝트의 기능(페이지) 별 feature 마다 모듈을 하나씩 추가하면서 만들고 있다. 안드로이드 스튜디오에서 아재트의 패키지구조를 보면 다음과 같이 구성되어있다. 여기에 "알림 페이지"모듈을 추가하려고 한다.
1. 새로운 모듈 추가하기
(1) File > New > New Module 로 들어간다.
그러면 모듈 타입을 설정하는 창이 뜬다. 상황에 맞게 모듈 타입을 설정하면 된다. 보통은 Android Library 타입을 가장 많이 사용하게 될 것 같다. Android Library 타입의 모듈은 재사용할 수 있는 코드를 (예를 들면 내 프로젝트의 다른 앱 모듈이나, 다른 프로젝트에서 import 하여 종속적으로 사용할 수 있는 코드) 위한 "컨테이너"를 제공하는 개념이다. 이 타입의 모듈은 어플리케이션에서 기본적으로 "constant"한 부분이다. 그러나 Dynamic Feature Module 은 Android Module 과는 조금 다르다. DFM 을 사용하면 Google play 의 Dynamic Delivery 기능을 통해 apk 에서 사용자가 그때그때 사용할 기능(feature) 별로 다운로드된다. 즉, 필요하지 않은 모듈은 앱 설치시에 같이 다운로드되지 않는것이다. 그렇게 되면 앱 설치 시 apk 의 모든 코드를 다운로드하지 않아도 되기 때문에 앱 사이즈를 줄일 수 있다. 내가 지금 추가하려는 알림 페이지 모듈도 Android Library 타입으로 만들 수 있지만, 지금은 Dynamic Feature Module 로 설정할 것이다.
(2) 모듈의 이름과 패키지 네임을 설정해준다.
Next 를 누르면 다음과 같은 화면이 나온다. 이 부분에서 모듈의 Base application module 을 설정해줄 수도 있다. 나는 app 모듈이 Base application 모듈이기 때문에 따로 설정을 건들이지 않았다. 다만, Minimun SDK 가 API 29 로 설정되어 있길래 API 21 로 바꿔주었다. 필요한 경우 언어를 Java 로 바꿀 수도 있다.
(3) DFM 의 다운로드 옵션을 설정해준다.
사용자들이 해당 DFM 의 기능을 사용해야할 때 보여질 수 있는 이름과, install-time 등을 설정해줄 수 있다. 보통 Moudle Title 은 Camel case 로 작성하는 것이 권장되지만, 아재트는 소문자로 Module name 과 똑같이 작성하고 있다. 나머지 옵션은 default 값이다.
Finish 를 누르고 기다리면 alarm 모듈이 빌드된다.
3. Gradle 에 alarm 모듈 추가하기
(1) buildSrc 에 Alarm 모듈명 상수 추가
아재트는 BuildSrc 모듈(*참고 : Better Gradle Dependency Management, Kotlin(buildSrc 로 Dependency 관리하기)에서 Gradle Dependency 를 관리하고 있다. Alarm 모듈을 features 라는 서브 디렉토리로 옮긴 뒤에 ":feature:alarm"이라고 작성해줬다. 이러한 방식으로 depedency 를 관리하지 않는다면, 그냥 ":features:alarm" 을 매번 작성해줘도 무방하다.
(2) settings.gradle.kts 에서 Alarm 모듈 include
settings.gradle.kts 파일은 루트 프로젝트 디렉토리에 있으며, 앱을 빌드할 때 포함해야하는 모듈을 Gradle 에게 알려준다. 멀티모듈 프로젝트에서는 최종빌드에 들어가야하는 각 모듈을 지정해줘야 한다.
아마 settings.gradle.kts 파일에 들어가보면 맨위에 자동으로 include 되어있을 것이다.
아래처럼 Alarm 모듈을 추가해준다. ":features:alarm" 이라고 적어줘도 된다.
(3) build.gradle.kts (:app) 의 android 블럭에 dynamicFeatures 에 Alarm 모듈 추가
app 모듈의 gradle 파일에도 Alarm 모듈을 추가해준다.
android {
...
dynamicFeatures = mutableSetOf(
...
BuildModules.Features.Alarm
)
}
4. alarm 모듈 수준의 build.gradle.kts 설정해주기
alarm 모듈의 build.gradle 을 kts 로 바꿔서 사용할 것이다. 아재트 프로젝트는 Gradle Groovy DSL 대신 Gradle Kotlin DSL 을 사용하고 있다. 멀티 모듈 프로젝트와 Kotlin DSL 을 함께 사용하면 큰 시너지 효과가 발휘된다. 프로젝트에서 새 모듈을 만들때마다 기존 빌드 파일에서 많은 공통구성을 복사 붙여넣기할 필요가 없다고 한다. (참고 링크 : Multi-module Android project with Kotlin DSL for Gradle)
5. DFM 모듈 추가 완료
alarm 모듈이 추가되었다. 이제 추가한 모듈에서 작업을 진행하면 된다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 양방향 데이터 바인딩 (2 way data binidng) 구현하기 (1) | 2020.08.06 |
---|---|
[Android] 안드로이드 리사이클러뷰에서 Flexbox 사용하기 (FlexboxLayoutManager) feat. 스크롤 없는 태그 입력 리사이클러뷰 (0) | 2020.06.30 |
[Android] 안드로이드 - 액티비티 화면전환 애니메이션과 플래그 (액티비티만으로 탭바 레이아웃 만들기) (0) | 2020.06.30 |
[Android] 안드로이드 - Koin (코틀린 개발자를 위한 경량화된 DI 프레임워크) 사용법 (0) | 2020.06.06 |
[Android] 안드로이드 - DI (Dependency Injection) (0) | 2020.06.01 |