KSP Gradle 설정 및 프로세서의 첫 번째 로그: 2부
Checkout other parts in this series:
- Android KSP guide for dummies by a Dummy: Part 1 ( )
- KSP Gradle setup & Processor's first log: Part 2
- Generate the code using KSP : Part 3 ( )
- Using KSP output in app: Part 4 ( )
단계
1) 프로젝트에 JVM 플러그인 추가
프로젝트 빌드 gradle에서
Note: Different Kotlin DSL syntax is added in code block wherever needed
//project/build.gradle
...
plugins {
...
id "org.jetbrains.kotlin.jvm" version "1.6.10" apply false
}
//In kts.
/*
plugins {
...
kotlin("jvm") version "1.6.10" apply false
}
*/
...
2) 프로세서 모듈 생성
기호 프로세서를 호스팅하기 위해
processor
라는 Java 라이브러리로 새 모듈을 만듭니다. KSP의 기호 처리 API 종속성을 사용하여 Gradle에서 java-library
, org.jetbrains.kotlin.jvm
및 kotlin
플러그인을 적용합니다. 프로세서의 build.gradle에서//processor/build.gradle
plugins {
id 'java-library'
id 'org.jetbrains.kotlin.jvm'
id 'kotlin'
}
//in Kts
/*
plugins {
id("java-library")
id("org.jetbrains.kotlin.jvm")
id("kotlin")
}
*/
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
implementation(project(":annotations"))
implementation("com.google.devtools.ksp:symbol-processing-api:1.6.10-1.0.2")
}
3) 주석 모듈 생성
사용자 지정 주석을 정의하기 위해
annotations
라는 Java 라이브러리로 새 모듈을 만듭니다.주석 모듈의 build.gradle
//annotations/build.gradle
plugins {
id 'java-library'
id 'org.jetbrains.kotlin.jvm'
id 'kotlin'
}
//in KTS
/*
plugins {
id("java-library")
id("org.jetbrains.kotlin.jvm")
id("kotlin")
}
*/
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10")
}
4) 프로세서 클래스 생성
만들기
MyEventProcessor
클래스package com.aniket.myevent.processor
...
class MyEventProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger,
private val options: Map<String, String>
): SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
logger.warn("Async Task API was very good API")
return emptyList()
}
}
만들기
MyEventProcessorProvider
클래스package com.aniket.myevent.processor
...
class MyEventProcessorProvider: SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return MyEventProcessor(
environment.codeGenerator,
environment.logger,
environment.options
)
}
}
프로세서 모듈에 프로세서 등록
processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider
다음과 같이
com.aniket.myevent.processor.MyEventProcessorProvider
5) 앱 모듈에 KSP 모듈 적용
KSP용 주석 및 프로세서 모듈을 사용하자
프로젝트에 KSP 플러그인 추가
프로젝트의 build.gradle
//project/build.gradle
buildscript {
dependencies {
...
classpath("com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:1.6.10-1.0.2")
}
}
앱 모듈에서 KSP 플러그인, 주석 모듈 및 프로세서 모듈을 KSP로 적용
//app/build.gradle
plugins {
...
id 'com.google.devtools.ksp'
}
//in KTS
/*
plugins {
...
id("com.google.devtools.ksp")
}
*/
dependencies {
...
implementation(project(":annotations"))
ksp(project(":processor"))
}
Note: For now we are not writing any code in Annotation module, we will
do that in future parts
다른 모듈에서 KSP를 실행하려는 경우 해당 모듈에도 동일한 단계가 적용됩니다.
이벤트 인터페이스를 일찍 추가하여 향후 부분에서 사용할 수 있도록 합시다. 이 인터페이스를 모든 패키지에 추가할 수 있지만 이후 부분의 코드 생성에서 이벤트 인터페이스에 대해 동일한 패키지 이름을 사용해야 합니다.
package com.aniket.myevent
import android.os.Bundle
interface Event {
fun getHashMapOfParamsForCustomAnalytics(): HashMap<*, *>?
fun getBundleOfParamsForFirebase(): Bundle
}
이제 앱을 실행하거나 프로젝트를 빌드하면 빌드 출력에서 KSP 로그인을 볼 수 있습니다.
만세!!!! 첫 번째 KSP 프로세서를 추가하고 실행했습니다. 잘 했어. 심호흡을 하고 잠을 자면 KSP는 그다지 중요하지 않습니다. GN
다음 파트에서는 KSP 프로세서의 작동 방식과 코드 생성 방법을 알아봅니다.
연결
GitHub 저장소 파트 2 분기: https://github.com/aniketbhoite/ksp-my-event/tree/part-2
Reference
이 문제에 관하여(KSP Gradle 설정 및 프로세서의 첫 번째 로그: 2부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aniketbhoite/ksp-gradle-setup-processors-first-log-part-2-43b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)