[안드로이드 멀티 모듈] 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..
[안드로이드 멀티 모듈] 1. 멀티 모듈 개념과 장단점
·
안드로이드/멀티 모듈
안드로이드 멀티 모듈 시리즈에서는 멀티 모듈에 대한 이해와 실제 프로젝트에서 어떻게 세팅하는지에 대해 다룰 예정입니다. 코드 작업을 수행한 경우, 각 포스팅 하단에 Github 링크를 공유할 예정이며, 브랜치를 확인하시면 됩니다. GitHub - taein8935/multi-module-template-aosContribute to taein8935/multi-module-template-aos development by creating an account on GitHub.github.com먼저 멀티 모듈을 이해하기 전에 모듈이 무엇인지 살펴보겠습니다.1. 모듈이란?모듈은 간단히 말해서 라이브러리라고 생각하면 됩니다. 프로젝트에 추가한 모든 라이브러리(의존성) 또한 모듈입니다.즉, 특정한 목적을 수행하..
[안드로이드] Dynamic Json Deserialization
·
안드로이드/Util
최근 API의 Response 형태를 살펴보면 json이 다양한 형태로 응답을 주는 경우도 있습니다. 안드로이드에서 이러한 Dynamic JSON을 효과적으로 다루는 방법에 대해 포스팅하겠습니다.// 다양한 형태로 오는 json[ { "type": "USER", "name": "김철수", "age": 20, "birthday": "20001201" }, { "type": "GUEST", "nickname": "닉네임" }, ...]먼저 Data Class 정의 방법부터 살펴보겠습니다.1. Dynamic Json을 위한 Data Class 정의1-1. 모든 필드에 대해 nullable을 지정하는 방법 (Bad Case)d..