본문 바로가기

안드로이드

(60)
[안드로이드 멀티 모듈] 9. AndroidPresentationUIConventionPlugin 만들기 지난 포스팅에서는 화면은 없지만 Compose와 관련된 컨벤션 플러그인을 만들어서 designsystem 모듈에 적용했습니다. 이번 포스팅에서는 화면이 존재하고 Compose와 관련된 모듈을 위한 AndroidPresentationUIConventionPlugin을 만들겠습니다. 해당 플러그인은 home, login, board 등 화면을 담당하는 UI Layer 모듈에 적용되는 컨벤션 플러그인입니다.1. AndroidPresentationUIConventionPlugin 만들기이번에는 화면이 존재하는 Compose 컨벤션 플러그인을 만들고 있습니다. 그래서 이전 포스팅에서 만든 컨벤션 플러그인을 pluginManager를 통해 적용하고, Compose 화면을 위한 의존성을 추가해줘야 합니다.// And..
[안드로이드 멀티 모듈] 8. AndroidLibraryComposeConventionPlugin 만들기 지난 포스팅에서는 Compose가 없는 AndroidLibrary를 위한 AndroidLibraryConventionPlugin을 만들었습니다. 이번에는 Compose 관련 빌드 옵션이 포함된 AndroidLibraryComposeConventionPlugin을 만들겠습니다. Compose 관련 모듈은 아래처럼 2가지로 나뉘게 됩니다.화면이 없는 모듈 (designsystem, ui 등)화면이 있는 모듈 (home, board, login 등)designsystem처럼 화면이 없는 모듈이 있고, home처럼 Compose로 구성된 화면이 있는 presentation 성격의 모듈이 있습니다. 이번 포스팅에서는 Compose 관련 기능이 있지만 화면이 없는 모듈을 위한 컨벤션 플러그인을 만들겠습니다.1. A..
[안드로이드 멀티 모듈] 7. AndroidLibraryConventionPlugin 만들기 지난 포스팅까지는 Application 모듈에 대한 컨벤션 플러그인을 다루었는데, 이번 포스팅에서는 Compose가 없는 AndroidLibrary를 위한 AndroidLibraryConventionPlugin을 만들겠습니다. 안드로이드 프로젝트를 멀티모듈로 구성한다면 꼭 필요한 컨벤션 플러그인입니다.1. AndroidLibraryConventionPlugin 만들기이전 포스팅에서 확장성을 고려하여 여러 가지 유틸함수를 만든 덕분에 AndroidLibraryConventionPlugin을 간단하게 만들 수 있습니다. Build Type 설정을 위해 유틸함수를 만들었었는데, Enum Class로 ExtensionType에 대한 분기처리를 했기 때문에 아래처럼 ExtensionType.LIBRARY를 전달하..
[안드로이드 멀티 모듈] 6. AndroidApplicationComposeConventionPlugin 만들기 지난 포스팅에서는 app 모듈의 컨벤션 플러그인 AndroidApplicationConventionPlugin을 만들었습니다. 최근 안드로이드에서는 기존의 XML방식에서 선언형 UI 프로그래밍인 Compose 방식으로 많이 전환되고 있는데, Compose로 개발을 하기 위해서 빌드 관련 코드를 추가해야 합니다. 이번 포스팅에서는 Compose Application 모듈을 위한 AndroidApplicationComposeConventionPlugin을 만들겠습니다.1. AndroidCompose 유틸 함수 만들기지난 포스팅과 마찬가지로 여러 컨벤션 플러그인에서 공통으로 사용할 수 있는 AndroidCompose 유틸 함수를 만들겠습니다. 해당 함수에서는 안드로이드 Compose 관련 빌드 로직을 정의합니..
[안드로이드 멀티 모듈] 5. BuildTypes 컨벤션 플러그인에 적용하기 지난 포스팅에서는 AndroidApplicationConventionPlugin을 만들었습니다. 하지만 buildTypes, buildFeatures, composeOptions 등의 코드를 컨벤션 플러그인에 추가하지 않았는데, 이번 포스팅에서는 buildTypes를 컨벤션 플러그인에서 공통으로 사용할 수 있도록 적용하겠습니다.1. Application을 위한 BuildTypes 유틸함수 만들기buildTypes를 컨벤션 플러그인에서 공통으로 사용하기 위해서 build-logic:convention 모듈에 BuildTypes 유틸함수를 만들겠습니다. 이전과 같은 패턴으로 Project의 확장함수로 구현하겠습니다. // BuildTypes.kt internal fun Project.configureBuil..
[안드로이드 멀티 모듈] 4. AndroidApplicationConventionPlugin 만들기 모듈을 만들었을 때 생성되는 build.gradle.kts 파일의 빌드 관련 중복 코드를 제거하고, 한 곳에서 관리하기 위한 작업을 진행 중입니다. 그래서 지난 포스팅에서는 build-logic:convention 모듈을 만들었습니다. 이번 포스팅에서는 AndroidApplicationConventionPlugin을 만들고 build.gradle.kts(Module :app) 모듈에 적용하겠습니다.1. AndroidApplicationConventionPlugin.kt 만들기build-logic모듈의 java 패키지 폴더에 AndroidApplicationConventionPlugin.kt을 만듭니다.// AndroidApplicationConventionPlugin.ktimport org.gradle...
[안드로이드 멀티 모듈] 3. build-logic 모듈 만들기 이전 포스팅에서 4개의 모듈을 만들었는데 각각 build.gradle.kts 파일이 생성되었고, 아래처럼 빌드와 관련된 중복 코드가 증가했습니다. 앱이 커질수록 모듈과 중복 코드는 계속 증가할 것입니다.// build.gradle.kts (Module :home:data)plugins { alias(libs.plugins.android.library) alias(libs.plugins.jetbrains.kotlin.android)}android { namespace = "com.multi.module.home.data" compileSdk = 34 ...}...// build.gradle.kts (Module :home:presentation)plugins { alias(..
[안드로이드 멀티 모듈] 2. 모듈 생성 후 관계 정의하기 이번 포스팅에서는 안드로이드 멀티 모듈 아키텍처를 구성하기 위해 모듈을 만들겠습니다. 저는 모듈을 app, home:presentation, home:domain, home:data, core:presentation:designsystem로 구성할 것입니다. app 모듈은 자동으로 생성되므로 나머지 모듈을 만들겠습니다.1. Android Library와 관련된 모듈 만들기모듈이 안드로이드에 의존적인 경우, 모듈을 만들 때 Android Library를 선택하고 만들면 됩니다. 여기서는 아래의 모듈들이 Android Library에 해당됩니다.같은 방법으로 아래의 모듈을 만들겠습니다.home:presentationhome:datacore:presentation:designsystem2. Java or Ko..