Android KSP(Kotlin Symbol Processing) 활용할 수 있는 샘플 코드 작업

첫 번째 글에서 KSP 활용을 위한 준비 단계를 살펴보았다. 이번 글에서는 샘플 코드를 적용해 보려고 한다.

Kotlin Symbol Processing API - 공식 문서

이 글에서는 Annotation을 추가하고, KSP에서 이를 활용한 코드 Generated 방법을 소개한다.


이 글에서 알아볼 내용

  • Annotation 적용
  • ksp 활용할 수 있는 샘플 코드 작성
  • ksp에서 오류를 내는 방법

Read More

Android KSP(Kotlin Symbol Processing) 활용을 위한 준비단계!

KSP란 뭘까? Kotlin Symbol Processing의 약자로 경량 컴파일러 플러그인을 개발할때 사용하는 API라고 한다.

Kotlin Symbol Processing API - 공식 문서

직접 만들지는 않았지만 그간 kapt를 활용하였고, 여전히 활용 중이다.

apply plugin: 'kotlin-kapt'
// 또는
kotlin("kapt")

이와 같은 코드가 존재한다면 kapt를 활용하고 있다는 것이다.

DataBinding, Dagger등에서 이를 활용하고 있는데, 이들이 해주는 역할은 @Annotation을 적어주면 코드를 자동으로 만들어주는 역할을 하고 있다는 것이다.

아래와 같이 DataBinding 코드를 확인해 볼 수 있다.

image_01

kapt는 Java 기반이다. ksp는 kotlin 기반으로, kapt 보다 2배 더 빠르고 기능을 단순화 시켜 더 쉽게 만들 수 있다.

필자도 4개의 ksp 모듈을 만들어 활용하고 있다.


이 글에서 알아볼 내용

  • ksp는 언제 쓰는 게 좋을까?
  • ksp를 활용하기 위한 기초 지식

Read More

안드로이드 build.gradle.kts에서 Flavor 나눠진 경우 KSP 빌드 폴더를 flavor 별 sourceSets 설정 방법

Android app 배포 시 다양한 형태의 빌드를 위해 Flavor를 제공하고 있다.

이 문서에 빌드 변형 구성을 통한 설명이 잘 나와있다. Gradle뿐만 아니라 kotlin kts도 가이드하고 있다.

이 글에서는 Kotlin Symbol Processing을 활용하여 자동으로 생성된 build 결과물의 경로를 flavor 별로 어떤 식으로 추가하는 게 좋을지 소개합니다.


이 글에서 알아볼 내용

  • Flavor 별 sourceSets 구성 방법
  • debug/release와 flavor 조합
  • 이 글에서는 KSP 사용 방법에 대해서는 설명하지 않습니다.
  • KSP에서 만들어진 결과물과 flavor에 따른 폴더 지정 방법을 설명합니다.

Read More

안드로이드 모듈을 Maven 배포(sonatype을 이용) 방법을 알아보자.

2016년에 JCenter 배포하는 방법을 정리했었는데, jcenter는 사라졌습니다.

이제 Maven을 통한 모듈 배포가 가능한데, JCenter가 쉽게 접근할 수 있는 반명 Maven은 배포하려면 준비해야 할 것들이 많습니다.

이 글에서는 지라 티켓 등록부터 MavenCentral 배포한 결과물까지 살펴보려고 합니다.

필자의 경우 배포한 모듈은 Retrofit FlowCallAdapterFactory입니다. Retrofit에서 Flow을 바로 사용하기 위한 모듈입니다.

Retrofit-FlowCallAdapterFactory

이 글에서 알아볼 내용

  • 모듈을 생성하는 내용은 담지 않습니다.
  • 모듈을 배포하기 위해 사용했던 sonatype Nexus repository 사용 방법을 간단하게 다룬다.
  • 배포를 위한 준비 과정 및 배포 코드(gradle.kts)를 담는다.
  • 배포를 위한 과정을 담지만, 사용한 기술에 대한(kotlin precompiled을) 설명하는 부분은 없습니다.

Read More

Android Multi module(멀티 모듈)의 dependency는 어떻게 하는 게 좋을까?

아키텍쳐가 잘 적용되어 있다면 모듈 나누는 고민도 한 번쯤 해보았을 겁니다. 모듈을 나누는 건 어렵지 않습니다.

모듈을 어떤 식으로 나눌지가 어려운 고민이지만, 단순히 클래스의 기능별로 모듈을 나눌 수 있습니다.

  • Base 모듈 : BaseActivity, BaseViewModel, BaseFragment를 포함하는 모듈
  • Network 모듈 : 네트워크 관련 모듈
  • 유틸 모듈 : 공통 유틸

어떠한 기준으로 모듈을 분리할지만 잘 정하면 어렵지 않습니다.

하지만 사전 설계를 잘 해둬야 추후 중복 디펜던시 발생 및 이유 없는 모듈이 추가됨을 관리할 수 있으리라 생각됩니다.

이 글에서 알아볼 내용

  • 모듈을 나누는 모든 과정을 소개하지는 않습니다.
  • 모듈을 나누면서 디펜던시 의존성을 어떻게 가져갈지 간략하게 정리합니다.

Read More