[Android] Gradle의 Provider와 Property에 대해서 알아보자

신민준·2025년 9월 3일
0

안드로이드 빌드

목록 보기
2/2

들어가며

필자는 nowinandroid에 몇주전 pr을 올렸었다.
이 과정에서 가볍게 공부만 하고 넘어갔던 내용들을 보다 깊이있게 공부해보고자 한다.
이번에는 그중에서 Provider와 Property를 알아볼 것이다.

Provider와 Property

그럼 일단 Provider와 Property가 무엇인지부터 간단히 알아보자.
공식 문서에는 다음과 같이 설명한다.

Property - Represents a value that can be queried and changed.
Provider - Represents a value that can only be queried and cannot be changed.

한국어로 번역하면 다음과 같다.

  • Provider : 값을 조회하고 변경할 수 있는 것
  • Property : 값을 조회만 할 수 있고 변경할 수 없는 것

으로 Provider와 Property는 빌드스크립트에서 value와 configuration을 관리한다.

일단은 이정도만 알아두고 Gradle의 Lazy Configuration에 대해 알아보자.

Lazy Configuration

빌드가 복잡해짐에 따라 특정한 값을 추적하기가 어려워지는데 Gradle은 Lazy Configuration이라는 것을 통해 이 문제를 해결한다.

Gradle의 Lazy Property은 3가지 주요 이점을 제공한다.

  • Deferred Value Resolution(값 결정 지연)
  • Automatic Task Dependency Management(자동 task 의존성 관리)
  • Improved Build Performance(빌드 성능 향상)

자동 Task 의존성 관리만 간단히 설명하자면
어느 한 Task의 출력을 다른 Task의 입력으로 연결하여 의존성을 자동으로 파악할 수 있다는 것이다.

taskB.input.set(taskA.output)

이렇게 한 Task의 출력을 다른 Task의 입력으로 연결해주면 Gradle은 알아서 TaskA부터 실행한다.

Lazy Property는 Provider와 Property라는 2가지 인터페이스로 나타낸다.
Provider

  • 읽기 전용 프로퍼티
  • Provider.get()으로 현재 값 반환
  • Provider.map(Transformer)로 다른 Provider 생성 가능

Property

  • 읽고 쓰기가 모두 가능한 프로퍼티
  • Providerextend한다.
  • Property.set(T)로 값 지정 이때 기존의 값은 덮어씌움
  • Property.set(Provider)는 프로퍼티의 값으로 다른 Provider를 지정하며, 기존에 있던 값은 덮어쓴다.
    이를 통해 값이 아직 정해지지 않은 상태에서도 ProviderProperty 인스턴스를 서로 연결할 수 있다.

실제 사용 예시

public abstract class Download extends DefaultTask {
    @Input
    public abstract Property<URI> getUri(); // abstract getter of type Property<T>

    @TaskAction
    void run() {
        System.out.println("Downloading " + getUri().get()); // Use the `uri` property
    }
}

참고자료

https://docs.gradle.org/current/userguide/properties_providers.html
https://docs.gradle.org/current/userguide/lazy_configuration.html#lazy_configuration

profile
안드로이드 외길

0개의 댓글