KSP Gradle 설정 및 프로세서의 첫 번째 로그: 2부

KSP가 무엇인지, KSP를 사용하여 해결하고자 하는 문제는 무엇인지 다루었습니다. 이 파트에서는 ​​Groovy Gradle 또는 새로운 Kotlin DSL Gradle을 사용하여 Android 프로젝트에서 KSP 설정을 다룹니다. o 첫 번째 로그로 KSP 프로세서 실행

Checkout other parts in this series:

  1. Android KSP guide for dummies by a Dummy: Part 1 ( )
  2. KSP Gradle setup & Processor's first log: Part 2
  3. Generate the code using KSP : Part 3 ( )
  4. 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.jvmkotlin 플러그인을 적용합니다. 프로세서의 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

좋은 웹페이지 즐겨찾기